- Materiales necesarios:
- Diagrama de circuito:
- Potenciando su configuración:
- Programando su Arduino:
- Preparando la aplicación de Android usando Processing:
- Funcionamiento del Inclinómetro Arduino:
El MPU6050 es un acelerómetro IC de 3 ejes y un giroscopio de 3 ejes combinados en una sola unidad. También alberga un sensor de temperatura y un DCM para realizar una tarea compleja. El MPU6050 se usa comúnmente en la construcción de drones y otros robots remotos como un robot de equilibrio automático. En este proyecto aprenderemos a usar el MPU6050 se construye un Inclinómetro o Nivelador de Espíritu. Como sabemos se utiliza un inclinómetro para comprobar si una superficie está perfectamente nivelada o no, están disponibles bien como sprit bubble o como medidores digitales. En este proyecto, vamos a construir un Inclinómetro digital que se puede monitorear usando una aplicación de Android. La razón para usar una pantalla remota como un teléfono móvil es que podemos monitorear los valores del MPU6050 sin tener que mirar el hardware, esto sería muy útil cuando el MPU6050 se coloca en un dron o en otros lugares inaccesibles.
Materiales necesarios:
- Arduino Pro-mini (5 V)
- Sensor giroscópico MPU6050
- Módulo Bluetooth HC-05 o HC-06
- Tablero FTDI
- Tablero de circuitos
- Cables de conexión
- Teléfono inteligente
Diagrama de circuito:
El diagrama de circuito completo para este proyecto del sensor de inclinación Arduino se muestra a continuación. Solo tiene solo tres componentes y se puede construir fácilmente sobre la placa de pruebas.
El MPU6050 se comunica con la ayuda de I2C y, por lo tanto, el pin SDA está conectado al pin A4 de Arduino, que es el pin SDA y el pin SCL está conectado al pin A5 de Arduino. El módulo Bluetooth HC-06 funciona con la ayuda de la comunicación en serie, por lo tanto, el pin Rx de Bluetooth está conectado al pin D11 y el pin Tx de Bluetooth está conectado al pin D10 del Arduino. Estos pines D10 y D11 se configurarán como pin serial programando el Arduino. El módulo HC-05 y el módulo MSP6050 funcionan con + 5V y, por lo tanto, son alimentados por el pin Vcc del Arduino como se muestra arriba.
Usé algunos cables de conexión de tablero y construí la configuración sobre un tablero pequeño. Una vez que se realizan las conexiones, mi placa se ve así a continuación.
Potenciando su configuración:
Puede alimentar su circuito a través de la placa de programación FTDI como lo hice yo, o usar una batería de 9V o un adaptador de 12V y conectarlo al pin Raw del Arduino pro mini. El Arduino Pro-mini tiene un regulador de voltaje incorporado que convertiría este voltaje externo regulado en + 5V.
Programando su Arduino:
Una vez que el hardware está listo, podemos comenzar a programar nuestro Arduino. Como siempre, el código completo de este proyecto se puede encontrar al final de esta página. Pero para comprender mejor el proyecto, he roto el código en pequeñas grietas y las he explicado como pasos a continuación.
El primer paso sería conectar el MPU6050 con Arduino. Para este proyecto vamos a utilizar la biblioteca desarrollada por Korneliusz que se puede descargar desde el enlace a continuación
MPU6050 Liberty - Korneliusz Jarzebski
Descargue el archivo ZIP y agréguelo a su IDE de Arduino. Luego dirígete a Archivo-> Ejemplos-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Esto abrirá el programa de ejemplo que usa la biblioteca que acabamos de descargar. Así que haga clic en cargar y espere a que el programa se cargue en su Arduino Pro mini. Una vez hecho esto, abra su monitor serial y configure su velocidad en baudios en 115200 y verifique si está obteniendo lo siguiente.
Inicialmente, los tres valores serán cero, pero a medida que mueva su tablero, puede observar que estos valores cambian. Si cambian, significa que su conexión es correcta; de lo contrario, verifique sus conexiones. Tómese un tiempo aquí, observe cómo los tres valores Pitch Roll y Yaw varían según la forma en que inclina el sensor. Si se confunde, presione el botón de reinicio en el Arduino y los valores se inicializarán a cero nuevamente, luego incline el sensor en una dirección y verifique qué valores varían. La siguiente imagen le ayudará a comprender mejor.
De estos tres parámetros, solo estamos interesados en Roll y Pitch. El valor del rollo nos hablará de la inclinación en el eje X y el valor de tono nos hablará de la inclinación en el eje Y. Ahora que hemos entendido los conceptos básicos, comencemos a programar el Arduino para leer estos valores y enviarlo a Arduino a través de Bluetooth. Como siempre, comencemos por incluir todas las bibliotecas necesarias para este proyecto.
#incluir
Luego inicializamos la serie de software para el módulo Bluetooth. Esto es posible debido a la biblioteca de Software Serial en Arduino, los pines IO se pueden programar para que funcionen como pines seriales. Aquí estamos usando los pines digitales D10 y D11, donde D10 id Rx y D11 es Tx.
SoftwareSerial BT (10, 11); // RX, TX
Seguido de eso, inicializamos las variables y objetos necesarios para el programa y pasamos a la función setup () donde especificamos la velocidad en baudios para el monitor serial y Bluetooth. Para HC-05 y HC-06 la velocidad en baudios es 9600 por lo que es obligatorio usar la misma. Luego comprobamos si el bus IIC de Arduino está conectado al MPU6050 si no imprimimos un mensaje de advertencia y permanecemos ahí mientras el dispositivo esté conectado. Después de eso, calibramos el Gyro y establecemos sus valores de umbral usando sus funciones respectivas como se muestra a continuación.
configuración vacía () {Serial.begin (115200); BT.begin (9600); // iniciar la comunicación Bluetooth a 9600 baudrate // Inicializar MPU6050 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("No se pudo encontrar un sensor MPU6050 válido, verifique el cableado!"); retraso (500); } mpu.calibrateGyro (); // Calibrar el giroscopio durante el inicio mpu.setThreshold (3); // Controla la sensibilidad}
La línea " mpu.calibrateGyro ();" calibre el MPU6050 para la posición en la que se encuentra actualmente. Esta línea se puede llamar varias veces dentro del programa siempre que sea necesario calibrar el MPU6050 y todos los valores deben establecerse en cero. "Mpu.setThreshold (3);" Esta función controla cuánto varía el valor para el movimiento en el sensor. Un valor demasiado bajo aumentará el ruido, así que tenga cuidado al jugar con esto.
Dentro del bucle vacío (), leemos repetidamente los valores del giroscopio y el sensor de temperatura calculamos el valor de cabeceo, balanceo y guiñada, lo enviamos al módulo Bluetooth. Las siguientes dos líneas leerán los valores de Gyro sin procesar y el valor de temperatura
Norma vectorial = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
A continuación, calculamos el cabeceo, balanceo y guiñada multiplicando por el paso de tiempo y sumándolo a los valores anteriores. Un timeStep no es más que el intervalo entre lecturas sucesivas.
tono = tono + norma.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Para entender mejor el paso del tiempo, echemos un vistazo a la siguiente línea. Esta línea se coloca para leer los valores de MPU6050 exactamente en un intervalo de 10 mS o 0,01 segundos. Entonces declaramos el valor de timeStep como 0.01. Y use la línea de abajo para mantener el programa si queda más tiempo. (millis () - timer ()) da el tiempo necesario para que el programa se ejecute hasta el momento. Simplemente lo restamos con 0.01 segundos y durante el tiempo restante simplemente mantenemos nuestro programa allí usando la función de retardo.
delay ((timeStep * 1000) - (millis () - timer));
Una vez que hayamos terminado de leer y calcular los valores, podemos enviarlos a nuestro teléfono a través de Bluetooth. Pero hay una trampa aquí. El módulo Bluetooth que estamos usando puede enviar solo 1 byte (8 bits) lo que nos permite enviar números solo del 0 al 255. Entonces tenemos que dividir nuestros valores y mapearlos dentro de este rango. Esto se hace mediante las siguientes líneas
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (tono> -100 && tono <100) y = mapa (tono, -100, 100, 100, 200); si (temp> 0 && temp <50) t = 200 + int (temp);
Como puede averiguarlo, el valor de balanceo se asigna de 0 a 100 en la variable x y el tono se asigna de 100 a 200 en la variable y y la temperatura se asigna a 200 y superior a la variable t. Podemos utilizar la misma información para recuperar los datos de lo que hemos enviado. Finalmente escribimos estos valores a través de Bluetooth usando las siguientes líneas.
BT.write (x); BT.write (y); BT.write (t);
Si ha entendido el programa completo, desplácese hacia abajo para ver el programa y cárguelo en la placa Arduino.
Preparando la aplicación de Android usando Processing:
La aplicación de Android para este Inclinómetro Arduino se desarrolló utilizando el IDE de procesamiento. Esto es muy similar a Arduino y se puede usar para crear aplicaciones de sistema, aplicaciones de Android, diseños web y mucho más. Ya hemos utilizado el procesamiento para desarrollar algunos de nuestros otros proyectos interesantes que se enumeran a continuación
- Juego de ping pong usando Arduino
- Radio FM controlada por teléfono inteligente mediante procesamiento.
- Sistema de radar Arduino con procesamiento y sensor ultrasónico
Sin embargo, no es posible explicar el código completo sobre cómo crear esta aplicación. Entonces tienes dos formas de repasar esto. O puede descargar el archivo APK desde el siguiente enlace e instalar la aplicación de Android directamente en su teléfono. O desplácese a continuación para encontrar el código de procesamiento completo y aprender por sí mismo cómo funciona
Dentro del archivo ZIP, puede encontrar una carpeta llamada datos que consta de todas las imágenes y otras fuentes que se cargarán en la aplicación de Android. La siguiente línea decide a qué nombre se debe conectar el Bluetooth automáticamente
bt.connectToDeviceByName ("HC-06");
Dentro de la función draw () , las cosas se ejecutarán repetidamente. Aquí dibujamos las imágenes, mostramos el texto y animamos las barras en función de los valores del módulo Bluetooth. Puede comprobar lo que sucede dentro de cada función leyendo el programa.
void draw () // El bucle infinito {background (0); imageMode (CENTRO); imagen (logo, ancho / 2, alto / 1.04, ancho, alto / 12); cargar imágenes(); textfun (); getval (); }
Finalmente, hay una cosa más importante que explicar, recuerde que dividimos el valor de cabeceo, balanceo y temperatura de 0 a 255. Así que aquí volvemos a traerlo de nuevo a los valores normales mapeándolo de forma inversa a los valores normales.
if (info <100 && info> 0) x = map (info, 0, 100, - (ancho / 1.5) / 3, + (ancho / 1.5) / 3); // x = info; else if (info <200 && info> 100) y = map (info, 100, 200, - (ancho / 4.5) /0.8, + (ancho / 4.5) /0.8); // y = info; si no (información> 200) temp = info -200; println (temp, x, y);
Hay formas mucho mejores de transferir datos desde un módulo Bluetooth al teléfono, pero como este es solo un proyecto de hobby, los hemos ignorado, puede profundizar si está interesado.
Funcionamiento del Inclinómetro Arduino:
Una vez que esté listo con el hardware y la aplicación, es hora de divertirse con lo que hemos creado. Cargue el código Arduino en la placa, también puede eliminar los comentarios en las líneas Serial.println y verificar si el hardware está funcionando como se esperaba usando el monitor serial. De todos modos, eso es completamente opcional.
Una vez que se cargue el código, inicie la aplicación de Android en su teléfono móvil. La aplicación debería conectarse automáticamente a su módulo HC-06 y mostrará "Connect to: HC-06" en la parte superior de la aplicación como se muestra a continuación.
Inicialmente, todos los valores serán cero excepto el valor de temperatura. Esto se debe a que Arduino ha calibrado el MPU-6050 para esta posición como referencia, ahora puede inclinar el hardware y verificar que los valores en la aplicación móvil también estén cambiando junto con la animación. El funcionamiento completo de la aplicación se puede encontrar en el video que se muestra a continuación. Entonces ahora puede colocar la placa de pruebas en cualquier lugar y verificar si la superficie está perfectamente nivelada.
Espero que haya entendido el proyecto y haya aprendido algo útil de él. Si tiene alguna duda, utilice la sección de comentarios a continuación o los foros para resolverla.