Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Un robot controlado por Wi-Fi, servos y ESP32 es un sistema de robotización que utiliza una combinación de tecnologías para permitir la comunicación y el control inalámbrico de un robot. Este tipo de robot se basa en servomotores para el control de los movimientos, y utiliza un módulo ESP32 para la comunicación y el control remoto.
El ESP32 es un microcontrolador de bajo costo y bajo consumo de energía que cuenta con capacidades de conectividad Wi-Fi y Bluetooth. Proporciona una interfaz inalámbrica que permite establecer una comunicación bidireccional entre el robot y un dispositivo remoto, como un teléfono inteligente, una computadora o una tableta.
Los servomotores son dispositivos que se utilizan para controlar y posicionar con precisión los diferentes componentes móviles de un robot, como brazos, ruedas o cabeza. Estos servos se conectan al ESP32 y reciben señales de control para determinar la posición y la velocidad de movimiento.
El control del robot se logra enviando comandos a través de la conexión Wi-Fi desde el dispositivo remoto al ESP32. Esto se puede lograr mediante una aplicación o software específico que permite enviar instrucciones de movimiento al robot. El ESP32 recibe estos comandos, los procesa y los transmite a los servomotores correspondientes para ejecutar los movimientos deseados.
Una vez que el ESP32 recibe los comandos, puede utilizar algoritmos y lógica programada para controlar la secuencia de movimientos del robot. Esto permite al robot realizar una amplia variedad de tareas, como desplazarse, manipular objetos o interactuar con su entorno.
La comunicación inalámbrica a través de Wi-Fi proporciona flexibilidad y movilidad, ya que no es necesario que el dispositivo remoto esté conectado físicamente al robot. Esto permite controlar el robot desde una distancia considerable y proporciona la capacidad de monitorear y controlar múltiples robots a la vez.
Este circuito funciona con 5 Voltios de corriente continua.
Componentes electrónicos
Un Esp32
Características del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Pines hembra
Pines macho
PCB
Descargar archivo gerber –> Esp32PCB
Cuatro servomotores ( con accesorios)
El mg995 – 360°, es un servo de rotación continua (360°) es una variante de los servos normales, en los que la señal que enviamos al servo controla la velocidad de giro, en lugar de la posición angular como ocurre en los servos convencionales.
Este servo de rotación continua es una forma sencilla de conseguir un motor con control de velocidad, sin tener que añadir dispositivos adicionales como controladores o encoders como ocurre en el caso en el caso de motores DC o paso a paso, ya que el control está integrado en el propio servo.
Especificaciones
- Material de los engranes: Metal
- Rango de giro: 360 °
- Voltaje de operación: 3 V a 7.2 V
- Velocidad de operación sin carga : 0.17 segundos / 60 grados (4.8V); 0.13 segundos / 60 grados (6.0V)
- Torque: 15 kg / cm
- Temperatura de trabajo: -30 °C a 60 °C
- Largo del cable: 310 mm
- Peso: 55 g
- Dimensiones: 40.7 mm x 19.7 mm x 42.9 mm
Incluye:
- 1 Servomotor Tower Pro Mg995 giro continuo.
- 3 Tornillos para ensamble.
- 3 Coples (horns).
Cuatro ruedas
Archivos STL
Descargar –> stl_auto_con_servos
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
#include <WiFi.h> #include <Servo.h> const char* ssid = "xxxxxxxx";//Clave wifi const char* password = "xxxxxxxx";//Contraseña wifi WiFiServer server(80); Servo servoPin12; Servo servoPin14; Servo servoPin27; Servo servoPin26; int pin2 = 2; void setup() { Serial.begin(115200); // Pines de control servo y led onboard esp32 servoPin12.attach(12); servoPin14.attach(14); servoPin27.attach(27); servoPin26.attach(26); pinMode(pin2, OUTPUT); digitalWrite(pin2, LOW); delay(10); // Comenzamos conectándonos a una red WiFi Serial.println(); Serial.println(); Serial.print("Conectando a "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Conectado a red Wifi."); Serial.println("Dirección IP "); Serial.println(WiFi.localIP()); server.begin(); digitalWrite(pin2, HIGH); } int value = 0; void loop(){ WiFiClient client = server.available(); // Escuchando a los clientes entrantes if (client) { // Si hay un cliente, Serial.println("Nuevo cliente"); // Imprime un mensaje en el puerto serie String currentLine = ""; // String para contener datos entrantes del cliente while (client.connected()) { // Bucle mientras el cliente está conectado if (client.available()) { // Si hay bytes para leer del cliente, char c = client.read(); // Lee un caracter Serial.write(c); // Lo imprimimos en el monitor serial if (c == '\n') { // Si el byte es un carácter de nueva línea if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); // Contenido HTML client.print("Click <a href=\"/avanzar\">Avanzar</a> Para Avanzar.<br>");//Avanzar client.print("Click <a href=\"/atras\">Retroceder</a> Para Retroceder.<br>");//Retroceder client.print("Click <a href=\"/derecha\">Derecha</a> Para ir a la derecha.<br>");//Avanzar client.print("Click <a href=\"/izquierda\">Izquierda</a> Para ir a la Izquierda.<br>");//Izquierda client.print("Click <a href=\"/parar\">Parar</a> Para Detener.<br>");//Parar client.println(); // Salir del ciclo while: break; } else { // si tienes una nueva línea, borra currentLine: currentLine = ""; } } else if (c != '\r') { currentLine += c; } //Avanzar if (currentLine.endsWith("GET /avanzar")) { servoPin12.write(0);// servoPin14.write(180);// servoPin27.write(0);// servoPin26.write(180);// } //----Atrás---- if (currentLine.endsWith("GET /atras")) { servoPin12.write(180);// servoPin14.write(0);// servoPin27.write(180);// servoPin26.write(0);// } //----Gira a la derecha--- if (currentLine.endsWith("GET /derecha")) { servoPin12.write(180);// servoPin14.write(180);// servoPin27.write(180);// servoPin26.write(180);// } //----Girar en la izquierda---- if (currentLine.endsWith("GET /izquierda")) { servoPin12.write(0); servoPin14.write(0); servoPin27.write(0); servoPin26.write(0); } //----Parar---- if (currentLine.endsWith("GET /parar")) { servoPin12.write(90); servoPin14.write(90); servoPin27.write(90); servoPin26.write(90); } } } // Cierra la conexión client.stop(); Serial.println("Cliente desconectado"); } } |
PROYECTO RECOMENDADO