Differences

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

Link to this comparison view

pm:prj2022:rstanescu:razvan.tanase2309 [2022/06/02 10:13]
razvan.tanase2309 [Software Design]
pm:prj2022:rstanescu:razvan.tanase2309 [2022/06/02 13:14] (current)
razvan.tanase2309 [Rezultate Obţinute]
Line 28: Line 28:
 {{ :​pm:​prj2022:​rstanescu:​poza.png?​700 |}} {{ :​pm:​prj2022:​rstanescu:​poza.png?​700 |}}
 ===== Software Design ===== ===== Software Design =====
 +==== Organizare ====
 +Odata ce circuitul masinutei este alimentat de la baterie, in **setup()** se vor initializa senzorul ultrasonic si de captare a luminii infrarosii, precum si pinii motoarelor DC care asteapta semnale de la telecomanda.
  
-<note tip+Pentru o organizare mai buna a logicii programului,​ am creat cateva functii ajutatoare:​ 
-Descrierea codului aplicaţiei ​(firmware): +<code cpp
-  * mediu de dezvoltare ​(if any) (e.g. AVR StudioCodeVisionAVR+bool detectCollision(); 
-  * librării şi surse 3rd-party ​(e.g. Procyon AVRlib+void controlMotors(int IN1_val, int IN2_val, int IN3_valint IN4_val); 
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +void stopMotors()
-  * (etapa 3surse şi funcţii implementate+</​code>​ 
 + 
 +== Detectarea coliziunilor == 
 +  * Verificam daca masinuta este in miscare deoarece stand pe loc nu exista posibilitatea de lovire; 
 +  * Daca merge cu fata, masinuta se va indeparta de obiectul din spatele acesteia, deci ii permitem miscarea; 
 +  * Masinuta se va opri daca detecteaza vreun obiect la o distanta mai mica sau egala cu 10cm. 
 +<code cpp> 
 +bool detectCollision() 
 +
 +  if (isRunning && (distance > 0 && distance <= 10) && !goFront) 
 +    return true; 
 + 
 +  return false; 
 +
 +</​code>​ 
 + 
 +<​note>​ 
 +Biblioteca **<​NewPing.h>​** implementeaza calcularea distantei in asa fel incat daca un obiect este mai departe decat distanta maxima la care este setat senzorul, acesta va intoarce distanta 0.
 </​note>​ </​note>​
  
 +== Controlul motoarelor ==
 +  * Daca exista vreun obstacol in directia spre care urmeaza sa porneasca masinuta, motoarele nu vor porni deoarece vor fi imediat oprite in bucla **loop()**;
 +  * In cazul in care motoarele pornesc, semnalizam faptul ca masinuta se afla in miscare.
 +<code cpp>
 +void controlMotors(int IN1_val, int IN2_val, int IN3_val, int IN4_val)
 +{
 +  if (distance == 0 || distance > 10 || goFront) {
 +    digitalWrite(IN1,​ IN1_val);
 +    digitalWrite(IN2,​ IN2_val);
 +    digitalWrite(IN3,​ IN3_val);
 +    digitalWrite(IN4,​ IN4_val);
 +
 +    isRunning = true;
 +  }
 +}
 +</​code>​
 +
 +  * Daca masinuta primeste comanda sa opreasca motoarele, nu se mai verifica nicio conditie si se transmite imediat semnalul.
 +<code cpp>
 +void stopMotors()
 +{
 +  digitalWrite(IN1,​ LOW);
 +  digitalWrite(IN2,​ LOW);
 +  digitalWrite(IN3,​ LOW);
 +  digitalWrite(IN4,​ LOW);
 +}
 +</​code>​
 +
 +==== Program Flow ====
 +► **loop()** ⇒ aici se verifica daca se detecteaza vreo coliziune si se trateaza semnalele de la telecomanda.
 +   * Verificam daca senzorul ultrasonic detecteaza vreun obiect, caz in care oprim motoarele si semnalam ca masinuta s-a oprit;
 +   * Daca masinuta nu este in miscare sau merge cu fata, nu vom opri niciodata motoarele.
 +<code cpp>
 +if (detectCollision()) {
 +    stopMotors();​
 +    isRunning = false;
 +}
 +</​code>​
 +
 +  * Rutina de detectare si tratare a semnalelor de la telecomanda;​
 +  * Butoanele controleaza diferit motoarele masinutei, in functie de directia de mers pe care ne-o dorim sau daca vrem sa ne oprim;
 +  * Modificam variabila conditie daca masinuta porneste cu fata sau nu.
 +<code cpp>
 +if (IrReceiver.decode()) {
 +    switch (IrReceiver.decodedIRData.decodedRawData) {
 +      case 3810328320:
 +        // Backwards ==> '​OK'​ BUTTON
 +        controlMotors(HIGH,​ LOW, LOW, HIGH);
 +        goFront = false;
 +        break;
 +
 +      case 3877175040:
 +        // Go in front ==> '​^'​ BUTTON
 +        controlMotors(LOW,​ HIGH, HIGH, LOW);
 +        goFront = true;
 +        break;
 +
 +      case 4144561920:
 +        // Left ==> '<'​ BUTTON
 +        controlMotors(HIGH,​ LOW, HIGH, LOW);
 +        goFront = false;
 +        break;
 +
 +      case 2774204160:
 +        // Right ==> '>'​ BUTTON
 +        controlMotors(LOW,​ HIGH, LOW, HIGH);
 +        goFront = false;
 +        break;
 +
 +      case 3860463360:
 +        // STOP ==> '​0'​ BUTTON
 +        stopMotors();​
 +        goFront = false;
 +        isRunning = false;
 +    }
 +    IrReceiver.resume();​ // Enable receiving of the next value
 +  }
 +</​code>​
 ==== Medii de dezvoltare ==== ==== Medii de dezvoltare ====
     * Cod: ArduinoIDE     * Cod: ArduinoIDE
Line 43: Line 140:
  
 ==== Biblioteci ==== ==== Biblioteci ====
-    ​//​IRremote.hpp//​ ⇒ utilizarea senzorului cu infrarosu IRVS1838B pentru controlarea masinutei +  * //​IRremote.hpp//​ ⇒ utilizarea senzorului cu infrarosu IRVS1838B pentru controlarea masinutei 
-    //​NewPing.h//​ ⇒ utilizarea senzorului ultrasonic HC-SR04 pentru detectarea coliziunilor+  ​* ​//​NewPing.h//​ ⇒ utilizarea senzorului ultrasonic HC-SR04 pentru detectarea coliziunilor
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
- +{{ :​pm:​prj2022:​rstanescu:​whatsapp_image_2022-06-02_at_1.11.11_pm.jpeg?​300 |}} 
-<note tip> +{{ :​pm:​prj2022:​rstanescu:​whatsapp_image_2022-06-02_at_1.11.11_pm_1_.jpeg?​300 |}} 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+{{ :​pm:​prj2022:​rstanescu:​whatsapp_image_2022-06-02_at_1.11.12_pm.jpeg?​300 |}}
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
 +Mi-a placut foarte mult sa lucrez la acest proiect, deoarece am avut sansa sa aprofundez cunostintele acumulate la curs si la laborator pentru a realiza un prototip interesant si foarte util. Sunt constient ca functionalitatile sale nu sunt extrem de avansate, dar asa cum a fost gandit proiectul, isi indeplineste intocmai atributiile.
  
 +Am intampinat cateva probleme pe parcursul implementarii,​ cum ar fi: lipsa de spatiu pe sasiul masinutei si spatii foarte mici de prins suruburile, prea putini pini de alimentare si de GND pe placuta Arduino pentru componentele pe care le aveam de controlat sau roata ajutatoare (cea de a 3-a) care a trebuit lipita pentru ca se rotea in jurul axului (asa a fost gandita de producator),​ iar masinuta nu mergea drept.
 +
 +Pe viitor, implementarea se poate extinde adaugand eventual un alt senzor si pe fata sau prin incarcarea unor noi tipuri de miscari controlate prin telecomanda.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Sursele ​proiectului ​pot fi vizualizate aici{{:pm:prj2022:rstanescu:proiect.zip|}}
-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**. +
-</​note>​+
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +  * 10.05.2022 → Alegere tema proiect 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +  * 15.05.2022 → Completare Milestone 1: Introducere,​ Descriere, Schema Bloc și Componente 
-</​note>​+  * 29.05.2022 → Completare Milestone 2: Schema electrică, Software Design, Rezultatele Obținute, Concluzii, Arhivă
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +=== Resurse Hardware === 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** ​şi **Resurse Hardware**+  * https://​www.youtube.com/​watch?​v=GPVC84D5ULw&​ab_channel=MRMS-WORKSHOP 
-</note>+  ​https://​www.youtube.com/​watch?​v=E2sTbpFsvXI&​ab_channel=RyanChan 
 +  ​http://​www.handsontec.com/​dataspecs/​L298N%20Motor%20Driver.pdf 
 + 
 +=== Resurse Software ​=== 
 +  ​http://​www.handsontec.com/​dataspecs/​L298N%20Motor%20Driver.pdf 
 +  ​https://​bitbucket.org/​teckel12/​arduino-new-ping/​wiki/​Home 
 +  * https://​github.com/​Arduino-IRremote/​Arduino-IRremote
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2022/rstanescu/razvan.tanase2309.1654154020.txt.gz · Last modified: 2022/06/02 10:13 by razvan.tanase2309
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