Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:dene:treasurehuntrobot [2023/05/30 08:53]
nicolae.linca [Software Design]
pm:prj2023:dene:treasurehuntrobot [2023/05/30 13:09] (current)
nicolae.linca [Rezultate Obţinute]
Line 67: Line 67:
 După ce robotul a trecut de setup-ul senzorilor și a motoarelor, el va face busy-waiting până la primirea caracterului '​1'​ pe interfața serială, prin bluetooth, moment în care va porni algoritmul de parcurgere automată din funcția //loop()//. Algoritmul de funcționare presupune în primul rând citirea în permanență a distanței până la cel mai apropiat obiect de pe traseu, astfel că în momentul apropierii de un obiect, robotul se va opri și va realiza una din rutinele de ocolire, sau va decide dacă ceea ce se află în fața sa este un zid, de la finalul traseului, caz în care își va încheia execuția. Un alt eveniment care are prioritate asupra modului normal de urmărire a traseului sau de evitare a obstacolelor o reprezintă detecția unui obiect de metal, caz în care robotul se va opri și va notifica pe moitorul serial de pe calculator găsirea acestuia, după care iși va relua execuția normală a algoritmului de parcurgere a traseului. După ce robotul a trecut de setup-ul senzorilor și a motoarelor, el va face busy-waiting până la primirea caracterului '​1'​ pe interfața serială, prin bluetooth, moment în care va porni algoritmul de parcurgere automată din funcția //loop()//. Algoritmul de funcționare presupune în primul rând citirea în permanență a distanței până la cel mai apropiat obiect de pe traseu, astfel că în momentul apropierii de un obiect, robotul se va opri și va realiza una din rutinele de ocolire, sau va decide dacă ceea ce se află în fața sa este un zid, de la finalul traseului, caz în care își va încheia execuția. Un alt eveniment care are prioritate asupra modului normal de urmărire a traseului sau de evitare a obstacolelor o reprezintă detecția unui obiect de metal, caz în care robotul se va opri și va notifica pe moitorul serial de pe calculator găsirea acestuia, după care iși va relua execuția normală a algoritmului de parcurgere a traseului.
  
 +Algoitmul de parcurgere a traseului constă in deplasarea în linie dreaptă până ce senzorul ultrasonic depisteză un obstacol la mai puțin de 35cm, moment în care este dată comanda de oprire a motoarelor. După care senzorul va fi poziționat să depisteze distanța la care se află cel mai apropiat obstacol în stânga, respectiv în dreapta obiectului din față, iar dacă aceste distanțe sunt comparabile,​ diferă cu cel mult 10cm, înseamnă că obiectul din față este un zid, caz în care se încheie execuția programului,​ altfel robotul va decide să îl ocolească prin stânga/​dreapta în funcție de spaștiul cel mai mare disponibil (disanța până la cel mai aporpiat obiect din stânga/​dreapta cât mai mare), apelând una din cele 2 rutine de ocilire ce realizează un traseu în formă de trapez.
  
 +<​code>​
 +void loop() {
 +  distance = ultrasonic();​
 +  // read metal Sensors
 +  int val[3] = {0, 0, 0};
 +  val[0] = analogRead(metalSensor[0]);​
 +  val[1] = analogRead(metalSensor[1]);​
 +  val[2] = analogRead(metalSensor[2]);​
 +  if (val[0] <= metalThreshold || val[1] <= metalThreshold || val[2] <= metalThreshold) {
 +    Stop(); ​
 +    Serial.println("​Gasit metal!"​);​
 +    forward2(400);​
 +    val[0] = val[1] = val[2] = METAL_MAX;
 +    delay(wait_metal);​
 +  }
 +
 +  if (distance < 35) {
 +    Stop();
 +    L = leftsee();
 +    delay(800);
 +    R = rightsee();
 +    Serial.println("​Obiect detectat!"​);​
 +    servo.write(spoint);​
 +    if (abs(distance - R) <= wallDistErr && abs(distance - L) <= wallDistErr) {
 +      Stop();
 +      servo.write(spoint);​
 +      Serial.println("​Zid detectat!\nProgram ended."​);​
 +      delay(500);
 +      exit(0);
 +    } else {
 +      if (L > R) {
 +        backward();
 +        delay(300);
 +        Stop(); ​  ​delay(wait_time);​
 +        Serial.println("​Ocolire stanga."​);​
 +        ocolire_stanga();​
 +      } else {
 +        backward();
 +        delay(500);
 +        Stop(); ​  ​delay(wait_time);​
 +        Serial.println("​Ocolire dreapta."​);​
 +        ocolire_dreata();​
 +      }
 +    }
 +    servo.write(spoint);​
 +  } else {
 +    forward();
 +  }
 +}
 +</​code>​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-Robot deadline hardware:+**Robot deadline hardware:**
  
 {{:​pm:​prj2023:​dene:​thr_hardware.jpeg?​250|}} {{:​pm:​prj2023:​dene:​thr_hardware.jpeg?​250|}}
 +
 +**Demo funționare:​ ** https://​www.youtube.com/​shorts/​Zkjj-E443SU
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+În implementarea robotului am realizat cât de importanți pot fi factori externi pentru realizarea roboților autonomi,​precum și cât de importantă este calitatea componentelor din care este realizat. Acest lucru l-am aflat "the hard way" în timp ce lucram la programul software al robotului unde din cauza problemelor hardware procesul de dezvoltare a fost îngreunat. ​
  
-<note warning>​ +Principala problemă de care m-am lovit în momentul în care am asamblat toate piesele și a umrat faza de testare în ansamlbu a fost faptul că motoarele consumă foarte multși majoritatea pieselor erau subalimentateceea ce m-a făcut să încerc diverse alimentări de la suportul de baterii de 6Vla o baterie de 9Vpână la varianta finală în care am decis să folosesc o sursă ​de tensiune de 12V, modificată de la o sursă de calculator. 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute ​în urma realizării proiectului:​ surseschemeetc. Un fişier READMEun ChangeLogun script ​de compilare şcopiere automată pe uC crează întotdeauna o impresie bună ;-).+Însă șdupă rezolvarea acestei probleme majore tot au mai rămase multe altele precum: aderența slabă a roților, driver-ul de motoare nu distribuie uniform puterea la cele 4 motoare, senzorii inductivi după o perioadă îndelungată de funționare devin mult mai sensibili și dau răspunsuri eronate. 
 +Aceste probleme am încercat să le rezolv e cât de mult posibil din software, însă și acesta are limitările sale, fapt pentru care robotul de multe ori poate avea un răspuns eronat.
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** ​sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin331CC -> **:pm:prj2009:cc:dumitru_alin**. +Aceste lucruri m-au făcut să realizaez cât de importantă este o bună planificare și documentare ​în alegerea pieselor în faza de incipit a realizării unui astfel de proiect, deoarece o dată apărute astfel de probleme, ​se poate ajunge la schimbarea radicală a planului ​de proiectare atât la nivel software, cât și hardware, ​sau chiar regândirea în întregime a proiectului. 
-</​note>​+===== Download ===== 
 +Arhiva cu codul sursadiagrama robot, schema bloc: {{:pm:prj2023:dene:pm2023_linca_nicolae_robert.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
Line 98: Line 153:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ 
-FIXME Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
-<​html><​a class="media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</a></html>+  * https://​ocw.cs.pub.ro/​courses/​pm 
 +  * https://​www.alldatasheet.com/​view.jsp?​Searchword=L293d%20Datasheet&​gad=1&gclid=CjwKCAjwvdajBhBEEiwAeMh1U1EUUKuStKriJemzf1RBs53vMS1yCWJqSxatoaDHArx2Lmke82saxxoCbI4QAvD_BwE 
 +  * https://components101.com/​sites/​default/​files/​component_datasheet/​HC-05%20Datasheet.pdf 
 +  * https://​www.the-diy-life.com/​arduino-based-obstacle-avoiding-robot-car/​ 
 +  * https://​stackoverflow.com/​questions/​41501360/​getting-distance-in-inches-and-cm-from-ultrasonic-sensor-in-arduino 
 +  * https://​www.amazon.co.uk/​Youmile-Inductive-Proximity-Leveling-Bracket/​dp/​B098B4XFM1 
 +  * https://​www.youtube.com/​watch?​v=1n_KjpMfVT0&​t=1s&​ab_channel=DIYBuilder
  
pm/prj2023/dene/treasurehuntrobot.1685426030.txt.gz · Last modified: 2023/05/30 08:53 by nicolae.linca
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0