Boris

Introducere

Boris este un robot comandat prin intermediul unei mănuși cu accelerometru. (L-am denumit așa după Boris Karloff - pentru că a ieșit foarte cârpit, iar monstrul din Frankenstein nu are nume, so this was the next best thing).

Descriere generală

Robotul are la bază un kit Magician, pe care am pus plăcuța de la prima etapă, un driver L298N pentru controlul motoarelor, 2 senzori digitali Sharp ca să nu intre în pereți și un modul Bluetooth RN-42. Alimentarea se face de la 2 seturi de câte 6 baterii R6 - unul pentru motoare, și unul pentru celelalte componente.

Mănușa conține un accelerometru cu 3 axe, un microcontroller (ATMega16 SMD), care preia informațiile de la accelerometru și în funcție de acestea generează comenzi pentru robot, și un modul Bluetooth care transmite comenzile către robot. Ideea era să se genereze comenzi pe baza accelerației gravitaționale - în funcție de poziția mănușii, aceasta ar fi măsurată pe una din axele accelerometrului, și se va genera comanda corespunzătoare.

Orientarea axelor:

Comenzi:

  • Halt: ax = 1, ay = 0, az = 0 (adică mâna lăsată în jos)
  • Forward: ax = 0, ay = -1, az = 0 (mâna întinsă în față)
  • Left: ax = 0, ay = 0, az = 1 (mâna întinsă în față, palma în sus)
  • Right: ax = 0, ay = 0, az = -1 (mâna întinsă în față, palma în jos)

Desigur, valorile citite de la accelerometru nu vor fi fix 0 sau 1 (cred că cel mai bine ar fi să setez un prag la 0.5). Pentru mersul înapoi, mă gândeam să fac un fel de toggle (de exemplu, mâna întinsă în față, cu palma înspre exterior, și apoi comenzile normale).

Hardware Design

Robot:

  • Driverul pentru motoare se leagă la pinii de PWM ai microcontrollerului
  • Modulul Bluetooth se leagă la pinii de USART ai microcontrollerului; modulul Bluetooth funcționează la 3V3, așa că trebuie luate următoarele măsuri:
    • alimentarea se face prin intermediul unui stabilizator de tensiune, LM1117-3V3 (am uitat să îl pun pe schemă, dar există și el acolo, și trage Vcc și masă de lângă portul D)
    • pinul de RX al modulului se leagă la TX-ul microcontrollerului prin intermediul unui divizor de tensiune (ca să nu punem 5V pe bietul Bluetooth)
    • pinul de TX se leagă direct la RX-ul microcontrollerului, în speranța că 3V3 este peste pragul logic al lui ATMega16 (ar cam fi cazul să fie)
  • Senzorii Sharp se leagă la niște pini IO oarecare (în cazul de față, din portul A, pentru că oricum nu îmi trebuie ADC-ul)

Mănușă:

  • Accelerometrul se leagă la pinii de ADC ai microcontrollerului; tot pentru ADC sunt necesare o bobină de 10uH și un condensator de 100nF (așa zice în datasheet, așa facem)
  • Modulul Bluetooth se leagă tot la pinii de USART (de data aceasta direct, pentru că totul funcționează la 3V3 pe plăcuța asta)
  • Alimentarea trece printr-un stabilizator de tensiune de 3V3 (tot LM1117)

Schema: (conține și stabilizatorul de tensiune de pe robot)

Cablajul plăcuței: (plăcuța e ff mică, sub 5cm x 5cm)

Software Design

Mediu de dezvoltare: AVR Studio 6.0 + avrusbboot

Software-ul pentru robot e destul de straight-forward: așteaptă comenzi pe USART (vin sub forma 'w', 'a', 's', 'd') și în funcție de acestea dă drumul la PWM-uri (de exemplu, pentru 'w', ambele motoare vor primi PWM cu factorul de umplere 1 pentru a merge drept înainte, pentru 'a' și 'd' doar unul dintre motoare va primi PWM etc). Se verifică în permanență starea senzorilor, iar dacă aceștia detectează un obstacol refuză să intre în el.

Software-ul de pe mănușă se ocupă de colectarea datelor de la accelerometru (declanșarea conversiilor ADC-ului și colectarea rezultatelor). În funcție de valorile citite, trimite prin USART comenzi pentru robot.

PWM-urile și ADC-ul probabil au nevoie de ceva tuning (nu știu dacă e bine să ia curbele așa de brusc, cu 0 pe un motor și full speed pe celălalt).

Rezultate Obţinute

N-am reușit să mă conectez la modulele alea Bluetooth for the life of me :| Laptop-ul le vede, se poate configura driver-ul, dar n-am reușit să mă conectez nici cu Putty, nici cu Hyperterminal.

De asemenea, plăcuța pentru mănușă s-a corodat foarte prost, așa că nu am avut ce face cu ea.

Senzorii Sharp funcționează, dar nu cum scrie în datasheet (adică scot la output 0 dacă detectează un obstacol).

Bibliografie/Resurse

pm/prj2012/abostan/10.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0