Dumitru BRIGALDA (78770) - Car/LineFollower
Autorul poate fi contactat la adresa: Login pentru adresa
Introducere
Proiectul presupune asamblarea si configurarea unei “masini” care va fi capabila sa se deplaseze in 2 moduri.
Bluetooth Mode : Masinuta va primi comenzi de la un dispozitiv Android si se va misca conform acestora.
LineFollower Mode : Masinuta va urmari dunga neagra de pe podea.
Scopul proiectului este self-studying:
familiarizarea cu comunicarea dispozitivelor(necesar in domeniul IoT).
antrenament pentru competii de LineFollower (prototip pentru masini autonome).
Descriere generală
Masinuta va incepe in Bluetooth Mode, semnalizat de Led-ul verde. In acest mod, Masinuta primeste comenzi de la dispozitivul Android si se misca conform acestora.
Daca dispozitivul Android trimite comanda de “Switch Mode”, masinuta va trece in modul LineFollower semnalizat de Led-ul albastru, ignorand orice comanda in afara de “Switch Mode”. In acest mod masinuta este autonoma si incearca sa urmareasca dunga neagra.
Hardware Design
Componenta | Cantitate | Scop |
Placa de baza | 1 | Conectarea pieselor |
Componente obligatorii | 1 | Logica basic |
Kit Sasiu 2WD V2 Robot | 1 | Deplasare |
Driver A4990 Dual Motor | 1 | Comunicare Atmega cu motoare |
Modul Bluetooth HC-06 | 1 | Comunicare cu disp. Android |
Bara QTR-3RC (3senzori) | 1 | Urmarirea dungii negre |
Led RGB | 1 | Semnalizarea modului |
Led galben | 2 | Semnalizarea la cotire |
Software Design
Mediu de dezovltare: Atmel Studio 7.0
Controller: Joystick BT Commander(descarcat de pe Google Play)
Biblioteca | Scopul |
util/delay.h | Delay pentru a permite incarcarea de cateva microsecunde a senzorului de detectie a dungii negre |
avr/interrupt.h | In modul LineFollower, masinuta primeste comenzi folosind intreruperi |
string.h | Pentru a sti lungimea mesajului trimis ca raspuns |
math.h | Calculul puterii pentru fiecare motor pe baza coordonatelor joystick-ului |
Comunicatie Android - Masinuta: USART0(9600 baudrate, 8 bit, recv-trans activ)
fiecare 50 milisecunde aplicatia Android trimite comenzi tip:
“0x2 (Xcoord+200)(
ASCII) (Ycoord+200)(
ASCII) 0x3” care reprezinta pozitia joystick-ului.
“0x2 ButtonState(A sau B) 0x3” care reprezinta schimbarea starii butonului.
cat timp butonul este in starea B(neapasat), masinuta este controlata de joystick, iar uC executa operatii blocante de asteptare a comenzii.
cat timp butonul este in starea A(apasat), masinuta este in modul LineFollower, iar uC activeaza intreruperile pentru a putea folosi senzorii la o frecventa sporita. Comenzile diferite de schimbarea starii sunt ignorate.
dupa fiecare “frame”, Masinuta trimite dispozitivului Android statistica, cum ar fi viteza fiecarui motor sau datele senzorilor.
Deplasarea Masinutei: Timer0 si Timer1(FPWM pana la 0xFF cu prescaler de 64)
Duty Cycle OCRnA | Duty Cycle OCRnB | Rezultat |
100% | 100% | miscare fata |
0% | 0% | miscare spate |
0% | 100% | frana |
50% | 50% | repaus |
Citirea Senzorilor: Timer2(FPWM pana la OCR2A cu prescaler de 32 si intrerupere de OVF activata)
Numara 10 microsecunde si incrementeaza contorul.
Nu se executa operatii blocante de asteptare a comenzilor pentru a elimina delay-ul dintre citirile senzorilor. Se foloseste intrerupere de primire a datelor.
Pinul conectat la senzor trebuie pus ca iesire cu valoarea 1 timp de 10 microsecunde pentru ca senzorul sa se incarce.
Pinul trebuie pus ca intrare fara pull-up. Se numara cate microsecunde-milisecunde dureaza pana la descarcarea senzorului(inputul devine 0).
Suprafetele negre reflecta mai greu lumina(sute de microsecunde - cateva milisecunde) in timp ce suprafetele mai deschise o reflecta cu mult mai rapid(zeci de microsecunde).
Rezultate Obţinute
Modulul Bluetooth(comunicatie)
Led RGB(verde - Bluetooth Mode, albastru - LineFollower)
Baterie externa 5V(alimentare placuta)
6 Baterii 1.5V(alimentare motoare)
Concluzii
a fost o placere sa execut atat partea software(asteptat), cat si hardware(neasteptat XD).
a fost o experienta atat interesanta, cat si distractiva.
m-a incantat procesul de creare “de la zero” a unui “ceva”, proiectarea lui, alegerea pieselor, depanarea erorilor.
am invatat lucruri noi si am aprofundat notiunile cunoscute.
este primul proiect de acest gen. Nu se limiteaza doar la un program(chiar si complex) pe PC.
acest proiect mi-a trezit interesul pentru acest domeniu.
Download
Bibliografie/Resurse
Documentația în format
PDF