Sadržaj:

FaceBot: 8 koraka
FaceBot: 8 koraka

Video: FaceBot: 8 koraka

Video: FaceBot: 8 koraka
Video: Дуа из Корана #8 Сура №25 "Аль-Фуркан" аят 74 2024, Listopad
Anonim
FaceBot
FaceBot

Ovaj će vam vodič pokazati kako stvoriti jeftinog robota za izbjegavanje sudara (39 USD) s licem na fontu. To činimo pomoću novog jeftinog i svijetlog OLED zaslona. Naši učenici vole dodavati lica svojim robotima. Vole crtati nasmijana lica koja se mijenjaju ovisno o tome što robot radi.

Dostupno je nekoliko malih jeftinih robota za manje od 25 USD koji vam omogućuju poučavanje osnovama računalnih znanosti. Jedan od problema ovih robota je taj što ne pružaju transparentnost o tome što se događa unutar robota dok ga gradite. 2018. sve se počelo mijenjati dostupnošću jeftinih OLED zaslona visoke kvalitete. Ovi prikazi imaju sljedeće prednosti:

  • Vrlo su svijetle i imaju visok kontrast. Čak i svijetlu sobu lako ih je pročitati iz mnogih kutova.
  • Imaju dobru rezoluciju. Ove koje koristim su 168x64 piksela. Ovo je gotovo 4 puta više od prethodnih prikaza koje smo koristili.
  • Oni su male snage i rade dosljedno čak i kad snaga vašeg robota opada.
  • Relativno su niske cijene (oko 16 USD svaki), a cijene padaju.

U prošlosti ih je bilo teško programirati i koristili bi previše memorije za korištenje s jeftinim Arduino Nanos. Nano ima samo 2K ili dinamički RAM. Ovaj će vam vodič pokazati kako zaobići ove probleme i izgraditi robota kojeg djeca vole programirati.

Korak 1: Korak 1: Izgradite svog baznog robota

Korak 1: Izgradite svog baznog robota
Korak 1: Izgradite svog baznog robota

Za izradu FaceBota obično počinjemo s osnovnim robotom. Jedan primjer je CoderDojo robot od 25 USD koji je ovdje opisan. Ovaj robot koristi jeftini i popularni Arduino Nano, jednostavan regulator motora, 2 DC motora i 4 ili 6 AA baterija. Većina učenika počinje koristiti ping senzor za izradu robota za izbjegavanje sudara. Budući da pruža sustav napajanja od 5 V, savršen je za FaceBot. Kako bi troškovi bili niski, obično moji studenti naručuju dijelove na mreži iz e-Baya. Dijelovi često trebaju 2-3 tjedna da stignu i zahtijevaju manju količinu lemljenja za motore i prekidač za napajanje. Ostatak priključaka izvodi se pomoću ploče od 400 kravata. Učenici često vruće lijepe žice kako ne bi iskliznuli.

Imamo jednu promjenu u standardnom dizajnu za izbjegavanje sudara. Senzor pinga pomičemo s vrha kućišta ispod kućišta. Ovo ostavlja prostor za prikaz na vrhu robota.

Čim budete imali programiranje za izbjegavanje sudara, čitat ćete da dodate lice!

Korak 2: Korak 2: Pronađite i naručite svoj OLED zaslon

Korak 2: Pronađite i naručite svoj OLED zaslon
Korak 2: Pronađite i naručite svoj OLED zaslon

Kad su izašli OLED zasloni, oni po niskoj cijeni bili su dizajnirani za satove ili monitore za fitnes. Kao rezultat toga, bili su mali, obično oko 1 inča u promjeru. Dobra vijest je da su bili jeftini, oko 3 USD. Napravili smo nekoliko robota s tim zaslonima, no budući da je veličina zaslona bila ograničena ono što smo mogli učiniti na ekranu. Zatim smo u 2018. počeli viđati cijenu većih 2,42 inčnih OLED ekrana. U siječnju 2019. cijene su pale na oko 16 USD. Konačno smo imali sjajan zaslon koji bismo mogli koristiti za lica naših robota.

Evo specifikacija ovih zaslona:

  1. 2,42 inča (dijagonala)
  2. 128 piksela u širini (x-dimenzija)
  3. 64 piksela visoko (y-dimenzija)
  4. Mala snaga (obično 10 mA)
  5. Jednobojno (dolaze u žutoj, zelenoj, plavoj i bijeloj boji)
  6. Zadano SPI sučelje, iako ga možete promijeniti u I2C ako želite
  7. SSD1309 upravljački program (vrlo uobičajen upravljački program za zaslon)

SPI sučelje ima sedam žica. Evo tipičnih oznaka na sučelju:

  1. CS - Odabir čipa
  2. DC - Podaci/Naredba
  3. RES - Resetiraj
  4. SDA - Podaci - ovo bi trebalo biti spojeno na Arduino Nano pin 11
  5. SCL - Sat - ovo bi trebalo biti spojeno na Arduino Nano pin 13
  6. VCC - +5 volti
  7. GND - Uzemljenje

Također ćete morati imati žicu za povezivanje zaslona s matičnom pločom. Zasloni obično dolaze sa 7-polnim zaglavljem koje ste lemili na zaslon. Koristio sam 7 muških na muških 20mc Dupont konektora i lemio ih tako da su žice izašle sa stražnje strane zaslona.

Korak 3: Korak 3: Spojite OLED na Arduino Nano

Korak 3: Spojite OLED na Arduino Nano
Korak 3: Spojite OLED na Arduino Nano
Korak 3: Spojite OLED na Arduino Nano
Korak 3: Spojite OLED na Arduino Nano

Sada ste spremni za testiranje svog OLED -a. Koristim drugi Arduino Nano samo da provjerim funkcionira li svaki zaslon koji dobijem. Kad testovi prođu, povezujem ga s robotom. Shema ožičenja ispitivača prikazana je na gornjoj slici. Imajte na umu da OLED veze možete premjestiti na druge pinove koji podržavaju digitalne izlaze, ali ako provjerite je li SCL (sat) na Arduino Nano pin 13, a SDA (podaci) na Arduino Nano pin 11, možete koristiti zadane postavke u softver. Ovo čini vaš kod malo jednostavnijim.

Korak 4: Korak 4: Testirajte svoj zaslon

Korak 4: Testirajte svoj zaslon
Korak 4: Testirajte svoj zaslon

Za testiranje vašeg zaslona upotrijebit ćemo knjižnicu u8g2. Postoje i druge knjižnice koje možete koristiti, ali prema mom iskustvu, nijedna od njih nije tako dobra u knjižnici u8g2. Jedan od kritičnih čimbenika je koliko RAM -a unutar Arduina koristi zaslon. U8g2 je jedina biblioteka koju sam pronašao i koristi "način rada stranice" koji će raditi s Arduino Nano.

Ovu biblioteku možete dodati u svoj Arduino IED pretraživanjem "u8g2" u izborniku "Upravljanje knjižnicama". Kôd možete preuzeti i izravno s gethuba.

github.com/olikraus/u8g2

Testni kôd koji koristim je ovdje:

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

Treba napomenuti nekoliko stvari. SCL i SDA brojevi pinova se komentiraju jer su zadani pinovi na Nano -u. Konstruktor za u8g2 je ključna linija:

// Koristimo SSD1306, 128x64, jednostrani, bez imena, 4 žice, hardver, SPI bez rotacije koji koristi samo 27% dinamičke memorije U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_;

Koristimo način rada s jednom stranicom jer taj način rada koristi minimalnu RAM memoriju. Koristimo 4-žično hardversko sučelje, a OLED prema zadanim postavkama dolazi sa SPI.

Korak 5: Korak 5: Dodajte svoj OLED u robota

Korak 5: Dodajte svoj OLED u robota
Korak 5: Dodajte svoj OLED u robota

Sada kada imamo radni OLED i znamo kako inicijalizirati u8g2 knjižnice, spremni smo za integraciju OLED -a s našim osnovnim robotom. Postoji nekoliko stvari koje treba uzeti u obzir. U našem OLED testu koristili smo igle koje su bile jedna do druge kako bismo olakšali ožičenje. Nažalost, potreban nam je pin 9 za pogon našeg robota jer je to jedan od PWM pinova koji nam je potreban za slanje analognog signala vozaču motora. Rješenje je premjestiti žicu koja se nalazi na pinu 9 na drugu slobodnu iglu, a zatim promijeniti izjavu #define na tu novu iglu. Za montiranje OLED-a na prednju stranu robota izrezao sam dva trokutasta komada od pleksiglasa i vruće lijepljen. ih do šasije. Uvijek volim upotrijebiti neki brusni papir za grubu obradu površine pleksiglasa prije nego što vruće zalijepim dijelove kako se ne bi tako lako razdvojili.

Zatim, uzmimo neke podatke o našem OLED -u i nacrtajmo neka lica na robotu!

Korak 6: Korak 6: Prikažite parametre robota

Korak 6: Prikažite parametre robota
Korak 6: Prikažite parametre robota

Jedna od lijepih stvari pri posjedovanju zaslona je ta što zaista pomaže u otklanjanju pogrešaka u onome što se događa unutar našeg robota dok se vozi uokolo. Nije neuobičajeno da programeri imaju funkciju koja radi na radnoj površini kada ste spojeni na računalo samo kako NE bi radila dok se robot vozi. Prikaz vrijednosti kao što je udaljenost koju mjeri ping senzor dobar je primjer prikaza parametra robota.

