Sadržaj:

FaceBot: 8 koraka
FaceBot: 8 koraka

Video: FaceBot: 8 koraka

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

Ovaj vodič će vam pokazati kako stvoriti jeftinog robota za izbjegavanje sudara (39 USD) s licem na fontu. To radimo pomoću novog jeftinog i svijetlog OLED ekrana. 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 informatike. Jedan od problema s ovim robotima 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 visokokvalitetnih OLED ekrana. Ovi ekrani imaju sljedeće prednosti:

  • Vrlo su svijetle i imaju visok kontrast. Čak i u svijetloj prostoriji lako ih je pročitati iz mnogih uglova.
  • Imaju dobru rezoluciju. Ove koje koristim su 168x64 piksela. Ovo je skoro 4 puta više od prethodnih ekrana koje smo koristili.
  • Oni su male snage i rade dosljedno čak i kada 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 da bi se koristili s jeftinim Arduino Nanosom. Nano ima samo 2K ili dinamički RAM. Ovaj vodič će vam 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 kontroler 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 5V sistem napajanja, 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 sedmice da stignu i zahtijevaju manju količinu lemljenja za motore i prekidač za napajanje. Ostatak priključaka ostvaruje 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 premještamo 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 ekran

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

Kada su izašli OLED ekrani, jeftini 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 bile jeftine, oko 3 USD. Napravili smo nekoliko robota s ovim ekranima, ali zato što je veličina ekrana bila ograničena ono što smo mogli učiniti na ekranu. Zatim smo u 2018. počeli vidjeti da se cijena većih 2,42 inčnih OLED ekrana snižava. U januaru 2019. cijene su pale na oko 16 USD. Konačno smo imali odličan ekran koji bismo mogli koristiti za lica naših robota.

Evo specifikacija ovih ekrana:

  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. Zadani SPI interfejs, iako ga možete promijeniti u I2C ako želite
  7. SSD1309 upravljački program (vrlo čest upravljački program za prikaz)

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

  1. CS - Odabir čipa
  2. DC - Podaci/Naredba
  3. RES - Resetovanje
  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-pinskim zaglavljem koje ste lemili na zaslon. Koristio sam 7 muških na muških 20mc Dupont konektora i lemio ih tako da su žice izlazile sa stražnje strane ekrana.

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 testera 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 ekran

Korak 4: Testirajte svoj ekran
Korak 4: Testirajte svoj ekran

Za testiranje vašeg ekrana koristit ćemo u8g2 biblioteku. Postoje i druge biblioteke koje možete koristiti, ali po mom iskustvu, nijedna od njih nije tako dobra u u8g2 biblioteci. Jedan od kritičnih faktora je koliko RAM -a unutar Arduina koristi zaslon. U8g2 je jedina biblioteka koju sam pronašao i koristi "Page Mode" koji će raditi s Arduino Nano -om.

Ovu biblioteku možete dodati u svoj Arduino IED pretraživanjem "u8g2" u meniju "Upravljanje bibliotekama". Kôd možete preuzeti i direktno s gethuba.

github.com/olikraus/u8g2

Testni kod koji koristim je ovdje:

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

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

// Koristimo SSD1306, 128x64, jednu stranicu, 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 standardno 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 pokrenuti u8g2 biblioteke, spremni smo za integraciju OLED -a sa 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 upravljanje našim robotom 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. odvezite 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 u vezi sa ekranom je ta što zaista pomaže u otklanjanju grešaka u onome što se događa u našem robotu dok se vozi. Nije neuobičajeno da programeri imaju funkciju koja radi na radnoj površini kada ste spojeni na računar samo da NE radi 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 pretragom sekunde kako bi pokazao da se ekran ažurira. "Okretanje …" 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 okretanja, okrećemo motore unatrag (sigurnosno kopiranje), a zatim mijenjamo smjer.

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

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

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 se 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 pokrećući se da signalizira 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 da ih poboljšam.

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

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

Ako ove izračune radite mnogo 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 gore:

// radimo ovo na početku svake petlje

display.clearDisplay (); // nacrtajte svijetlo lice za backgrounddisplay.fillCircle (half_width, half_height, 31, WHITE); // tamni prikaz desnog oka display.fillCircle (half_width - 10, display.height ()/3, 4, BLACK); // lijevo oko darkdisplay.fillCircle (half_width + 10, display.height ()/3, 4, BLACK); // povlačimo ravnu liniju za display display.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 ekran display.display ();

Korak 8: Korak 8: Prilagodite

Korak 8: Prilagodite
Korak 8: Prilagodite

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

Također možete izgraditi manje programe testiranja koji pomažu vašim učenicima da pravilno povežu motore. Na primjer, strelica (trokut) na ekranu će učeniku reći u kojem smjeru bi se točak trebao okretati prilikom povezivanja motora. Program testiranja prolazi kroz svaki od smjerova motora:

  1. Desno Naprijed
  2. Desno unazad
  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 programskih detalja.

Postoji i verzija FaceBot robota koja omogućava studentima da izmijene sve parametre izbjegavanja sudara (brzina naprijed, udaljenost skretanja, vrijeme okretanja, brzina okretanja) izravno pomoću zaslona. Za "programiranje" ovih robota nije potreban računar! Ove verzije su idealne za MakerFaire i događaje na kojima ne želite da vučete računare.

Molimo vas da nas obavijestite o kojim novim licima vi i vaši učenici razmišljate!

Sretno kodiranje!

Preporučuje se: