Differences

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

Link to this comparison view

pm:prj2021:avaduva:obstacleavoidingcar [2021/05/21 23:15]
dragos.ionita2303
pm:prj2021:avaduva:obstacleavoidingcar [2021/06/03 23:31] (current)
dragos.ionita2303
Line 8: Line 8:
  
 Proiectul constă într-o mașinuță cu două motoare, cu senzori de viteză a rotației celor două motoare Proiectul constă într-o mașinuță cu două motoare, cu senzori de viteză a rotației celor două motoare
-și capacitatea de a urma trasee predefinite ​la apăsarea ​unor butoane.+și capacitatea de a urma un traseu predefinit la pornirea mașinuței (la alimentarea acesteia sau la apăsarea ​butonului RESET de pe Arduino).
  
 Pe parcursul traseului, mașinuța va fi capabilă să identifice obstacolele din fața sa Pe parcursul traseului, mașinuța va fi capabilă să identifice obstacolele din fața sa
-și să le ocolească să se oprească.+și să se oprească, apoi -și schimbe direcția de mers pentru a evita coliziunea.
  
 ====== Descriere generală ====== ====== Descriere generală ======
Line 71: Line 71:
   * Baterie de 9V pentru alimentarea Arduino + conector pentru Arduino (baterie clasică Alkaline de 9V)   * Baterie de 9V pentru alimentarea Arduino + conector pentru Arduino (baterie clasică Alkaline de 9V)
   * Fire mamă-tată și tată-tată [[https://​cleste.ro/​10-x-fire-dupont-tata-tata-10cm.html]] și [[https://​cleste.ro/​10xfire-dupont-mama-tata-20cm.html]]   * Fire mamă-tată și tată-tată [[https://​cleste.ro/​10-x-fire-dupont-tata-tata-10cm.html]] și [[https://​cleste.ro/​10xfire-dupont-mama-tata-20cm.html]]
-  * Unul sau două push buttons [[https://​cleste.ro/​butoane-tactile-6x6x5mm.html]] 
   * Unul sau două led-uri [[https://​cleste.ro/​led-rgb-5mm-4pini.html]]   * Unul sau două led-uri [[https://​cleste.ro/​led-rgb-5mm-4pini.html]]
 +
 +{{ :​pm:​prj2021:​avaduva:​obstacleavoidingcar_eagle_schematic.png?​700 |}}
  
 ====== Componente auxiliare pentru montare și alimentare ====== ====== Componente auxiliare pentru montare și alimentare ======
Line 114: Line 115:
 <code c> <code c>
 NewPing sonar(TRIGGER_PIN,​ ECHO_PIN, MAX_DISTANCE);​ NewPing sonar(TRIGGER_PIN,​ ECHO_PIN, MAX_DISTANCE);​
 +
 +void setup() {
 +  sound_speed = (331.4 + 0.606 * TEMP + 0.0124 * HUMID) / 10000.0;
 +}
  
 void loop() { void loop() {
Line 119: Line 124:
   duration = sonar.ping();​ // get the duration between sending and receiving the signal on the sensor pins   duration = sonar.ping();​ // get the duration between sending and receiving the signal on the sensor pins
   ​   ​
-  distance = (duration / 2) * 0.0343; // 343 m/s, speed of light, in transformed in cm/s+  distance = (duration / 2) * sound_speed ​; // 343 m/s, speed of light, in transformed in cm/ms
  
   Serial.print("​Distance = ");   Serial.print("​Distance = ");
Line 148: Line 153:
 Pentru video-ul de la link-ul [6], poza cu măsurătoarea distanței cu senzorul ultrasonic HC-SR04, pentru 30cm, 25cm, 20cm, 15cm și 10cm (rigla din video pentru referință). Se observa erori de 1, 2 cm când se stabiliează poziția senzorului pentru fiecare din cele 5 valori de mai sus: Pentru video-ul de la link-ul [6], poza cu măsurătoarea distanței cu senzorul ultrasonic HC-SR04, pentru 30cm, 25cm, 20cm, 15cm și 10cm (rigla din video pentru referință). Se observa erori de 1, 2 cm când se stabiliează poziția senzorului pentru fiecare din cele 5 valori de mai sus:
  
-{{:​pm:​prj2021:​avaduva:​demo_senzori_distanta_1.png?​300 |}} {{:​pm:​prj2021:​avaduva:​demo_senzori_distanta_2.png?​300 |}} {{:​pm:​prj2021:​avaduva:​demo_senzori_distanta_3.png?​300 |}}+{{:​pm:​prj2021:​avaduva:​demo_senzori_distanta_1.png?​300 |}}{{:​pm:​prj2021:​avaduva:​demo_senzori_distanta_2.png?​300 |}}{{ :​pm:​prj2021:​avaduva:​demo_senzori_distanta_3.png?​300 |}} 
 + 
 +  * 23 Mai 2021 
 +    * Asamblare completă robot (hardware), conform schemelor bloc și imaginilor prezentate, fără senzorul de distanță HC-SR04 montat. Cuprinde plăcuța Arduino, driverul L298N H-Bridge, senzorii optocuplori H2010 cu microprocesor LM393, mini-breadboard-ul,​ bateriile 4 x 1,5V, bateria de 9V pentru Arduino, motoarele DC și roțile șasiului. În plus față de schema bloc, am implementat și un întrerupător pentru alimentarea motoarelor prin driverul L298N de la cele 4 baterii de 1,5V. Se vede în pozele următoare, switch-ul 0/1 dintre senzori, langa breadboard:​ 
 +{{ :​pm:​prj2021:​avaduva:​poza_robot_complet_fara_hc_sr04_1.jpg?​500 |}}{{ :​pm:​prj2021:​avaduva:​poza_robot_complet_fara_hc_sr04_2.jpg?​500 |}}{{ :​pm:​prj2021:​avaduva:​poza_robot_complet_fara_hc_sr04_3.jpg?​500 |}}{{ :​pm:​prj2021:​avaduva:​poza_robot_complet_fara_hc_sr04_4.jpg?​500 |}} 
 + 
 +    * Videoclip cu o rutină scurtă de testare a driver-ului L298N este la link-ul [7], robotul merge înainte la o viteză de 75% pentru 4 secunde. Codul sursa pentru aceasta rutină este: 
 +<code c> 
 +// Pins for Motor A 
 +int en_A = 10; 
 +int in_1 = 9; 
 +int in_2 = 8; 
 + 
 +// Pins Motor B 
 + 
 +int en_B = 5; 
 +int in_3 = 7; 
 +int in_4 = 6; 
 + 
 +void demoOne() 
 +
 +  // Turn on Motor A FORWARD 
 +  digitalWrite(in_1,​ HIGH); 
 +  digitalWrite(in_2,​ LOW); 
 + 
 +  // Turn on Motor B FORWARD 
 +  digitalWrite(in_3,​ HIGH); 
 +  digitalWrite(in_4,​ LOW); 
 + 
 +  delay(500);​ 
 + 
 +  // Set Speed for Motor A at 200/255 
 +  analogWrite(en_A,​ 200); 
 + 
 +  // Set Speed for Motor B at 200/255 
 +  analogWrite(en_B,​ 200); 
 + 
 +  // Wait 4 seconds 
 +  delay(4000);​ 
 + 
 +  // Turn off both Motors A and B 
 +  digitalWrite(in_1,​ LOW); 
 +  digitalWrite(in_2,​ LOW); 
 +  digitalWrite(in_3,​ LOW); 
 +  digitalWrite(in_4,​ LOW); 
 +
 + 
 +void setup() { 
 +  // put your setup code here, to run once: 
 + 
 +  pinMode(en_A,​ OUTPUT); 
 +  pinMode(en_B,​ OUTPUT); 
 +  pinMode(in_1,​ OUTPUT); 
 +  pinMode(in_2,​ OUTPUT); 
 +  pinMode(in_3,​ OUTPUT); 
 +  pinMode(in_4,​ OUTPUT); 
 + 
 +  delay(2000);​ 
 + 
 +  demoOne();​ 
 +  delay(1000);​ 
 +
 + 
 +void loop() { 
 +  // put your main code here, to run repeatedly 
 +
 +</​code>​ 
 + 
 +  * 3 Iunie 2021 
 +    * Am montat pe sașiu, în partea din față a robotului, senzorul de distanță HC-SR04 și l-am configurat software să măsoare distanța la fiecare 0.3 secunde, iar dacă aceasta este mai mică decât un prag stabilit (18 centimetri, de exemplu), să detecteze și să semnaleze acest lucru, pentru ca să se ruleze rutina de evitare a obstacolului. (În cazul demo-ului meu, am ales ceva simplu: la fiecare detecție a unui obstacol, robotul să se întoarcă spre dreapta în jurul axei sale, cu 90 de grade, sau mai mult, de multe ori chiar și la 180 de grade (am încercat cu mai mulți pași ai trecerii fantelor encodoare prin dreptul senzorilor, 8, 10, și 15 (o rotiță encodoare are 20 de fante))). Mai jos atașez 2 poze cu robotul în varianta finală, cu senzorul de distanță atașat. 
 +{{ :​pm:​prj2021:​avaduva:​poza_obstacle_robot_complet_1.jpg?​500 |}} 
 +{{ :​pm:​prj2021:​avaduva:​poza_obstacle_robot_complet_2.jpg?​500 |}} 
 + 
 +    * La link-ul [8] este demo-ul, format dintr-o compilație de mai multe secvențe de rulare a robotului, în care acesta detectează și evită (în cele mai multe cazuri) obstacolele de pe '​traseu'​.
  
 ====== Concluzii ====== ====== Concluzii ======
 +
 +Proiectul încă poate fi îmbunătățit din punct de vedere software, putând fi configurat să ruleze orice traseu și să reacționeze la obstacole în moduri diferite. Marea problemă în menținerea direcției robotului o reprezintă roata directoare de pe rulmentul din spatele sașiului (cum se poate observa în demo-ul de la link-ul [8]), care nu stă mereu dreaptă și astfel traiectoria nu este dreaptă atunci când ar trebui să fie în mod normal (deoarece motoarele au aceeași turație). Mai mult, senzorul nu detectează foarte precis dacă obstacolul nu este perpendicular pe direcția de emitere a acestuia, deoarece undele nu revin pe aceeași direcție înapoi către senzor, iar asta poate duce la opriri prea târzii, după cum se poate observa în unele situații din demo-ul de la link-ul [8].
  
 ====== Download ====== ====== Download ======
 +Arhiva cu codul folosit la filmarea videoclipurilor componente din compilația din demo-ul de la linkul [8]: {{:​pm:​prj2021:​avaduva:​ionita_dragos_332cb_demo_robot_v1.0.zip|}} ​
 +
 [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​avaduva/​obstacleavoidingcar?​do=export_pdf]] [[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​avaduva/​obstacleavoidingcar?​do=export_pdf]]
  
Line 167: Line 249:
  
 [6] [[https://​youtu.be/​H9Kglekphdg]] [6] [[https://​youtu.be/​H9Kglekphdg]]
 +
 +[7] [[https://​youtu.be/​CIiOOT6_2Y0]]
 +
 +[8] [[https://​www.youtube.com/​watch?​v=EcM2bb0ISI8]]
pm/prj2021/avaduva/obstacleavoidingcar.1621628127.txt.gz · Last modified: 2021/05/21 23:15 by dragos.ionita2303
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