Esto es el montaje de un carrito controlado con el sensor de orientación de un teléfono Android. No es perfecto (ni se pretendo) ni en hardware ni en software. Solo en plan demostrativo y a perfeccionar por los más interesados.
Aprovechando el bajo precio (1,67€) del cochecito en formato de kit, pedí dos que uní por el centro. Solo uso la placa, motores (3v) y ruedas.
El control de los motores lo hago con el driver DRV8833 en sustitución del clásico L298, es mucho más pequeño y solo necesita dos pines para controlar cada motor (sentido y velocidad) frente a los tres necesarios en el L298.
El micro es esp8266 Nodemcu D1 mini para tener conexión Wifi con nuestro cochecito y poder controlarlo con el tel´fono.
El circuito es muy simple y permite su montaje en una placa de tiras
En el programa para el esp8266 lo definimos como Web Server con WiFi en modo Access Point (AP), en nuestro teléfono aparecerá en la WiFi como "RobotWifi" y clave 12345678 y ya podremos controlarlo con nuestra apk de Android..
/* http://www.jopapa.me 2024 * ESP8266 como Web Server con WiFi en modo Access Point (AP) * Conectar en el telefono al AP "Robot Wifi", password = "12345678" * Driver de motores de 3v con DRV8833 */
#define MOT_A1_PIN D5 //Pines del esp8266 para el DRV8833 #define MOT_A2_PIN D6 #define MOT_A3_PIN D7 #define MOT_A4_PIN D8
String command0; //Variable String para almacenar el estado del comando de la aplicación String command; //Variable String para almacenar el estado del comando de la aplicación int speed = 0;
ESP8266WebServer server(80); //Creamos un objeto servidor WEB que escuchará en el puerto 80
// Conecta a Wifi WiFi.mode(WIFI_AP); //Solo Access point WiFi.softAP(ssid, password); //HOTspot
IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP);
// Starting WEB-server server.on ( "/", HTTP_handleRoot ); //indicamos una función como respuesta del servidor cuando el navegador solicita cierta URL server.onNotFound ( HTTP_handleRoot ); server.begin(); // Le dice al servidor que comience a escuchar las conexiones entrantes. }
void loop() { server.handleClient(); //escuchamos las conexiones entrantes: command0 = server.arg("State"); //Serial.println(command.substring(1)); command=(command0.substring(0,1)); //Extrae la letra inicial speed=(command0.substring(1).toInt()); speed=speed*4; //Extrae la velocidad y ajusta para DRV8833 if (speed > 254) speed = 254;
if (command == "F") goForward(); else if (command == "B") goBack(); else if (command == "L") goLeft(); else if (command == "R") goRight(); else if (command == "S") stopRobot(); }