Table of Contents

Rac Robot

Introducere

Deoarece mi-am dorit sa construiesc un proiect cu care se vor putea juca, in viitor, rudele mele mai mici, m-am decis sa contruiesc un robotel care sa faca diverse lucruri. M-am gandit ca o masinuta ar fi, pe de-o parte, prea simplu de facut, iar pe de alta parte ar fi prea mainstream (poti cumpara de oriunde masinute, nu ar fi fost o jucarie prea interesanta/speciala).
Ideea mea a fost sa fac un robot care se misca diferit, si anume prin miscari asemanatoare unui rac.
Asemanator unui sistem de “masinuta cu telecomanda”, robotelul rac va putea fi controlat de pe telefon, prin Wi-Fi, si va avea diverse functii ce pot fi apelate: miscare (inainte, inapoi, stanga, dreapta), rotire (stanga, dreapta), seturi de miscari predefinite (dansuri, emote-uri).

Descriere generală

Atunci cand se apasa un buton de pe telefon (specific unei anumite miscari), comanda va fi trimisa prin Wi-Fi catre NodeMcu V3. Aceasta este conectata la ESP8266, care este alimentata de o baterie. ESP8266 mai este conectata la un expansion board, iar acesta la cele 8 servo micro servo-uri. Prin urmare, cand este trimisa o comanda de pe telefon, cele 8 servo-uri se vor misca.

Hardware Design

Lista Piese

Componenta Cantitate Imagine Descriere
Wi-Fi microchip ESP8266 NodeMcu V3 1 Placuta prin care se poate controla robotul prin intermediul telefonului
Board pentru ESP8266 1 Extensie pentru ESP8266 din care se iau VM, VCC, SDA, SCL, ON, GND
Board expansion Servo 1 Extensie pentru conectarea motoarelor la placa
Motorase Servo 8 Folosite pentru articularea picioarelor robotului
Baterii 2 Alimentarea robotului

Schema Electrica

Explicatii

In acest proiect placuta Wi-Fi microchip ESP8266 NodeMcu V3 intra perfect cu pinii intr-un board din care ies apoi VM, VCC, SDA, SCL, ON, GND. Acestea sunt legate respectiv cu V+, VCC, SDA, SCL, OE si GND ale boardului expansion Servo. De acest board sunt apoi legat 8 motorase Servo, prin PWM, V+ si GND. Se alimenteaza de la niste baterii care sunt legate la boardul lui ESP8266 in V+ si GND.

Conexiunile Board ESP8266 - Board Servo
Conexiunile Board Servo - Motorase Servo

Software Design

//  ----          ----
// | 00 |        | 03 |
//  ---- -------- ----
//      | 01  02 |
//      |        |  
//      | 14  13 |
//  ---- -------- ----
// | 15 |        | 12 |
//  ----          ----

Mai sus este o reprezentare a conectarii servo motoarelor la pinii de pe expansion board

// Se ridica
int Servo_Prg_1_Step = 1;
int Servo_Prg_1 [][ALLMATRIX] PROGMEM = {
  //  15,  14,  13,  12,  0,   1,   2,   3,   ms
  {   70,  90,  90, 110, 110,  90,  90,  70,  500  }, // se ridica
};
// Face cu mana 
int Servo_Prg_9_Step = 7;
int Servo_Prg_9 [][ALLMATRIX] PROGMEM = {
  //  15,   14,  13,  12,   0,   1,   2,  3,  ms
  {   70,  90,  90,  90,  90,  90,  90,  90,  400}, // leg2,3,4 dn
  {  170,  90,  90,  90,  90,  90,  90,  90,  400}, // leg1 up
  {  170, 130,  90,  90,  90,  90,  90,  90,  400}, // leg1 left
  {  170,  50,  90,  90,  90,  90,  90,  90,  400}, // leg1 right
  {  170, 130,  90,  90,  90,  90,  90,  90,  400}, // leg1 left
  {  170,  90,  90,  90,  90,  90,  90,  90,  400}, // leg1 right
  {   70,  90,  90,  90,  90,  90,  90,  90,  400}, // leg1 dn
};

Mai sus sunt doua exemple de pattern-uri ale robotului

void handleZero()
{
  String content = "";
  content += "<html>";
  content += "<head>";
  content += "<title>Zero check</title>";
  content += "<meta charset=UTF-8>";
  content += "<meta name=viewport content=width=device-width>";
  content += "<style type=text/css>";
  content += "body {";
  content += "margin: 0px;";
  content += "backgound-color: #FFFFFF;";
  content += "font-family: helvetica, arial;";
  content += "font-size: 100%;";
  content += "color: #555555;";
  content += "}";
  content += "td {";
  content += "text-align: center;";
  content += "}";
  content += "span {";
  content += "font-family: helvetica, arial;";
  content += "font-size: 80%;";
  content += "color: #777777;";
  content += "}";
  content += "button {";
  content += "width: 40%;";
  content += "font-family: helvetica, arial;";
  content += "font-size: 90%;";
  content += "color: #555555;";
  content += "background: #BFDFFF;";
  content += "padding: 5px 5px 5px 5px;";
  content += "border: none;";
  content += "}";
  content += "</style>";
  content += "</head>";
  content += "<body>";
  content += "<br>";
  content += "<table width=100% height=90%>";
  content += "<tr>";
  content += "<td width=50%><button type=button style=background:#FFE599 onclick=controlServo(4,45)>D16</button></td>";
  content += "<td width=50%><button type=button style=background:#FFE599 onclick=controlServo(0,135)>D14</button></td>";
  content += "</tr>";
  content += "<tr>";
  content += "<td><button type=button onclick=controlServo(5,135)>D05</button></td>";
  content += "<td><button type=button onclick=controlServo(1,45)>D12</button></td>";
  content += "</tr>";
  content += "<tr>";
  content += "<td><button type=button onclick=controlServo(6,45)>D04</button></td>";
  content += "<td><button type=button onclick=controlServo(2,135)>D13</button></td>";
  content += "</tr>";
  content += "<tr>";
  content += "<td><button type=button style=background:#FFE599 onclick=controlServo(7,135)>D02</button></td>";
  content += "<td><button type=button style=background:#FFE599 onclick=controlServo(3,45)>D15</button></td>";
  content += "</tr>";
  content += "<tr>";
  content += "<td colspan=2><button type=button style=background:#FFBFBF onclick=controlPm(100)>ZERO Postition</button></td>";
  content += "</tr>";
  content += "</table>";
  content += "</body>";
  content += "<script>";
  content += "function controlServo(id, value) {";
  content += "var xhttp = new XMLHttpRequest();";
  content += "xhttp.onreadystatechange = function() {";
  content += "if (xhttp.readyState == 4 && xhttp.status == 200) {";
  content += "document.getElementById(\"demo\").innerHTML = xhttp.responseText;";
  content += "}";
  content += "};";
  content += "xhttp.open(\"GET\", \"controller?servo=\"+id+\"&value=\"+value, true);";
  content += "xhttp.send();";
  content += "}";
  content += "function controlPm(value) {";
  content += "var xhttp = new XMLHttpRequest();";
  content += "xhttp.onreadystatechange = function() {";
  content += "if (xhttp.readyState == 4 && xhttp.status == 200) {";
  content += "document.getElementById(\"demo\").innerHTML = xhttp.responseText;";
  content += "}";
  content += "};";
  content += "xhttp.open(\"GET\", \"controller?pm=\"+value, true);";
  content += "xhttp.send();";
  content += "}";
  content += "</script>";
  content += "</html>";
  server.send(200, "text/html", content);
}

Mai sus este o parte din “codul HTML” necesar pentru pagina web de la 192.168.4.1

Concluzii

A fost un proiect la care mi-a placut sa lucrez si am invatat multe lucruri noi. Cel mai mult mi-a placut sa ma “joc” cu miscarile, sa ii creez tot felul de pattern-uri, dar si partea de web mi s-a parut interesanta, pentru a pune comenzile pe pagina de la adresa 192.168.4.1

Bibliografie/Resurse

RESURSE: