This shows you the differences between two versions of the page.
pm:prj2023:alucaci:line_follower [2023/05/26 13:28] robert_mihai.adam [Hardware Design] |
pm:prj2023:alucaci:line_follower [2023/05/30 13:54] (current) robert_mihai.adam [Software Design] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Line Follower ====== | + | ====== Taietor de iarba ====== |
===== Introducere ===== | ===== Introducere ===== | ||
- | Pentru acest proiect am ales sa fac un line follower, cu un modul bluetooth, care sa porneasca atunci cand user-ul ii da un semnal de start dintr-o telecomanda. | + | Pentru acest proiect am ales sa fac un taietor de iarba automat, care verifica daca pe o distanta de 5 cm in fata exista un obstacol sau nu. Daca exista merge pana aproape de el, timp in care se activeaza un motor care taie iarba cand acesta merge. Dupa ce taie iarba in zona respectiva, acesta isi schimba directia si merge sa taie iarba in acea zona. |
- | + | ||
- | Am plecat de la ideea creeri unui robot care sa faca anumite chestii singure si asta este una dintre ele. Pe mai departe as mai dorii si sa adaug feature-ul de a taia iarba urmand o linie. Dupa cum probabil stiti una dintre tacticile de fotbal ale lui Jose Mourinho a fost sa lase iarba de pe teren sa creasca, iar iarba de pe liniile albe sa fie tunsa. Asta ar fi una dintre intrebuintarile acestui robot. | + | |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Acest taietor de iarba, are rolul de a merge drept inainte daca in fata obstacolele se afla la o distanta mai mica de 25 de cm, iar daca nu | + | Acest taietor de iarba, are rolul de a merge drept inainte daca in fata obstacolele se afla la o distanta mai mica de 7.5 de cm, iar daca nu |
acesta analizeaza zona in stanga si in dreapta, sa vada unde ar fi cel mai apropiat obstacol pe care sa-l poata taia. | acesta analizeaza zona in stanga si in dreapta, sa vada unde ar fi cel mai apropiat obstacol pe care sa-l poata taia. | ||
- | Dupa ce analizeaza zona acesta decide care distanta este cea mai mica dintre toate 3, si isi seteaza directia pe care sa poata merge | + | Dupa ce analizeaza zona acesta decide care distanta este cea mai mica si isi seteaza directia pe care sa poata merge. |
- | {{:pm:prj2023:alucaci:schema_block.png?300|}} | + | {{:pm:prj2023:alucaci:schema_block_random.png?300|}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 22: | Line 20: | ||
- | <note tip> | + | Pentru realizarea soft-ului am folosit mai multe librarii externe pentru o mai buna functionalitate a hardware-ului, si mai exact pentru senzor si pentru stepper motor. |
- | Descrierea codului aplicaţiei (firmware): | + | Libraria AccelStepper am folosit-o pentru stepper. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
+ | **Care este flow-ul robotului?** | ||
+ | |||
+ | Acesta calculeaza initial distanta din pozitia in care este el situati initial. Daca aceasta este mai mica decat 7.5 cm si totodata este mai mare decat 6mm atunci merge inainte. minimul de 6mm am pus-o deoarece daca in fata se afla un zid, acesta nu poate fi taiat, si automat v-a ramane acolo constant. | ||
+ | Daca nu respecta conditia de mai sus, atunci robotul nostru trebuie sa-si schimbe sensul, si pentru asta el face o rotatie in stanga si in dreapta, in urma caruia extrage distanta minima pana la primul obiect intalnit in ambele directii, si apoi isi seteaza directia catre zona respectiva. Directia respectiva trebuie sa fie mai mare totodata decat 1.5 cm. Dupa ce se seteaza directia se repeta tot procesul descris mai sus. | ||
+ | |||
+ | **Functii implementate** | ||
+ | |||
+ | run_step_motor() - seteaza cat sa se roteasca elicea(motorasul) in acea secunda, acesta isi muta pozitia foarte putin in acea secunda, astfel incat sa nu blocheze restul de functionalitati. Practic daca as vrea sa faca o rotatie completa, ar dura destul de mult (3,4 secunde) si robotul impreuna cu senzorul ultrasonic ar ramane setati pe comenzile anterioare, fara sa-si calibreze directia | ||
+ | |||
+ | move_forward() - deplaseaza masina in fata, atunci cand distana este conform asteptarilor noastre | ||
+ | |||
+ | move_back() - deplaseaza masina in spate atunci cand obiectul curent e prea departe/prea aproape. Am decis sa o fac sa mearga in spate pentru a reusii sa scaneze un perimetru mai accurate, decat sa existe sanseze sa scaneze de 2 ori acelasi obiect. | ||
+ | |||
+ | rotate_left(), rotate_right() - roteste masina in stanga/respectiva in dreapta | ||
+ | |||
+ | step_left(), step_right() - implementeaza logica pentru scanarea zonei din stanga/dreapta, si acestea returneaza totodata distanta catre cel mai apropiat obiect. Pe baza acelei distante se calculeaza un minim in loop, si distanta minima va reprezenta totodata si directia in care se va duce robotelul | ||
+ | |||
+ | calculate_distance() - reprezinta functia de calculare a distantei de la senzorul ultrasonic la cel mai apropiat obiect | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | In final am reusit sa creez un robot care intr-un fel sau altul ar putea taia iarba daca ar avea o lama in loc de carton asignat de motor :) |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | In urma acestui proiect am dobandit cunostinte in domeniul hardware, invatand cum sa lucrez componentele, sa ma uit pe datasheet si cum se asambleaza ele, totodata lipind pentru prima data firele. Overall a fost o experienta nice, din care simt ca am invatat ceva care ma poate ajuta pe viitor. | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2023:alucaci:adam_robert_mihai_332cc.zip|}} | ||
+ | ===== Jurnal ===== | ||
- | <note warning> | + | {{:pm:prj2023:alucaci:grass_cutter.jpeg?300|}} |
- | 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ă ;-). | + | {{:pm:prj2023:alucaci:grass_cutter_3_.jpeg?300|}} |
+ | {{:pm:prj2023:alucaci:grass_cutter_2_.jpeg?300|}} | ||
+ | ===== Bibliografie/Resurse ===== | ||
- | 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**. | + | Datasheet Arduino Uno: https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf |
- | </note> | + | |
- | ===== Jurnal ===== | + | Utilizare si cum functioneaza senzorul ultrasonic: https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/ |
- | <note tip> | + | Conectarea motorului https://howtomechatronics.com/tutorials/arduino/arduino-dc-motor-control-tutorial-l298n-pwm-h-bridge/ |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
- | ===== Bibliografie/Resurse ===== | + | Conectarea stepper motororului: https://lastminuteengineers.com/28byj48-stepper-motor-arduino-tutorial/ |
- | <note> | + | Rularea stepper motorului in paralel cu restul functionalitatiilor: https://forum.arduino.cc/t/moving-two-stepper-motors-in-parallel-at-different-speeds/531642 |
- | 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> | ||