Na gornjoj fotografiji prvi redak (Echo Time) prikazuje vrijeme kašnjenja između zvuka koji napušta ultrazvučni zvučnik i vremena koje mikrofon prima. Taj se broj zatim pretvara u centimetre u drugom retku (udaljenost u cm). Brojač se ažurira na drugom mjestu pretraživanja kako bi pokazao da se zaslon ažurira. "Skretanje …" prikazuje se samo ako je udaljenost ispod određenog broja koji se naziva prag skretanja. Oba kotača pomiču se naprijed ako je udaljenost pinga iznad ovog broja. Ako je broj ispod praga skretanja, okrećemo motore unatrag (sigurnosno kopiranje), a zatim mijenjamo smjer.

Evo nekoliko primjera koda koji vam pokazuje kako uzeti vrijednosti s ping senzora i prikazati vrijednosti na OLED zaslonu.

Evo primjera koji testira tri ping senzora (lijevo, središnje i desno) i prikazuje vrijednosti na zaslonu:

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

Korak 7: Korak 7: Nacrtajte neka lica

Korak 7: Nacrtajte neka lica!
Korak 7: Nacrtajte neka lica!

Sada imamo sve dijelove na mjestu da nacrtamo neka lica. Naši učenici obično misle da bi robot trebao imati sretno lice ako vozi naprijed. Kad vidi nešto ispred sebe, registrira osjećaj iznenađenja. Zatim se povlači unatrag i gleda oko sebe, možda očima pomičući se kako bi signaliziralo u kojem će se smjeru okrenuti.

Naredba za crtanje za crtanje lica prilično je jednostavna. Možemo nacrtati krug za obris lica i ispuniti krugove za svako oko. Usta mogu biti polukrug za osmijeh i ispunjeni okrugli krug za osjećaj iznenađenja. Ovo je mjesto gdje djeca mogu koristiti svoju kreativnost za personalizaciju izraza. Ponekad namjerno nacrtam loša lica i zamolim učenike da mi pomognu učiniti ih boljima.

Možete koristiti funkcije display.height () i display.width () da biste dobili veličinu zaslona. U donjem kodu postavljamo varijable

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

Ako ove izračune radite više puta, kôd je nešto brži ako se jednom izračuna i pohrani u varijablu. Evo nekoliko primjera kako je nacrtano dosadno ravno lice:

// to radimo na početku svake petlje

display.clearDisplay (); // nacrtajte svijetlo lice za backgrounddisplay.fillCircle (pola_širine, pola_visine, 31, BIJELO); // Tamni prikaz desnog oka.fillCircle (pola_širine - 10, display.height ()/3, 4, CRNO); // lijevo oko darkdisplay.fillCircle (half_width + 10, display.height ()/3, 4, CRNO); // povlačimo ravnu liniju za prikaz usta.drawLine (half_width - 10, display.height ()/3 * 2, half_width + 10, display.height ()/3 * 2, BLACK); // ova linija šalje naše novo lice na OLED zaslon display.display ();

Korak 8: Korak 8: Prilagodite

Korak 8: Prilagodite
Korak 8: Prilagodite

Crtanje osnovnog lica tek je početak. Učenici mogu stvoriti mnoge varijacije. Mnogi su učenici dodali mali zvučnik koji svira tonove ili zvukove dok se kreću.

Također možete izraditi manje ispitne programe koji će vašim učenicima pomoći da pravilno povežu motore. Na primjer, strelica (trokut) na ekranu će učeniku reći u kojem smjeru bi se kotač trebao okretati kada povezujete motore. Program testiranja prolazi kroz svaki smjer motora:

  1. Desno naprijed
  2. Obrnuto desno
  3. Lijevo naprijed
  4. Lijevo unatrag

Za svaki način rada zaslon se ažurira novim zaslonom koji pokazuje koji bi se kotač trebao okretati i u kojem smjeru.

Primjer tog programa je ovdje

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

Na stranici CiterDojo Robots GitHub FaceBot postoji mnogo dodatnih primjera i pojedinosti o programiranju.

Postoji i verzija robota FaceBot koja omogućuje studentima da izravno mijenjaju sve parametre izbjegavanja sudara (brzina naprijed, udaljenost skretanja, vrijeme okretanja, brzina okretanja) izravno pomoću zaslona. Za "programiranje" ovih robota nije potrebno računalo! Ove su verzije idealne za MakerFaire i događaje na kojima ne želite prevoziti računala.

Javite nam s kakvim se novim licima vi i vaši učenici pojavljujete!

Sretno kodiranje!

Preporučeni: