This shows you the differences between two versions of the page.
pm:prj2023:gpatru:line-follower-and-obstacle-avoiding-robot [2023/05/29 18:18] alexandru.maciuca [Software Design] |
pm:prj2023:gpatru:line-follower-and-obstacle-avoiding-robot [2023/05/30 06:30] (current) alexandru.maciuca [Software Design] |
||
---|---|---|---|
Line 17: | Line 17: | ||
</note> | </note> | ||
- | {{:pm:prj2023:gpatru:schema_generala.png?800|}} | + | {{:pm:prj2023:gpatru:schema_generala.png?750|}} |
Line 23: | Line 23: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | {{:pm:prj2023:gpatru:schema_hardware.png?800|}} | + | {{:pm:prj2023:gpatru:schema_hardware.png?750|}} |
Componente Hardware utilizate: | Componente Hardware utilizate: | ||
Line 49: | Line 49: | ||
===== Schema Electrica ====== | ===== Schema Electrica ====== | ||
- | {{:pm:prj2023:gpatru:schema_software1.png?800|}} | + | {{:pm:prj2023:gpatru:schema_software1.png?750|}} |
- | {{:pm:prj2023:gpatru:schema_software2.png?800|}} | + | {{:pm:prj2023:gpatru:schema_software2.png?750|}} |
Conectare Senzor Ultrasonic HC-SR04 | Conectare Senzor Ultrasonic HC-SR04 | ||
Line 91: | Line 91: | ||
**Etapa de initializare** | **Etapa de initializare** | ||
- | - Este inclusa biblioteca suplimentara <<servo.h>> | + | - Este inclusa biblioteca suplimentara <<servo.h>>. |
- Sunt definiti majoritatea pinilor folositi in conformitate cu schema hardware. | - Sunt definiti majoritatea pinilor folositi in conformitate cu schema hardware. | ||
- Sunt declarate si initializate restul de variabile globale necesare in rezolvarea probei software. | - Sunt declarate si initializate restul de variabile globale necesare in rezolvarea probei software. | ||
**Etapa de Setup** | **Etapa de Setup** | ||
- | - Este setata starea pinilor, si anume cea de //OUTPUT//, //INPUT// sau //INPUT_PULLUP// | + | - Este setata starea pinilor, si anume cea de //OUTPUT//, //INPUT// sau //INPUT_PULLUP//. |
- | - Este initializat si configurat un pin specific pentru a controla servomotorul | + | - Este initializat si configurat un pin specific pentru a controla servomotorul. |
- Este atasata o rutina de intrerupere pentru ambii senzori de **IR** de pe margini. | - Este atasata o rutina de intrerupere pentru ambii senzori de **IR** de pe margini. | ||
**Etapa de implementare a miscarii** | **Etapa de implementare a miscarii** | ||
- Functiile: //go_stop//, //go_forward//, //go_left//, //go_right//, sunt foarte asemanatoare si indeplinesc acelasi scop: de a seta diferite viteze pe motoare si valori pe pinii corespunzatori. | - Functiile: //go_stop//, //go_forward//, //go_left//, //go_right//, sunt foarte asemanatoare si indeplinesc acelasi scop: de a seta diferite viteze pe motoare si valori pe pinii corespunzatori. | ||
- | - Functia //followLine// se ocupa cu calcularea unor sume partiale pentru a decide directia in care sa se indrepte robotelul. Sumele provin din valorile analogice ale pinilor de *IR* aflati pe matrice QTRX-HD-06A. | + | - Functia //followLine// se ocupa cu calcularea unor sume partiale pentru a decide directia in care sa se indrepte robotelul. |
+ | - Sumele provin din valorile analogice ale pinilor de **IR** aflati pe matrice QTRX-HD-06A. | ||
+ | - Functiile: //turnObstacleRight// si //turnObstacleLeft// se ocupa cu partea de ocolire a unui obstacol, folosindu-se la baza de functiile definite mai sus. | ||
+ | |||
+ | **Etapa de identificare a unui obstacol** | ||
+ | - Sunt definite variabile locale care sa calculeze distanta si durata. | ||
+ | - Urmeaza o secventa de cod care e menita sa genereze semnalul de trigger catre senzorul de ultrasunete. | ||
+ | - Apoi este folosita functia de //pulseIn// pentru a extrage durata de timp necesara primirii unui puls sau impuls. | ||
+ | - Intr-un final se poate aplica o formula matematica pentru a extrage distanta.(//avand in vedere, o mica eroare//) | ||
+ | |||
+ | **Etapa de evitare a unui obstacol** | ||
+ | - Este actionat servomotorul sub trei unghiuri diferite menite sa acopere directiile: "stanga", "dreapta", si "fata". | ||
+ | - Datorita cablului USB care poate sa agate, am decis in teste sa realizez ocolirea numai pe partea dreapta. | ||
+ | |||
+ | **Etapa de loop** | ||
+ | - Calculeaza distanta pana la obiect folosindu-se de functiile descrise mai sus. | ||
+ | - Daca distanta obtinuta este mai mica decat o valoare de **THRESHOLD**, atunci avem un obstacol in fata si va trebui sa il evitam. | ||
+ | - In caz contrar, robotul trebuie doar sa urmareasca linia. | ||
+ | |||
+ | ===== Fotografii ===== | ||
+ | {{:pm:prj2023:gpatru:robot1.jpg?300|}} | ||
+ | {{:pm:prj2023:gpatru:robot2.jpg?400|}} | ||
+ | {{:pm:prj2023:gpatru:robot3.jpg?400|}} | ||
+ | {{:pm:prj2023:gpatru:robot4.jpg?300|}} | ||
+ | |||
+ | ===== Youtube ===== | ||
+ | <html> | ||
+ | <body> | ||
+ | <iframe | ||
+ | width="728" | ||
+ | height="410" | ||
+ | src="https://www.youtube.com/embed/X4t-Xk18_5Q" | ||
+ | title="YouTube video player" | ||
+ | frameborder="0" | ||
+ | allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" | ||
+ | allowfullscreen | ||
+ | ></iframe> | ||
+ | </body> | ||
+ | </html> | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | |||
+ | Acest proiect a reprezentat prima mea incursiune in lumea hardware si pot spune ca a fost o experienta cu suisuri si coborasuri. Am intampinat destul de multe probleme legate de alimentare. Dupa ce am reusit sa le rezolv pe acestea, au aparut altele noi, legate de senzorii **IR**, care s-au dovedit a fi montati intr-un spatiu mult mai restrans decat asteptarile mele. M-am stresat destul de tare cu acest proiect, insa sunt oarecum multumit de rezultatul final. | ||
+ | ===== Download ===== | ||
+ | *Cod Sursa: {{:pm:prj2023:gpatru:maciuca_alexandru_petru_334ca_proiectpm.zip|}} | ||
+ | |||
+ | |||
+ | ===== Jurnal ===== | ||
+ | |||
+ | |||
+ | *21.04: Alegere tema | ||
+ | *23.04: Crearea paginii de wiki | ||
+ | *30.04: Prima comanda de piese de pe OptimusDigital | ||
+ | *14.05: O prima incercare de asamblare a hardware-ului | ||
+ | *15.05: O a doua comanda de piese de pe OptimusDigital | ||
+ | *21.05: Implementarea unei parti a componentei software pentru testare | ||
+ | *28.05: Construire pista si rezolvare de bug-uri | ||
+ | *29.05: Finalizare pagina de wiki | ||
+ | |||
+ | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | *Conectarea motor driver-ului: https://lastminuteengineers.com/l298n-dc-stepper-driver-arduino-tutorial/ | ||
+ | *Conectarea senzorului ultrasonic HC-SR04 si a servomotorului SG90 impreuna: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor-servo-motor | ||
+ | *Conectarea matricii de senzori **IR**: https://www.youtube.com/watch?v=KeXoS4568w0 | ||
+ | *Informatii generale despre //LineFollower//: https://edu.ieee.org/lk-uomras/blog/analog-line-following-robot/ | ||
+ | |||
+ | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||