Licența Robot Mobil Autonom V4 Rtf Rtf [310099]
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 autonom
Detectare și ocolire a obstacolelor
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 Mobili ………………………………………………………….10
2.1 Tipuri de roboți mobili …………………………………………..………….11
2.2 Tipuri de senzori care pot fi instalați pe un robot ………….…………….…18
Capitolul 3. Tehnologii Hardware Folosite …………………….…….………….….19
3.1 Kit Robot ……………………….……………………………………………19
3.2 Placa de dezvoltare UNO R3 ……………………………..…………………20
3.3 Servomotorul SG90 ………………………………………………………….22
3.4 [anonimizat]04 ………………………….……………………24
3.5 Shield cu Drivere de Motoare L293D ………………………………………….26
Capitolul 4. Construcția Robotului ………………………………………..………..29
4.1 Modul de funcționare a sistemului …………………….……………..……..31
4.2 Biblioteci folosite …………………………..….…………………………….32
4.3 Codul sursă al robotului ……………………………………………………..32
Concluzii generale ………………………………………………………….……….38
Bibliografie …………………………..……………………………………………..39
Anexe …………………………………………………………………..…..……….40
INTRODUCERE
Tehnologia joacă un rol semnificativ în societatea umană. În momentul de față, oamenii 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.
Î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.
Î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.
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.
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).
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.
Î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.
Î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 dată 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 de robot cu patru motoare de curect continuu. Acesta prezintă dimensiunile 15.5cm x 26cm.
Kit-ul conține:
Două șasiuri
Patru roți din cauciuc
Patru motoare de curent continuu
Șuruburi, piulițe necesare asamblării
Baterii
Suport pentru motoare
Acest kit prezintă un început bun pentru realizarea unui robot mobil care poate avea mai multe funcții cu ajutorul senzorilor adăugați. Este o platformă robotică foarte comodă și permite robotului abordarea foarte bună pe orice tip de suprafață.
Motoarele de curect continuu sunt compatibile cu Arduino și au următoarele specificații:
Tensiune nominală: 6V
Viteza de rotație: 100 RPM
Curent nominal: < 300 mA
3.2 Placa de dezvoltare Uno R3
Plăcile Arduino se deosebesc foarte mult după design, însă au foarte multe componente în comun care îndeplinesc aceeași funcție.
Placa folosită 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 sudat la bord. În cazul, unei defectări a microcontrolerului de pe placa Arduino Uno R3, poate fi ușor de îndepărtat pentru schimbare.
Fiecare placă Arduino are nevoie de o modalitate de conectare la o sursă de alimentare. Arduino Uno poate fi alimentat de la un cablu USB care vine de la un calculator sau de la o sursă de alimentare din exterior, care poate fi o baterie. În imaginea de sus conexiunea USB este etichetată cu (1), iar alimentarea din exterior cu (2). Placa poate fi alimentată cu ajutorul pinului Vin (tensiune de intrare) etichetat cu (16).
Conectarea plăcii prin portul USB este modalitatea de încărcare a codului pe placă cât și modalitatea de alimetare a plăcii. Nu se recomandă o sursă de alimentare de 20V, placa suportă o tensiune între 6-12V. În cazul în care se depășește acest interval, putem să distrugem circuitul.
Cu ajutorul pinilor de pe placă putem face legătura a diferitor dispozitive și senzori cu placa. Fiecare pin este etichetat pe placă, indicând rolul acestora. Cu ajutorul pinilor GND (Masă) de pe placă, circuitului existent poate fi legat la masă, pe placă putem găsi un număr mai mare de pini GND. Aceștia sunt etichetați cu (3) în imaginea de mai sus.
Pinii care sunt etichetați cu (4) și (5) în imaginea de mai sus, sunt pinii de alimentare, acești pini furnizează o tensiune de alimentare pentru componentele compatibile cu Arduino conectate, aceste componente pot fi senzori sau module suplimentare.
Pinii A0 până la A5 etichetați cu (6), sunt pini analogici. Acești pini pot citi semnalul de la un senzor analogic și îl pot converti într-o valoare digitală.
Pinii digitali (de la 0 până la 13) etichetați cu (7), pot fi utilizați atât pentru inițierea digitală cât și pentru ieșirea digitală, cum ar fi alimentarea unui LED.
Pinii digitali (3,5,6,9,10 și 11) etichetați cu (8), sunt pinii marcați cu semnul tilda(~) pe placă. Aceștia acționează ca pini digitali normali, dar pot fi utilizați ca pini de comandă.
Pinul etichetat cu (9), se utilizează ca o tensiune de referință superioară pentru pinii de intrare analogici.
Placa este dotată cu un buton de resetare etichetat cu (10). Acesta va reporni orice cod care este încărcat pe Arduino. Este foarte util în cazul în care codul, nu se repetă, și se dorește ca acesta să se repete de mai multe ori.
Pe placa Arduino putem observa un led etichetat cu (11) lângă cuvântul "ON". Acesta se aprinde în cazul în care placa este conectată la o sursă de alimentare, fie aceasta exterioară sau prin USB. În cazul în care acesta nu se aprinde, există o șansă că placa este defectă.
LED-urile notate cu TX și RX pe placă și etichetate cu (12), sunt led-uri de indicație vizuală care indică faptul că placa Arduino trimite sau primește date.[14].
Microcontrolerul plăcii sau circuitul integrat este etichetat cu (13), și este componenta principală pentru toate plăcile de dezvoltare Arduino.
Placa Arduino are încorporat un regulator de tensiune etichetat cu (14), nu este o componentă cu care putem să interacționăm. Are rolul de a proteja și controla cantitatea de tensiune care este lansată pe placa Arduino.
Cu ajutorul pinului notat cu RES pe placa de dezvoltare și etichetat cu (15), putem crea un circuit care poate conține un buton extern, cu ajutorul căruia putem să resetăm placa Arduino.
Pinii etichetați cu (17), reprezintă programarea în serie , ceea ce prezintă una dintre metodele disponibile pentru programarea plăcilor Arduino[10].
3.3 Servomotorul SG90
Servomotorul este o unitate care poate controla cu precizie parametrii de mișcare, poate roti arborele într-un anumit unghi sau poate menține o rotație continuă cu o perioadă exactă. Un servomotor este alcătuit dintr-un motor, un senzor de poziție și un sistem de comandă.
În proiecte de robotică Arduino, servomotorul este folosit pentru diferite acțiuni mecanice:
Pentru a deschide sau închide o ușă
Direcționarea senzorilor la un anumit unghi pentru luarea de date
Controlul piciorului robotului pășitor
Întregul circuit de servomotor se află în interiorul carcasei iar semnalele de comandă și alimentarea sunt furnizate prin trei fire: pământ, 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 (poate fi 180 sau 270 de grade). 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 limitatorului și va da comanda pentru a opri motorul. Servomotoarele de rotație continuă nu au astfel de limitatoare.
Pentru majoritatea servomotoarelor, mecanismul din interiorul carcasei poate fi fabricat din metal sau plastic. Materialul din care este fabricat este foarte important. Î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 foarte rapidă a acestui material în funcție de 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 pentru 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 impuls de frecvență și este parametrul important care determină poziția servomotorului. Frecvența standardizată cu care sunt aplicate impulsuri este de 50 Hz, adică un impuls în 20 de milisecunde.
Specificațiile tehnice a servomotorului SG90:
Alimentare 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
Viteza de lucru a comenzii 0,12s
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ă a măsurătorilor. 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 complet 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.
Specificațiile tehnice a senzorului ultrasonic HC-SR04:
Tensiune de alimentare +5V
Curent de funcționare 15mA
Rezoluție 0,3 cm
Dimensiuni: 45 mm x 20 mm x 15 mm
Senzorul are un pin de alimentare (Vcc) +5V
Un pin pentru conectarea la masă
Inițiere semnal (Trigger)
Răspuns semnal (Echo)
Principiul de funcționare se bazează pe măsurarea duratei de propagare a unui semnal ultrasonor. Senzorul funcționează cu formula simplă:
Distanța = viteza * timpul de propagare
La intrarea Trigger a senzorului, este trimis un puls de nivel înalt de durată 10-15 microsecunde. Senzorul trimite opt semnale scurte ultrasonice deasupra domeniului de audiție umană.
Senzorul măsoară durata de propagare a semnalelor trimise și primite, după aproximativ o microsecundă, senzorul emite un impuls de nivel înalt la ieșirea Echo cu o durată de 38 ms, în cazul în care nu au fost găsite obstacole. Acest principiu de ecolocație este folosit și de delfini și lilieci[8].
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 asemensea 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 controlate de către placa Arduino[9].
Specificațiile plăcii:
În cazul în care cipurile se defecteză, acestea pot fi cu ușurință îndepărtate pentru schimbare
Protecție termică
Alimentarea motoarelor de la 4,5V până la 36V
Cipurile notate cu numărul unu de pe placa de mai sus, îndeplinesc majoritatea funcțiilor acesteia. Acestea permit controlul motoarelor cu un consum de curent de până la 600mA pe canal.
H – nivel ridicat; L – nivel scăzut; X – nu contează; Z – rezistență ridicată;
Cel de-al doilea număr conține terminalele responsabile pentru conectarea servomotoarelor. Există patru terminale sub denumirile: M1,M2,M3,M4 notate cu cifra 3. Doar patru motoare electrice pot fi conectate la acest modul. Terminalul notat cu cifra 4, este folosit pentru alimentarea plăcii din surse de alimentare externe, deoarece motoarele au nevoie de mai multă tensiune decât poate furniza placa Arduino de bază.
Pentru a alimenta placa cu o altă sursă, este necesar să scoatem jumperul, care este notat cu numărul 5. Avem notat cu numărul 6, butonul de resetare a plăcii. De asemenea, pe placă există un LED care se aprinde în cazul în care prin placă trece un curent iar motoarele sunt alimentate și sunt gata să îndeplinească scopul dorit. În cazul în care LED-ul nu se aprinde, motoarele electrice nu vor funcționa, deoarece alimentarea cu energie nu este suficientă sau nu există deloc.
CAPITOLUL 4
Construcția Robotului
Șasiul robotului este o componentă principală, anume pe aceasta sunt instalate toate componentele robotului. Aceasta este cea mai simplă și mai eficientă bază de construire a unui robot. Platforma pentru crearea robotului poate fi din diferite materiale, plastic, aluminiu, fier, însă se preferă o platformă dintr-un material mai ușor pentru o manevrabilitate mai bună.
După ce șasiul robotului a fost asamblat, cu ajutorul șuruburilor și piulițelor, se montează patru motoare de curent continuu, împreună cu patru roți din cauciuc. Roțile sunt fabricate din cauciuc ca să permită robotului o tracțiune mai bună.
Î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 motat modulul Shield cu Drivere de Motoare. Shield-ul este compatibil cu placa de bază Arduino Uno R3 și se conectează ca un strat "sandwich" ca și în imaginea de mai jos.
Placa de bază este alimentată cu o baterie de 9V, dar modulul cu Drivere de Motoare este alimentat aparte. A fost scos jumperul, care permite alimentarea plăcii de la o sursă externă și anume de la o baterie de 9V. A fost folosită această metodă deoarece modulul are nevoie de o tensiune cu care să poată acționa toate patru motoare electrice, tensiune pe care placa Arduino nu o poate furniza. Placa va acționa motoarele până când bateria nu se va descărca, de aceea a fost montat un switch cu care putem să întrerupem în orice moment alimentarea.
În continuare au fost conectate cele patru motoare electrice la modulul cu Drivere de Motoare.
După conectarea motoarelor, se montează senzorul ultrasonic HC-SR04 ( care este singura componentă cu care robotul interacționează cu mediul extern) și servomotorul care controlează direcția senzorului. Conexiunea la shield a componentelor menționate mai sus se face în felul următor:
Senzorul este alimentat și legat la masă de la shield iar 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ă. La fel și servomotorul este alimentat și legat la masă de la shield iar prin firul maro va primi semnale de comandă de la placa Arduino.
4.1 Modul de funcționare a sistemului
Robotul se mișcă cu ajutorul motoarelor de curent continuu, alimentate de la modulul cu Drivere de Motoare, care la rândul său este alimentat de la o baterie externă de 9V. Modulul cu Drivere de Motoare este conectat la placa de dezvoltare Arduino Uno R3, care poate fi alimentat atât printr-un port USB cât și de la o sursă externă de alimentare. Aceasta este aliementată de la o baterie de 9V și este componenta principală a sistemului.
Senzorul ultrasonic HC-SR04, montat în fața robotului mobil, este singura componentă cu care robotul poate interacționa cu mediul extern. Senzorul ultrasonic măsoară distanța în cazul în care nu a fost detectate obstacole dar și când obiectul este detectat. Această informație este trimisă plăcii de dezvoltare Arduino sub formă de semnale analogice, acestea sunt convertite în semnale digitale.
Servomotorul joacă și el un rol important în acest sistem. Acesta este folosit pentru schimbarea direcției senzorului ultrasonic pentru o mai mare rază de vizualizare a robotului. Senzorul și servomotorul sunt alimetați de la modulul cu Drivere de Motoare. Partea software joacă un rol foarte important în componența sistemului realizat, fără aceasta, componentele nu vor îndeplini rolul dorit.
Codul sursă este încărcat în placa Arduino Uno R3 prin portul USB, conectat direct la un computer. Cu ajutorul unui computer a fost scris și editat codul sursă pentru robotul mobil autonom.
4.2 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 defapt biblioteca senzorului ultrasonic.
4.3 Codul sursă al robotului
După ce au fost introduse bibliotecile, pinii Trigger și Echo a senzorului ultrasonic sunt conectați la pinii A0 și repectiv A1 analogici de pe shield-ul cu Drivere de Motoare.
#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
Distanța maximă măsurată de către senzorul ultrasonic este de 300 cm iar viteza de tracțiune a motoarelor electrice este 150, adică 70% din viteza maximă. Distanța la care robotul se oprește în cazul în care este detectat un obiect în cale este de 40 cm.
NewPing cititor(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
Bucata de cod de mai sus este utilizată pentru menționarea pinilor corecți de măsurare a distanței.
Au fost incluse cele patru motoare, utilizând ieșirile notate cu M1, M2, M3, M4 de pe shield-ul cu Drivere de Motoare, setați la frecvențe de 1kHz.
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;
Măsurarea distanței în ambele părți, folosind variabilele următoare:
int Distanta_stanga, Distanta_dreapta;
int Distanta_curenta = 0;
String Motor = "";
int Viteza = 0;
Servomotorul este conectat la pinul 10, care este defapt notat cu SERVO_1 pe shield-ul cu Drivere de Motoare. Servomotorul este poziționat la 120 de grade, adică privind înainte:
void setup() {
servomotor.attach(10);
servomotor.write(120);
delay(1000);
}
Următoarea bucată de cod este o buclă cu care robotul va merge continuu înainte. În cazul în care robotul detectează obstacole, îș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 luate:
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 din funcționare a motoarelor electrice 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, se folosește instrucțiunea for pentru a crește încet viteza motoarelor:
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);
}
4.3 Concluzii generale
În această lucrare de licență, a fost prezentat un robot mobil autonom și modul de mișcare a acestuia, capabil să analizeze informațiile primite de la senzorul ultrasonic și să le transforme în mișcări fizice. A fost utilizată placa Arduino Uno R3 care este, de fapt, componenta principală, shield-ul cu Drivere de Motoare asigură controlul motoarelor electrice, servomotorul SG90 schimbă direcția senzorului.
Obiectivul dorit a fost atins, robotul este capabil să detecteze obstacole și să le ocolească cu ajutorul unui senzor ultrasonic. Acesta lucrează în regim autonom și nu necesită preprogramarea traseului sau intervenția operatorului uman.
Pentru îmbunătățirea sistemului, putem realiza acea parte cu care robotul ar putea să se alimenteze în mod automat în cazul în care acesta detectează că bateriile sunt aproape descărcate. Montarea unui număr mai mare de senzori ar putea mări flexibilitatea și precizia robotului.
BIBLIOGRAFIE
[1] https://learn.sparkfun.com/tutorials/what-is-an-arduino
[2] https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard
[3] https://www.ledsupply.com/blog/how-does-a-5mm-led-work/
[5] https://ro.wikipedia.org/wiki/Arduino
[6] https://www.scribd.com/doc/253119456/Robo%C8%9Bi-mobili-autonomi
[7] https://en.wikipedia.org/wiki/Curiosity_(rover)
[8] https://www.senzori-ultrasonici.ro/principiul-ultrasonic
[9]https://media.swymhome.com/parts/159/files/219/Overview%20with%20Example%20code?t=1491694883
[10] http://www.roroid.ro/prima-lectie/
[11] https://en.wikipedia.org/wiki/Automation
[12] 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
[13] POHOAȚĂ SORIN – ‘’DOMOTICĂ’’ – CURS și LABORATOR, 2018.
[14] John Boxall, Arduino Workshop – A Hands-On Introduction with 65 Projects, San Francisco, 2013.
Anexe
#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 Autonom V4 Rtf Rtf [310099] (ID: 310099)
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.
