Cuprins:

FaceBot: 8 pași
FaceBot: 8 pași

Video: FaceBot: 8 pași

Video: FaceBot: 8 pași
Video: 8 pași către o alimentație sănătoasă 2024, Noiembrie
Anonim
FaceBot
FaceBot

Acest ghid vă va arăta cum să creați un robot cu cost redus (39 USD) pentru evitarea coliziunilor, cu o față pe font. Facem acest lucru folosind un nou ecran OLED luminos și ieftin. Studenților noștri le place să adauge fețe roboților lor. Le place să deseneze fețe zâmbitoare care se schimbă în funcție de ceea ce face robotul.

Există mai mulți roboți mici, cu preț redus, disponibili pentru mai puțin de 25 USD, care vă permit să predați elementele de bază ale informaticii. Una dintre problemele cu acești roboți este că nu oferă transparență cu privire la ceea ce se întâmplă în interiorul robotului în timp ce îl construiți. În 2018, totul a început să se schimbe odată cu disponibilitatea afișajelor OLED de înaltă calitate, la prețuri reduse. Aceste afișaje au următoarele avantaje:

  • Sunt foarte luminoase și au un contrast ridicat. Chiar și o cameră luminoasă, sunt ușor de citit din multe unghiuri.
  • Au o rezoluție bună. Cele pe care le folosesc sunt de 168x64 pixeli. Acesta este de aproape 4x afișajele anterioare pe care le-am folosit.
  • Sunt de putere redusă și funcționează constant chiar și atunci când puterea robotului tău scade.
  • Acestea au un cost relativ scăzut (aproximativ 16 USD fiecare) și prețurile scad.

În trecut, au fost dificil de programat și ar folosi prea multă memorie pentru a fi folosite cu Arduino Nanos ieftin. Nano are doar 2K sau RAM dinamică. Acest ghid vă va arăta cum să rezolvați aceste probleme și să construiți un robot pe care copiii adoră să îl programeze.

Pasul 1: Pasul 1: Construiți-vă robotul de bază

Pasul 1: Construiți-vă robotul de bază
Pasul 1: Construiți-vă robotul de bază

Pentru a construi un FaceBot, de obicei începem cu robotul de bază. Un exemplu este robotul CoderDojo de 25 USD care este descris aici. Acest robot folosește popularul și ieftin Arduino Nano, un controler de motor simplu, 2 motoare de curent continuu și 4 sau 6 baterii AA. Majoritatea studenților încep să folosească senzorul de ping pentru a construi un robot de evitare a coliziunilor. Deoarece oferă un sistem de alimentare de 5v, este perfect pentru FaceBot. Pentru a menține costurile scăzute, de obicei îi pun pe elevii mei să comande piese online de la e-Bay. Piesele durează adesea 2-3 săptămâni pentru a ajunge și necesită o cantitate mică de lipire pentru motoare și comutatorul de alimentare. Restul conexiunilor sunt realizate folosind o placă de prindere de 400 de cravate. Elevii lipesc frecvent firele pentru a le împiedica să alunece.

Există o schimbare pe care o facem în designul standard de evitare a coliziunilor. Mutăm senzorul de ping din partea de sus a șasiului pe sub șasiu. Acest lucru lasă loc pentru afișajul de deasupra robotului.

Odată ce ați programat evitarea coliziunilor, sunteți citit pentru a adăuga o față!

Pasul 2: Pasul 2: Găsiți și comandați ecranul OLED

Pasul 2: Găsiți și comandați ecranul OLED
Pasul 2: Găsiți și comandați ecranul OLED

Când au apărut afișajele OLED, cele cu preț redus erau concepute pentru ceasuri sau monitoare de fitness. Ca rezultat, acestea erau mici, de obicei în jur de 1 inci. Vestea bună este că au fost low-cost, în jur de 3 USD. Am construit câțiva roboți cu aceste afișaje, dar pentru că dimensiunea afișajelor era limitată, ce puteam face pe ecran. Apoi, în 2018, am început să vedem că prețul ecranelor OLED mai mari de 2,42 inci scade în preț. În ianuarie 2019, prețurile au scăzut la aproximativ 16 USD. În sfârșit, am avut un ecran excelent pe care l-am putea folosi pentru fețele robotului nostru.

Iată specificațiile acestor afișaje:

  1. 2,42 țoli (măsurare diagonală)
  2. 128 pixeli (dimensiune x)
  3. 64 pixeli înălțime (dimensiunea y)
  4. Putere redusă (de obicei 10ma)
  5. Monocrom (vin în galben, verde, albastru și alb)
  6. Interfață SPI implicită, deși o puteți schimba în I2C dacă doriți
  7. Driver SSD1309 (un driver de afișare foarte comun)

Interfața SPI are șapte fire. Iată etichetele tipice de pe interfață:

  1. CS - Selectare chip
  2. DC - Date / Comandă
  3. RES - Resetare
  4. SDA - Date - acesta ar trebui să fie conectat la pinul 11 Arduino Nano
  5. SCL - Ceas - acesta ar trebui să fie conectat la pinul 13 Arduino Nano
  6. VCC - +5 volți
  7. GND - sol

De asemenea, va trebui să aveți câteva fire pentru a conecta afișajul la panoul de verificare. Ecranele vin de obicei cu un antet cu 7 pini pe care îl lipiți pe ecran. Am folosit 7 conectori Dupont de la tată la tată de 20 mc și i-am lipit astfel încât firele să iasă din spatele afișajului.

Pasul 3: Pasul 3: Conectați OLED la Arduino Nano

Pasul 3: Conectați OLED la Arduino Nano
Pasul 3: Conectați OLED la Arduino Nano
Pasul 3: Conectați OLED la Arduino Nano
Pasul 3: Conectați OLED la Arduino Nano

Acum sunteți gata să vă testați OLED-ul. Folosesc un alt Arduino Nano doar pentru a testa dacă fiecare afișaj pe care îl obțin funcționează. Odată ce testele funcționează, îl conectez la robot. Schema de cablare pentru tester este prezentată în figura de mai sus. Rețineți că puteți muta conexiunile OLED pe alți pini care acceptă ieșiri digitale, dar dacă vă asigurați că SCL (ceasul) este pe pinul Arduino Nano 13 și SDA (date) este pe pinul Arduino Nano 11, puteți utiliza setările implicite în software-ul. Acest lucru vă menține codul un pic mai simplu.

Pasul 4: Pasul 4: testați afișajul

Pasul 4: testați afișajul
Pasul 4: testați afișajul

Pentru a vă testa afișajul, vom folosi biblioteca u8g2. Există alte biblioteci pe care le puteți folosi, dar, din experiența mea, niciuna dintre ele nu este la fel de bună la biblioteca u8g2. Un factor critic este cantitatea de memorie RAM din Arduino utilizată de afișaj. U8g2 este singura bibliotecă pe care am găsit-o care folosește un „Mod pagină” care va funcționa cu Arduino Nano.

Puteți adăuga această bibliotecă la IED-ul dvs. Arduino căutând „u8g2” în meniul „Gestionați bibliotecile”. De asemenea, puteți descărca codul direct de pe gethub.

github.com/olikraus/u8g2

Codul de test pe care îl folosesc este aici:

github.com/dmccreary/coderdojo-robots/blob…

Există câteva lucruri de remarcat. Numerele PIN-urilor SCL și SDA sunt comentate, deoarece acestea sunt pin-urile implicite de pe Nano. Constructorul pentru u8g2 este linia cheie:

// Folosim SSD1306, 128x64, cu o singură pagină, fără nume, cu 4 fire, Hardware, SPI fără rotație, care utilizează doar 27% din memoria dinamică U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_PIN)

Folosim modul cu o singură pagină, deoarece acel mod folosește RAM minimă. Folosim interfața hardware cu 4 fire, iar OLED vine în mod implicit cu SPI.

Pasul 5: Pasul 5: Adăugați OLED-ul dvs. la robot

Pasul 5: Adăugați OLED-ul dvs. la robot
Pasul 5: Adăugați OLED-ul dvs. la robot

Acum că avem un OLED funcțional și știm cum să inițializăm bibliotecile u8g2, suntem pregătiți să integrăm OLED cu robotul nostru de bază. Există câteva lucruri de luat în considerare. În testul nostru OLED am folosit pinii care erau unul lângă celălalt pentru a simplifica cablajul. Din păcate, avem nevoie de pinul 9 pentru a conduce robotul nostru, deoarece este unul dintre pinii PWM de care avem nevoie pentru a trimite un semnal analog către driverul motorului. Soluția este să mutați firul care este pe pinul 9 pe un alt pin liber și apoi să schimbați declarația #define cu acel nou pin. Pentru a monta OLED pe partea din față a robotului am tăiat două piese triunghiulare din plexiglas și lipite la cald le la șasiu. Îmi place întotdeauna să folosesc niște hârtie de șlefuit pentru a asfalta suprafața plexiglasului înainte de a lipi piesele împreună, astfel încât să nu se despartă prea ușor.

În continuare, să obținem niște date pe OLED-ul nostru și să desenăm niște fețe pe robot!

Pasul 6: Pasul 6: Afișați parametrii robotului

Pasul 6: Afișați parametrii robotului
Pasul 6: Afișați parametrii robotului

Unul dintre lucrurile frumoase despre a avea un afișaj este că ajută cu adevărat la depanarea a ceea ce se întâmplă în interiorul robotului nostru în timp ce circulă. Nu este neobișnuit ca dezvoltatorii să aibă o funcție pe desktop atunci când sunteți conectat la computer, doar ca acesta să nu funcționeze atunci când robotul circulă. Afișarea unei valori precum distanța măsurată de senzorul de ping este un bun exemplu de afișare a unui parametru robot.

