Table of Contents

Gabriel BOROGHINĂ (87477) - Tim the rolling robot

Autorul poate fi contactat la adresa: gabriel.boroghina@stud.acs.upb.ro

Introducere

Proiectul constă într-un roboțel bazat pe un ax orizontal, având ca terminații două discuri, ce se poate deplasa față/spate și poate vira stânga/dreapta. Controlul său va fi realizat printr-un server web, către care vor putea fi trimise comenzi din orice browser.

Roboțelul nu are un scop bine determinat, însă prin adăugarea unei camere web ar putea fi folosit de exemplu pentru explorarea unor zone greu accesibile sau pentru transportarea unor obiecte de mici dimensiuni.

Descriere generală

Schema bloc

Schema bloc

Roboțelul va fi comandat printr-un server web (la care se va conecta printr-un modul de WiFi), către care se pot trimite comenzi dintr-o interfață client implementată sub forma unei pagini web. În acest fel, robotul poate fi controlat teoretic de oriunde, presupunând că acesta are acces continuu la internet prin intermediul unei rețele WiFi.

Mișcarea față/spate se bazează pe un motor ce va roti axul într-un anumit sens. Motorul este atașat la un bloc de masă relativ mare (balast - conținând printre altele și bateriile) care va fi menținut de forța de greutate în poziție verticală și astfel va transmite momentul unghiular către axul robotului.

Virajul stânga(dreapta) va fi realizat prin “micșorarea diametrului discului” stâng(drept). Pentru acest lucru, discurile aflate la extremități vor avea atașate câte un set de piciorușe amplasate de-a lungul unor raze ale discurilor. Piciorușele de pe un disc se vor retrage concomitent în timpul virajului (vor fi controlate de un motor printr-un angrenaj format din mai multe roți dințate), iar apoi se vor extinde până la poziția inițială pentru a readuce roboțelul pe traiectoria în linie dreaptă.

Hardware Design

Listă de piese

Componentă Tip Număr
Plăcuță de bază PM2019 1
Driver motoare DC L298N 1
Modul WiFi ESP8266 ESP-01 1
Regulator tensiune 5V-3V3 AMS1117 1
Level shifter 4 canale - 1
Modul DC-DC Boost de 2A - 1
Motor DC cu reductor, 133rpm 1
Servomotor Futaba 3003 2
Axă liniară metalică 40cm (Φ=8mm) - 1
Roți dințate - -
Fire, accesorii de prindere - -
Discuri din lemn Φ=18cm - 4

Schema electrică

Schema electrica

Software design

Tool-uri folosite

Pentru debugging am folosit un convertor USB-TTL pentru a conecta placa la calculator și a scrie mesaje pe serială (pe care le-am citit cu PuTTY).

Funcționalitate microcontroller

La pornire, robotul încearcă să se conecteze la rețeaua WiFi prin intermediul modului ESP8266, iar apoi realizează o conexiune TCP cu serverul web de control. După stabilirea conexiunii, se trece în modul de drive al robotului, în care acesta face polling la valorile parametrilor viteză și direcție stocați pe server și își actualizează viteza, respectiv unghiul de viraj prin modificarea factorilor de umplere ai PWM-urilor folosite pentru comandarea motoarelor.

Funcționalitate aplicație web

Aplicația web are la bază un server NodeJS care stochează parametrii de control pentru robot (viteza și direcția). Totodată, el răspunde la request-uri HTTP de actualizare, respectiv de interogare de parametri.

După ce se conectează la server, robotul interoghează continuu serverul pentru a obține valorile curente ale parametrilor.

În același timp, frontend-ul aplicației web servește cererile utilizatorului de modificare a acestor parametri prin intermediul unor range slidere HTML, trimițându-se noile valori către server la fiecare actualizare a valorii sliderelor.

Rezultate obținute

Am reușit să implementez o mare parte din proiect, cu excepția funcționalității legate de viraje (am adăugat doar pe o parte sistemul de extindere al piciorușelor și nu am realizat sistemul de alimentare cu contact rotativ pentru servomotoare). Probabil în vacanță o să încerc să finalizez roboțelul.

Problemele care au apărut au fost legate de precizia necesară la contactele dintre roțile dințate astfel încât ansamblul să fie robust și să funcționeze. De asemenea, am întâmpinat probleme legate de consumul de curent (motorul principal și modului WiFi consumă destul de mult împreună), iar driverul de motor are un drop de tensiune ce afectează semnificativ puterea motorului.

Mai jos se poate observa un screenshot al aplicației web folosită pentru a controla roboțelul de pe orice device.

Aplicație web

Poze roboțel:

Tim Tim Tim Tim

Demo video: 8Bgr-bnapvw

Concluzii

A fost o experiență super interesantă să realizez un proiect hardware+software, și chiar mi-a făcut plăcere să lucrez la el până în momentul în care am realizat că nu mai am suficient timp pentru a-l termina și a trebuit să mă chinui să obțin cât mai mult din ce îmi propusesem într-un timp foarte scurt.

Deși am avut ideea roboțelului din timp și am început să caut componentele destul de devreme, am avut foarte multe puncte în care realizam că mai am nevoie de ceva pentru a putea continua implementarea/proiectarea părții mecanice (care cu siguranță a fost cea mai complexă). Așadar, recomand tuturor să se apuce cât mai din timp de proiect, mai ales dacă au o idee complexă în minte (în plus, stocurile pentru anumite componente chiar se epuizează repede 😅).

În concluzie, am învățat foarte multe lucruri practice din acest proiect și probabil că pe viitor o să vreau să mai proiectez sisteme IoT sau roboței 🙂.

Download

Schema electrică (.sch)

GitHub - cod microcontroller

GitHub - cod aplicație web

Bibliografie/Resurse

Download versiune PDF

atmega16-interface-with-esp8266-module

arduino-dc-motor-control-tutorial-l298n-pwm-h-bridge