Ansamblu de roboți mobili care colaborează [619654]
1
Universitatea Politehnică din București
Facultatea de Inginerie Mecanică și Mecatronică
Ansamblu de roboți mobili care colaborează
pentru a facilita parcurgerea unui labirint
Îndrumător: s.l. dr. ing. Petrache Silviu
Absolvent: [anonimizat]
2019
2
Cuprins
1. Introducere ………………………….. ………………………….. ………………………….. ………………………….. …………….. 3
2. Stadiul actual al cunoașterii în domeniu ………………………….. ………………………….. ………………………….. …….. 4
2.1 Robotul ”Sandwich” ………………………….. ………………………….. ………………………….. …………………………. 7
2.2 Robotul cu amplificatoare operaționale ………………………….. ………………………….. …………………………. 8
2.3Robotul Boe -Bot ………………………….. ………………………….. ………………………….. ………………………….. …. 10
2.4 Robotul Pololulu 3pi ………………………….. ………………………….. ………………………….. ………………………. 11
2.5 Robotul iRobot Create 2 ………………………….. ………………………….. ………………………….. ………………… 12
2.6 Robotul “Romi” ………………………….. ………………………….. ………………………….. ………………………….. …. 13
2.7 Robotul “All Right” ………………………….. ………………………….. ………………………….. ……………………….. 14
2.8 Tipuri de comunica ții fără fir ………………………….. ………………………….. ………………………….. …………. 15
3. Alegerea și prezentarea soluției proprii ………………………….. ………………………….. ………………………….. .. 18
3.1.Definirea sarcinii ansamblului de roboți ………………………….. ………………………….. ……………………… 18
3.2 Componente folosite ………………………….. ………………………….. ………………………….. ………………………. 19
3.3Modelul 3D ………………………….. ………………………….. ………………………….. ………………………….. ………… 25
4. Memorium tehnic ………………………….. ………………………….. ………………………….. ………………………….. …….. 38
5. Programe utilizate ………………………….. ………………………….. ………………………….. ………………………….. … 43
6. Eficiența Economică ………………………….. ………………………….. ………………………….. ………………………….. . 61
6.1 Calculul cheltuielilor materiale ………………………….. ………………………….. ………………………….. ………. 61
6.2 Calculul chelt uielilor cu resursele umane ………………………….. ………………………….. ……………………. 63
6.3 Calculul amortizării echipamentelor ………………………….. ………………………….. ……………………… 64
6.4 Calculul profitului ………………………….. ………………………….. ………………………….. …………………………. 65
7. Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ………………. 66
8. Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …………… 67
3
1. Introducere
Tema proiectului ce urmează a fi prezentat în continuare este reprezentată de proiectarea și
realizarea unui ansamblu de roboți mobil i ce are ca obiective ieșirea dintr -un labirint prin urmărirea
liniei, memorarea traseului și transmiterea trase ulului memorataltui robot , astfel încât acesta să
poată parcurg e traseul găsit de primul robot mobil.
Roboții sunt sistememe catronice independente de ajutorul uman, autonome, capabile să își
îndeplinească sarcinile în mod automat.
Roboții mobili sunt subcategoria roboților ce se deplasează în mediul în care se află cu ajutorul
senzorilor, software -ului și a diferitelor metode de deplasare (roți, șenile, printârâre etc .). Pentru
aceasta, roboții mobili trebuie să aibă autonomie energetică și informațională. Autonomia
informațională se referă la capacitatea robotului de a desfășura sarcinile pentru care a fost
programat, prin intermediul deciziilor luate în urma informațiilor acumulate cu ajutorul senzorilor.
Unul dintre cele mai simple moduri de navigare pentru un robot mobil este cel prin care se
urmărește linia. Această linie poate fi un marcaj de o culoare contrastantă cu fundalul, trasată pe
podea sau imprim ata pe diferite materiale ce oferă un contrast suficient de mare. De obicei,
algoritmul de urmărire a liniei este relativ simplu. Însă, acești roboți nu pot ocoli obstacolele, ci la
întâlnirea unui obstacol se opresc și așteaptă până când traseul este eliberat. Acest tip de roboți este
folosit in principal în mediul industrial pentru transportul încadrul fabricilor pe trasee prestabilite și
cu sisteme complexe de coordonarea echipelor formate. Aceștia au comenzile de prioritate foarte
bine definite ,astfel încât să nu apară incidente.
Există două competiții principale pentru roboții ce urmăresc linia. Prima variantă este cea
de“viteză” unde robotul trebuie să termine traseul căt mai rapid pentru a obține cele mai multe
puncte. În general, acesta este un traseu si nu os, marcat cu ajutorul unei linii late de 15 -19mm de
culoare neagră, pe un fundal alb, cu arce de cerc cu o rază de minim 100mm și intersecții la unghi
drept. În unele cazuri, pe traseu sunt amplasate marcaje alăturate liniei de traseu, perpen diculare pe
aceasta, care puse strategic la începutul fiecărui arc de cerc. Aceste marcaje au rolul de a ajuta
roboții pentru a -și adapta din timp viteza pentru viraje.
Fig 1.1 Traseu de tip linie[1]
4
Al doilea tip principal de competiție la care poateparticipa un astfel de robot este navigarea
printr -un labirint cu scopul de a ieși pe o rută cât mai scurtă. De cele mai multe ori, pereții
labirintului sunt înlocuiți de o linie neagră pe fundal alb, asemănătoare cu cea din situați a
precedentă. Destinația este marcată printr -o suprafață neagră pentru a putea fi recunoscută ca fiind
finalul traseului. Robotul poate parcurge traseul de mai multe ori, cu scopul de a memora cea mai
scurtă rută.
Fig 1.2 Traseu de tip labirint[2]
2. Stadiul act ual al cunoa șterii în domeniu
Din punct de vedere al locomoției există foarte multe metode de a deplasa roboții mobili. Cele
mai folosite metode sunt acelea care implică folosirea roților deoarece controlul este mai ușor de
realizat și se pot folosi pe diverse tipuri de suprafețe. Însă , trebuie amintite și soluțiile apărute în
urma diferitelor impedimente în deplasare pe roți.
Câteva dintre aceste soluții sunt:
Robot cu șenile
5
Fig. 2.1 Makeblock mBot Ranger Bluetooth [3
Robot pășitor
Fig. 2.2 RHEX [4]
Robo t pășitor cu roți
Fig.2.3 Robot pășitor hexapod[5]
Robot ce se deplasează prin târâre
6
Fig. 2.4. Șarpele NEC [6]
Din punct de vedere al locomoției și al controlul ui (realizarea virajelor) există mai multe tipuri
constructive și diferite modalități de comandă a acestora:
Robot triciclu
Fig 2.5. Robot triciclu [7]
Robot automobil
Fig 2.6 Robot automobil [8]
Robotul automobil este o reproducere în miniatură a unui automobil și de cele mai multe ori
are două motoare și două roți pentru viraje.
Robot diferențial cu patru roți
Fig 2.7 Robot diferențial cu patru roți [9]
Robotul diferențial cu patru roți nu are nevoie de o mișcare suplimentară pentru a lua viraje.
Acesta reușește să vireze prin diferența de viteză dintre roți.
7
Robot diferențial cu două roți
Fig 2.8 Robot diferențial cu două roți [10]
Dintre toate aceste tipuri de roboți, cel mai ușor de controlat și totodată cel mai eficient tip de
robot este cel diferențial cu două roți motoare și o a treia pentru sprijin. Pentru ceea ce presupune
controlul direcției și vitezei de deplasare a robotul ui există două soluții distincte: controlul prin
intermediul circuitelor analogice sau prin intermediul unui microcontroler.
2.1 Robotul ”Sandwich”
Un exemplu de robot diferențial cu două roți controlat cu circuite analogice este ”Sandwich”.
Fig 2.9 Robotul ”Sandwich” [11]
Robotul folosește ca șasiu un recipient de plastic. Motoarele sunt conectate direct la roți, nu
dispune de reductor. Pentru detectarea liniei acesta folosește două fotorezistențe si două leduri ce au
rolul de a ilumina podeaua. Fotor ezistențele folosite sunt sensibile la lumina vizibilă pentru a putea
realiza funcționarea acestuia. Nu s -a folosit lumina infraroșie deoarece există materiale care pot să
marcheze liniași pot fi totodată transparente la lumina infraroșie. Urmărirea liniei se face cu
ajutorul unor comparatoare ce au rolul de a determina dacă senzorii sunt sau nu pe linie și să
8
comande motoarele in concordanță , astfel încât să păstreze linia între cele două foto rezistențe . Doi
rezistori semireglabili sunt folosiți pentru a ajusta funcționarea senzorilor pe diferite suprafețe.
Robotul este simplu de realizat, ieftin și ușor de programat.
2.2 Robotul cu amplificatoare operaționale
Un alt exemplu de robot foarte ușor de realizat este cel cu amplificator operațional LM358,
LEDuri, rezistoare și tranzistoare. Acesta funcționează fără PID, oferind o posibilitate de
programare rapidă însă fără o foarte bună stabilizare a vitezei. Este asamblat dintr -o plăcută de
plexiglas sau un alt material ușor de găurit și o plăcuță p e care se lipesc componentele electronice
pentru a forma circuitul de comandă al motoarelor. Un exemplu este cel realizat de Daniel Andrade,
publicat pe blogul acestuia.
Fig 2.10 Robot cu amplificatoroperațional [12]
Acest robot are două leduri roșii și două fotorezistențe. Ledurile luminează iar când robotul
intersectează linia neagră forezistoarele au rolul de a calibra motoarele astfel încât acesta să revină
pe traseul inițial și să continue.
Fig 2.11 Funcționarealedurilorșifotorezistențe[13]
9
Controlul este unul de slabă calitate deoarece nu se folosește un program de comandă bazat pe
PID, din această cauză nu funcționează în linie dreaptă și tinde să meargă în zig -zag.
Poate fi îmbunătățit cu un microcontroler, cu ajutorul unui program de tip PID sau prin
adăugarea mai multor amplificatoare operaționale.
Alt tip de robot foarte simplu din punct de vedere constructiv este cel bazat pe tranzistori și pe
Timer NE555.
Fig 2.12 Robot cu tranzistori si TIMER NE 555 [14]
Acesta este alcătuit din doi tranzistori BC 108, două diode N4148, doi rezistori de 10 KΩ, două
LEDuri, două motoare de curent continuu și o baterie de 9V. Funcționează conform cu schema
electronică de la Fig 2.13.
Fig 2.13 Schema electronică [15]
Cel mai mare dezavantaj al acestui tip de robot est e controlul prin intermediul tranzistorilor,
deoarece viteza este foarte greu de controlat. Cea mai folosită, eficientă și fiabilă metodă de control
este cea PWM, care modulează lățimea impulsurilor. Tranzistorii BC108 sunt proiecta ți pentru a fi
utilizați liniar, astfel încât curentul colectorului care trece prin motoarele de curent continuu va
varia în funcție de curentul de bază, care este controlat de LEDuri si rezistorii de 10kΩ . Astfel,
motoarele de curent continuu vor primi curent în funcție de intensitatea luminii primite de la
LEDuri.
10
2.3Robotul Boe-Bot
Boe-Bot este un robot mobil bazat pe microcontrollerul BASIC Stamp 2. Șasiul este din
aluminiu , fiind suficient de solid pentru a susține toate componentele si oferind totodată
posibilitatea de a fixa o varietate de echipamente ușor și rapid. Placa de dezvoltare Board Of
Education permite să se atașeze cu ușurință servomotoarelor sau alte componente electronice fără
a fi nevoie de lipirea acestora, atașarea realizându -se cu șuruburi. Robotul este unul de tip
diferențial acționat de două servomotoare cu mișcare continuă. Programarea lui se realizează în
limbajul PBASIC.
Robotul este ușor de programat fie cu programe simple de mișcare, fie prin implementarea
senzorilor și programelor complexe.
Robotul poate îndeplini mai multe tipuri de activități :
Se deplasează prin comenzile pe care le primește
Transmite informații prin intermediul senzorilor de lumină și sunet
Reușește să iasă din colțuri cu ajutorul senzorilor anten ă (robotul vine cu un set de componente
adiționale ce inclus și senzori de tip antenă)
Găsește cel mai întunecat sau cel mai luminos loc prin intermediul senzorilor de lumină
Urmărește un alt robot sau o persoană prin detectarea distanței
Detectează și evi tă obstacolele prin intermediul senzorilor infraroșu
Fig 2.14 Boe -Bot[16]
11
2.4 Robotul Pololulu 3pi
Fig2.15 Pololulu 3pi [17]
Robotul Pololu 3pi este o platformă mobilă formată din două micromotoare cu reductoare
metalice, un afișaj cu cristale lichide LCD de 8×2, cinci senzori reflectivi, trei butoane programabile
și un difuzor piezo, toate acestea conectate la un microcontrolle r ATmega 328 care poate fi
programat în limbajul de programare C. La baza robotului stă microcontrollerul Atmega 328P care
funcționează la 20MHz și este dotat cu 32KB de memorie program, 2KB de RAM și 1KB de
EEPROM. Robotul 3pi este proiectat pentru compet ițiile de urmărire a liniei și ieșire din labirint.
Are 9,5 cm diametru, 85 g fără baterii și are nevoie de doar patru celule AAA pentru a
funcționa, motoarele sunt alimentate cu o tensiune constantă de 9,25 V de către un circuit ridicător
de tensiune. A ceastă tensiune de alimentare permite robotului să atingă până la 1 m/s.
Este un robot recomandat celor fără experiență în domeniul și celor ce vor să treacă de la
roboții de început neprogramabili la cei programabili.
Acest robot are și posibilitatea d e a folosi accesorii suplimentare, acestea sunt în număr de trei
și sunt împărțite în două categorii.
Prima categorie este cea cu accesorii de bază, oferă doar un al doilea nivel pe care se pot monta
electronice pentru a putea programa robotul să desfășoar e mai multe activități. În această categorie
se regăsesc două kituri deoarece unul oferă posibilitatea de a putea observa în continuare ecranul
LCD, nu afectează accesul la butonul de alimentare, la butonul de alimentare și la pinul programabil
ISP (Fig 2. 16). Kitul al doilea este un disc complet (Fig 2.17) ce oferă mai mult spațiu pentru
elementele electronice. Acest cerc acopera ecranul LCD împreună cu restul robotului pentru a oferi
mai mult spațiu.
12
Fig 2.16 Kituri cu decupaje [18] Fig 2.17 Kit fără decupaje [19]
A treia opțiune, kitul de expansiune m3pi, îmbunătățește semnificativ robotul 3pi
transformându -l într -un robot m3pi. Cu acest kit se poate folosi placa de dezvoltare ARM pe 32 de
biți care are o putere de pro cesare mult mai mare și mai mulți pini decât cea clasică de la 3pi (AVR
pe 8 biți). De asemenea, se pot conecta și modulele seriale Wixel și Xbee fără fir.
Fig 2.18 Trei roboți Pololulu în stânga robotul original m3pi, în centru și dreapta m3pis[20]
2.5 Robotul iRobot Create 2
iRobot Create 2 este un robot programabil complet asamblat ce are 32 de senzori și un port de
25 de pini pentru atașarea de elemente suplimentare. Modulul de comandă al robotului este limitat
din punct de vedere al memoriei cât și din punct de vedere al puterii de procesare. Dar, pentru a
rezolva aceste două situații neplăcute este dotat cu un port de comunicare serial prin care poate
primi comenzi și prin care poate trimite date de la senzori. Pentru a realiza comanda robotului astfel
13
încât să rezolvăm aceste situații este necesar un alt microcontroller mai puternic ce dispune de un
port de comunicare serial.
Fig 2.19 iRobot Create 2[21]
Este compatibil cu accesoriile Seriei Roomba 600 inclusiv baterii, Home Base, telecomandă și
Virtual Wall. Robotul se întoarce la “Home Base” pentru a staționa și a reîncărca. Bateriile
reîncărcabile, se încarcă în trei ore.
iRobot Create 2 are un diametru de 340 mm, înălțimea de 92mm șigreutatea de 3,58 kg.
2.6 Robotul “Romi”
Robotul Romi rezolvă labirinturile folosind o cameră web pentru a face identificarea liniei și a
intersecțiilor. Acest robot este un exemplu excelent al modului în care o varietate de componente
ale firmei Pololu se pot combina într-un robot complex, funcțional și eficient în rezolvarea
sarcinilor. Baza robotului este un kit de șasiu de culoare neagră de la Romi, la care a fost adăugat un
set de perechi de encodere și o a treia roată liberă pentru echilibru și funcționarea optimă.
Robotul conține și un controler A -Star 32U4 SV care este un automat programabil bazat pe
ATmega32U4 ce oferă un mediu comun de programare precum Arduino. A -Star Prime oferă multe
caracteristici și îmbunătățiri suplimentare față de produsele concurente, inclusiv o gestionare
superioară a puteri i care permite o funcționare eficientă de la 5 V la 36 V.
Această configurație a suportului A -Star 32U4 SV nu are suport microSD și include anteturi
preinstalate pe multeplăci Arduino. Controlul motoarelor și monitorizarea senzorilor se face prininte
rmed iul plăcuței Raspberry Pi, aceasta controlează encoderele și monitorizează Romi prin
intermediul celor patru senzori analogici de distanță.
Controlerul A -Star 32U4 SV și Raspberry Pi sunt ridicate deasupra șasiului pe o placă
extensibilă Pololu RP5 / Rover 5, fabricată din fibre acrilice și groasă de 3 mm.
14
Fig 2.20 RobotulRomi and Raspberry PI[22]
2.7 Robotul “All Right”
Acesta a fost construit pentru un concurs de tipul “ieși din labirint urmărind linia” organizat de
The Chicago Area Robotics Group (ChiBots). Numele lui, All Right, provine de la caracteristica
acestuia de a lua virajele în intersecții cu unghi drept.
Acesta are 18 cm lungime, 15 cm lățimeși 12 cm înâlțime. Și o greutatetotală de 725
grame.Partea de susținere a robotului este o foaie acrilică gri groasă de 3 mm. Este fixat cu șuruburi
din aluminiu. Are un comutator de culoare roșie ce face legătura cu bacteria LiPoly (polyester litiu)
de 8,4 , un support pentru 6 baterii alkaline AA, însă, acestea fiind mai grele reduc viteza în
compara ție cu cele LiPoly.Are un LCD ce afișează informațiile transmise de senzori pentru a fi mult
mai ușoară observarea funcționării acestuia în intersecții.
Folosește un microcontroler Freescale 68HC908GP3, însă acesta poate fi înlocuit cu Atmel
ATMega644 pentru a fi maiușor de programat.
Fig 2.21 Robotul All Right[23]
15
2.8 Tipuri de comunica ții fără fir
Întrucât este necesară transmiterea de informații de la robotul 1 către robotul 2, trebuie studiate
diferitele modalități de transmitere a informațiilor fără a folosi fire.
Rețelele fără fir reprezintă acele rețele de aparate și dispositive interconectate prin unde
radio, infraroșu și alte metode fără fir. În ultimii ani acestea s-au dezvoltat semnificativ atât pe plan
mondial cât și pe plan național, reprezentând o soluție alternativă mai eficientă decât legăturile cu
fir (electric, fibră optică sau altele). Conex iunile fără fir sunt tot mai folosite, deoarece ele rezolvă
probleme ce apar atunci când se folosesc multe cabluri conectate la dispozitive.
Tehnologiile modern fără fir pot interconecta echipamentele (sau și rețelele locale, LAN -urile)
la distanțe mici, dar și la distanțe foarte mari.
Există mai multe variante de a transmite informația (datele memorate) fără a folosi fire. Cele
mai cunoscute metode sunt :tehnologia Wi -Fi, Bluetooth , tehnologia GPRS , tehnologia 3G, 4G și
ultima apărută , cea 5G.
Totuși, dintre cele menționate anterior în prezenta lucrare ne vom concentra atenția pe
tehnologiile fără fir de tip Wi-Fi și Bluetooth.
Tehnologia Wi -Fi
Wi-Fi reprezintă o tehnologie radio folosită de cele mai multe ori pentru a implementa rețele
locale de calculatoare de tip rețea locală fără fir ( Wireless Local Area Network, WLAN ). Un WLAN
este un sistem de comunicații implementat ca extensie, sau ca alternativă pentru o rețea locală
(LAN) cablată, într -o clădire sau campus, combinând conectivitatea la viteză mare cu mobilitatea
utilizatorilor, într -o configurație mult simplificată. Printre avantajele tehnologiei Wi -Fi sunt
evidente mobilitatea, flexibilitatea, simplitatea în instalare, scalabilitatea, darșicosturile de
întreținere reduse.
Toate aceste avantaje au impus Wi -Fi și WLAN ca o soluție tot mai mult utilizată la nivel
mondial.
Fig 2.22 Imagine reprezentativăpentrutehnologia Wi -Fi[24]
16
Pasul următor pentru tehnologia Wi -Fi este reprezentat de WiMAX , o tehnologie suplimentară,
ce poate capta datele de șapte ori mai repede și de o mie de ori mai departe decât tehnologie Wi -Fi.
În timp ce rețelele Wi -Fi simple au o rază de acțiune de aproximativ 30 m, WiMax utilizează o
tehnologie de microunde radio ce îi mărește distanța de acțiune la aproxima tiv 50 kilometri. Astfel
se pot construe rețele metropolitane (MAN) bazate pe această tehnologie.
WiMAX este considerat a fi o soluție eficientă pentru accesul la Internet în mediul rural ,
deoarece raza de acțiune a emițătorului este de aproximativ 50 de kilometri. Principalul avantaj al
WiMAX este raportul calitate -preț. Viteza de accesare a internetului este mare, ajungând pâna la
70-75 Mbps, iar costurile sunt mici.
Fig 2.23 WiMAX și Wi -fi[25]
Comparațieîntretehnologiile WiMAX și Wi -Fi
Specificații WiMAX Wi-Fi
IEEE Standard 802.16x 802.11x
Versiuni Standard 802.16a, 802.16d și
802.16e 802.11b, 802.11g și
802.11n
Anullansării pe piață 1997 2004
Benzi de frecvență 2.5, 3.5 și 5.8 GHz 2.4 și 5 GHz
Viteză date 70-75 MBps 54MBps , dar în present
1,2Gbs
Lățime de bandă Flexibilăîntre 1.25 -2o
MHz 10 sau 20 sau 40 MHz
Distanță de comunicare
Aproximativ 50 Km 100 m
pentrudispozitiveleutilizatorului
(până la 5 Km
pentruconexiuniexterioare)
Tabel realizat pe baza informațiilor de la sursa [25]
17
Tehnologia Bluetooth
Tehnologia Bluetooth este un set de specificații (un standard) pentru o rețea personală (PAN)
fără fir (wireless), bazată pe unde radio. Tehnologia Bluetooth mai este cunoscută și ca standardul
IEEE 802.15.1.
Tehnologia Bluetooth elimină firele și cablurile între dispozitivele staționare cât și între cele
mobile , facilitează comunicațiile de date cât și comunicațiile vocale. Totodată, o feră posibilitatea
implementării unor rețele ad -hoc și a sincronizării între diverse dispozitive.
Prin intermediul rețelelor Bluetooth se poate face schimb de informații între diverse aparate
precum: telefoane mobile, laptop -uri, calculatoare personale, imprimante, camera fotoși video
digitale sau console video prin unde radio criptate (sigure) și de razămică, schimbul de informații se
poate face numai dacă aparatele respective sunt echipate cu Bluetooth.
Aparatele care au încorporată tehnologia Bluetooth comunică între ele atunci când se află în
aceeași rază de acțiune. Ele folosesc un sistem de comunicații bazat pe unde radio, așa că nu este
nevoie să fie poziționate în apropiere pentru a transmite informația. Dacă transmisia este suficient
de puternică, ele pot fi la o distanță mai mare, chiar și în camera diferite.
Fig 2.24 Simbolpentrutehn ologia Bluetooth[26]
Există trei clase principale ale tehnologiei Bluetooth, de la clasa 1 la clasa 3:
– clasa 1 este folosită cel mai des în medii industrial și oferă o rază de acoperire mai mare de
până la 100 metri. Însă folosește multă energie – 100 mW.
– clasa 2 este cea mai răspândită, în special pe dispozitivele mobile și laptop -uri deoarece are
doar 2.5 mW putere și oferă o rază de acoperire de până la 10 metri în funcție de modelul
implementat.
– clasa 3 este cea mai economică folosește doar 1 mW. Dar, este și clasa cu cea mai mică rază
de acoperire aceasta reușind să acopere doar 1 metru.
18
Fig 2.23 Origineasimbolului Bluetooth[27]
3. Alegerea și prezentarea soluției proprii
3.1.Definirea sarcinii ansamblului de roboți
Ansamblul de roboți are sarcina de a parcurge în mod autonom un labirint și în același timp de
a îmbunătății parcurgerea acestuia. Prin facilitarea parcurgerii labirintului fac referire la faptul că
primul robot are sarcina de a găsi cel mai scurt traseu și de al transmite către cel de al d oilea, acesta,
urmând să parcurgă traseul primit.
Labirintul este un traseu simplu format din intersecții drepte (cu unghi de 90°) și viraje în unghi
drept.
Fig 3.1 Traseu[27]
19
Roboții trebuie să parcurgă următoarele tipuri de intersecții:
Fig 3.2 Exemple de intersecții[28]
Tipul de robot ales este cel diferențial cu o roată ce are rolul de susținere și două roți motoare
deoarece este cel mai eficient tip de robot pentru urmărirea liniei. Ce-a treia roată este montată în
fața roților motoare pentru a facilita virajele.
Întrucât roboții trebuie să comunice între ei și să rezolve labirintul pe traseul găsit de primul
robot aceștia trebuie controlați cu un microcontroller. Urmărirea liniei se poat e realiza și analogic ,
însă această metodă nu poate lua decizii complexe, decizii ce sunt necesare pentru că avem un
traseu complex de rezolvat.
3.2 Componente folosit e
Motoare
Motoarele folosite sunt de două tipuri, două dintre acestea sunt de tipulmotor cu redactor 120:1
de la Pololu, iar celelalte două sunt de tipul motor cu reductor din metal și ax cu diametrul de 4 mm
(6 V, 96 RPM) tot de la Pololu. Am ales să folosesc două tipuri diferite de motoare , deoarece am
vrut să observ dacă există diferențe între cele două tipuri.
Fig 3.3 Motor cu cutie de viteze 120:1[29] Fig 3.4 Motor cu redactor din metal[30]
20
Motor cu reductor 120:1, specificații tehnice:
– Dimensiuni : 54.5 × 20 × 13.8 mm
– Tensiunea de alimentare : 3 – 6 V
– Curent : 80 mA ( fara sarcina ) 0.8A (blocat)
– Cuplu : 1.4Kg/cm
– RPM:120
– Motor cu reductor din metal, specificații tehnice:
– Tensiunea de alimentare: 6V;
– Raport de reducere: 1:120;
– Viteză: 96 rpm;
– Cuplu: 15 kg;
– Diametru ax: 4 mm;
– Greutate: 40 g;
– Reductor metalic;
– Carcasă din plastic.
Componente electronice
Modulul central cu microcontroller
O plăcuță Arduino este compusă dintr -un microcontroler Atmel AVR de 8 -, 16- sau 32 -biți
(deși începând cu 2015 s -au folosit microcontrolere de la alți producători) cu componente
complementare care facilitează programarea și încorporarea în alte circuite. Un aspect important la
Arduino este că acesta dispune de conectori standard, care permit utilizatorului să conecteze plăcuța
cu procesorul la diferite module interschimbabile numite și plăcuțe de e xtensie/module. Unele
module comunică cu Arduino direct prin pinii digitali sau analogici, dar altele sunt adresabile
individual prin magistrala serială I²C permițând utilizarea mai multor mod ule în paralel.
Până în anul 2015 plăcuțele Arduino oficiale au folosit cipuri Atmel din seria megaAVR, în
special ATmega8, ATmega168, ATmega328, ATmega1280 și ATmega2560, iar în 2015 au fost
adăugate cipuri de la alți producători. O multitudine de alte p rocesoare au fost folosite de
dispozitive compatibile Arduino. Multe plăcuțe includ un regulator liniar de 5 V și un oscilator cu
cuarț de 16 MHz (sau un rezonator ceramic în unele variante), deși anumite plăcuțe, cum ar fi
LilyPad, funcționează la 8 MHz ș i nu necesită regulator, datorită restricțiilor de formă.
Un microcontroler instalat pe Arduino vine preprogramat cu un bootlo ader care simplifică
încărcarea programelor pe memoria flash a cipului, în comparație cu alte dispozitive care necesită
programatoare externe. Acest aspect face Arduino o soluție simplă, permițând programarea de pe
21
orice computer ordinar. În prezent, bootl oader -ul optiboot este bootloader -ul implicit instalat pe
Arduino UNO.
La nivel conceptual, când se folosește mediul de dezvoltare integrat Arduino, programarea
tuturor plăcuțelor se face prin conexiune serială. Implementarea acesteia diferă în funcție de
versiunea hardware. Unele plăcuțe Arduino au implementate convertoare de nivel logic pentru a
realiza conversia între nivelele logice RS -232 și cele TTL.
Plăcuțele Arduino din prezent sunt programate prin USB, având integrate cipuri de conversie
USB -seria l, cum ar fi FTDI FT232. Unele modele UNO, mai noi, folosesc un chip AVR separate,
programat să funcționeze ca un convertor USB -serial, care poate fi reprogramat printr -un port ICSP
dedicat. Alte variante, cum ar fi Arduino Mini și versiunea neoficială Boa rduino, folosesc adaptoare
detașabile USB -serial, cabluri, Bluetooth sau alte metode.
La fel ca în cazul motoarelor și plăcuțele Arduino pe care le voi folosi sunt în două variante
asemănătoare.
Prima fiind Arduino MEGA 2560 REV3 MCU, model pe care l -am folosit anterior la concursul
de roboți mobile desfășurat în cadrul departamentului de mectronică în Mai 2019. Iar cel de al
doilea model este Arduino MEGA 2560 (ATmega2560). Am ales această combin ație deoarece
diferențele sunt mici, iar ambele plăcuțe au suficienți pini pentru a conecta senzorii și motoarele.
Alte variante nu aveau suficienți pini analogici utilizați de sensori.
Fig 3.5 Arduino MEGA 2560 REV3[31]
Specificații tehnice Arduino ME GA 2560 REV3:
– Microcontroler: ATmega2560
– Tensiune de lucru: 5V
– Tensiune de intrare (recomandat): 7 -12V
– Tensiune de intrare (limite): 6-20V
– Pini digitali: 54 (13 PWM output)
– Pini analogici: 16
22
– Curent de iesire: 40 mA
– Curent de iesire 3.3V Pin: 50 mA
– Flash M emory: 256 KB , 8 KB pentru bootloader
– SRAM: 8 KB
– EEPROM: 4 KB
– Clock:16 MHz
Specificații tehnice Arduino MEGA 2560:
– Tensiune de functionare: 5V;
– Tensiune de alimentare Jack: 7V – 12V;
– Pini I/O: 54;
– Pini PWM: 13 (din cei de I/O);
– Pini analogici: 16;
– 4 x UART;
– Memorie flash: 256KB, din care 8KB ocupati de bootloader;
– Frecventa de functionare: 16MHz.
– Dimensiuni: 5.3cm x 10cm.
Comunicația prin Bluetooth
Cei doi roboți vor comunica prin intermediul tehnologiei bluetooth. Fiecare dintre aceștia va
utiliza câte un modul bluetooth 4.0, pentru a putea transmite traseul găsit de primul robot către cel
de al doilea.
Datele transmise prin intermediul acestor dispozitive pot fi considerate esențiale deoarece al
doilea robot este programat doar pentru a urmări lini a și a lua deciziile primite de la primul când
întâlnește o intersecție, reușind astfel să urmeze traseul fără să parcurgă părți din labirint ce nu
conduc direct către ieșire.
23
Fig 3.7 Modul Bluetooth 4.0[33]
Specificațiile tehnice modulului Bluetooth 4.0:
– Tensiune de alimentare: 3.6V – 6V;
– Consum curent: 18.6mA maxim (în mod activ, TX, -6dBm);
– Consum minim: 0.4uA (întreruperi externe);
– Consum mod power down cu wake up 3us: 235uA;
– Nivel logic RX/TX: 3.3V;
– Distanță mare de transmisie: 60m;
– Comunicație până la 3KBps.
Senzori
Pentru urmărirea liniei sunt necesari senzori , astfel încât voi folosi o bară de senzori linie
analogici QTR -8A de la Pololu. Această bară are încorporați 8 senzori și posibilitatea de a
desprinde doi dintre aceștia. Deoarece sunt suficienți 6 senzori pentru a urmări linia, au fost
desprinși cei doi suplimentari. Senz orii vor avea scopul de a păstra robotul pe linie și de a depista
intersecțiile. Pentru a depista mai ușor intersecțiile voi folosi pentru primul robot în total 10 senzori.
Bara cu cei 6 senzori rămași o este montată central, iar pe lateralele robotului su nt montați câte 2
senzori. Această metodă de amplasare a senzorilor are scopul de a facilita depistarea intersecțiilor și
luarea deciziilor mai complexe din partea robotului. Al doilea robot este echipat doar cu bara de 6
senzori, deoarece când ajunge în i ntersecție cunoaște în ce direcție trebuie să meargă deoarece
primește aceste informați prin Bluetooth de la primul robot.
Am ales să folosesc senzori analogici deoarece informația transmisă de aceștia nu este doar 0
sau 1, transmit mai multă informație și se pot lua mai multe decizii datorită fluxului mai mare de
informație primită.
Fig 3.8 Bară cu 8 senzori analogici[34]
24
Specificatii:
– Dimensiuni : 74.93 x 12.7 x 3.04 mm
– Tensiunea de alimentare : 3.3 -5V
– Curent : 100mA
– Output : 8 valori analogice
– Tensiunea Output : 0 – Tensiunea de alimentare
– Distanta optima : 3mm
– Distanta maxima : 6 mm
– Greutate : 3.09 g
Controlul motoarelor
Întrucât motoarele nu pot fi controlate direct de la plăcuța Arduino, voi folosi un driver de
motor pentru acestea. Fiind o soluție ușor de implementat, ieftină și eficientă, am optat pentru un
modul cuL298. Acest driver este compatibil cu semnalele date de modulu lArduino, poate funcționa
în regim PWM ceea ce oferă posibilitatea controlului PID al robotului pentru o eficiență cât mai
mare.
Acest driver are 3 pini de intrare Vcc, GND și un pin special pentru tensiune aplicată
motoarelor. Funcționează până la o tensi unede 35V și poate controla maxim 2 motoare simultan.
Dimensiunile lui sunt mici : 46 mm lungime, 44mm lățime și 36 mm înălțime, fiind ușor de
amplasat pe o multitudine de proiecte ce necesită să fie de dimensiuni mici.
Fig 3.9 Modul cu L298[35]
Specificații:
– 2 Canale
– Curent 2A pe canal
– Tensiune motoare: 5V – 35V
– Tensiune circuite logice: 5V
25
– Frecvență maximă PWM: 40kHz
Roțile
Caracteristicile diferite ale motoarelor impun neces itatea folosirii și a unor roți diferite pentru
acestea.
Pentru primul robot am ales roțile MG ce au diametru de 70 mm și lățimea de 25 mm.
Fig 3.10 Roată MG[36]
Pentru cel de al doilea robot am ales roți cu diametru de 70 mm și lățime de 8mm.
Fig 3.11 Roți 70 x 8 mm[37]
3.3Modelul 3D
Luând în considerare faptul că a nsamblul de roboți pentru această lucrare conține doi roboți
ce nu sunt realizați din componente identice, au fost necesare două modele 3D pentru a putea
prezenta roboții și diferențele dintre aceștia. Principalele diferențe sunt reprezentate d e motoarele
folosite și roțile specifice fiecărui tip de motor.
Următoarele desene reprezintă piesele folosite pentru primul robot.
26
Fig 3.12 Ansamblu robot 1 – vedere de sus
Fig 3.13 Ansamblu robot 1 – vedere de jos
27
Fig 3.14 Senzori laterali
Fig 3.17 Modelul 3D pentru motoarele robotului 1
28
Fig 3.18 Suport pentru motorul robotului 1
Fig 3.19 Bară pentru susținerea senzorilor robotului 1
29
Componentele prezentate anterior sunt cele folos ite doar pentru primul robot. O parte dintre
componente sunt comune și sunt prezentate în următoarele pagini ale lucrării după prezentarea
componentelor specifice robotului numărul doi.
Componentele prezentate sunt în număr de două astfel: motorul, suportul pentru motor și
senzorii laterali.
Barele pentru susținerea senzorilor sunt diferite , deoarece robotul numărul doi nu dispune de
senzori laterali. De asemenea, apar diferențe și în ceea ce privește fixarea componentelor pe șasiu.
Motoarele au construcția diferită și acest lucru afectează modul de asamblare al componentelor pe
șasiu.
Următoarele des ene 3D sunt desenele pieselor folosite pentru al doilea robot. Desenele
pieselor folosite pentru ambii roboți sunt prezentate ulterior.
Diferențele între componente și desene nu sunt foarte mari, însă afectează atât aspectul
robotului cât și greutatea acestuia. De aceea este necesar să fie prezentate separat.
Fig 3.20 Ansamblu robot 2 – vedere de sus
30
Fig 3.21 Ansamblu robot 2 – vedere de jos
Fig 3.22 Șasiu robot 2
31
Fig 3.23 Roată robot 2
Fig 3.24 Modelul 3D pentru motoarele robotului 2
32
Fig 3.25 Suport motor robot 2
Fig 3.26 Bară pentru susținerea senzorilor robotului 2
Desenele 3D ce urmează a fi prezentate reprezintă desenele echivalente componentelor folosite
pentru ambi i roboți. Acestea au aceeași greutate și aceeași funcționalitate .
33
Fig 3.27 Ansamblu roată față
Pentru roata din față este necesar un ansamblu format din trei piese, o sferă, un cili ndru
special și un s uport ce are ș i rolul de capac pentru cilindru , astfel încât să susțină optim sfera pentru
deplasare .
Fig 3.28 Cilindru
34
Fig 3.29 Sferă
Fig 3.30 Suport pentru sferă
35
Fig 3.31 Plăcuță Arduino
Fig 3.32 Driver pentru motoare
36
Fig 3.33 Modelul bateriei utilizate
Fig 3.34 Bara cu senzorii centrali
37
Fig 3.35 Modelul 3D al șuruburilor folosite
Fig 3.36 Modelul 3D al piulițelor folosite
38
4. Memorium tehnic
Pentru partea de cal cule a fost folosit programul matlab cu scopul de a menține viteza robotului
la valoarea de 2 m/s. Urmează a fi prezentați pașii pentru elaborarea programului.
Schema de principiu
Aceasta reprezintă principiul de funcționare al robotului. Este o schemă simplificată întrucât
motoarele au deja reductoare implementate , iar ceea ce cuno aștem despre ele este viteza de rotație
la ieșire.
Fig 4.0 Schema simplificată a principiului de funcționare
Schema în impedanțe
Aceasta are rolul de a transpune schema de princi piu într-o formă ușor de analizat din punct de
vedere matematic. Cu ajutorul acesteia se realizează ecuațiile matematice ce au ca scop rezolvarea
sistemului pentru a funcționa optim.
39
Fig. 4.1 Schema în impedanțe
Ecuații :
u = i*ZR + i*ZL + kew1
kew1 = Mm
M1 = M2+M3
M1 = Mm*R2/R1
w2 = M2 * Zj1
w2 = R1/R2 * w1
v = R3 * w2
v = Zc * F
F= M3*1/R3
40
Schema de simulare
Fig 4.2 Schema de simulare principala
Fig 4.3 Blocul din schema de simulare
R = 37,7 Ω
L = 95 µH
Ke = 0,205 mV*min
Km =1 ,96 mN*m/A
Zc = 1/C = 1/6 m/N*s
R3 = 35 mm
R1/R2 = 1/96 (pentru robotul 1)
R1/R2 = 1/120 (pentru robotul 2)
J = 3,13 g*mm^2
Kr=9 (pentru robotul 1)
Ti=0.005 (pentru robotul 1)
Kr = 5 (pentru robotul 2)
Ti= 0.005 (pentru robotul 2)
41
Grafice obținute:
Fig 4.4 Grafic simulare viteză pentru robotul 1
Fig 4. 5 Grafic accelerație viteză pentru robotul 1
42
Fig 4. 6 Grafic simulare viteză pentru robotul 2
Fig 4. 7 Grafic simulare accelerație pentru robotul 2
43
5. Programe utilizate
Pentru funcționarea optimă a ansamblului de roboți sunt necesare două programe ce au la
bază algoritmul de urmărire a liniei. Din acest motiv este necesar să se cunoască funcțiile pentru
urmărirea liniei, folosirea senzorilor și folosirea comunicației bluetooth.
Primul program este cel pentru urmărirea liniei și este prezentat în paginile ce urmează:
#include <QTRSensors.h>
#define Kp 0.5
#define Kd 5
#define rightMaxSpeed 220
#define leftMaxSpeed 220
#define rightBaseSpeed 140
#define leftBaseSpeed 140
#define NUM_SENSORS 6
#define TIMEOUT 2500 // waits for 2500 us for sensor outputs to go low
#define NUM_SAMPLES_PER_SENSOR 4
#define rightMotor1 40
#define rightMotor2 3
//#define rightMotorPWM 2
#define leftMotor1 41
#define leftMotor2 5
//#define leftMotorPWM 4
QTRSensorsAnalogqtra((unsigned char[]) {A2, A3, A4, A5, A6, A7},
NUM_SENSORS , NUM_SAMPLES_PER_SENSOR);
unsignedintsensorValues[NUM_SENSORS];
void setup()
{
44
delay(500);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
for (inti = 0; i< 200; i++)
{
qtra.calibrate();
}
digitalWrite(13, LOW);
Serial.begin(9600);
for (inti = 0; i< NUM_SENSORS; i++)
{
Serial.print(qtra.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();
for (inti = 0; i< NUM_SENSORS; i++)
{
Serial.print(qtra.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
delay(1000);
{
pinMode(rightMotor1, OUTPUT);
pinMode(rightMotor2, OUTPUT);
// pinMode(rightMotorPWM, OUTPUT);
pinMode(leftMotor1, OUTPUT);
pinMode(leftMotor2, OUTPUT);
// pinMode(leftMotorPWM, OUTPUT);
45
}
}
intlastError = 0;
//int I=0;
void loop()
{
unsignedint sensors[6];
int position = qtra.readLine(sensors);
int error =2500 – position;
Serial.println(position);
intmotorSpeed = Kp * error + Kd * (error – lastError);
lastError = error;
intrightMotorSpeed = rightBaseSpeed + motorSpeed;
intleftMotorSpeed = leftBaseSpeed – motorSpeed;
if (rightMotorSpeed>rightMaxSpeed )
rightMotorSpeed = rightMaxSpeed;
if (leftMotorSpeed>leftMaxSpeed )
leftMotorSpeed = leftMaxSpeed;
if (rightMotorSpeed< 0)
rightMotorSpeed = 0 ;
if (leftMotorSpeed< 0)
leftMotorSpeed = 0;
{
digitalWrite(rightMotor1, LOW);
analogWrite(rightMotor2, rightMotorSpeed);
//analogWrite(rightMotorPWM, rightMotorSpeed);
digitalWrite(leftMotor1, LOW);
analogWrite(leftMotor2, leftMotorSpeed);
//analogWrite(leftMotorPWM, leftMotorSpeed);
}
}
Programulprezentat anterior estefuncționalcu doi sau trei pini pentru controlul motoarelor,
diferența este făcută de controlul acestora prin intermediul pinilor EnA sau EnB de pe driver sau
46
direct pe pini i de IN (1 -4). Programul controlează motoarele direct prin intermediul pinilor de IN.
Pentru a fi realizabil acest tip de control este necesar ca pinii ce controlează viteza motoarelor să fie
conectați la pini PWM pe plăcuța Arduino.
Următorul pas este re prezentat de crearea programului ce rezolvă labirintul și memorează
ieșirea din intersecții. Acest program alături de comunicația bluetooth reprezintă programul ce este
necesar pentru primul robot.
#include <QTRSensors.h>
#define senzorStanga1 A2
#define senzorStanga2 A1
#define SenzorStanga3 A0
#define senzorDreapta1 A3
#define senzorDreapta2 A4
#define senzorDreapta3 A5
#define timpAsteptare 200 // valoarea asteotare pentru urmatoare actiune
#define motorStangaPin1 3
#define motorStangaPin2 4
#define motorDreaptaPin1 5
#define motorDreaptaPin2 6
#define Kp 0.5
#define Kd 5
#define vitezaMaximaMotorDreapta 220
#define vitezaMaximaMotorStanga 220
#define vitezaBazaMotorDreapta 140
#define vitezaBazaMotorStanga 140
#define numarSenzori 6
#define numarProbeSenzor 4
int valoareSenzorStanga1;
int valoareSenzorStanga2;
int valoareSenzorStanga3;
int valoareSenzorDreapta1;
int valoareSenzorDreapta2;
47
int valoareSenzorDreapta3;
int nivelRedare;
char hartaLabirint[30] = {};
int lungimeHa rtaLabirint;
int pozitieCitire;
int ultimaEroare = 0;
int vitezaCurentaMotorDreapta = 0;
int vitezaCurentaMotorStanga = 0;
QTRSensorsAnalog qtra((unsigned char[]) {A2, A3, A4, A5, A6, A7}, numarSenzori,
numarProbeSenzor);
void setup() {
Serial.be gin(9600);
pinMode(senzorStanga1, INPUT);
pinMode(senzorStanga2, INPUT);
pinMode(SenzorStanga3, INPUT);
pinMode(senzorDreapta1, INPUT);
pinMode(senzorDreapta2, INPUT);
pinMode(senzorDreapta3, INPUT);
pinMode(motorStangaPin1, OUTPUT);
pinMode(motorStangaPin2, OUTPUT);
pinMode(motorDreaptaPin1, OUTPUT);
pinMode(motorDreaptaPin2, OUTPUT);
for (int i = 0; i < 200; i++)
{
qtra.calibrate();
}
delay(1000);
}
48
void ajusteazaVitezaMotoarelor() {
unsigned int s ensors[6];
int position = qtra.readLine(sensors);
int eroare = 2500 – position;
int vitezaMotor = Kp * eroare + Kd * (eroare – ultimaEroare);
ultimaEroare = eroare;
vitezaCurentaMotorDreapta = vitezaBazaMotorDreapta + vitezaMotor;
vitezaCurentaMotorStanga = vitezaBazaMotorStanga – vitezaMotor;
if (vitezaCurentaMotorDreapta > vitezaMaximaMotorDreapta ) vitezaCurentaMotorDreapta =
vitezaMaximaMotorDreapta;
if (vitezaCurentaMotorStanga > vitezaMaximaMotorStanga ) vitezaCurentaM otorStanga =
vitezaMaximaMotorStanga;
if (vitezaCurentaMotorDreapta < 0) vitezaCurentaMotorDreapta = 0;
if (vitezaCurentaMotorStanga < 0) vitezaCurentaMotorStanga = 0;
Serial.println("Valoare cureenta motor dreapta: ");
Serial.println(vitezaCu rentaMotorDreapta);
Serial.println("Valoare cureenta motor stanga: ");
Serial.println(vitezaCurentaMotorStanga);
}
void loop() {
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
if(valoareSenzorStanga3==1 && valoareSenzorDreapta3== 1 && (valoareSenzorStanga1==0 ||
valoareSenzorDreapta1==0) ) { // este pe linia neagra
mergiDrept();
} else {
intraInLabirint();
}
49
}
void citesteValorileSenzorilor() {
Serial.println("valoareSenzorStanga1: ");
Serial.println(analogRead(senzorStanga1));
Serial.println("valoareSenzorStanga2: ");
Serial.println(analogRead(senzorStanga2));
Serial.println("valoareSenzorStanga3 : ");
Serial.println(analogRead(SenzorStanga3));
Serial.println("valoareSenzor Dreapta1: ");
Serial.println(analogRead(senzorDreapta1));
Serial.println("valoareSenzorDreapta2: ");
Serial.println(analogRead(senzorDreapta2));
Serial.println("valoareSenzorDreapta3: ");
Serial.println(analogRead(senzorDreapta3));
valoareS enzorStanga1 = analogRead(senzorStanga1) >= 500 ? 1 : 0 ;
valoareSenzorStanga2 = analogRead(senzorStanga2) >= 500 ? 1 : 0 ;
valoareSenzorStanga3 = analogRead(SenzorStanga3) >= 500 ? 1 : 0 ;
valoareSenzorDreapta1 = analogRead(senzorDreapta1) >= 500 ? 1 : 0 ;
valoareSenzorDreapta2 = analogRead(senzorDreapta2) >= 500 ? 1 : 0 ;
valoareSenzorDreapta3 = analogRead(senzorDreapta3) >= 500 ? 1 : 0 ;
Serial.println("valoareSenzorStanga1: ");
Serial.println(valoareSenzorStanga1);
Serial.println ("valoareSenzorStanga2: ");
Serial.println(valoareSenzorStanga2);
Serial.println("valoareSenzorStanga3 : ");
Serial.println(valoareSenzorStanga3);
Serial.println("valoareSenzorDreapta1: ");
Serial.println(valoareSenzorDreapta1);
Serial.println("valoareSenzorDreapta2: ");
Serial.println(valoareSenzorDreapta2);
Serial.println("valoareSenzorDreapta3: ");
Serial.println(valoareSenzorDreapta3);
50
}
void intraInLabirint() { printMotorSpeeds("leftHandWall");
if( valoareSenzo rStanga3==0 && valoareSenzorDreapta3==0){ // citeste negru pe toata linia
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite( motorDreaptaPin2, LOW);
delay(timpAsteptare);
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
if(valoareSenzorStanga3==0 || valoareSenzorDreapta3==0){ // a doua citire de negru pe toata
linia se opreste
terminareExecutie( ); // stop
}
if(valoareSenzorStanga3==1 && valoareSenzorDreapta3==1){ // a trecut pe alb cu citirea
vireazaStanga(); // face stanga
}
}
if(valoareSenzorStanga3==0) {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(timpAsteptare);
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
if(valoareSenzorStanga3==1 && valoareSenzorDreapta3==1){
vireazaStanga();
}
else {
terminareExecutie();
}
}
51
if(valoareSenzorDreapta3==0) {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrit e(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(30);
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
if(valoareSenzorStanga3==0) {
delay(timpAsteptare -30);
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
if(valoareSenzorDreapta3==0 && valoareSenzorStanga3==0) {
terminareExecutie();
}
else {
vireazaStanga();
return;
}
}
delay(timpAsteptare -30);
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
if(valoareSenzorStanga3==1 && valoareSenzorStanga1==1 && valoareSenzorDreapta1==1 &&
valoareSenzorDreapta3==1) {
vireazaDreapta();
return;
}
hartaLabirint[lungimeHartaLabirint]='S';
lungimeHartaLabirint++;
52
if(hartaLabirint[lungimeHartaLabirint -2]=='B'){
scurteazaHartaLabirint();
}
mergiDrept();
}
citesteValorileSenzorilor();
ajuste azaVitezaMotoarelor();
if(valoareSenzorStanga3==1 && valoareSenzorStanga1==1 && valoareSenzorDreapta1==1
&& valoareSenzorDreapta3==1 && valoareSenzorStanga2==1 && valoareSenzorDreapta2==1) {
intoarce();
}
}
void terminareExecutie() {
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
nivelRedare=1;
hartaLabirint[lungimeHartaLabirint]='D';
lungimeHartaLabirint++;
delay(5 00);
continua();
}
void vireazaStanga() { printMotorSpeeds("turnLeft");
while(digitalRead(senzorDreapta1)==0||digitalRead(senzorStanga1)==0) {
digitalWrite(motorStangaPin1, LOW);
analogWrite(motorStangaPin2, vitezaCurentaMotorStanga);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(200);
53
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
}
while(digitalRead(senzorDreapta1)==1) {
digitalWrite(motorStangaPin1, LOW);
analogWrite(motorStangaPin2, vitezaCurentaMotorStanga);
analogWrite(motorDreaptaPin1, vitezaCurenta MotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(200);
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
}
if(nivelRedare==0) {
hartaLabirint[lungimeHartaLabirint]='L';
lungimeHartaLabirint++;
if(hartaLabirint[lungimeHartaLabirint -2]=='B') {
scurteazaHartaLabirint();
}
}
}
void vireazaDreapta() {
printMotorSpeeds("turnRight");
while(digitalRead(senzorDreapta1)==0) {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
54
digitalWrite(motorDreaptaPin1, LOW);
analogWrite(motorDreaptaPin2, vite zaCurentaMotorDreapta);
delay(200);
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
}
while(digitalRead(senzo rDreapta1)==1) {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
analogWrite(motorDreaptaPin2, vitezaCurentaMotorDreapta);
delay(200);
digitalWri te(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
}
while(digitalRead(senzorStanga1)==1) {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
analogWrite(motorDreaptaPin2, vitezaCurentaMotorDreapta);
delay(200);
digitalWrite(motorStangaPin1 , LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
}
55
if(nivelRedare==0) {
hartaLabirint[lungimeHartaLabirint]='R';
Serial.println("r");
lungimeHartaLabirint++;
Serial.println("Path length: ");
Serial.println(lungimeHartaLabirint);
if(hartaLabirint[lungimeHartaLabirint -2]=='B') {
Serial.println("shortening path");
scurteazaHartaLabirint();
}
}
}
void mergiDrept() {
printMotorSpeeds("straight");
if( digitalRead(senzorStanga1)==1) {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(2 00);
return;
}
if(digitalRead(senzorDreapta1)==1){
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreapt aPin2, LOW);
delay(100);
digitalWrite(motorStangaPin1, LOW);
56
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(200);
return;
}
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(200);
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
}
void intoarce() {
printMotorSpeeds("turnAround");
ajusteazaVitezaMotoarelor();
analogWrite(motorStangaPin1, vitezaC urentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(150);
while(digitalRead(senzorStanga1)==1) {
ajusteazaVitezaMotoarelor();
digitalWrite(motorStangaPin1, LOW);
analogWrite(motorStangaPin2, vitezaCurentaMotorStanga);
57
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(2);
ajusteazaVitezaMotoarelor();
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
delay(1);
}
hartaLabirint[lungimeHartaLabirint]='B';
lungimeHartaLabirint++;
mergiDrept();
}
void scurteazaHartaLabirint() {
int shortDone=0;
if(hartaLabirint[lungimeHartaLabirint -3]=='L' && hartaLabirint[lungimeHartaLabirint -1]=='R') {
lungimeHartaLabirint -=3;
hartaLabirint[lungimeHartaLabirint]='B';
shortDone=1;
}
if(hartaLabirint[lungimeHartaLabirint -3]=='L' && hartaLabirint[lungimeHartaLabirint -1]=='S'
&& shortDone==0) {
lungimeHartaLabirint -=3;
hartaLabirint[lungimeHartaLabirint]='R';
shortDone=1;
}
if(hartaLabirint[lungimeHartaLabirint -3]=='R' && hartaLabirint[lungimeHartaLabirint -1]=='L'
&& shortDone==0) {
lungimeHartaLabirint -=3;
58
hartaLabirint[lungimeHartaLabirint]='B';
shortDone=1;
}
if(hartaLabirint[lungimeHartaLabirint -3]=='S' && hartaLabirint[lungimeHartaLabirint -1]=='L'
&& shortDone==0) {
lungimeHartaLabirint -=3;
hartaLabirint[lungimeHartaLabirint]='R';
shortDone=1;
}
if(hartaLabirint[lungimeHartaLabirint -3]=='S' && hartaLabirint[lungimeHartaLabirin t-1]=='S'
&& shortDone==0) {
lungimeHartaLabirint -=3;
hartaLabirint[lungimeHartaLabirint]='B';
shortDone=1;
}
if(hartaLabirint[lungimeHartaLabirint -3]=='L' && hartaLabirint[lungimeHartaLabirint -1]=='L'
&& shortDone==0) {
lungimeH artaLabirint -=3;
hartaLabirint[lungimeHartaLabirint]='S';
shortDone=1;
}
hartaLabirint[lungimeHartaLabirint+1]='D';
hartaLabirint[lungimeHartaLabirint+2]='D';
lungimeHartaLabirint++;
}
void continua() {
printMotorSpeeds("replay");
citesteValorileSenzorilor();
ajusteazaVitezaMotoarelor();
59
if(valoareSenzorStanga3==1 && valoareSenzorDreapta3==1) {
mergiDrept();
} else {
if(hartaLabirint[pozitieCitire]=='D') {
analogWrite(motorSta ngaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(100);
digitalWrite(motorStangaPin1, LOW);
digitalWrite(motorStangaPin2, LOW);
digitalWrite(motorDreaptaPin1, LOW);
digitalWrite(motorDreaptaPin2, LOW);
//opreste();
}
if(hartaLabirint[pozitieCitire]=='L') {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(timpAsteptare);
vireaz aStanga();
}
if(hartaLabirint[pozitieCitire]=='R') {
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(motorDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(mo torDreaptaPin2, LOW);
delay(timpAsteptare);
vireazaDreapta();
}
if(hartaLabirint[pozitieCitire]=='S'){
60
analogWrite(motorStangaPin1, vitezaCurentaMotorStanga);
digitalWrite(motorStangaPin2, LOW);
analogWrite(moto rDreaptaPin1, vitezaCurentaMotorDreapta);
digitalWrite(motorDreaptaPin2, LOW);
delay(timpAsteptare);
mergiDrept();
}
pozitieCitire++;
}
continua();
}
void printMotorSpeeds(String locatie) {
Serial.println(locatie);
Serial.println("Valoare cureenta motor dreapta: ");
Serial.println(vitezaCurentaMotorDreapta);
Serial.println("Valoare cureenta motor stanga: ");
Serial.println(vitezaCurentaMotorStanga);
}
void opreste(){
delay(5 00);
delay(200);
delay(200);
delay(500);
opreste();
}
Următorul pas este reprezentat de adăugarea părții de program ce conține comunicația
bluetooth. Aceasta trebuie să transmită către cel de al doilea robot șirul ” hartaLabirint”, acesta
reprezintă soluția găsită de primul robot. Cel de al doilea robot trebuie să aibă poziția inițială în
același loc precum primul pentru a urmări corect traseul primit.
61
6. Eficiența Economică
Pentru evidențierea caracteristicilor economice ale resurselor folosite pentru realizarea
sistemului prezentat în capitolele anterioare, se va realiza un studiu tehnico -economic. Trecerea din
stadiul de prototip în stadiul de produs trebuie să demonstreze fezabilitatea produsului și obținerea
unui profit în urma vânzării lui.
În studiul tehnico -economic al robotului mobil pe pernă de aer,cheltuielile totale sunt calculate
pentru un produs de serie mică în care se fabrică un număr redus de exemplare. Întrucât nu este
destinat a fi un produs de larg consum, nu vor fi incluse în calcul cheltuieli adiționale pentru
realizarea propriei linii deproducție.
Profitul ( 𝛱𝑃) obținut în urma vânzării se poate calcula folosind formula:
𝛱𝑃= 𝑃𝑣 ∙𝑄− 𝐶𝑟 ∙𝑄
unde :
𝑃𝑣- preț de vânzare
𝑄 – numărul de unități vândute
𝐶𝑟 – costuri de producție totale
Calcularea costurilor de producție totale se poate face după formula:
𝐶𝑟 = 𝐶𝑚𝑎𝑡 + 𝐶𝑟𝑢+ 𝐶𝑎𝑚
Unde:
𝐶𝑚𝑎𝑡 – cheltuieli cu materialele
𝐶𝑟𝑢 – cheltuieli cu resurse umane
𝐶𝑎𝑚 – cheltuieli cu amortizarea echipamentelor
6.1 Calculul cheltuielilor materiale
Cheltuielile materiale sunt formate din cheltuielile cu produsele finite cumpărate, cheltuielile cu
materia primă pentru produsele fabricate și utilități, conform ecuației:
𝐶𝑚𝑎𝑡 =𝐶𝑝𝑓+𝐶𝑚𝑝+𝐶𝑢
Unde:
𝐶𝑝𝑓 – cheltuieli cu produse finite
𝐶𝑚𝑝 – cheltuieli cu materia primă
𝐶𝑢 – cheltuieli de unitate
62
Întabelul din figura 6.1 sunt prezentate prețurile produselor finite necesare ansamblului de
roboți mobili.
Fig. 6.1. Prețurile produselor finite necesare robotului mobil pe pernă de aer
Nr. Denumire
Buc
.
U.M
. Prețunitar
[RON] Preț total
[RON]
1 Bară cu opt senzori analogici 2 Buc. 50 100
2 Driver L298n 2 Buc 10 20
3 Motor cu reductor din metal (96 rpm) 2 Buc 30 60
4 Motor cu reductor (120 rpm) 2 Buc 27 54
5 Roată MG 2 Buc 7 14
6 Set roți 70 mm 1 Buc 47 47
7 Roată dirijoare 2 Buc 17 34
8 Arduino mega 2560 2 Buc 38 76
9 Suport 6 baterii 2 Buc 8 16
10 Suport pentru baterie de 9V 2 Buc 2 4
11 Distanțier din metal M3 30mm 20 Buc 2,5 50
12 Șurub M3 44 Buc 0,5 22
13 Piuliță M3 8 Buc 0,2 1,6
14 Șurub M2 8 Buc. 0,2 1,6
15 Piulițe M2 16 Buc. 0,2 3,2
16 Baterii 1,5 V 3 Set 2,6 7,8
17 Conectori electrici 6 Set 3 18
18 Modul bluetooth HC -05 2 Buc. 32 64
19 Breadbord 1 Buc. 5 10
63
Însumând prețul total al fiecărui produs din tabelul de mai sus, s -au obținut cheltuielile cu
produsele finite, conform ecuației:
𝑪𝒑𝒇= ∑𝑻𝒑𝒇𝒊=603 ,2 𝑹𝑶𝑵
Întabelul din figura 6.2 sunt prezentate prețurile materiilor prime necesare fabricării componentelor
specifice robotului mobil pe pernă de aer.
Nr. Denumire Buc. U.M. Preț unitar
[RON] Preț total
[RON]
1 PLA 1,75mm 1 Kg 85 85
2 Placaj plop 4mm 1 mp 50 50
3 Bară PVC 1 Buc. 2,7 2,7
Fig. 6.2. Prețurile materiilor prime necesare fabricării componentelor robotului mobil pe pernă de
aer
Însumând prețul totalal fiecărui produs din tabelul de mai sus, s-au obținut cheltuielile cu materiile
prime, conform ecuației:
𝑪𝒎𝒑=∑𝑻𝒎𝒑𝒊 =137 ,7 𝑹𝑶𝑵
Cheltuielile de unitate ( 𝑪𝒖) sunt constituite, în principal, din cheltuieli datorate consumului de
energie electrică ( 𝑪𝒆) pentru operațiunile de imprimare 3D prin FDM și debitare prin prelucrare cu
laser. Acestea se estimează la 200 Ron/ lună și se raportează la numărul de unități ( Q) produse/lună .
𝑪𝒖=𝑪𝒆
𝑸=𝟐𝟎𝟎 (𝑹𝑶𝑵 )
𝑸 (𝑩𝒖𝒄 )
6.2 Calculul cheltuielilor cu resursele umane
Cheltuielile cu resursele umane ( 𝑪𝒓𝒖) sunt egale cu suma dintre cheltuielile cu salariile ( 𝑪𝒔) și cu
sumele datorate bugetului de stat ( 𝑪𝒃𝒔) după cum se poate observa în ecuația:
𝑪𝒓𝒖= 𝑪𝒔+ 𝑪𝒃𝒔
𝑸
Operațiile care necesită resurse umane pentru a fi realizate sunt prezentate în tabelul din figura 6.3.
64
Nr. Denumire Durată (ore)
1 Calibrarea și operarea imprimantei 3D 2
2 Operarea aparatului de debitat cu laser 1
3 Asamblare 3
Fig. 6.3. Durata de timp a operațiilo de prelucrare necesar
Pentru operațiile descries mai sus, este nevoie de un technician mecanic cu un salariu brut de 2800
𝑅𝑂𝑁. Timpul total alocat producției unei unități este mai mare decât cel prezentat în tabelul din figura
6.3 din cauza duratei de lucru a imprimantei 3D. Totuși, tehnicianul trebuie doar să configureze
procesele imprimantei și al aparatului de debitat cu laser, după care acestea pot rula nesupravegheate.
𝑪𝒃𝒔=𝟑𝟖,𝟓
𝟏𝟎𝟎∙ 𝑪𝒔=1078 𝑹𝑶𝑵
6.3 Calculul amortizării echipamentelor
Echipamentele au costuri ridicate și din această cauză, amortizarea lor se realizează în timp.
Echipamentele necesar e realizării operațiilor din figura 6.3 sunt prezentate în tabelul din figura 6.4.
Fig. 6.4. Prețurile echipamentelor și amortizarea lunară a acestora
Însumând amortizarea lunară a fiecărui echipament din tabelul de mai sus, s -au obținut cheltuielile
cu amortizarea, conform ecuației:
𝑪𝒂𝒎= ∑𝑻𝒂𝒎𝒊
𝑸=𝟐𝟏𝟎 (𝑹𝑶𝑵 )
𝑸 (𝑩𝑼𝑪 )
Nr.
Denumire Prețachiziție[
RON] Amortizare
[ani] Amortizare lunară
[RON]
1 Imprimantă 3D 2400 4 50
2 Aparat de debitat cu laser 7200 4 150
3 Unelte electrice de mână 240 2 10
65
6.4 Calculul profitului
Într-o lună se pot fabrica, în medie, 15 unități, fiind conform cu o producție de serie mică. Pentru
aceasta, se va angaja un tehnician, potrivit mențiunilor de mai sus.
Având în vedere ecuațiile din capitolele anterioare se pot deduce:
𝑪𝒖=𝑪𝒆
𝑸=13,3 𝑹𝑶𝑵 /𝑩𝑼𝑪
𝒄𝒓𝒖=𝒄𝒔+𝒄𝒔𝒃
𝑸=2800 +1078
15=258 ,53 𝑹𝑶𝑵 /𝑩𝑼𝑪
𝑪𝒎𝒂𝒕 =𝑪𝒑𝒇+ 𝑪𝒎𝒑+𝑪𝒖=603 ,2+137 ,7+13,3=754 ,2 𝑹𝑶𝑵 /𝑩𝑼𝑪
𝑪𝒂𝒎=∑𝑪𝒂𝒎
𝑸=𝟐𝟏𝟎
𝟏𝟓=𝟏𝟒 𝑹𝑶𝑵 /𝑩𝑼𝑪
Cheltuielile totale fiind:
𝑪𝒓=𝐶𝑚𝑎𝑡 +𝐶𝑟𝑢+𝐶𝑎𝑚=754 ,2+258 ,53+14=1026 ,73 𝑹𝑶𝑵 /𝑩𝑼𝑪
Se stabilește un profit de 21% și se calculează prețul de vânzare:
𝑃𝑣= 𝐶𝑟∙1,21=1026 ,73∙1,21=1242 ,34 𝑹𝑶𝑵
Se calculează profitul lunar impozitabil ca fiind:
𝜋=𝑃𝑣∙𝑄−𝐶𝑟∙𝑄=1242 ,34∙15−1026 ,73∙15=3234 ,15 𝑹𝑶𝑵
Se scade impozitul datorat statului:
𝐼𝑝=19
100∙ 𝜋=614 ,489 𝑹𝑶𝑵
Astfel, profitul lunar net este:
𝜋𝑛𝑒𝑡=𝜋−𝐼𝑝=3234 ,15−614 ,489 =2619 ,661 𝑹𝑶𝑵
66
7. Concluzii
Construirea ansamblului de roboți mobili presupune cunoștințe complexe deoarece este dificilă
corelația dintre partea fizică (roboții fizici) și partea virtuală (programele).
De asemenea, este greu de realizat șasiul roboților fără să fie printat 3D sau fără echipament
special. Totuși se pot construi și fără echipament special, dar prin această modalitate se consumă mult
timp. \
Comunicația bluetooth reprezintă o altă problemă i mportantă, mai ales în cazul în care se
dorește transmiterea soluției către mai mult de șapte roboți. În momentul acesta se pot controla maxim
șapte roboți prin metoda aceasta de comunicare.
Totodată, comunicația bluetooth reprezintă prima îmbunătățire ce trebuie adusă ansamblului
dacă se dorește să poată fi folosit la scară mare. Pentru a putea transmite semnalul unui număr mare de
roboți se poate folosi comunicația Wi -Fi sau altă comunicație asemănătoare.
Pentru comercializarea ansamblușui în masă, su nt necesare echipamente speciale, muncitori cu
experiență în domeniu și unelte specifice.
67
8. Bibliografie
[1] http://robotickyden.cz/2017/robots/img/2017r_0131_L.pdf accesat la data 04.06.2019
[2] https://www.amrita.edu/site/robotsavam -2017/ accesat la data 04.06.2019
[3] https://www.mobilissimo.ro/articole -diverse/turul -magazinelor -170 accesat la data 04.06.2019
[4] https://www.descopera.ro/dnews/4684801 -lighioana -robotica -cu-sase -picioare accesat la data
04.06.2019
[5] https://vdocuments.mx/roboti -pasitori -curs.html accesat la data 04.06.2019
[6] https://www.researchgate.net/figure/13 -The-NEC-Quake -Snake -utilized -a-novel -universal -type –
joint -between -links -for-a_fig5_243776586 accesat la data 04.06.2019
[7] http://snappyxo.com/portfolio/tri -cycle -drive -robot -front -wheel -is-servo -driven -for-change -in-
direction -of-motion/ accesat la data 09.06.2019
[8] https://pl.aliexpress.co m/item/SunFounder -Smart -Car-Kit-for-Arduino -Uno -R3-Electronic -Diy-
Obstacle -Avoiding -Line-Tracing -Light -Seeking/32812584906.html accesat la data 09.06.2019
[9] https://mathieufrilet.wordpress.com/robots/four -wheels/custom -built -4wd -differential -drive –
with -radio -modem -control -night -vision -articulated -camera -pod/ accesat la data 09.06.2019
[10] http://dougsbots.blogspot.com/2014/09/how -to-train -your -robot -part-i.html accesat la data
09.06.2019
[11] https://www.oreilly.com/library/view/robot -building -for/9781430227489/ch06.html accesat la
data09.06.2019
[12] https://www.danielandrade.net/2014/0 8/12/line -follower -robot/ accesat la data 11.06.2019
[13] https://www.danielandrade.net/wp -content/uploads/2014/08/relatorio -final.pdf accesat la
data11.06.2019
[14] http://electronicsirfan.blogspot.com/2013/11/line -following -robot -using -555-timer.html accesat
la data 11.06.2019
[15] http://electronicsirfan.blogspot.com/2013/11/line -following -robot -using -555-timer.html accesat
la data 11.06.2019
[16] https://www.parallax.com/product/boe -bot-robot accesat la data 11.06.2019
[17] https://www.pololu.com/product/975 accesat la data 11.06.2019
[18] https://www.pololu.com/product/975#lightbox -picture0J986 accesat la data 11.06.2019
[19] https://www.pololu.com/product/975#lightbox -picture0J984 accesat la data 11.06.2019
68
[20] https://www.pololu.com/product/975 accesat la data 11.06.2019
[21] https://www.adafruit.com/product/2388 accesat la data 11.06.2019
[22] https://www.pololu.com/blog/675/romi -and-raspberry -pi-robot accesat la data 11.06.2019
[23] https://www.rob otroom.com/Maze -Solving -Robot -All-Right.html accesat la data 11.06.2019
[24] https://www.ekahau.com/blog/2018/07/09/state -of-wi-fi-report/ accesat la data 18.06.2019
[25] http://www.vizocom.com/blog/wimax -differ -wifi/accesat la data 18.06.2019
[26] https://ro.wikipedia.org/wiki/Bluetooth accesat la data 18.06. 2019
[27] https://embedjournal.com/shortest -path -line-follower -robot -logic -revealed/ accesat la data
20.06.2019
[28] https://www.instructables.com/id/Maze -Solver -Robot -Using -Artificial -Intelligence -Wi/accesat la
data20.06.2019
[29] https://www.robofun.ro/motor -cu-cutie -de-viteze -120:1 -tip-pololu?search=pololu accesat la data
20.06.2019
[30] https://www.optimusdigital.ro/ro/motoare -altele/5833 -motor -cu-reductor -din-metal -i-ax-cu-
diametrul -de-4-mm-6-v-96-rpm.html accesat la data 20.06.2019
[31] https://ro.rsdelivers.com/product/arduino/a000067/arduino -mega -2650 -rev3 -mcu –
development -board -with/7154084 accesat la data 22.06.2019
[32] https://www.optimusdigital.ro/ro/compatibile -cu-arduino -mega/2560 -placa -de-dezvoltare –
compatibila -cu-arduino -mega -2560 -atmega2560 -ch340 -si-cablu-50-
cm.html?search_query=arduino+mega&results=40 accesat la data 22.06.2019
[33] https://www.optimusdigital.ro/ro/wireless -bluetooth/862 -modul -bluetooth -40-cu-adaptor –
compatibil -33v-si-
5v.html?search_query=Modul+cu+Bluetooth+4.0+si+Adaptor+%28compatibil+3.3V+si+5V%29&result
s=2accesat la data 22.06 .2019
[34]https://www.robofun.ro/bara_senzori_linie_qtr_8a?search=Bara%20senzori%20linie%20analogic
%20QTR -8Aaccesat la data 23.06.2019
[35]https://www.robofun.ro/l298_motor_driver_red?search=Driver%20de%20motor%20L298%20Re
d%20board accesat la data 23.06.2019
[36] https://www.robofun.ro/mecanice/roti_senile/roata -mgaccesat la data 18.08.2019
[37] https://www.robofun.ro/mecanice/roti_senile/roti_70x8mm accesat la data 18.08.2019
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: Ansamblu de roboți mobili care colaborează [619654] (ID: 619654)
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.
