This shows you the differences between two versions of the page.
pm:prj2023:alexau:linefollower [2023/05/07 13:25] alexandra.anton2803 |
pm:prj2023:alexau:linefollower [2023/05/28 23:56] (current) alexandra.anton2803 |
||
---|---|---|---|
Line 3: | Line 3: | ||
Mi-am ales ca tema pentru proiect un robot care are ca scop urmarirea unui traseu definit de o banda de culoare neagra pe un fundal alb. Inspiratia pentru acest proiect a fost conturata de trenurile care se conduc singure, care m-au facut curioasa sa incerc si eu sa fac ceva asemanator, la nivel minimalist, pentru a intelege mai bine procesul din spate. Acest proiect este util in dezvoltarea autovehiculelor self-driving. | Mi-am ales ca tema pentru proiect un robot care are ca scop urmarirea unui traseu definit de o banda de culoare neagra pe un fundal alb. Inspiratia pentru acest proiect a fost conturata de trenurile care se conduc singure, care m-au facut curioasa sa incerc si eu sa fac ceva asemanator, la nivel minimalist, pentru a intelege mai bine procesul din spate. Acest proiect este util in dezvoltarea autovehiculelor self-driving. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | |||
- | {{:pm:prj2023:alexau:screenshot_2023-05-07_113916.png|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 19: | Line 17: | ||
Schema de legătură | Schema de legătură | ||
+ | {{:pm:prj2023:alexau:hard.png?600|}} | ||
+ | {{:pm:prj2023:alexau:aa3.jpeg?200|}} {{:pm:prj2023:alexau:aa2.jpeg?200|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Mediu de dezvoltare folosit: Arduino IDE | ||
- | <note tip> | + | <code> |
- | Descrierea codului aplicaţiei (firmware): | + | int SensorLeft = 1; |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | int SensorRight = 0; |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | int enR = 11; |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | int in1R = 10; |
- | * (etapa 3) surse şi funcţii implementate | + | int in2R = 9; |
- | </note> | + | int in3L = 7; |
+ | int in4L = 6; | ||
+ | int enL = 5; | ||
+ | int speed = 255; | ||
- | ===== Rezultate Obţinute ===== | + | void setup() { |
+ | pinMode(SensorLeft, INPUT); | ||
+ | pinMode(SensorRight, INPUT); | ||
+ | pinMode(enR, OUTPUT); | ||
+ | pinMode(enL, OUTPUT); | ||
+ | pinMode(in1R, OUTPUT); | ||
+ | pinMode(in2R, OUTPUT); | ||
+ | pinMode(in3L, OUTPUT); | ||
+ | pinMode(in4L, OUTPUT); | ||
+ | |||
+ | Serial.begin(9600); | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
- | ===== Concluzii ===== | + | } |
- | ===== Download ===== | + | void loop() { |
+ | int readSensorRight = analogRead(SensorRight) < 300 ? 1 : 0; | ||
+ | int readSensorLeft = analogRead(SensorLeft) < 300 ? 1 : 0; | ||
- | <note warning> | + | if(readSensorRight == 0 && readSensorLeft == 0) {forward();} |
- | 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ă ;-). | + | if(readSensorRight == 1 && readSensorLeft == 0) {right();} |
+ | if(readSensorRight == 0 && readSensorLeft == 1) {left();} | ||
+ | if(readSensorRight == 1 && readSensorLeft == 1) {stop();} | ||
+ | } | ||
- | 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**. | + | void forward() { |
- | </note> | + | digitalWrite(in1R, LOW); |
+ | digitalWrite(in2R, HIGH); | ||
+ | analogWrite(enR, speed); | ||
+ | digitalWrite(in3L, LOW); | ||
+ | digitalWrite(in4L, HIGH); | ||
+ | analogWrite(enL, speed); | ||
+ | } | ||
- | ===== Jurnal ===== | + | void right() { |
+ | digitalWrite(in1R, LOW); | ||
+ | digitalWrite(in2R, HIGH); | ||
+ | analogWrite(enR, speed); | ||
+ | digitalWrite(in3L, LOW); | ||
+ | digitalWrite(in4L, LOW); | ||
+ | analogWrite(enL, LOW); | ||
+ | } | ||
- | <note tip> | + | void left() { |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | digitalWrite(in1R, LOW); |
- | </note> | + | digitalWrite(in2R, LOW); |
+ | analogWrite(enR, LOW); | ||
+ | digitalWrite(in3L, LOW); | ||
+ | digitalWrite(in4L, HIGH); | ||
+ | analogWrite(enL, speed); | ||
+ | } | ||
+ | |||
+ | void stop() { | ||
+ | digitalWrite(in1R, LOW); | ||
+ | digitalWrite(in2R, LOW); | ||
+ | analogWrite(enR, LOW); | ||
+ | digitalWrite(in3L, LOW); | ||
+ | digitalWrite(in4L, LOW); | ||
+ | analogWrite(enL, LOW); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | Masina urmeaza linia conform cerintelor, facand virajele necesare. | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | A fost mai greu decat pare :). Mi-a luat cateva ore bune sa-mi dau seama ce gresesc deoarece mi se tot reseta placuta la cateva secunde. Pana la urma l-am luat de la zero pentru a treia oara si doamne ajuta a mers :). In concluzie, a fost greu, dar am invatat mai bine conceptele necesare deoarece le-am pus in practica, fixand informatia. | ||
+ | |||
+ | |||
+ | ===== Jurnal ===== | ||
- | ===== Bibliografie/Resurse ===== | + | *Primele zile in care am facut schema si documentatia in care am crezut ca o sa mearga usor acest proiect. |
+ | *O zi in care am montat robotul si am fost chiar optimista ca a mers repede. | ||
+ | *O zi in care am scris codul si nu mergea, dupa care doua zile pline de chin pana a mers :)))) | ||
- | <note> | ||
- | 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> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |