Roboter Fahrzeug mit Blynk vom Smartphone steuern - AZ-Delivery

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

Set con 2 ruedas



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

2 motores con ruedas


1

Bola rodante como rueda giratoria


6

Tornillos M3 x 30 con tuerca

para motores y bolas rodantes

2

Tornillos M3 x 12 con tuerca

para soporte Powerpack

1

Chasis de la impresora 3D


1

Soporte del Powerpack de la impresora 3D


 

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

Tablero D1 NodeMCU ESP8266MOD-12F


o 1

Placa de desarrollo ESP32 D1 R32


1

Controlador del Motor L293D de 4 Canales



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(); 
  }

 Sketch para descargar


Eliminar el chasis de la impresora 3D


Archivo del chasis

Archivo de soporte de batería

 

 

Contribuciones en formato PDF

¡Diviértase con el robot!


AmateurfunkEsp-32Esp-8266Projekte für anfänger

1 comentario

riewes

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/

Deja un comentario

Todos los comentarios son moderados antes de ser publicados