Differences

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

Link to this comparison view

pm:prj2024:alucaci:ioana_mara.ghinea [2024/05/15 18:39]
ioana_mara.ghinea [Descriere generală]
pm:prj2024:alucaci:ioana_mara.ghinea [2024/05/22 22:30] (current)
ioana_mara.ghinea [Hardware Design]
Line 13: Line 13:
 În următoarea schemă bloc se pot observa modulele principale ale proiectului,​ cât și modul în care interacționează:​ În următoarea schemă bloc se pot observa modulele principale ale proiectului,​ cât și modul în care interacționează:​
  
-Senzori ​IRsenzorii ​emit lumină infraroșie către un obiect, atunci ​când lumina lovește o suprafață neagră ​este absorbită, rezultatul fiind unul LOW, iar atunci ​când suprafața e albă aceasta ​este reflectată, rezultatul fiind unul analogic+  * Senzori ​Infraroșii Reflectivi: emit măsurarea reflectanței ca o tensiune analogică care poate varia de la 0 V când reflectanțeste foarte puternică (exemplu: alb) până la VCC când reflectanța este foarte slabă (exemplu: negru)
  
-Plăcuță Arduino UNO: interpretează rezultatele primite de la senzori, dă mai departe comenzi către motor driver și afișează +  * Plăcuță Arduino UNO: interpretează rezultatele primite de la senzori, dă mai departe comenzi către motor driver și afișeazăpe ecranul LCD mesaje corespunzătoare
-pe ecranul LCD mesaje corespunzătoare+
  
-Ecran LCD+  * Ecran LCD
  
-Motoare BO: folosite pentru controlul roților+  * Motoare BO: folosite pentru controlul roților
  
-Baterie+  * Baterie
  
 {{ :​pm:​prj2024:​alucaci:​captura_de_ecran_2024-05-15_183618.png?​nolink&​300 |}} {{ :​pm:​prj2024:​alucaci:​captura_de_ecran_2024-05-15_183618.png?​nolink&​300 |}}
 ===== Hardware Design ===== ===== Hardware Design =====
 +În schema de mai jos se poate observa modul de conectare al pinilor pentru proiect. Componentele sunt următoarele:​
  
-<note tip> +  ​plăcuță Arduino Uno
-Aici puneţi tot ce ţine de hardware design: +
-  ​listă de piese +
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +
-  * diagrame de semnal  +
-  * rezultatele simulării +
-</​note>​+
  
 +  * motor driver L298N
 +
 +  * I2C LC2
 +
 +  * 2 X Motor BO
 +
 +  * 2 X Senzor Infraroșu Pololu QTR-HD-06A
 +
 +  * Breadboard (este folosit pentru a conecta cei doi senzori la același pin de GND și la același pin de 3.3V)
 +
 +  * fire
 +
 +  * baterie 9V
 +
 +Mod conectare baterie: pentru motor driver o conectăm la pinii GND și VCC, iar pentru microcontroller o conectăm direct la Power Jack.
 +
 +{{ :​pm:​prj2024:​alucaci:​parte1_schematic.png?​nolink&​300 |}}
 +
 +{{ :​pm:​prj2024:​alucaci:​schematic_part2.png?​nolink&​300 |}}
 +
 +{{ :​pm:​prj2024:​alucaci:​car_above.jpeg?​nolink&​300 |}}
 +
 +{{ :​pm:​prj2024:​alucaci:​car_front.jpeg?​nolink&​300 |}}
 +
 +**Aspect Final**
 +{{ :​pm:​prj2024:​alucaci:​whatsapp_image_2024-05-22_at_22.27.20.jpeg?​nolink&​300 |}}
 +
 +{{ :​pm:​prj2024:​alucaci:​0308b4b4-b439-44f5-afb0-b9d454e8ccf2.jpg?​nolink&​300 |}}
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip+Ca și mediu de dezvoltare am foloist Arduino IDE, iar bibliotecile folosite sunt: 
-Descrierea codului aplicaţiei ​(firmware): +  * <LiquidCrystal_I2C.h>: această bibliotecă a fost foarte utilă pentru afișarea mesajelor pe LCD-ul I2C 
-  ​* mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+  * <​QTRSensors.h>:​ biblioteca a fost creată special pentru senzorii Reflectivi Infraroșii QTR de către compania Pololu; există atât structuri de date speciale, cât și funcții pentru calibrarea senzorilor și citirea datelor analogice 
-  ​* librării şi surse 3rd-party ​(e.gProcyon AVRlib+ 
-  ​* algoritmi şstructuri pe care plănuiţi să le implementaţi +Din punct de vedere al logicii proiectul nu este extrem de complicat; avem 2 senzori în partea din față a mașinii și următoarele 4 scenarii: 
-  * (etapa ​3surse şfuncţii implementate +  - niciun senzor nu detectează negru în față: mașina își continuă drumul drept, linia neagră se află între senzori 
-</​note>​+  - senzorul din dreapta detectează negru: linia neagră o ia spre dreapta, iar mașina trebuie să vireze în acea parte 
 +  - senzorul din stânga detectează negru: linia neagră o ia spre stânga, iar mașina trebuie să vireze în acea parte 
 +  - ambii senzori detectează negru: oprim mașina 
 + 
 +Pentru toate aceste scenarii am definit funcții ajutătoare. Roata va merge înainte dacă pinul 1 de input este pe HIGH, pinul 2 de input este pe LOW, iar pinul de enable are o valoare potrivită setată; roata se oprește când pinii enumerați adineauri sunt toți setați pe LOW. Pentru a vira la stânga/​dreapta vom lăsa să meargă doar roata din acea parte (cu o viteză mai mică pentru a nu lua curbele prea brusc)
 + 
 +Pentru citirea datelor de la senzori am folosit funcția readLineBlack() aceasta întoarce un număr cuprins între 0 și 1000 (0reflectanța este maximă, 1000: reflectanța este minimă) și am concluzionat că valorile mai mari de 700 indică culoarea neagră.  
 + 
 +<​file>​ 
 +void forward() { 
 +  ​digitalWrite(IN1_R, HIGH)
 +  digitalWrite(IN2_R, LOW); 
 +  analogWrite(EN_R,​ motor_speed);​ 
 +  digitalWrite(IN1_L,​ HIGH); 
 +  digitalWrite(IN2_L,​ LOW); 
 +  analogWrite(EN_L,​ motor_speed);​ 
 +
 + 
 +void left() { 
 +  digitalWrite(IN1_R,​ HIGH); 
 +  digitalWrite(IN2_R,​ LOW); 
 +  analogWrite(EN_R,​ cornering_speed);​ 
 +  digitalWrite(IN1_L,​ LOW); 
 +  digitalWrite(IN2_L,​ LOW); 
 +  analogWrite(EN_L,​ LOW); 
 +
 + 
 +void right() { 
 +  digitalWrite(IN1_R,​ LOW); 
 +  digitalWrite(IN2_R,​ LOW); 
 +  analogWrite(EN_R,​ LOW); 
 +  digitalWrite(IN1_L,​ HIGH); 
 +  digitalWrite(IN2_L,​ LOW); 
 +  analogWrite(EN_L,​ cornering_speed);​ 
 +
 + 
 +void stop() { 
 +  lcd.print("​Orbesc!! Vad   "​);​  
 +  lcd.setCursor(01);  ​ 
 +  ​lcd.print("negru in fata!!"​);​  
 +  lcd.setCursor(0,​ 0);   
 + 
 +  PORTB &= ~(1 << PORTB1); 
 +  PORTB &= ~(1 << PORTB0); 
 +  PORTB &= ~(1 << PORTB3); 
 +  PORTD &= ~(1 << PORTD7); 
 +  PORTD &= ~(1 << PORTD6); 
 +  PORTB &= ~(1 << PORTB2); 
 +
 + 
 +void loop() 
 +
 +  int SensorRight,​ SensorLeft;​ 
 + 
 +  qtr1.readLineBlack(sensorValues1); 
 +  ​if(sensorValues1[0] > 700) { 
 +    SensorRight = 1; 
 +  } else { 
 +    SensorRight = 0; 
 +  } 
 + 
 +  qtr2.readLineBlack(sensorValues2);​ 
 +  if(sensorValues2[0] > 700) { 
 +    SensorLeft = 1; 
 +  } else { 
 +    SensorLeft = 0; 
 +  } 
 + 
 +  if(SensorRight == 0 && SensorLeft == 0) { 
 +    forward();​ 
 +  } 
 + 
 +  if(SensorRight == 1 && SensorLeft == 0) { 
 +    right(); 
 +  } 
 + 
 +  if(SensorRight == 0 && SensorLeft == 1) { 
 +    left(); 
 +  } 
 + 
 +  if(SensorRight == 1 && SensorLeft == 1) { 
 +    stop(); 
 +  } 
 +
 +</​file>​ 
 + 
 +Proiectul a fost mult mai dificil decât mă așteptam deoarece senzorii nu citeau bine valorile, nu făceau diferența între partea închisă șcea deschisă, deșîi calibram conform documenției. Înainte de a îi putea folosi (corect) aceștia trebuie ​să treacă prin etapa de calibrare: să fie expușcelei mai închise ​(în cazul nostru linia neagră) și celei mai deschise părți din traseu, iar dacă etapa nu este îndeplinită corect și în timp util valorile citite ajung să fie irelevante. În cele din urmă am reușit să găsesc varianta de cod (după multe măsurătorișsă poziționez senzorii pe mașină în așa fel încât să citească datele cât mai bine (am observat că aceștia sunt foarte sensibili și la umbre). De asemenea, pentru a putea distinge când începe și când se oprește etapa menționată anterior aprind și sting un led pe plăcuță.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Am făcut tot ce mi-am propus, mașina urmează traiectoria dată de o linie neagră și se oprește atunci când întâlnește o linie neagră perpendiculară pe traseu. De asemenea, pe ecranul LCD sunt afișate mesaje corespunzătoare. 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</​note>​+{{:​pm:​prj2024:​alucaci:​linefollowervideo.zip| Video}} 
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +A fost un proiect interesant, diferit față de ce am mai avut de făcut până acum la facultate. Am avut ocazia să pun în practică lucruri învățate la laboratoare sau știute doar în teorie, de exemplu, atunci când nu mergea o componentă putea fi un bug în soft și/sau în hardware: identificarea problemelor,​ testarea componentelor și fixarea bug-urilor într-un astfel de proiect a considerat în sine o etapă. Deoarece nu am mai lucrat în trecut în acest mod cu un microcontroller mi-a luat uneori mult să mă prind ce greșeam (începuse să se restarteze plăcuță random și credeam că este un bug în cod, dar se consumaseră bateriile m(; al căror număr a fost cu mult mai mare decât anticipasem,​ cred că am trecut prin 4 seturi).
 ===== Download ===== ===== Download =====
  
-<note warning> 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-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 Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. +{{:pm:prj2024:alucaci:linefollower.zip| LineFollower}}
-</​note>​+
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +  * 15 mai: am terminat partea de hardware și schema electrică 
-Putețavea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +  * 17 mai: am început partea de soft, anumite componente nu mergeau șam petrecut majoritatea timpului documentându-mă despre senzori ​și cum să îi fac să meargă cum trebuie după multe teste fără succes 
-</​note>​ +  * 18 mai: mașina a mers corect pentru prima dată, dar încă existau probleme 
 +  * 19-22 mai: am adus mici schimbări funcțiilor și modului de aranjare al componentelor hardware
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +[[https://​www.pololu.com/​docs/​0J19/all| Documentație Senzori]]
-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://​www.optimusdigital.ro/​en/brushed-motor-drivers/145-l298n-dual-motor-driver.html| Motor Driver]]
  
pm/prj2024/alucaci/ioana_mara.ghinea.1715787596.txt.gz · Last modified: 2024/05/15 18:39 by ioana_mara.ghinea
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