Categoría: Ingeniería mecatrónica

  • Leer ángulos con sensor MPU6050 sin recurrir a librerías (Excepto Wire)

    Leer ángulos con sensor MPU6050 sin recurrir a librerías (Excepto Wire)
    MPU6050

    Medir el ángulo de inclinación usando el giroscopio/acelerómetro MPU6050 y Arduino

    Se puede medir el ángulo de inclinación usando MPU6050 simplemente conectando el sensor giroscópico/acelerómetro de 6 ejes MPU6050. El acelerómetro envía fuerzas de aceleración X, Y y Z. Necesitamos convertir las fuerzas en ángulos 3D X, Y, Z para determinar la orientación 3D del sensor.

    El giroscopio mide la velocidad de rotación o la tasa de cambio de la posición angular a lo largo del tiempo, a lo largo de los ejes X, Y y Z. Utiliza tecnología MEMS y el efecto Coriolis para medir. Las salidas del giroscopio están en grados por segundo, por lo que para obtener la posición angular, sólo necesitamos integrar la velocidad angular.

    El acelerómetro puede medir la aceleración gravitacional a lo largo de los 3 ejes y usando algunas matemáticas de trigonometría podemos calcular el ángulo en el que está posicionado el sensor. Entonces, si fusionamos o combinamos los datos del acelerómetro y el giroscopio del MPU6050, podemos obtener información muy precisa sobre la orientación del sensor. Por lo tanto, MPU6050 con Arduino puede medir el ángulo de inclinación.

    Giroscopio/acelerómetro MPU6050

    El sensor InvenSense MPU-6050 contiene un acelerómetro MEMS y un giroscopio MEMS en un solo chip. Es muy preciso, ya que contiene un hardware de conversión de analógico a digital de 16 bits para cada canal. Por lo tanto, captura los canales x, y y z al mismo tiempo. El sensor utiliza el bus I2C para interactuar con Arduino.

    El MPU-6050 no es caro, especialmente teniendo en cuenta que combina un acelerómetro y un giroscopio.


    Distribución de pines del MPU6050:

    El módulo MPU-6050 tiene 8 pines:
    INT: Interrumpe el pin de salida digital.
    AD0: pin LSB de dirección esclava I2C. Este es el bit 0 en la dirección esclava de 7 bits del dispositivo. Si está conectado a VCC, se lee como uno lógico y la dirección del esclavo cambia.
    XCL: Pin de reloj serie auxiliar. Este pin se utiliza para conectar el pin SCL de otros sensores habilitados para interfaz I2C al MPU-6050.
    XDA: Pin de datos serie auxiliar. Este pin se utiliza para conectar el pin SDA de otros sensores habilitados para interfaz I2C al MPU-6050.
    SCL: pin de reloj serie. Conecte este pin al pin SCL del microcontrolador.
    SDA: pin de datos serie. Conecte este pin al pin SDA del microcontrolador.
    GND: clavija de tierra. Conecte este pin a la conexión a tierra.
    VCC: Pin de fuente de alimentación. Conecte este pin al suministro de +5 V CC.
    Giroscopio de 3 ejes:

    El MPU6050 consta de un giroscopio de 3 ejes con tecnología Micro Electro Mechanical System (MEMS). Se utiliza para detectar la velocidad de rotación a lo largo de los ejes X, Y, Z como se muestra en la siguiente figura.

    Oreintation y Polaridad de rotación - MPU6050
    Oreintation y Polaridad de rotación – MPU6050

    Acelerómetro de 3 ejes:

    El MPU6050 consta de un acelerómetro de 3 ejes con tecnología microelectromecánica (MEM). Solía ​​detectar el ángulo de inclinación o inclinación a lo largo de los ejes X, Y y Z como se muestra en la siguiente figura.

    Ángulo de inclinación
    Ángulo de inclinación

    Diagrama de circuito y conexión

    MPU6050 tiene pines I2C. Por lo tanto, debe estar conectado a los pines I2C de Arduino. Conecte los pines SDA de MPU6050 a A4 de Arduino y SCL a A5. Suministre una entrada de 5 V al MPU6050 y también conecte el GND como se muestra en la siguiente figura.

    Conexión del MPU6050 con el Microcontrolador

    Ejemplos: Wemos D1 Mini y Arduino Uno

    Código fuente/programa


    A continuación se muestra el código para medir el ángulo de inclinación usando MPU6050 y Arduino. Copie el código y cárguelo en la placa Arduino.

    #include<Wire.h>
    
    const int MPU_addr = 0x68;
    int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
    
    int minVal = 265;
    int maxVal = 402;
    
    double x;
    double y;
    double z;
    
    
    void setup() {
      Wire.begin();
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x6B); //Dirección de memoria del Sensor
      Wire.write(0);
      Wire.endTransmission(true);
      Serial.begin(115200);
    
      pinMode(LED_BUILTIN, OUTPUT);
    
    }
    void loop() {
    
      String textoAImprimir; //Imprime el resultado por consola.
      delay (2);
      unsigned long tiempoInicio = millis();
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x3B);
      Wire.endTransmission(false);
      Wire.requestFrom(MPU_addr, 14, true);
      AcX = Wire.read() << 8 | Wire.read();
      AcY = Wire.read() << 8 | Wire.read();
      AcZ = Wire.read() << 8 | Wire.read();
    
      if (AcX == -1 && AcY == -1 && AcZ == -1 ) {
        Serial.println("No conection MPU6050");
        delay (1000);
      }
    
      else {
        int xAng = map(AcX, minVal, maxVal, -90, 90);
        int yAng = map(AcY, minVal, maxVal, -90, 90);
        int zAng = map(AcZ, minVal, maxVal, -90, 90);
    
          x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);
        y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
           z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);
    
           Serial.print("x="+(String)x);
           Serial.print(", y="+(String)y);
           Serial.println(", z="+(String)z);
    
    
      }
    
    
      //////////Parpadeo//////////////////Parpadeo//////////////////Parpadeo//////// 
      
      static unsigned long timerBlink;
      if (millis() > timerBlink + 500) {
        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
        timerBlink = millis();
      }
    
    
    }
    
    
    
    
    
    
    
    
    
    
  • Bicicleta que hace los cambios automáticamente

    Bicicleta que hace los cambios automáticamente

    📍 Barcelona

    Trabajo realizado por Alumno de Tutoría

    Incluye Sensor PAS, Placa Arduino Uno, Módulo de LCD OLED, Switch, Bicicleta.

  • Circuito, Programación, Fabricación de PCB de Máquina Contadora de Tarjetas.

    El proyecto consta de un ESP32 con un sistema contador de hojas y 2 foto-células/sensores para el procedimiento de trabajo.

    En el procedimiento, cada ciclo fue programado como una “Máquina de Estados Finitos”

    La lista de Hardware de este proyecto es:

    -ESP32

    -Sensores digitales/fotocélulas

    -LCD 1602 con módulo I2C

    -Botonera de 4 salidas simple

    -Salidas con relay

  • Prototipo Mecatrónica: Máquina Encapsuladora de Café

    Prototipo Mecatrónica: Máquina Encapsuladora de Café

    Electrónica y programación para prototipo con ESP32, LCD, Controladoras de Motor paso a paso y transistor para motor DC y resistencia de sellado.

  • Brazo robótico

    📍Barcelona 2022

    Proyecto de programación de acciones e iteraciones en Software para ubicar las esferas en diferentes posiciones.

    Un brazo robótico es un dispositivo mecánico controlado por computadora que se utiliza para manipular objetos de manera similar a un brazo humano. Estos brazos robóticos se pueden programar para realizar una variedad de tareas, desde simples movimientos hasta operaciones más complejas. La programación de acciones e iteraciones en software es fundamental para controlar y coordinar los movimientos del brazo robótico.

    Arduino es una plataforma electrónica de código abierto que se utiliza ampliamente en proyectos de robótica, incluidos los brazos robóticos. Proporciona una forma fácil de controlar y programar componentes electrónicos, lo que permite a los ingenieros y aficionados crear sus propios sistemas robóticos.

    La ingeniería mecatrónica es una disciplina que combina elementos de ingeniería mecánica, electrónica y de control para diseñar y construir sistemas automatizados. Los brazos robóticos son un ejemplo común de aplicación de la ingeniería mecatrónica, ya que requieren conocimientos en estas áreas para su diseño y programación.

  • Sistemas embebidos

    Sistemas embebidos

    Circuitos dedicados a objetos, sistemas computacionales diseñados para realizar funciones dedicadas cubriendo necesidades específicas. Al contrario de lo que ocurre con los ordenadores de propósito general (PC)

    Con algunos conocimientos del lenguaje C, se pueden programar estos «CHIP» para interactuar con cualquier objeto del mundo.

    La comunicación adquiere gran importancia en los sistemas embebidos. Lo normal es que el sistema pueda comunicarse mediante interfaces estándar de cable o inalámbricas. Así un SI normalmente incorporará puertos de comunicaciones del tipo RS-232, RS-485, SPI, I²C, CAN, USB, IP, Wi-Fi, GSM, GPRS, DSRC, etc.

    El subsistema de presentación tipo suele ser una pantalla gráfica, táctil, LCD, alfanumérico, etc

    Se denominan actuadores a los posibles elementos electrónicos que el sistema se encarga de controlar. Puede ser un motor eléctrico, un conmutador tipo relé etc. El más habitual puede ser una salida de señal PWM para control de la velocidad en motores de corriente continua

    El módulo de E/S analógicas y digitales suele emplearse para digitalizar señales analógicas procedentes de sensores, activar diodos ledes, reconocer el estado abierto cerrado de un conmutador o pulsador, etc

    El módulo de reloj es el encargado de generar las diferentes señales de reloj a partir de un único oscilador principal. El tipo de oscilador es importante por varios aspectos: por la frecuencia necesaria, por la estabilidad necesaria y por el consumo de corriente requerido. El oscilador con mejores características en cuanto a estabilidad y coste son los basados en resonador de cristal de cuarzo, mientras que los que requieren menor consumo son los RC. Mediante sistemas PLL se obtienen otras frecuencias con la misma estabilidad que el oscilador patrón

    El módulo de energía (power) se encarga de generar las diferentes tensiones y corrientes necesarias para alimentar los diferentes circuitos del SE. Usualmente se trabaja con un rango de posibles tensiones de entrada que mediante conversores ac/dc o dc/dc se obtienen las diferentes tensiones necesarias para alimentar los diversos componentes activos del circuito

    Además de los conversores ac/dc y dc/dc, otros módulos típicos, filtros, circuitos integrados supervisores de alimentación, etc

    El consumo de energía puede ser determinante en el desarrollo de algunos sistemas embebidos que necesariamente se alimentan con baterías, con lo que el tiempo de uso del SE suele ser la duración de la carga de las baterías

  • Secuenciómetro para máquina industrial programado en Arduino IDE + Código en C++

    Secuenciómetro para máquina industrial programado en Arduino IDE + Código en C++

    El proyecto consta de 2 versiones para mover 8 y 16 solenoides con una espera regulable. Se hicieron 2 circuitos: El prototipo con un ESP32 y el diseño final duplicando las salidas con un Arduino Mega

    PROTOTIPO I

    Microcontrolador ESP32

    PROTOTIPO 2

    Arduino Mega 2560