Table of Contents

Ioana-Roxana RADU (66826) - MinicarController

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul constă în realizarea unei telecomenzi ce va transmite date prin Bluetooth. În funcție de mișcare/înclinație se vor transmite anumite comenzi prin Bluetooth, aceste comenzi putând fi mai departe receptate de către o mașinuță. De asemenea, la apăsarea unor butoane se pot transmite comenzi ce determină aprinderea farurilor/declanșare sunet claxon. Scopul final al proiectului este comunicarea cu o mașinuță care primește comenzi prin Bluetooth.

Am ales acest proiect pentru ca mi se pare interesant sa poți controla o mașinuță în funcție de mișcarea/înclinația telecomenzii. Voi stabili un protocol de comunicație împreună cu un coleg care va implementa o mașinuță ce primește comenzi prin Bluetooth.

Descriere generală

Microcontrollerul va comunica cu modulul de Bluetooth prin interfața USART. Se vor primi date de la giroscop/accelerometru/butoane și în funcție de acestea se vor transmite mai departe comenzi: mers în fata/spate/stânga/dreapta/declanșare claxon/aprindere faruri. Pentru început, se vor transmite date utilizând informațiile de la accelerometru. Ca și componenta hardware voi folosi un giroscop cu accelerometru și în funcție de timpul rămas voi încerca sa realizez o prelucrare a datelor de la giroscop și transmiterea unor comenzi mașinuței care sa ii determine o anumita mișcare (de exemplu schimbarea direcției de mers).

Cum funcționează?

În funcție de înclinație față/spate, stânga/dreapta se vor transmite comenzi care să determine mișcarea mașinuței în mod corespunzător. De asemenea se vor aprinde ledurile corespunzătoare pentru a indica direcția transmisă. În plus, la apăsarea butonului se va declanșa claxonul (sunetul se va menține cât timp butonul este apăsat și este oprit când butonul este eliberat). Aprinderea/stingerea farurilor se va face în funcție de rotația telecomenzii pe axa Ox.

Schemă bloc  Schema bloc

Hardware Design

Lista de piese Preț (aproximativ)
Placa de baza cu componentele aferente 32 lei
Giroscop cu acelerometru (Pololu LSM6DS33) 68 lei
Modul Bluetooth (HC-05) 27 lei
4 leduri 2 lei
Buton 1 leu
Fire mama-mama 10 lei
Regulator tensiune 5V - 3.3V (LE33) 2 lei
O cutie din plastic 6 lei
Rezistențe pentru leduri extra în pachetul de bază
Total 148 lei

Majoritatea componentelor le-am cumpărat de la Optimus Digital

Schema electrica

[Versiunea Finală]
Am făcut câteva modificări la schema electrică. Am legat câteva fire diferit de cum mi-am propus inițial  Schema electrică versiunea finală

[Versiunea Inițială]  Schema electrică versiunea inițială

[Versiunea1] telecomanda.sch
[Versiunea2] telecomanda_schema_electricav2.sch

Software Design

Mediu de dezvoltare

Pentru dezvoltarea software am utilizat Programmer's Notepad și WinAVR.

Interfațarea cu hardware-ul

Structura codului

Pentru a implementa funcțiile specifice pentru fiecare dintre USART, SPI și LSM6 exista fișiere separate. Mai exista un fișier ce conține implementarea “main”.

Interpretarea datelor/Transmiterea comenzilor

În funcțiile de datele primite de la accelerometru se determina orientarea.

  1. Dacă s-a detectat înclinație stânga/dreapta se trimite comandă corespunzătoare virajului corespunzător și se aprinde ledul corespunzător.
  2. Dacă s-a detectat înclinație față/spate se trimite comandă corespunzătoare mersului înainte/înapoi și se aprinde ledul corespunzător.
  3. Dacă s-a detectat rotația dispozitivului/telecomenzii pe orizontală se trimite comandă corespunzătoare schimbării stării farurilor (toggle).

Pentru a intercepta claxonul am activat întreruperea corespunzătoare butonului. În rutina de tratare a întreruperii, se determină starea butonului. Dacă a fost apăsat și acum este liber se trimite comandă corespunzătoare opririi. Altfel, se trimite semnal de declanșare a claxonului. (Am adăugat și un delay deoarece la o singură apăsare rutina de tratare a întreruperii era apelata de 4-5 ori, deși ar fi trebuit o singură dată).

Cum am interpretat datele?

M-a ajutat modulul de Bluetooth. Am folosit o aplicație Android pe telefon pentru a mă conecta la modulul de Bluetooth și a primi date. (ce trimiteam prin USART de pe placă primeam pe telefon 8-)). Astfel, am stabilit valorile de referință pentru accelerometru, precum și un prag care dacă este depășit se iau în considerare datele primite și pe baza acestora se iau decizii de transmitere a comenzilor corespunzătoare. Pentru a elimina “șocurile” care apar inevitabil deoarece dispozitivul este ținut în mână și pentru a nu transmite comenzi incorecte realizez 2000 de citiri de la accelerometru, la interval de 5 us și după analiza valorilor obținute se ia decizia. Similar, datele de la giroscop le citesc la o secundă (am folosit un timer), deoarece la o singură rotație pe orizontală giroscopul va furniza de mai multe ori valori care depășesc pragul stabilit.

Cum am stabilit codificarea comenzilor?

După cum am precizat inițial, protocolul de comunicație (modul de codificare a comenzilor) l-am stabilit împreună cu un coleg care și-a implementat proiectul astfel încât să primească comenzi de la Bluetooth (tot prin USART) și să le proceseze pentru a i le trimite mai departe mașinuței.

Rezultate Obţinute

Am obținut o “telecomandă” <fc #FF00FF>roz</fc> care controlează o mașinuță și indică direcția/sensul de deplasare prin aprinderea ledurilor corespunzătoare.

Aspect general Aprinderea ledurilor în funcție de înclinație  Butonul de declanșare a claxonului
 Interior

Concluzii

Pentru mine a fost primul proiect care a presupus interacțiune atât cu partea hardware cat și cu cea software. Mi-a fost greu la început sa înțeleg protocolul de comunicație prin SPI cu accelerometrul, să îl configurez și să îi citesc datele, dar cu ajutorul resurselor disponibile (datasheet-ul) m-am descurcat. Faptul că am început să lucrez din timp la proiect, urmărind milestone-urile, m-a ajutat mult.
Mă bucur că am reușit sa realizez ce mi-am propus și sunt foarte mulțumită de rezultatele obținute.

Download

Arhiva ce conține codul sursă este disponibilă aici

Jurnal

Bibliografie/Resurse

Resurse Software

Resurse Hardware