În fotografia de mai sus, prima linie (Echo Time) arată timpul de întârziere dintre momentul în care sunetul părăsește difuzorul cu ultrasunete și timpul în care este primit de microfon. Acest număr este apoi convertit în centimetri în a doua linie (Distanța în cm). Contorul este actualizat caută în al doilea rând pentru a afișa afișajul se actualizează. „Întoarcerea…” este afișată numai dacă distanța este sub un anumit număr, care se numește prag de viraj. Ambele roți se deplasează înainte dacă distanța de ping este peste acest număr. Dacă numărul este sub pragul de rotație, inversăm motoarele (făcând backup) și apoi schimbăm direcția.

Iată câteva exemple de cod care vă arată cum să luați valorile din senzorul de ping și să afișați valorile pe ecranul OLED.

Iată un exemplu care testează trei senzori de ping (stânga, centru și dreapta) și afișează valorile de pe ecran:

github.com/dmccreary/coderdojo-robots/blob…

Pasul 7: Pasul 7: Desenați câteva fețe

Pasul 7: Desenați câteva fețe!
Pasul 7: Desenați câteva fețe!

Acum avem toate piesele pe loc pentru a desena niște fețe. Studenții noștri cred de obicei că robotul ar trebui să aibă o față fericită dacă merge înainte. Când vede ceva în față, înregistrează un sentiment de surpriză. Apoi, dă înapoi și se uită în jur, poate cu ochii mișcați pentru a semnala în ce direcție se va întoarce.

Comanda de desen pentru a desena o față este destul de simplă. Putem desena un cerc pentru conturul feței și completat în cercuri pentru fiecare ochi. Gura poate fi un semicerc pentru un zâmbet și un cerc rotund plin pentru un sentiment de surpriză. Acesta este locul în care copiii își pot folosi creativitatea pentru a personaliza expresiile. Uneori desenez în mod deliberat fețe rele și cer elevilor să mă ajute să le fac mai bune.

Puteți utiliza funcțiile display.height () și display.width () pentru a obține dimensiunea afișajului. În codul de mai jos setăm variabile

half_width = display.width () / 2; half_height = display.height () / 2;

Dacă faceți aceste calcule de multe ori, codul este puțin mai rapid dacă sunt calculate o dată și stocate într-o variabilă. Iată câteva exemple despre cum este desenată fața plictisitoare dreaptă de mai sus:

// facem acest lucru la începutul fiecărei bucle

display.clearDisplay (); // desenați o față ușoară pentru backgrounddisplay.fillCircle (half_width, half_height, 31, WHITE); // ochiul drept întunecat display.fillCircle (half_width - 10, display.height () / 3, 4, BLACK); // ochiul stâng darkdisplay.fillCircle (half_width + 10, display.height () / 3, 4, BLACK); // trasați o linie dreaptă pentru afișajul gurii.drawLine (half_width - 10, display.height () / 3 * 2, half_width + 10, display.height () / 3 * 2, BLACK); // această linie trimite noua noastră față pe ecranul OLED display.display ();

Pasul 8: Pasul 8: Personalizați

Pasul 8: Personalizați
Pasul 8: Personalizați

Desenarea feței de bază este doar începutul. Elevii pot crea multe variante. Mulți studenți au adăugat un difuzor mic care redă tonuri sau sunete pe măsură ce se mișcă.

De asemenea, puteți construi programe de testare mai mici, care vă ajută elevii să conecteze corect motoarele. De exemplu, o săgeată (triunghi) de pe ecran îi va spune elevului ce direcție ar trebui să se rotească roata atunci când conectați motoarele. Programul de testare parcurge fiecare direcție a motorului:

  1. Înainte dreapta
  2. Reverse dreapta
  3. Stânga înainte
  4. Stânga inversă

Pentru fiecare mod, ecranul este actualizat cu un nou afișaj pentru a arăta care roată ar trebui să se rotească și în ce direcție.

Un exemplu al acestui program este aici

github.com/dmccreary/coderdojo-robots/blob…

Există multe exemple suplimentare și detalii de programare pe pagina CoderDojo Robots GitHub FaceBot.

Există, de asemenea, o versiune a robotului FaceBot care permite elevilor să modifice toți parametrii de evitare a coliziunilor (viteza de avans, distanța de viraj, timpul de virare, viteza de viraj) folosind direct afișajul. Nu este necesar niciun computer pentru a „programa” acești roboți! Aceste versiuni sunt ideale pentru MakerFairs și evenimente pe care nu doriți să le transportați în jurul computerelor.

Vă rugăm să ne anunțați cu ce noi fețe veniți voi și elevii dvs.!

Codificare fericită!

Recomandat: