Tabla de contenido:
- Paso 1: ACERCA DE ESTE PROYECTO
- Paso 2: Hardware requerido
- Paso 3: circuito y conexiones
- Paso 4: TRABAJANDO
- Paso 5: CÓDIGO
- Paso 6: DEMOSTRACIÓN EN VIDEO
Video: Controlar el servo usando MPU6050 entre Arduino y ESP8266 con HC-12: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
En este proyecto, estamos controlando la posición de un servomotor usando el mpu6050 y el HC-12 para la comunicación entre Arduino UNO y ESP8266 NodeMCU.
Paso 1: ACERCA DE ESTE PROYECTO
Es otro proyecto de IoT basado en el módulo RF HC-12. Aquí, los datos imu (mpu6050) de arduino se utilizan para controlar el servomotor (conectado con Nodemcu). Aquí, la visualización de datos también se realiza en el lado de arduino, donde los datos de tono mpu6050 (rotación sobre el eje x) se visualizan con un boceto de procesamiento (discutido más adelante). Básicamente, este proyecto es solo un poco de preparación para recordar diferentes aspectos del control Imu & Servo con Arduino y ESP8266 nodemcu.
OBJETIVO
El objetivo de esto es bastante claro, estamos controlando la posición del servomotor usando el valor de paso de IMU. Y en conjunto, este paso y la posición del motor sincronizado se visualizan con Processing.
Paso 2: Hardware requerido
Módulo Wifi NodeMCU ESP8266 12E
Protoboard sin soldadura
Cable pasa corriente
MPU6050 accelo + giroscopio
Módulos de RF HC-12 (par)
Servomotor SG90
Paso 3: circuito y conexiones
Las conexiones son sencillas. Puede alimentar el servo con 3.3V de su Nodemcu. También puede usar Vin para alimentar el servo si su nodemcu tiene tanto voltaje en ese pin. Pero la mayoría de las placas Lolin no tienen 5V en Vin (depende del fabricante).
Estos diagramas de circuitos se realizan con EasyADA.
Paso 4: TRABAJANDO
Tan pronto como se inicie el boceto de arduino, enviará el ángulo de inclinación (que varía de -45 a 45) al receptor hc12 de Nodemcu que se mapea con una posición de servo de 0 a 180 grados. Aquí usamos el ángulo de inclinación de -45 a +45 grados para que podamos asignarlo fácilmente a la posición del Servo.
Ahora, estás pensando por qué podemos simplemente usar el método del mapa de la siguiente manera:
int pos = map (val, -45, 45, 0, 180);
Porque el ángulo negativo enviado por el transmisor hc12 se recibe como:
1a mitad: (T) 0 a 45 => 0 a 45 (R)
2da mitad: (T) -45 a -1 => 255 a 210 (R)
Entonces tienes que mapearlo de 0 a 180 como
si (val> = 0 && val <= 45) pos = (val * 2) +90; si no pos = (val-210) * 2;
Estoy evitando el método del mapa debido a un error irrelevante. Puedes probar eso y comentar que funciona contigo
if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = map (val, 255, 210, 0, 90); // El cuarto argumento puede ser 2 (puedes comprobarlo)
Cálculo del ángulo de inclinación del MPU6050
Estoy usando la biblioteca MPU6050_tockn que se basa en proporcionar datos sin procesar de la IMU.
int pitchAngle = mpu6050.getAngleX ()
Esto nos dará el ángulo de rotación sobre el eje x. Como puede ver en la figura, mi imu está colocado verticalmente en la placa de pruebas, así que no lo confunda con cabeceo y balanceo. En realidad, siempre debería ver el eje impreso en la placa de conexión.
A través de esta biblioteca, no tiene que preocuparse por la electrónica interna de leer registros específicos para una operación específica. ¡Solo especifica el trabajo y listo!
Por cierto, si quieres calcular el ángulo tú mismo. Puede hacerlo fácilmente de la siguiente manera:
#incluir
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; configuración vacía () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (verdadero); Serial.begin (9600); } bucle vacío () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (falso); Wire.requestFrom (MPU6050_addr, 14, verdadero); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Temp = Wire.read () << 8 | Wire.read (); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();
int xAng = mapa (AcX, minVal, maxVal, -90, 90); int yAng = mapa (AcY, minVal, maxVal, -90, 90); int zAng = mapa (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 ("AngleX ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }
Pero no es necesario que escriba tanto código para obtener el ángulo. Debe conocer los hechos detrás de escena, pero usar la biblioteca de otras personas es muy efectivo en muchos proyectos. Puede leer sobre este imu y otros enfoques para obtener más datos filtrados en el siguiente enlace: Explore-mpu6050.
Mi código arduino en el extremo de transmisión tiene solo 30 líneas con la ayuda de la biblioteca MPU6050_tockn, por lo que usar una biblioteca es bueno a menos que no necesite algunos cambios básicos en la funcionalidad de IMU. Una biblioteca llamada I2Cdev de Jeff Rowberg es muy útil si desea algunos datos filtrados utilizando el DMP (procesador de movimiento digital) de la IMU.
Integración con Processing
Aquí, el procesamiento se utiliza para visualizar los datos de rotación sobre el eje x de IMU calculados por los datos sin procesar que provienen de MPU6050. Recibimos los datos brutos entrantes en SerialEvent de la siguiente manera:
void serialEvent (Serial myPort) {
inString = myPort.readString (); try {// Analizar los datos // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i + 1]); }} else {println (inString); }}} catch (Excepción e) {println ("Excepción detectada"); }}
Aquí puede ver la visualización en la imagen adjunta en este paso. Los datos de posición recibidos en el extremo nodemcu también se ven en el monitor en serie como se muestra en la imagen.
Paso 5: CÓDIGO
He adjuntado el repositorio de github. Puede clonarlo y bifurcarlo para usarlo en sus proyectos.
mi código
El repositorio incluye 2 bocetos arduino para transmisor (arduino + IMU) y receptor (Nodemcu + Servo).
Y un boceto de procesamiento. Destaque el repositorio si esto ayuda en su proyecto.
En este instructable, R- Receptor y T- Transmisor
Paso 6: DEMOSTRACIÓN EN VIDEO
Adjuntaré el video mañana. Sígueme para recibir notificaciones.
¡Gracias a todos!
Recomendado:
Cómo controlar la luz / luces del hogar usando Arduino y Amazon Alexa: 16 pasos (con imágenes)
Cómo controlar la luz / luces del hogar usando Arduino y Amazon Alexa: he explicado cómo controlar la luz que está conectada a UNO y controlada por Alexa
Controlar dispositivos con comando de voz usando NodeMCU: 7 pasos (con imágenes)
Control de dispositivos con comando de voz usando NodeMCU: Solo quiero saludar a todos, esta es la primera vez que escribo un proyecto con instrucciones. El inglés no es mi lengua materna, así que intentaré ser breve y lo más claro posible. Controlar dispositivos con comando de voz no es algo extraño en absoluto
Roll and Pitch Axis Gimbal para GoPro usando Arduino - Servo y MPU6050 Gyro: 4 pasos
Roll and Pitch Axis Gimbal para GoPro usando Arduino - Servo y MPU6050 Gyro: este instructable fue creado en cumplimiento del requisito del proyecto Makecourse en la Universidad del Sur de Florida (www.makecourse.com) El objetivo de este proyecto era construir un Gimbal de 3 ejes para GoPro usando Arduino nano + 3 servomotores +
Coche con control de gestos usando Mpu6050 y Arduino: 7 pasos (con imágenes)
Coche de control de gestos con Mpu6050 y Arduino: aquí hay un coche de control de gestos con controlador de mano, fabricado con mpu6050 y arduino. Yo uso el módulo de rf para la conexión inalámbrica
Interfaz de usuario de Android (remotexy) para controlar el servomotor usando Arduino y Bluetooth: 7 pasos (con imágenes)
Interfaz de usuario de Android (remotexy) para controlar el servomotor usando Arduino y Bluetooth: en este Instructable, le daré un paso rápido para hacer la interfaz de usuario de Android usando Remotexy Interface Maker para controlar el servomotor conectado a Arduino Mega a través de Bluetooth. Este video muestra cómo la interfaz de usuario controlará la velocidad y la posición del servomotor