Presentaciòn_SIAN — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by zuleydithj20.

Components

Sketch code

#include "Wire.h"          // Librería nativa para comunicación I2C 
#include "I2Cdev.h"        // Librería auxiliar para control I2C del MPU6050
#include "MPU6050.h"       // Librería específica para el MPU6050
#include "Adafruit_VL53L0X.h" // Librería oficial de Adafruit para el sensor láser VL53L0X

MPU6050 mpu;                 // Instancia del objeto MPU6050
Adafruit_VL53L0X lox = Adafruit_VL53L0X(); // Instancia del objeto VL53L0X

// Variables para el acelerómetro (MPU6050)
int ax, ay, az;              // Variables para almacenar los valores en crudo
int ax_o, ay_o, az_o;        // Variables para los offsets de calibración

void setup() {
  Serial.begin(115200);      // Iniciamos el puerto serial a alta velocidad
  Wire.begin();              // Iniciamos el bus I2C del microcontrolador
  
  pinMode(12, OUTPUT);
  digitalWrite(12, LOW);
  mpu.initialize();          // Inicializamos el acelerómetro/giroscopio
  
  if (mpu.testConnection()) {
    Serial.println("MPU6050 conectado correctamente.");
  } else {
    Serial.println("Error al conectar el MPU6050. Revisa las conexiones I2C.");
  }

  // Offsets actuales grabados en el sensor
  ax_o = mpu.getXAccelOffset();
  ay_o = mpu.getYAccelOffset();
  az_o = mpu.getZAccelOffset();

  // Verificamos si el sensor láser responde en su dirección I2C por defecto (0x29)
  if (!lox.begin()) {
    Serial.println("Error al iniciar el VL53L0X. Revisa la alimentacion y pines SDA/SCL.");
    while (1); // Si falla, detenemos el programa
  } else {
    Serial.println("VL53L0X (Sensor laser de distancia) iniciado correctamente.");
  }

}

void loop() {
  // Leemos los valores de aceleración en crudo (RAW) de los 3 ejes
  mpu.getAcceleration(&ax, &ay, &az);

  // Calculamos los ángulos de inclinación en grados usando trigonometría (arcotangente)
  float accel_ang_x = atan(ax / sqrt(pow(ay, 2) + pow(az, 2))) * (180.0 / 3.14159265);
  float accel_ang_y = atan(ay / sqrt(pow(ax, 2) + pow(az, 2))) * (180.0 / 3.14159265);

  // Calcular distancia con el VL53L0X  
  VL53L0X_RangingMeasurementData_t measure; // Estructura de datos nativa
  lox.rangingTest(&measure, false); // Realizamos la medición de distancia láser

  int distancia_mm = 0;

  // Verificamos si la lectura del sensor láser es válida (estado 4 = rango válido)
  if (measure.RangeStatus != 4) {
    distancia_mm = measure.RangeMilliMeter; // Obtenemos la distancia en milímetros
  } else {
    distancia_mm = 2000; // Fuera de rango (>2 metros)
  }

  // Condición de alerta: Si un objeto está a 1.5 metros (1500 mm) o menos, activamos el zumbador
  if (distancia_mm <= 1500) {
    digitalWrite(12,HIGH);
  } else {
    digitalWrite(12, LOW);
  }

  // Imprimir resultados en el Monitor Serial
  Serial.print("Inclinacion X: "); Serial.print(accel_ang_x); Serial.print(" deg \t");
  Serial.print("Inclinacion Y: "); Serial.print(accel_ang_y); Serial.print(" deg \t");
  Serial.print("Distancia Laser: "); Serial.print(distancia_mm); Serial.println(" mm");

  delay(10

More projects by zuleydithj20