Bienvenido a un nuevo blog de nuestra serie sobre Coches Robot. Esta vez queremos controlar nuestro pequeño coche con nuestro smartphone. Para ello, utilizamos la aplicación Blynk.
Hardware Requerido
Variante del vehículo 1: Kit
Ventaja: Económico, todas las piezas necesarias están disponibles
Desventaja: Menos orientable, el montaje de MCU y los sensores es difícil con los agujeros de montaje existentes
Numero |
Componente |
Nota |
---|---|---|
1 |
|
Variante del vehículo 2: Desde la impresora 3D
Ventaja: Gracias a la bola rodante como rueda giratoria, la direccionabilidad es mejor. Los orificios de montaje para la MCU y los sensores están disponibles. También existe la instalación de un servo para cámara o sensor ultrasónico.
Desventaja: Se requiere una impresora 3D.
Numero |
Componente |
Nota |
---|---|---|
Numero |
Componente |
Nota |
1 |
|
|
1 |
|
|
6 |
Tornillos M3 x 30 con tuerca |
para motores y bolas rodantes |
2 |
Tornillos M3 x 12 con tuerca |
para soporte Powerpack |
1 |
|
|
1 |
|
Como microcontrolador necesitamos un ESP8266 o mejor un ESP32 por la integración WLAN. El ESP-32 tiene la ventaja de que dispone de muchos más pines de E/S disponibles, lo que será importante para futuros proyectos con el uso de sensores.
Numero |
Componente |
Nota |
---|---|---|
Numero |
Componente |
Nota |
1 |
|
|
o 1 |
|
|
1 |
|
Para que el escudo del controlador del motor se utilice con los controladores ESP, se necesitan pequeñas modificaciones, ya que los controladores ESP funcionan con un voltaje de alimentación de 3,3 V.
Desde la conexión D7 se debe conectar una resistencia de 10kOhm a GND. Esto es necesario porque el escudo del pin D7 está conectado a 5V a través de una resistencia de pullup de 10kOhm.
Las conexiones A0 a A5, así como las conexiones de suministro asociadas deben estar equipadas con encabezados de pines. Para que estas conexiones se utilicen para sensores, el voltaje de alimentación también debe conectarse a 3.3 V en lugar de 5V. Esto se hace simplemente separando el cable de conexión a los pines en la parte inferior. Después puede conectar los pines al pin de 3.3 V.
Las conexiones para el voltaje de alimentación también deben estar equipadas.
Las salidas M2 y M4 se utilizan para conectar los dos motores, ya que M1 y M3 no se pueden controlar con la placa ESP8266. Las conexiones del motor se conectarán a los terminales de tornillo correspondientes en el escudo del motor. Si el vehículo se suministra a través de la toma USB en el microcontrolador, se debe quitar el Jumper (círculo rojo) y conectar la entrada M+ a la conexión de 5V del microcontrolador (marcado en verde).
El escudo del motor simplemente se conecta a la placa del microcontrolador. No se requieren más medidas de cableado.
Para la fijación mecánica de las placas, el chasis de la impresora 3D tiene orificios donde se puede atornillar la placa del microcontrolador con piezas remotas. El kit puede requerir la perforación de agujeros.
Software
Para el control remoto del vehículo se utiliza el software Blynk que está disponible de forma gratuita. Blynk es un proyecto de kick start que permite el control más sencillo posible de microcontroladores con un smartphone. Un elemento esencial es la app, con la que se puede crear una aplicación a través de un tipo de kit. Toda la información sobre esta aplicación se almacena en el servidor Blynk. A cada aplicación se le asignará un número de identificación único. En el lado del microcontrolador, una librería garantiza que el microcontrolador se comunique con el servidor Blynk y que la aplicación en el smartphone pueda leer o controlar directamente los pines del microcontrolador. No es necesario programar el microcontrolador. La única condición es que el microcontrolador tenga acceso al servidor Blynk. Sin embargo, como no se pueden controlar directamente los pines del microcontrolador para el control remoto del vehículo, será necesario realizar una programación.
Lo primero que se requiere es que la aplicación Blynk debe estar instalada en el smartphone. Después de instalar e iniciar la aplicación, aparecerá la pantalla de inicio de sesión. Para usar Blynk, necesita una cuenta para el servidor Blynk. Para ello, solo se requiere una dirección de correo electrónico y una contraseña.
Después de haber creado una cuenta, le aparecerá un mensaje sobre el tema de la energía. Para crear un proyecto Blynk necesita una cierta cantidad de energía para cada elemento de pantalla. Con una nueva cuenta, obtiene automáticamente 2000 puntos de energía, con lo que puede trabajar. Si necesita más puntos de energía para un proyecto, puede comprarlos.
Después de esta ventana de mensaje, aparece la pantalla de inicio. Aquí puede cargar el proyecto Coche Robot utilizando el siguiente código QR.
Ahora verá la ventana del proyecto. Si hace clic en el símbolo de la tuerca, se abrirá la configuración del proyecto. En los ajustes del proyecto, encontrará el enlace "Email all". Cuando haga clic en él, recibirá un correo electrónico con la clave que su microcontrolador Sketch necesita para comunicarse con el servidor Blynk. Utilice el ícono del triángulo en la parte superior derecha de la ventana del proyecto para iniciar la aplicación.
Puede encontrar más información sobre Blynk en Internet o en Libro - Smarthome. El libro también describe cómo instalar su propio servidor Blynk privado en una Raspberry Pi.
El Sketch
Además del paquete para ESP32 o ESP8266, necesita la librería Blynk, que se puede instalar a través de la administración de librería.
#ifdef ESP32 // Archivos Constant e include para el ESP32 #include <WiFi.casa> #include <BlynkSimpleEsp32.casa> // Pasadores para el registro de cambios rotativos #define SHIFT_IN 12 // Entrada de datos Arduino D8 #define SHIFT_CLK 17 // Schiebetackt Arduino D4 #define LATCH_CLK 19 // Reloj de Memoria, Arduino D12 #define OUT_ENABLE 14 // Con salida BAJA permite Arduino D7 // PWM para motores velocidad entre 0 y 1023 #define M1PWM 23 // Pin para Motor1 Arduino D11 #define MRIGHT 25 // Pin para Motor2 Arduino D3 #define M3PWM 27 // Pin para Motor3 Arduino D6 #define MLEFT 16 // Pin para Motor4 Arduino D5 // Servo Conexiones #define SERVO1 5 // Pin para Servo1 D10 #define SERVO2 13 // Pin para Servo2 D9 #endif #ifdef ESP8266 // Archivos Constant e include para el ESP8266 #include <ESP8266WiFi.casa> #include <BlynkSimpleEsp8266.casa> // Pasadores para el registro de cambios rotativos #define SHIFT_IN 0 // Entrada de datos Arduino D8 #define SHIFT_CLK 4 // Schiebetackt Arduino D4 #define LATCH_CLK 12 // Reloj de Memoria, Arduino D12 #define OUT_ENABLE 13 // Con salida BAJA permite Arduino D7 // PWM para motores velocidad entre 0 y 1023 #define M1PWM 13 // Pin para Motor1 Arduino D11 ocupación doble! #define MRIGHT 5 // Pin para Motor2 Arduino D3 #define M3PWM 12 // Pin para Motor3 Arduino D6 ocupación doble! #define MLEFT 14 // Pin para Motor4 Arduino D5 // Servo Conexiones #define SERVO1 15 // Pin para Servo1 D10 #define SERVO2 2 // Pin para Servo2 D9 #endif // Para mensajes de depuración de Blynk #define BLYNK_PRINT Serie // Las siguientes constantes deben ser reemplazadas por sus datos personales // BLYNK clave de autenticación desde el correo electrónico #define CLAVE "+++++++++++++++++++++++++++++++++++++" // SSID de WiFi local #define Transmisión SSID "************************************" // Clave de acceso para la WLAN #define PSK "**************************************" // Dirección de un servidor Blynk local o "" para el público #define SERVIDOR "" // Bits en el registro de desplazamiento a la asignación del motor #define M1A 2 // Motor1 A #define M1B 3 // Motor1 B #define M2A 1 // Motor2 A #define M2B 4 // Motor2 B #define M3A 5 // Motor3 A #define M3B 7 // Motor3 B #define M4A 0 // Motor4 A #define M4B 6 // Motor4 B // Asignación de Motores #define DRIGHT 2 #define DLEFT 4 // Constantes para la dirección de rotación #define DEJAR 0 #define ADELANTE 1 #define ATRASADO 2 // Contenido actual del registro de desplazamiento de dirección uint32_t dirección = 0; / Velocidad máxima int eg; // Llena el registro de cambios para el control del motor // con el contenido de direcciones anular sendDirections() { uint8_t me; Escritura digital(LATCH_CLK, BAJO); // Bloqueo de memoria Escritura digital(SHIFT_IN, BAJO); // Entrada en 0 para (me=0; me<8; me++) { Escritura digital(SHIFT_CLK, BAJO);// Leer poco a poco si (dirección & trozo(7-me)) { Escritura digital(SHIFT_IN, ALTO); } else { Escritura digital(SHIFT_IN, BAJO); } Escritura digital(SHIFT_CLK, ALTO); } Escritura digital(LATCH_CLK, ALTO); // Guardar con el borde positivo } // Ajuste de la dirección de rotación de un motor anular setDirection(uint8_t motor, uint8_t dirección) { uint8_t un=0, b=0; // Determinar los números de bits para el motor seleccionado interruptor (motor) { caso 1: un=M1A; b=M1B; romper; caso 2: un=M2A; b=M2B; romper; caso 3: un=M3A; b=M3B; romper; caso 4: un=M4A; b=M4B; romper; } // en primer lugar, establecer ambos bits para el Motor a 0 significa PARADA dirección &= ~ trozo(un) & ~ trozo(b); interruptor (dirección) { caso ADELANTE: dirección |= trozo(un); romper; // Para el Bit DE AVANCE A a 1 caso ATRASADO: dirección |= trozo(b); romper;// Para el bit INVERSO B a 1 } // Serie.printf ("Direcciones = % x \ n", direcciones); sendDirections(); // Enviar nueva configuración a shift register } // zona neutral para x e y // El joystick debe estar fuera de este rango para activar un motor int minRange = 312; int MaxRange = 712; // Conducir motor izquierdo y derecho. / Los parámetros izquierda y derecha contienen la velocidad // Los valores negativos significan hacia atrás anular motor(int16_t izquierda, int16_t derecho) { // Serie.printf ("izquierda %i, derecha %i \ n", izquierda, derecha); //Dirección si (izquierda<0) { setDirection(DLEFT,ATRASADO); } else si (izquierda == 0){ setDirection(DLEFT,DEJAR); } else { setDirection(DLEFT,ADELANTE); } si (derecho<0) { setDirection(DRIGHT,ATRASADO); } else si (derecho == 0){ setDirection(DRIGHT,DEJAR); } else { setDirection(DRIGHT,ADELANTE); } / La salida / PWM es diferente para ESP32 y ESP8266 #ifdef ESP32 //Velocidad ledcWrite(DLEFT,para(izquierda)); ledcWrite(DRIGHT,para(derecho)); #endif #ifdef ESP8266 //Velocidad analogWrite(MLEFT,para(izquierda)); analogWrite(MRIGHT,para(derecho)); #endif } // Evaluación de los datos del joystick anular moveControl(int x, int Yahoo) { // avanzar si(Yahoo >= MaxRange && x >= minRange && x <= MaxRange) { //adelante motor(eg,eg); } else si(x <= minRange && Yahoo >= MaxRange ) { // avanzar a la derecha motor(0.7*eg,0.3*eg); } else si(x >= MaxRange && Yahoo >= minRange && Yahoo<=MaxRange) { // mover a la derecha motor(eg,-eg); } else si(x <= minRange && Yahoo >= MaxRange ) { // avanzar hacia LA IZQUIERDA motor(0.3*eg,0.7*eg); } else si(x <= minRange && Yahoo >= minRange && Yahoo <= MaxRange) { // mover a la izquierda motor(-eg,eg); } else si(Yahoo < MaxRange && Yahoo > minRange && x < MaxRange && x > minRange) {// zona neutral motor(0,0); } else si(Yahoo <= minRange && x >= minRange && x <= MaxRange) { // mover hacia atrás motor(-eg,-eg); } else si(Yahoo <= minRange && x <= minRange) { // mover hacia atrás y hacia la derecha motor(-0.7*eg,-0.3*eg); } else si(Yahoo <= minRange && x >= MaxRange) { Mover hacia atrás y hacia la izquierda Motor(-0.3*Tener,-0.7*Tener); } } Configuración Inválido Configuración() { Número de serie.Inicio(115200); Número de serie.Imprimir(); Número de serie.Imprimir("Otoño"); Establecer todos los pines usados como salida Modo pinmode(Transferencia,Salida); Modo pinmode(Reloj de cambio de marchas,Salida); Modo pinmode(Pestillo CLK,Salida); Modo pinmode(No habilitado,Salida); PWM para / esp32 #ifdef Esp32 PWM para / esp32 / ledcsetup (canal, frecuencia, bits de resolución) Configuración LED(Desarrollo, 100, 10); Configuración LED(Tribunal,100, 10); Los pines del motor se asignan a los canales Leccata chipping(Me encantan las chicas conocidas.,Desarrollo); Leccata chipping(Amanecer,Tribunal); #endif #ifdef ESP 8266 El PIN del motor esp8266 es fácil de salir Modo pinmode(Me encantan las chicas conocidas.,Salida); Modo pinmode(Amanecer,Salida); #endif Todos los motores se detienen Hoja de ruta = 0; Dirección de envío(); Enviar al registro deslizante Escritura digital(No habilitado,0); Liberación de la salida de registro del deslizador Número de serie.Imprimir("Iniciar blynk"); Depende del servidor público o privado Diferentes comienzos de blynk Si (Servicios=="") { Azul.Inicio(La llave., SSID, PSK); } Tiempo estimado de despegue { Azul.Inicio(La llave., SSID, PSK, Servicios, 8080); } } Inválido Ejecutar() { Comunicarse con el servidor blynk aquí Azul.Ejecutar(); } Pin virtual V1 ha recibido datos Blynk write(Primera edición) Leer y evaluar el valor de la palanca { Escena interior Diez = Stop[0].Athens(); Escena interior Sí. = Stop[1].Athens(); Control de movimiento(Diez,Sí.); } El PIN virtual V2 ha recibido datos Blynk write(Segunda edición) { Lea el valor y establezca la velocidad máxima Tener = Stop[0].Athens(); }
Eliminar el chasis de la impresora 3D
¡Diviértase con el robot!
1 comentario
riewes
Großartiger Inhalt, er wird mir in meinem Geschäft helfen. Danke für den Austausch nützlicher Informationen. Hochachtungsvoll, David, Autor des Blogs https://riewes.de/