Skip to content
Snippets Groups Projects
Commit 1c730a51 authored by Diego Castillo's avatar Diego Castillo
Browse files

SE añadio el codigo de arduino usado para la automatizacion del mini-espectrometro

parent f61b102f
No related branches found
No related tags found
No related merge requests found
# proyecto_instrumentacion
## Codigo de arduino usado para el control del motor
```
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
#include <AccelStepper.h>
#define DIR_PIN 9
#define STEP_PIN 8
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
MPU6050 sensor;
int ax, ay, az;
int target_angle = 0;
int tolerance = 1;
const int valid_angles[] = {-220,-200,-180,-165,-150,-135,-120,-105,-90,-75,-60,-45,-30,-20, -15, -10, -5,0,15,30,45,60,75, 90,105,120,135,150,165,180,200, 220};
void setup() {
Serial.begin(57600);
Wire.begin();
sensor.initialize();
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
if (sensor.testConnection())
Serial.println("Sensor iniciado correctamente");
else
Serial.println("Error al iniciar el sensor");
}
void loop() {
if (Serial.available()) {
int input_angle = Serial.parseInt();
if (isValidAngle(input_angle)) {
target_angle = input_angle;
Serial.print("Moviendo a ");
Serial.print(target_angle);
Serial.println(" grados...");
rotateToTargetAngle();
} else {
Serial.println("Ángulo no válido. Ingrese un múltiplo de 15 grados.");
}
while (Serial.available())
Serial.read(); // Limpiar el búfer del monitor serial
}
sensor.getAcceleration(&ax, &ay, &az);
int current_angle = calculateAngle();
if (fabs(current_angle - target_angle) <= tolerance) {
stepper.stop();
Serial.println("Motor detenido.");
}
}
int calculateAngle() {
int accel_ang_x = atan(ax / sqrt(pow(ay, 2) + pow(az, 2))) * (180.0 / 3.14);
int accel_ang_y = atan(ay / sqrt(pow(ax, 2) + pow(az, 2))) * (180.0 / 3.14);
return accel_ang_x; // Puedes cambiar esto a accel_ang_y si prefieres el ángulo en Y
}
void rotateToTargetAngle() {
float steps = target_angle / 0.9; // 1.8 grados por paso del motor
if (steps > stepper.currentPosition()) {
stepper.setSpeed(1000);
stepper.moveTo(steps);
} else {
stepper.setSpeed(-1000);
stepper.moveTo(steps);
}
while (stepper.distanceToGo() != 0) {
stepper.run();
}
}
bool isValidAngle(int angle) {
for (int i = 0; i < sizeof(valid_angles) / sizeof(valid_angles[0]); i++) {
if (angle == valid_angles[i]) {
return true;
}
}
return false;
}
```
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment