Robot amb emissor de senyal WiFi que podrem rebre amb el nostre telèfon mòbil i amb una aplicació o a través del navegador podrem controlar.
Material necessari:
2x Rodes
2x DC Motors
1x roda boja
1x Xassís
1x portapiles de 4 AA, les piles les has de portar tu.
1x NodeMCU ESP8266 Dev kit 12E (tarjeta controladora programable amb WiFi)
1x NodeMCU controlador de motors.
Contingut del kit
NodeMCU ESP8266 Dev kit 12E.
Aquesta placa és més petita que l'Arduino, però és més potent i gasta menys energia. la fem servir per dispositius connectats a Internet i fer tasques sencilles.
NodeMCU controlador de motors.
S'indiquen les conexions
Connexions:
Codi de programació:
Amb IDE de Arduino es pot programar NodeMCU, només cal afegir les llibreries de la placa.
Per fer això anem a accediem al menú Fitxer | Preferències i en “Gestor de URLs adicionals de tarjeta” fem clic al botón de la dreta. A la finestra que surt afegim l'adreça següent:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Reiniciem el programa, i anem a Eines | Placa i seleccionem NodeMCU v1.0
Conectem la placa NodeMCU i comprovem que funciona.
/*
* Aquest esbós permet controlar un aparell de motor NodeMCU amb motors connectats
* des d'un navegador (telèfon intel·ligent) mitjançant l’aplicació Android.
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
const char* ssid = "NodeMCU";
//const char* password = "abcd1234";
// Crea una instància del servidor
// especifica el port a escoltar com a argument
WiFiServer server(80);
int Speed = 1023;
int TSpeed = 700;
void stoped()
{
analogWrite(5, 0);
analogWrite(4, 0);
Serial.println("Atura");
}
void forward()
{
analogWrite(5, Speed);
analogWrite(4, Speed);
digitalWrite(0, 1);
digitalWrite(2, 1);
Serial.println("Endavant");
}
void backward()
{
analogWrite(5, Speed);
analogWrite(4, Speed);
digitalWrite(0, 0);
digitalWrite(2, 0);
Serial.println("Enrere");
}
void left()
{
analogWrite(5, TSpeed);
analogWrite(4, TSpeed);
digitalWrite(0, 0);
digitalWrite(2, 1);
Serial.println("Esquerra");
}
void right()
{
analogWrite(5, TSpeed);
analogWrite(4, TSpeed);
digitalWrite(0, 1);
digitalWrite(2, 0);
Serial.println("Dreta");
}
String response(String r){
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nEl robot ";
s += r;
s += "</html>\n";
return s;
}
void setup() {
Serial.begin(115200);
delay(10);
Serial.println();
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.println("Configuring access point...");
/* Podeu afegir el paràmetre de contrasenya si voleu que l’AP es tanqui. */
WiFi.softAP(ssid);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
server.begin();
Serial.println("server started");
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
Serial.println("pinmode set to output");
digitalWrite(5, 0);
digitalWrite(4, 0);
digitalWrite(0, 1);
digitalWrite(2, 1);
Serial.println("digital write set ");
}
void loop() {
// Comproveu si un client s'ha connectat
WiFiClient client = server.available();
if (!client) {
analogWrite(5, 0);
analogWrite(4, 0);
digitalWrite(0, 1);
digitalWrite(2, 1);
return;
}
// Espereu fins que el client enviï algunes dades
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Llegiu la primera línia de la sol·licitud
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
//1 Atura
//2 Endavant; 3 Enrere; 4 Dreta; 5 Esquerra
// Ajusta la sol·licitud
int direction;
if (req.indexOf("/key/1") != -1)
direction = 1;
else if (req.indexOf("/key/2") != -1)
direction = 2;
else if (req.indexOf("/key/3") != -1)
direction = 3;
else if (req.indexOf("/key/4") != -1)
direction = 4;
else if (req.indexOf("/key/5") != -1)
direction = 5;
else {
Serial.println("invalid request");
client.stop();
return;}
String html;
switch (direction)
{
case 1:
stoped();
html= response("està aturat");
break;
case 2:
forward();
html= response("va cap endavant");
break;
case 3:
backward();
html= response("va cap enrere");
break;
case 4:
right();
html= response("gira a la dreta");
break;
case 5:
left();
html= response("gira a l'esquerra");
break;
}
// moure per 300 ms, dóna temps al xip per actualitzar wifi també
delay(300);
client.flush();
// Envia la resposta al client
client.print(html);
delay(1);
Serial.println("Client disonnected");
delay(200);
// El client serà desconnectat
// quan la funció retorna i es destrueix l’objecte 'client'
}
El següent vídeo mostra com penjar el programa i com es connecta a l'aplicació:
App per Android:
Pots descarregar directament a un mòbil Android, instal·lar-la.
Configura la IP de la placa, normalment 192.168.4.1, fes OK
Al teu mòbil busca el El Wi-Fi NodeMCU i conecta't.
Si has pujat el programa a la placa i té piles el Robot ja el pots controlar amb l'aplicació.
Si vols modificar l'aplicació del mòbil, ho pots fer amb l'App inventor (http://ai2.appinventor.mit.edu/ ), amb el fitxer següent: ElmeuRobot.aia