Licența Robot Mobil (arion Vladislav A.i.a) Final [310100]
UNIVERSITATEA „ȘTEFAN CEL MARE”
FACULTATEA DE INGINERIE ELECTRICĂ
ȘI ȘTIINȚA CALCULATOARELOR
LUCRARE DE LICENȚĂ
Coordonator științific
Conf. dr. ing. Mahalu George
Absolvent: [anonimizat]
2018
UNIVERSITATEA „ȘTEFAN CEL MARE”
FACULTATEA DE INGINERIE ELECTRICĂ
ȘI ȘTIINȚA CALCULATOARELOR
Robot mobil
Coordonator științific
Conf. dr. ing. Mahalu George
Absolvent: [anonimizat]
2018
R54 – F02
Declarație
privind originalitatea proiectului de diplomă
Subsemnat(a / ul), _______________________________, cu domiciliul în ___________________, jud. ___________________, str. ____________________, nr. ___________, născut(ă) la data de ___________________, identificat prin ______, seria _____, nr. ______ absolvent(ă) al Universității “Ștefan cel Mare” [anonimizat], programul de studii/specializarea ______________________________________ __________________________________________, între anii _____________________________, [anonimizat]. 1/2011 [anonimizat] _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________, pe care urmează să o [anonimizat]. [anonimizat], [anonimizat]-o bază de date în acest scop.
Am luat la cunoștință faptul că îmi este interzisă comercializarea / transmiterea lucrării mele către un terț în vederea facilitării falsificării de către acesta a calității de autor al lucrării.
Data azi, _______________, în fața noastră:
[anonimizat]: [anonimizat]. Mahalu George Arion Vladislav
Cuprins
Introducere…………………………………………………………………………….2
Capitolul 1. Platforma de dezvoltare Arduino …………………….…………………3
1.1 Scurt istoric …………………………………………………………………..5
1.2 Plăcile Arduino populare ……………………….………….………………..6
1.3 Arduino IDE …………….…………………………………………………..8
Capitolul 2. Roboți ……………………………………………………………………11
2.1 Tipuri de roboți mobili …………………………………………..………….12
2.2 Tipuri de senzori care pot fi instalați pe un robot ………….…………….…19
Capitolul 3. Tehnologii Hardware Folosite …………………….…….………….….21
3.1 Kit Robot ……………………….……………………………………………21
3.2 Placa de dezvoltare UNO R3 ……………………………..…………………22
3.3 Servomotorul SG90 ………………………………………………………….23
3.4 [anonimizat]04 ………………………….……………………26
3.5 Shield cu Drivere de Motoare L293D ………………………………………….27
Capitolul 4. Construcția Robotului ………………………………………..………..31
4.1 Biblioteci folosite …………………………..….……………..……………….33
4.2 Codul sursă al robotului ……………………………………………………..34
Concluzii generale ………………………………………………………….……….40
Bibliografie …………………………..……………………………………………..41
Anexă …………………………………………………………………..…..……….42
INTRODUCERE
Tehnologia joacă un rol semnificativ în societatea umană. [anonimizat] nu își pot imagina viața fără tehnologie. Tehnologia oferă multe avantaje, dar și unele dezavantaje. Autovehiculele și bicicletele ajută oamenii să ajungă rapid oriunde. Avionul și trenurile super-rapide au redus distanța dintre orașe și țări. Cu ajutorul calculatorului și internetului, accesăm informațiile într-un mod mai simplu și rapid[9].
În zilele noastre tehnologia face parte din viața curentă. Automatica furnizează siguranță și confort, ameliorând calitatea vieții. Acesta este motivul pentru care sistemele automate devin tot mai frecvente ca impact în viața socială, iar domeniile acupaționale aferente acestora din ce în ce mai solicitate.
Sistemele automate permit creșterea productivității industriale, înbunătățirea calității produselor, optimizarea proceselor de management, operarea în regim automat (spre exemple în locurile periculoase pentru sănătate) etc. Sistemele de automatizare includ senzori, dispozitive de intrare, dispozitive de comandă (controlere), dispozitive de acționare, dispozitive de ieșire, structuri computaționale etc.
Automatizarea implică robotizarea și reciproc. Cele două paradigme se împletesc în mod sinergic, oferind suport pentru proiectarea și dezvoltarea de structuri tehnice de înaltă complexitate, care să aducă un surplus de fiabilitate, siguranță, flexibilitate și eficiență.
CAPITOLUL 1
Platforma de dezvoltare Arduino
Arduino este o platformă folosită pentru a crea proiecte de electronică implementată în automatica proceselor. Este o platformă de prototipuri electronice bazate pe hardware și software, flexibile și ușor de utilizat. Platforma de dezvoltare Arduino este foarte populară. Ea constituie un suport potrivit pentru un proiect complex dar simplu de implementat.
Cu Arduino este ușor de proiectat și programat, fapt care face ca astfel de structuri să fie folosite din ce în ce mai des în numeroase proiecte aplicative. Limbajul de programare este similar cu C++, astfel încât să nu ridice probleme unui programator cu minimă experiență. Mediul de dezvoltare integrat Arduino (IDE) permite scrierea codului, compilarea și apoi încărcarea lui în memoria microcontrolerului ce echipează modulul.
Arduino este o placă de dezvoltare dotată cu propriul microcontroler. Această placă deține un număr suficient de conectori la care pot fi conectate diferite tipuri de subsisteme electronice: indicatoare optice (LED-uri, becuri, lămpi, tuburi cu descărcare în gaz etc.), senzori, motoare de mică putere, butoane, instrumente de măsură precum și diverse dispozitive electrice și electronice.
O trăsătură specifică a plăcilor Arduino este flexibilitatea în dezvoltarea aplicațiilor prin insertarea de module suplimentare compatibile din punct de vedere tehnic, dispuse analog straturilor într-un sandwich. Astfel, există module de extensie pentru conectarea la rețeaua locală și internet (Ethernet Shield), pentru controlul motoarelor electrice ale unui robot mobil (Motor Shield), pentru obținerea coordonatelor sau a timpului de la sateliți GPS (GPS Shield), pentru afișarea de date în format text sau grafic (Screen Shield), pentru introducerea de date și presetarea de parametri de control (Miniboard Shield) etc[1].
În proiectele Arduino se pot utiliza panouri denumite "breadboards". Aceste panouri sunt componente ce permit realizarea de circuite simple, folosite în general în faza de testare.
La o primă vedere, aceste panouri sunt niște cutii dreptunghiulare, subțiri, cu rânduri de orificii pentru insertarea pinilor componentelor de circuit. În interiorul cutiei se află benzi de metal conductiv. Prin intermediul acestora se furnizează o tensiune de alimentare tuturor subsistemelor din ansamblu.
Conexiunile nu sunt permanente, deci este ușor să eliminăm o componentă, să adăugăm alta sau să optăm pentru configurarea unui nou proiect. Această facilitate vine în sprijinul începătorilor în domeniul electronicii. Panourile moderne sunt fabricate din plastic și vin în diferite forme, dimensiuni și culori[2].
Pinii aliniați orizontal au cleme aflate sub găurile de plastic. În aceste găuri se fixează un fir sau pinul unei componente electronice.
Scurt Istoric
În anul 2002 programatorul Massimo Banzi a fost angajat ca profesor asociat la l'Interaction Design Institute Ivrea pentru a promova noi modalități de dezvoltare a proiectelor interactive. În cadrul proiectelor, Banzi a folosit un dispozitiv denumit Basic Stamp, o mică placă electronică ce cuprindea sursă de alimentare, microcontroler, memorie și porturi I/O plasate pe ea în scopul conectării la diverse echipamente.
Basic Stamp a avut două probleme: lipsa puterii de procesare și un preț destul de mare. Echipa lui Banzi a decis să creeze în mod independent o variantă care să satisfacă nevoile tuturor. Astfel a fost imaginată o platformă de dezvoltare simplă, deschisă și ușor accesibilă, cu un preț mai mic de 30 de dolari, acceptabilă pentru buzunarul unui student. Puțin mai târziu, Massimo Banzi a denumit-o "Arduino". Această marcă a căpătat rapid o mare popularitate pe internet.
Plăcile Arduino populare
Plăcile Arduino sunt de diferite tipuri și implementări. Sunt folosite pe larg de către pasionații de electronică pentru a dezvolta sisteme interactive, controlate prin software. În continuare sunt prezentate câteva dintre acestea.
Arduino UNO
Arduino Uno este o placă de dezvoltare bazată pe microcontrolerul ATmega328. Aceasta include tot ce este necesar pentru o operare convenabilă. Placa este dotată cu 14 intrări/ieșiri digitale, 6 intrări analogice, un conector USB, un conector de alimentare și un buton de resetare. Plăcile de dezvoltare Arduino necesită o sursă de alimentare ce variază, pentru diversele tipuri, între 4,5 și 12 volți.
Cantitatea de memorie flash ATmega328 este de 32 Kb, microcontrolerul are 2 Kb de memorie SRAM și 1 Kb de memorie EEPROM. Când se trimit date de la computer prin convertorul USB-UART, LED-urile notate cu RX și TX de pe placă vor clipi[3].
Microcontrolerul ATmega328 suportă interfețele seriale I2C.
Plăcile Arduino UNO se pot alimenta și din conexiunea USB la PC. Consumul este de până în 500mA.
Arduino Leonardo
Arduino Leonardo este similară cu Arduino UNO, prezentând însă și unele diferențe marcante. Ea permite conectarea microcontrolerului la computer ca dispozitiv periferic. Placa este dotată cu 20 intrări/ieșiri digitale (7 dintre acestea pot fi utilizate ca pini PWM), fiind configurată în jurul microcontrolerului ATmega32u4. Ea prezintă 12 pini analogici, un conector micro USB, un conector ICSP (programare serială), un conector de alimentare și un buton de resetare. Alimentarea plăcii se face prin portul USB sau prin intermediul unei surse externe (7V – 12V) furnizând 5Vcc tensiune satbilizată pe pinul de alimentare.
Atunci cînd placa de dezvoltare este conectată la un computer, Leonardo poate fi definit analog unui mouse sau unei tastaturi obișnuite.
Arduino Leonardo este programat folosind software specific Arduino. Putem încărca programe în memoria microcontrolerului fără a fi nevoie să folosim un programator extern. Această interacțiune se realizează prin intermediul protocolului AVR109.
Arduino Ethernet
Placa de dezvoltare Arduino Ethernet este bazată pe microcontrolerul ATmega328. Are o formă similară cu celelalte modele de plăci. Placa este dotată cu 14 ieșiri digitale, 6 intrări analogice, un conector RJ45, un conector de alimentare și un buton de resetare. Arduino Ethernet diferă de celelalte plăci Arduino deoarece nu are un covertor USB-UART încorporat, dar există un controler Ethernet Wiznet.
Cititorul de carduri MicroSD permite stocarea fișierelor importate pe rețea. Dispozitivul poate fi alimentat de la o sursă externă de alimentare prin intermediul unui modul opțional numit Power over Ethernet (PoE) sau de la placa Arduino la care este atașat. Fiecare placă Ethernet are o adresă unică (MAC).
Arduino IDE
Arduino IDE (Integrated Development Enviroment) se deschide într-o fereastră prin intermediul căreia putem starta crearea aplicației software. Această componentă software rulează pe computer și este compatibilă cu toate plăcile de dezvoltare Arduino disponibile.
Programele scrise folosind software-ul Arduino IDE se numesc schițe. Schițele sunt scrise în editorul de text și sunt salvate cu extensia .ino. În timp ce programul se încarcă pe placă, în zona de mesaje pot fi afișate erorile detectate în cod, mesaje ce indică atenționări sau alte informații. În colțul din dreapta jos a ferestrei este afișată informația despre placa conectată și portul serial configurat.
Butoanele barei de instrumente permite verificarea, încărcarea programelor, crearea unei noi ferestre de lucru, deschiderea unei ferestre existente de lucru, salvarea conținutului. Există încă cinci meniuri suplimentare: Fișier, Editare, Schiță, Instrumente, Ajutor. Fișierele noi deschise sunt aranjate în partea de sus a ferestrei de lucru. Acestea pot fi fișiere normale conținând cod Arduino, fișiere C (cu extensia .c), fișiere C++ (cu extensia .cpp) sau fișiere antet (.h)[11].
Uneori se întâmplă să dorim să extindem funcționalitatea programului software. Acest lucru se poate face foarte ușor cu așa-numitele biblioteci. Integrarea bibliotecilor are de obicei loc în partea de început a aplicației.
CAPITOLUL 2
Roboți
Robotica este o industrie ce folosește un nivel înalt al tehnologiei, ce se dezvoltă extrem de rapid în toate țările dezvoltate. Roboții moderni sunt combinații de hardware și software concepute pentru a rezolva probleme de complexitate variată. Se caracterizează printr-o interacțiune dezvoltată cu obiectele externe, având posibilități extinse de adaptare la mediul extern. Aceste specificități sunt necesare pentru realizarea sarcinilor cum ar fi: ocolirea obstacolelor, pătrunderea în zonele greu accesibile, coordonarea mișcărilor cu caracteristicele de mediu etc[4].
Încă de la început să stabilim faptul că un robot este prin necesitate un sistem autonom, astfel încât utilizarea sintagmelor precum robot autonom constituie tautologie. În susținerea acestei afirmații invităm cititorii să găsească semnificația termenului în DEX. Prin contrast, un așa-numit robot comandat nu este de fapt decât un caz particular de manipulator.
Sistemele robotizate sunt folosite pe larg în practica medicală (ce presupune echipamente pentru operații chirurgicale, control operațional fizio-terapeutic, tehnici și procese de imagistică medicală, proceduri de analize de laborator, diagnosticare automată etc.), în cercetările extra-terestre implicate de misiunile spațiale, în domeniul militar (cu referire la roboții geniști, dar nu numai), în domeniul minier și cel speologic, în domeniul cercetărilor atmosferice și subacvatice, iar lista poate continua.
Orice robot mobil poate fi configurat printr-un set format din trei subsisteme de bază: deplasare (operaționalitate cinetică), control și comunicație.
Un exemplu interesant de robot, prezentând autonomie extinsă, este roverul trimis pe planeta Marte. Un astfel de robot se caracterizează prin înaltă tehnicizare și prin calitatea de unicat. Un alt exemplu îl constituie robotul utilizat de geniști în dezamorsarea bombelor sau cel folosit de ingineri în manevrarea unor sisteme de comandă aflate în spații cu risc potențial pentru sănătatea personalului uman (radiații nocive, noxe, teren imprevizibil, alți factori periculoși de mediu).
În prezent sunt puse la punct metode eficiente de navigare și control a roboților mobili. Sistemul de navigație este indispensabil deoarece robotul trebuie să evalueze mediul și să-și planifice drumul pe o hartă prezentând atât obstacole fixe cât și mobile. Totodată, operatorul uman trebuie să aibă posibilitatea preluării controlului în regim manual și să-l cedeze atunci când situațiile de criză au fost rezolvate.
2.1 Tipuri de roboți mobili
Fără a încerca o prezentare exhaustivă, vor fi indicate doar câteva tipuri reprezentative de sisteme robotice:
Roboți exploratori
Roboți industriali
Roboți umanoizi
Roboți militari
Roboți medicali
Roboți de uz special
Roboții exploratori trebuie să fie capabili să se orienteze în spațiu și timp, în situații specifice lumii reale.
Roboții industriali sunt dedicați task-urilor ce presupun procese tehnice și de producție, ramura acestora fiind una dintre cele mai dezvoltate (de la Henry Ford încoace).
Roboții umanoizi încearcă să imite gestica și comportamentul uman, mai puțin la nivel software și mai mult la cel hardware.
Roboții militari constituie sisteme specifice, cu scop militar și cerinșe dedicate de înaltă acuratețe și reproductibilitate. Acești roboți dau o atenție deosebită subsistemul de control.
Roboții medicali sunt destinați operațiunilor de salvare și acordare a primului ajutor în cazurile de necesitate, de investigare și analizare a parametrilor vitali ai unei persoane, de realizare a intervențiilor chirurgicale necesitând precizie înaltă etc.
În fine, roboții de uz special sunt, așa cum îi arată numele, sisteme proiectate și realizate în general în format de unicat, cu orientare către un anume task sau ansambluri de task-uri. Tot în această categorie intră roboții cu conotație pur software (roboții de rețea).
Este interesant de remarcat că un robot nu este un sistem cu inteligență artificială. De fapt inteligența artificială este doar un deziderat, ea neexistând astăzi în mod efectiv. Așa încât cei ce fac referire la sisteme inteligente, algoritmi inteligenți, interfețe inteligente, agenți inteligenți etc., nu fac altceva decât un abuz de limbaj, pentru a da impresia că lucrează într-un domeniu mai interesant decât altele. De fapt, nivelul de așa numită inteligență robotică este dat de nivelul de inteligență al proiectantului (hardware și software). Astfel, un robot jucător de șah va avea puterea șahistă dată de algoritmii implementați de către programator.
Nici un robot actual nu deține conștiință, iar faptul acesta face diferența.
În continuare vor fi date câteva exemple de roboți creați de diferite firme, în diferite scopuri, pentru a se putea remarca nivelul existent de potențialitate la care s-a ajuns în ziua de astăzi.
Roboți exploratori
HelpMate este un sistem de transport conceput pentru spitale și case de îngrijire medicală. Acesta este folosit pentru a transporta probe de sânge, medicamente și alimente pe coridoarele a peste 100 de clinici din lume. HelpMate este un robot care utilizează viziunea, proximitatea ultrasonică și proximitatea în infraroșu pentru a naviga de-a lungul holurilor și pentru a evita obstacolele.
Tot din clasa roboților exploratori face parte și deja celebrul Rover Curiosity. Acesta este denumit în mod oficial MSL (Mars Science Laboratory). Are o lungime de aproximativ trei metri și cântărește aproximativ 900 kg, ceea ce îl face cel mai lung și mai greu rover de pe Marte. Lansarea lui a avut loc pe 26 noiembrie 2011, și a aterizat pe suprafața lui Marte pe 6 august 2012. Din august 2012 până în ianuarie 2017 s-a deplasat pe o distanță de 15,26 Km. Specialiștii agenției spațiale americane NASA au decis să trimită "roverul" în craterul Gale, un crater uriaș, dezvăluind istoria geologică a planetei roșii. Denumirea "roverului" a fost aleasă în 2009 din opțiunile oferite de un număr de elevi, votul făcându-se pe Internet[5].
În programul de explorare a planetei Marte, program inițiat de Agenției Spațială Națională Americană – NASA, principalele obiective științifice au fost de a determina dacă Marte ar fi putut să susțină vreodată viață, precum și să determine existența apei și să studieze climatul și geologia acestei planete.
Roboți industriali
Un robot industrial este un ansamblu format dintr-un prim sistem care constă dintr-un braț mecanic ce imită mișcările mâinii umane, și un al doilea sistem de control reprogramabil care este folosit pentru a muta obiecte în spațiu și pentru a efectua diferite procese de producție. Aplicațiile tipice ale roboților industriali includ sudarea, vopsirea, călcarea, asamblarea, inpecția produselor și testarea, toate realizate cu o înaltă precizie și viteză.
Robotul industrial se poate ocupa de detalii fizice, mult prea mici pentru ochii și degetele omului, cu o precizie de poziționare spațială și temporară cu mult superioară celei umane. Acesta este motivul pentru care un număr tot mai mare de produse sunt realizate pe liniile de producție robotice.
Robotul industrial prezintă o suită impresionantă de avantaje în producția de bunuri materiale și servicii. Astfel, el nu obosește, nu solicită pauze sau concedii medicale sau de odihnă (cu excepția scurtelor perioade de întreținere), poate lucra (în majoritatea cazurilor) pe întuneric, fără pauze (nu există schimburi de lucru), nu face grevă, nu revendică retribuție etc. Singurul dezavantaj este cel al investiției inițiale, însă chiar și aceasta are o tendință de descreștere odată cu trecerea anilor și cu creșterea dezvoltării tehnologic.
Roboți umanoizi
Robotul umanoid sau, după cum mai este cunoscut, robotul android, este un organism sintetic conceput să arate și să se comporte ca o ființă umană. El poate purta conversații simple cu operatorul uman, se deplasează pe două picioare (având din acest motiv probleme de echilibru – dar cine nu are uneori astfel de probleme?), deține viziune stereoscopică cu posibilități de recunoaștere facială și poate detecta și ocoli obstacole. Am descris în felul acesta creația celor de la Boston Dynamics – robotul umanoid ATLAS. El are o înălțime de 188cm și o masă de 150kg, transportă cu ușurință obiecte grele și dezvoltă viteze mari de deplasare chiar și pe o suprafață mai complexă decât cea plană. În capul său este montat un radar cu laser (LIDAR) și un sistem de camere video, toate acestea contribuind împreună la realizarea unei hărți tridimensionale a zonei în care se află.
Scopul a fost de a crea un robot umanoid care să fie folosit în operațiuni de salvare după accidente sau dezastre naturale. Robotul este echipat cu un computer de bord, dar are și posibilitatea de a opera în regim de manipulator.
ATLAS poate să meargă, să alerge și să urce pe scări. De asemenea, se ridică în picioare în cazul în care pierde echilibrul și cade. Coordonează mișcările mâinilor, trunchiului și picioarelor pentru a realiza manipularea mobilă a întregului corp.
Crearea unui robot biped este mult mai complicat decât crearea roboților cu un număr mai mare de puncte de sprijin, deoarece poziția lor este instabilă. Pentru aceasta este nevoie de dezvoltarea algoritmilor pentru menținerea echilibrului. Atunci când robotul merge pe o suprafață neuniformă sau înclinată, problemele de echilibru evident că sunt mai mari. Însă provocarea este pe măsură, întrucât un astfel de robot va putea ajunge acolo unde un sistem cu roți motoare nu va putea. Noua versiune ATLAS este proiectată să funcționeze atât în exteriorul cât și în interiorul unei clădiri.
Roboți militari
Roboții militari sunt proiectați pentru o participare efectivă în teatrele de operațiuni, de la identificarea și dezamorsarea obiectelor periculoase (bombe, mine, sisteme explozive rămase neexplodate) și până la efectuarea de acțiuni combatante. Putem bănui că domeniul este cu mult mai dezvoltat decât ne este permis să aflăm din sursele clasice de informare, întrucât în sfera militară este binecunoscută uzanța secretului.
Roboți medicali
Roboții utilizați în chirurgia ortopedică din anii ’80-’90 (de exemplu robotul Arthrob), cei folosiți în neurochirurgie (PUMA – 1985) sau cei creați pentru realizarea operațiilor de prostatectomie (ProBot – 1992) sunt astăzi exponate de muzeu. În prezent un sistem precum mașina complexă daVinci domină piața medicală. O piață de peste 10 miliarde de dolari, cu interese pe măsură.
Raportul Healthcare Robotics 2015-2020 realizat de Robotics Business Review clasifică roboții medicali astfel:
roboți de îngrijire directă (roboți chirurgicali și pentru medicină recuperatorie);
roboți cu asistență indirectă (roboți de aprovizionare);
roboți de îngrijire la domiciliu (roboți de asistență și teleprezență).
Roboți de uz special
În clasa roboților de uz special pot fi considerați naniții sau nano-roboții. Agenții așa-numiți inteligenți, dezvoltați pe Internet, își au propria “viață”. Tot roboți de uz special sunt și unele tipuri de drone.
Compania americană iRobot Corporation produce roboți care vor schimba complet viața omului. iRobot Corporation a fost fondată în anul 1990 în SUA. Inițial, activitățile sale s-au concentrat pe comenzile de servicii ale departamentului militar american și ale programului spațial NASA.
În prezent, iRobot este lider în segmentul de robotică și are o bază științifică și de producție la Institutul de Tehnologie din Massachusetts, precum și fabrici de producție și asamblare în multe țări din întreaga lume.
O bogată experiență în dezvoltarea de roboți sofisticați speciali, o bază de cercetare puternic dezvoltată, cei mai buni specialiști în domeniul roboticii, căutarea constantă de noi oportunități și dezvoltarea de noi idei și modele – sunt componentele succesului companiei.
Compania a creat aspiratorul Roomba, care a dus la prima lovitură comercială. Majoritatea celor 9 milioane din aceste mașini au fost vândute în afara Americii.
Robotul Roomba este un aspirator care utilizează un sistem software modelat pe algoritmi orientați către inteligența artificială. Folosind algoritmii de bază, acesta calculează traseul optim și alege metoda de curățare. Pentru funcționare robotul folosește baterii interne și are nevoie de reîncărcare regulată. În cazul în care robotul își dă seama că este blocat, începe să emită sunete pentru a cere ajutor.
2.2 Tipuri de senzori care pot fi instalați pe un robot
Senzorii joacă un rol foarte important în crearea unui robot mobil. Cu ajutorul unui număr suficient de senzori, robotul se orientează în mediu și poate naviga liber. Chiar și un simplu robot domestic nu poate funcționa satisfăcător fără un număr minim de senzori.
Senzorii tactili sau senzorii la atingere, dau robotului capacitatea de a reacționa la contactele care apar între acesta și alte obiecte din zona de lucru. Actuala tendință în crearea senzorilor tactili este reproducerea proprietăților tactile ale pielii umane. Senzorii tactili sunt utilizați în multe aplicații diferite, de la robotică până la domeniul medical. Robotul echipat cu senzori tactili face față în mod eficient operațiunilor de manipulare a obiectelor, de plasare a obiectelor și de detectare a contactului dintre brațul robotului și mediul înconjurător.
Senzorii optici sunt destinați să controleze distanța și poziția, să determine culorile și contrastul, gradul de transparență etc. Senzorii optici pot fi echipați cu traductori din întreg spectrul vizibil și chiar din cel infraroșu și ultraviolet.
O atenție deosebită trebuie acordată camerelor video. Acestea sunt utilizate pe scară largă datorită dezvoltării tehnologiilor din domeniul procesării imaginilor. La fel ca ochii umani, două camere la distanță una de cealaltă pot oferi informații de adâncime (perspectivă) a scenei vizuale.
CAPITOLUL 3
Tehnologii Hardware Folosite
3.1 Kit Robot
La baza realizării robotului stă kit-ul cu patru motoare electrice de curect continuu.
Kit-ul conține:
Două șasiuri
Patru roți din material plastic și anvelopă de cauciuc
Patru motoare de curent continuu
Șuruburi, piulițe, știfturi necesare asamblării
Baterii
Cadru suport pentru motoare
Motoarele de curect continuu sunt compatibile cu modulele Arduino și prezintă următoarele specificații:
Tensiune nominală: 6V
Viteza de rotație: 100 RPM
Curent nominal: < 300 mA
3.2 Placa de dezvoltare Uno R3
Această placă este o versiune mai veche a familiei de plăci de dezvoltare Arduino Uno. Se deosebește de cea nouă prin faptul că microcontrolerul integrat de tipul ATmega328P este lipit pe placa de circuit imprimat[8].
Arduino Uno poate fi alimentat printr-un cablu USB care vine de la un calculator, sau de la o sursă de alimentare din exterior (care poate fi o baterie sau un alimentator cu tensiune continuă stabilizată). În imaginea de mai sus conexiunea USB este etichetată cu (1) iar priza de alimentare din exterior cu (2). Circuitele sunt alimentate prin pinul Vin (tensiune de intrare) etichetat cu (16).
Conectarea plăcii prin portul USB este modalitatea de încărcare a codului pe placă, precum și o cale alternativă de alimetare a plăcii.
Prin intermediul bornelor de conexiune existente pe placă se pot realiza legături cu diferite dispozitive și senzori externi.
Bornele A0 până la A5, etichetate cu (6), sunt intrări analogice.
Bornele de la 0 până la 13, etichetate cu (7), pot fi utilizate atât ca intrări digitale cât și ca ieșiri digitale.
Bornele 3, 5, 6, 9, 10 și 11, etichetate cu (8), sunt marcate cu semnul tilda (~) pe placă. Acestea sunt utilizate ca intrări/ieșiri digitale normale, dar pot fi utilizate și ca borne cu funcțiuni speciale (furnizând spre exemplu semnale de comandă).
Borna etichetată cu (9) se utilizează pentru furnizarea unei tensiuni de referință pentru convertorul analog-digital (ADC).
Placa este dotată cu un buton de resetare etichetat cu (10).
Pe placa Arduino putem observa un LED, etichetat cu (11), ce are alături marcajul "ON". Acesta emitecontinuu odată cu alimentarea plăcii.
LED-urile notate cu TX și RX (etichetate cu (12)) indică faptul că placa Arduino comunică date prin conexiunea serială universală.
Microcontrolerul plăcii este etichetat cu (13).
Placa Arduino are încorporat un regulator de tensiune etichetat cu (14).
Prin intermediul bornei notate RES, etichetată cu (15), putem crea un circuit care poate conține un buton extern, alături de câteva componente pasive, ce ne permite resetarea plăcii din exterior.
Bornele etichetate cu (17) permit configurarea unor comunicații seriale bazate pe diverse protocoale[10].
3.3 Servomotorul SG90
Un servomotor este un ansamblu format dintr-un motor electric și un sistem electronic de adaptare a acestuia la semnalele transmise de către microcontroler.
În proiecte de robotică Arduino servomotorul este folosit pentru diferite acțiuni mecanice:
Comanda unui dispozitiv de închidere/deschidere electrică a unei uși
Poziționarea mecanică a axului controlat la un unghi precizat
Rotirea axului unui motor cu un număr precizat de ture
Întregul circuit servomotor se află în interiorul carcasei iar semnalele de comandă și alimentarea sunt furnizate prin trei fire, cu semnificațiile: masă, tensiune de alimentare și semnal de comandă.
În cazul servomotoarelor reale, mecanismul de comandă este mult mai complex și utilizează controlere încorporate.
Există două tipuri principale de servomotoare. Servomotoare cu rotație continuă și servomotoare cu unghi fix (de 180 sau 270 grade sexagesimale). Diferența dintre aceste două tipuri de servomotoare constă în elementele mecanice ale structurii. După atingerea unghiului de 180 de grade, arborele va acționa asupra unui limitator și va da comanda pentru oprirea motorului. Servomotoarele de rotație continuă nu au astfel de limitatoare.
Pentru majoritatea servomotoarelor, mecanismul din interiorul carcasei poate fi fabricat din metal sau plastic. În modelele mai scumpe putem găsi elemente din carbon sau chiar titan. Elementele din plastic sunt mai ieftine, mai ușor de fabricat și folosite în proiecte cu costuri reduse. În cazul în care vorbim despre un proiect complex nu este recomandată folosirea plasticului, având în vedere uzura acestui material în timp. Elementele metalice sunt mai fiabile, însă vor afecta atât prețul cât și greutatea servomotorului. Servomotoarele care au mecanismul intern fabricat din titan sau carbon sunt cele mai folosite. Aceste tipuri de servomotoare se folosesc activ în crearea modelelor de drone și avioane.
Utilizarea pe scară largă a servomotoarelor se datorează faptului că acestea au o funcționalitate stabilă, dimensiuni mici și o gamă largă de control a vitezei de rotație. Semnalul de comandă este un tren de impulsuri cu o anumită frecvență de repetiție. Frecvența standard cu care sunt aplicate impulsurile este de 50 Hz, adică un impuls la fiecare 20 de milisecunde.
Specificațiile tehnice a servomotorului SG90:
Alimentare la 4,8V
Temperaturi de funcționare de la -30 grade Celsius până la 60 grade Celsius
Dimensiuni 3,2 x 1,2 x 3 cm
Greutate 9 g
Constanta de timp 0,12s
Servomotorul acceptă semnalul analogic (PWM) trimis de la microcontroler care indică la ce unghi să se rotească arborele acestuia. Semnalele de control sunt impulsuri de lungimi diferite în comparație cu cele ale unui motor pas cu pas.
Lungimea impulsului trimis variază după cum urmează:
Impuls minim : 1 milisecundă (corespunde unghiului de rotație de 0 grade).
Impuls maxim : 2 milisecunde (corespunde unghiului de rotație de 180 grade).
Arborele servomotorului se va roti în funcție de lungimea impulsului primit. De exemplu, impulsul de durată 1,5 milisecunde corespunde unghiului de rotație de 90 de grade.
3.4 Senzorul Ultrasonic HC-SR04
Senzorul ultrasonic HC-SR04 utilizează semnale ultrasonice pentru a determina distanța până la obiecte. Acest senzor are o precizie și o stabilitate ridicată. Intervalul de măsurare este de la 2 cm până la 400 cm. Citirile senzorilor nu sunt afectate de către razele solare sau zgomotul electromagnetic. Acesta este vândut împreună cu un emițător și un receptor. Acest tip de senzor se folosește pe larg în robotică și poate să măsoare distanța atât până la obiectele statice cât și până la obiectele aflate în mișcare[6].
Specificațiile tehnice a senzorului ultrasonic HC-SR04:
Tensiune de alimentare +5V
Curent nominal de funcționare 15mA
Rezoluție 0,3 cm
Dimensiuni: 45 mm x 20 mm x 15 mm
Semnificația pinilor:
Pin de alimentare (Vcc) +5V
Pin de masă
Pin de comandă emisie semnal ultraacustic (Trigger)
Pin de confirmare a receptării semnalului ecou (Echo)
Principiul de funcționare se bazează pe măsurarea duratei de propagare a unui semnal ultrasonor. Senzorul funcționează în conformitate cu formula:
Distanța = viteza * timpul de propagare
La intrarea Trigger a senzorului este trimis un puls de nivel înalt de durată 10-15 microsecunde. În consecință dispozitivul transmite opt semnale scurte ultrasonice care se vor deplasa cu viteza sunetului prin aer. Unda sonoră este reflectată de obstacol și recepționată, la pinul Echo. Cunoscând durata semnalului obținut pe intrarea Echo și viteza de propagare a sunetului în aer (340 m/s), putem afla distanța robotului față de obiect. De exemplu, dacă durata semnalului receptat la terminalul Echo este de 100 microsecunde, vom avea o distanță de 1,72 cm, iar dacă durata semnalului este de 20 milisecunde, vom avea o distanță de 3,44 m sau 344 cm.
3.5 Shield cu Drivere de Motoare L293D
L293D este un driver cu patru canale care permite lucrul cu curenți și tensiuni mari. Putem folosi motoare de curent continuu și surse de alimentare de până la 36V. L293D oferă de asemenea un curent maxim de până la 600mA pe canal. Placa permite conectarea a patru motoare de curent continuu sau motoare pas cu pas. În plus putem conecta și două servomotoare[7].
Cipurile notate cu (1) reprezintă driverele. Acestea permit controlul motoarelor cu un consum de curent de până la 600mA pe canal.
H – nivel ridicat; L – nivel scăzut; X – stare indiferentă; Z – înaltă impedanță;
Conexiunile etichetate cu (3) reprezintă bornele de conectare a motoarelor. Există patru perchi de borne, notate M1, M2, M3, M4. În felul acesta se pot conecta până la patru motoare electrice.
Bornele notate cu (4) sunt folosite pentru alimentarea plăcii din surse de alimentare externe, motoarele având nevoie de mai multă putere decât poate furniza placa Arduino.
Pentru a alimenta placa de la o sursă externă, este necesar să scoatem jumperul notat cu (5).
CAPITOLUL 4
Construcția Robotului
Șasiul este suportul mecanic pe care sunt instalate toate componentele robotului. Acesta poate fi realizat din diverse materiale: plastic, aluminiu, oțel, fibră de sticlă. Se preferă o platformă dintr-un material mai ușor pentru o inerție mai mică.
După ce șasiul robotului a fost asamblat, se montează patru motoare de curent continuu împreună cu patru roți cu manta din cauciuc.
În final, platforma robotului va arăta ca în imaginea de mai sus.
Pe șasiul robotului se montează placa de bază Arduino Uno R3, care este de fapt, "creierul" robotului. Pentru a conecta și controla motoarele de curent continuu, este montat modulul Shield cu Drivere de Motoare. Shield-ul este compatibil cu placa de bază Arduino Uno R3.
Placa de bază este alimentată de la o baterie de 9V, în timp ce modulul Motors Driver este alimentat dintr-o sursă separată.
În figura de mai jos este prezentat modul de conectare a celor patru motoare electrice la modulul Motors Driver.
După conectarea motoarelor, se montează senzorul ultrasonic HC-SR04 și servomotorul care controlează direcția senzorului. Conexiunea componentelor menționate mai sus se realizează conform schemei următoare.
Pinii Trigger și Echo sunt conectați la pinii analogici ai shield-ului. Acești pini primesc semnalul analogic de la senzor și îl convertesc în valoare digitală. Servomotorul va primi comanda direct de la placa Arduino.
4.1 Biblioteci folosite
Pentru început am declarat bibliotecile pe care urmează să le folosesc în proiect:
#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>
Biblioteca <AFMotor.h> este folosită pentru controlul modulului cu Drivere de Motoare, care la rândul său controlează cele patru motoare electrice.
Am inclus biblioteca <Servo.h>, pentru a controla servomotorul care ajută la mișcarea senzorului ultrasonic. Am inclus <NewPing.h>, care este de fapt biblioteca senzorului ultrasonic.
4.2 Codul sursă al robotului
Pinii Trigger și Echo ai senzorului ultrasonic sunt conectați la pinii A0 și repectiv A1 de pe shield-ul Motors Driver. Astfel, sunt incluse și alte variabile pentru senzorul ultrasonic și shield-ul Motors Driver.
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 300
#define MAX_SPEED 150
#define MAX_SPEED_OFFSET 100
#define COLL_DIST 40
#define TURN_DIST COLL_DIST+20
NewPing cititor(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor primul_motor_stanga(1, MOTOR12_1KHZ);
AF_DCMotor doi_motor_stanga(2, MOTOR12_1KHZ);
AF_DCMotor primul_motor_dreapta(3, MOTOR34_1KHZ);
AF_DCMotor doi_motor_dreapta(4, MOTOR34_1KHZ);
Am creat obiectul servo pentru a controla servomotorul:
Servo servomotor;
int Distanta_stanga, Distanta_dreapta;
int Distanta_curenta = 0;
String Motor = "";
int Viteza = 0;
void setup() {
servomotor.attach(10);
servomotor.write(120);
delay(1000);
}
Următoarea bucată de cod este o buclă utilizată în scopul deplasării în față. În cazul în care robotul detectează obstacole, el își va schimba direcția cu ajutorul funcției Schimbare_directie();.
void loop() {
servomotor.write(120);
delay(90);
Distanta_curenta = Citeste();
if (Distanta_curenta < COLL_DIST) {Schimbare_directie();}
Merg_inainte();
delay(100);
}
Funcția Schimbare_directie():
void Schimbare_directie() {
Merg_inapoi();
delay(500);
Oprire();
servomotor.write(60);
delay(300);
Distanta_dreapta = Citeste();
delay(300);
servomotor.write(180);
delay(400);
Distanta_stanga = Citeste();
delay(300);
servomotor.write(120);
delay(100);
Compar_distanta();
}
Funcția pentru compararea distanțelor măsurate:
void Compar_distanta()
{
if (Distanta_stanga>Distanta_dreapta)
{
Merg_stanga();
}
if (Distanta_dreapta>Distanta_stanga)
{
Merg_dreapta();
}
if (Distanta_dreapta < 30 and Distanta_stanga < 30)
{
Ma_intorc_inapoi();
}
}
Citirea corectă a distanței în centimetri se face cu următoarea funcție:
int Citeste() {
delay(70);
unsigned int Ant = cititor.ping();
int distanta = Ant/US_ROUNDTRIP_CM;
return distanta;
Pentru oprirea motoarelor se folosește funcția următoare:
void Oprire()
{
primul_motor_stanga.run(RELEASE);
doi_motor_stanga.run(RELEASE);
primul_motor_dreapta.run(RELEASE);
doi_motor_dreapta.run(RELEASE);
}
Pentru mișcarea robotului în direcții diferite se folosesc funcțiile următoare:
void Merg_inainte() {
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
for (Viteza = 0; Viteza< MAX_SPEED; Viteza +=1)
{
primul_motor_stanga.setSpeed(Viteza);
doi_motor_stanga.setSpeed(Viteza);
primul_motor_dreapta.setSpeed(Viteza);
doi_motor_dreapta.setSpeed(Viteza);
delay(5);
}
}
void Merg_inapoi() {
Motor = "BACKWARD";
primul_motor_stanga.run(BACKWARD);
doi_motor_stanga.run(BACKWARD);
primul_motor_dreapta.run(BACKWARD);
doi_motor_dreapta.run(BACKWARD);
for (Viteza = 0; Viteza < MAX_SPEED; Viteza +=1)
{
primul_motor_stanga.setSpeed(Viteza);
doi_motor_stanga.setSpeed(Viteza);
primul_motor_dreapta.setSpeed(Viteza);
doi_motor_dreapta.setSpeed(Viteza);
delay(5);
}
}
void Merg_dreapta() {
Motor = "RIGHT";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(BACKWARD);
doi_motor_dreapta.run(BACKWARD);
primul_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
doi_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
delay(400);
Motor= "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
}
void Merg_stanga() {
Motor = "LEFT";
primul_motor_stanga.run(BACKWARD);
doi_motor_stanga.run(BACKWARD);
primul_motor_stanga.setSpeed(Viteza+MAX_SPEED_OFFSET);
doi_motor_stanga.setSpeed(Viteza+MAX_SPEED_OFFSET);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
delay(400);
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
}
void Ma_intorc_inapoi() {
Motor = "RIGHT";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(BACKWARD);
doi_motor_dreapta.run(BACKWARD);
primul_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
doi_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
delay(800);
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
}
Concluzii generale
În această lucrare de licență a fost prezentat modul de realizare a unui robot mobil capabil să analizeze informațiile primite de la un senzor de distanță și să se orienteze în spațiu. A fost utilizată placa Arduino Uno R3 împreună cu un shield Motors Driver.
Grație modulului software realizat, robotul este capabil să detecteze obstacole și să le ocolească.
Ca temă de viitor, îmi propun studierea problemei de deplasare a robotului la o sursă de încărcare cu energie electrică, atunci când acesta detectează descărcarea bateriei (acumulatorului propriu) sub o anumită limită prestabilită. De asemenea, îmi propun creșterea numărului de senzori, astfel încât să pot conferi robotului o flexibilitate operațională sporită.
BIBLIOGRAFIE
[1] https://learn.sparkfun.com/tutorials/what-is-an-arduino
[2] https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard
[3] https://ro.wikipedia.org/wiki/Arduino
[4] https://www.scribd.com/doc/253119456/Robo%C8%9Bi-mobili-autonomi
[5] https://en.wikipedia.org/wiki/Curiosity_(rover)
[6] https://www.senzori-ultrasonici.ro/principiul-ultrasonic
[7]https://media.swymhome.com/parts/159/files/219/Overview%20with%20Example%20code?t=1491694883
[8] http://www.roroid.ro/prima-lectie/
[9] https://en.wikipedia.org/wiki/Automation
[10] Jeremy Blum, Exploring Arduino Tools And Techniques For Engineering Wizardry, Indianopolis, Indiana, 2013.
https://www.academia.edu/26346877/Exploring-Arduino-Tools-and-Techniques-for-Engineering-Wizardry-Jeremy-Blum.pdf
[11] John Boxall, Arduino Workshop – A Hands-On Introduction with 65 Projects, San Francisco, 2013.
Anexă
#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 300
#define MAX_SPEED 150
#define MAX_SPEED_OFFSET 100
#define COLL_DIST 40
#define TURN_DIST COLL_DIST+20
NewPing cititor(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor primul_motor_stanga(1, MOTOR12_1KHZ);
AF_DCMotor doi_motor_stanga(2, MOTOR12_1KHZ);
AF_DCMotor primul_motor_dreapta(3, MOTOR34_1KHZ);
AF_DCMotor doi_motor_dreapta(4, MOTOR34_1KHZ);
Servo servomotor;
int Distanta_stanga, Distanta_dreapta;
int Distanta_curenta = 0;
String Motor = "";
int Viteza = 0;
void setup()
{
servomotor.attach(10);
servomotor.write(120);
delay(1000);
}
void loop() {
servomotor.write(120);
delay(90);
Distanta_curenta = Citeste();
if (Distanta_curenta < COLL_DIST) {Schimbare_directie();}
Merg_inainte();
delay(100);
}
void Schimbare_directie()
{
Merg_inapoi();
delay(500);
Oprire();
servomotor.write(60);
delay(300);
Distanta_dreapta = Citeste();
delay(300);
servomotor.write(180);
delay(400);
Distanta_stanga = Citeste();
delay(300);
myservo.write(120);
delay(100);
Compar_distanta();
}
void Compar_distanta()
{
if (Distanta_stanga>Distanta_dreapta)
{
Merg_stanga();
}
if (Distanta_dreapta>Distanta_stanga)
{
Merg_dreapta();
}
if (Distanta_dreapta < 30 and Distanta_stanga < 30)
{
Ma_intorc_inapoi();
}
}
int Citeste()
{
delay(70);
unsigned int Ant = cititor.ping();
int distanta = Ant/US_ROUNDTRIP_CM;
return distanta;
}
void Oprire()
{
primul_motor_stanga.run(RELEASE);
doi_motor_stanga.run(RELEASE);
primul_motor_dreapta.run(RELEASE);
doi_motor_dreapta.run(RELEASE);
}
void Merg_inainte()
{
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
for (Viteza = 0; Viteza < MAX_SPEED; Viteza +=1)
{
primul_motor_stanga.setSpeed(Viteza);
doi_motor_stanga.setSpeed(Viteza);
primul_motor_dreapta.setSpeed(Viteza);
doi_motor_dreapta.setSpeed(Viteza);
delay(5);
}
}
void Merg_inapoi() {
Motor = "BACKWARD";
primul_motor_stanga.run(BACKWARD);
doi_motor_stanga.run(BACKWARD);
primul_motor_dreapta.run(BACKWARD);
doi_motor_dreapta.run(BACKWARD);
for (Viteza = 0; Viteza < MAX_SPEED; Viteza +=1)
{
primul_motor_stanga.setSpeed(Viteza);
doi_motor_stanga.setSpeed(Viteza);
primul_motor_dreapta.setSpeed(Viteza);
doi_motor_dreapta.setSpeed(Viteza);
delay(5);
}
}
void Merg_dreapta() {
Motor = "RIGHT";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(BACKWARD);
doi_motor_dreapta.run(BACKWARD);
primul_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
doi_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
delay(400);
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
}
void Merg_stanga() {
Motor = "LEFT";
primul_motor_stanga.run(BACKWARD);
doi_motor_stanga.run(BACKWARD);
primul_motor_stanga.setSpeed(Viteza+MAX_SPEED_OFFSET);
doi_motor_stanga.setSpeed(Viteza+MAX_SPEED_OFFSET);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
delay(400);
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
}
void Ma_intorc_inapoi() {
Motor = "RIGHT";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(BACKWARD);
doi_motor_dreapta.run(BACKWARD);
primul_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
doi_motor_dreapta.setSpeed(Viteza+MAX_SPEED_OFFSET);
delay(800);
Motor = "FORWARD";
primul_motor_stanga.run(FORWARD);
doi_motor_stanga.run(FORWARD);
primul_motor_dreapta.run(FORWARD);
doi_motor_dreapta.run(FORWARD);
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Licența Robot Mobil (arion Vladislav A.i.a) Final [310100] (ID: 310100)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
