INHOUDSOPGAWE:
- Stap 1: Stap 1: Bou u basisrobot
- Stap 2: Stap 2: Soek en bestel u OLED -skerm
- Stap 3: Stap 3: Koppel die OLED aan die Arduino Nano
- Stap 4: Stap 4: Toets u skerm
- Stap 5: Stap 5: Voeg u OLED by die robot
- Stap 6: Stap 6: Vertoon robotparameters
- Stap 7: Stap 7: Teken 'n paar gesigte
- Stap 8: Stap 8: Pas aan
Video: FaceBot: 8 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Hierdie gids sal u wys hoe u 'n goedkoop robot ($ 39) met 'n gesig op die lettertipe kan skep. Ons doen dit deur 'n nuwe goedkoop, helder OLED-skerm te gebruik. Ons studente hou daarvan om gesigte by hul robotte te voeg. Hulle teken graag smiley -gesigte wat verander op grond van wat die robot doen.
Daar is verskeie klein goedkoop robotte beskikbaar vir minder as $ 25 waarmee u die basiese beginsels van rekenaarwetenskap kan leer. Een van die probleme met hierdie robotte is dat hulle nie deursigtigheid bied oor wat in die robot aangaan terwyl u dit bou nie. In 2018 het dit alles begin verander met die beskikbaarheid van goedkoop OLED-skerms van hoë gehalte. Hierdie uitstallings het die volgende voordele:
- Hulle is baie helder en het 'n hoë kontras. Selfs in 'n helder kamer is dit maklik om uit baie hoeke te lees.
- Hulle het 'n goeie resolusie. Die een wat ek gebruik, is 168x64 pixels. Dit is byna 4x die vorige skerms wat ons gebruik het.
- Hulle het 'n lae krag en werk konsekwent, selfs as die krag van u robot daal.
- Hulle is relatief goedkoop (ongeveer $ 16 elk) en die pryse daal.
In die verlede was dit moeilik om te programmeer en sou dit te veel geheue gebruik om saam met Arduino Nanos met 'n lae koste gebruik te word. Die Nano het slegs 2K of dinamiese RAM. Hierdie gids sal u wys hoe u hierdie probleme kan hanteer en 'n robot bou wat kinders graag wil programmeer.
Stap 1: Stap 1: Bou u basisrobot
Om 'n FaceBot te bou, begin ons gewoonlik met 'n basisrobot. Een voorbeeld is die $ 25 CoderDojo -robot wat hier beskryf word. Hierdie robot gebruik die goedkoop en gewilde Arduino Nano, 'n eenvoudige motorbeheerder, 2 DC-motors en 4 of 6 AA-batterye. Die meeste studente begin met die pingsensor om 'n robot vir die voorkoming van botsings te bou. Omdat dit 'n 5V -kragstelsel bied, is dit perfek vir die FaceBot. Om die koste laag te hou, laat ek my studente gewoonlik die onderdele aanlyn by e-Bay bestel. Die dele neem gewoonlik 2-3 weke om aan te kom en benodig 'n geringe hoeveelheid soldeer vir die motors en die skakelaar. Die res van die verbindings word gemaak met 'n 400-band broodbord. Studente plak gereeld die drade vas om te voorkom dat hulle uitglip.
Daar is een verandering wat ons aan die standaard ontwerp vir die voorkoming van botsings aanbring. Ons skuif die pingsensor van die bokant van die onderstel na onder die onderstel. Dit laat ruimte vir die vertoning bo -op die robot.
As u u botsingsprogram vermy, word u gelees om 'n gesig by te voeg!
Stap 2: Stap 2: Soek en bestel u OLED -skerm
Toe OLED -skerms uitkom, was die goedkoop skerms ontwerp vir horlosies of fiksheidsmonitors. As gevolg hiervan was hulle klein, gewoonlik ongeveer 1 duim lank. Die goeie nuus is dat hulle teen $ 3 goedkoop was. Ons het 'n paar robotte met hierdie skerms gebou, maar omdat die grootte van die skerms beperk was, kon ons op die skerm nie. Toe het ons in 2018 begin sien hoe die koste van die groter 2,42 duim OLED -skerms in prys kom. In Januarie van 2019 is die pryse tot ongeveer $ 16 gedaal. Ons het uiteindelik 'n wonderlike vertoning gehad wat ons vir ons robotgesigte kon gebruik.
Hier is die spesifikasies van hierdie skerms:
- 2,42 duim (diagonale meting)
- 128 pixels oor (x-dimensie)
- 64 pixels hoog (y-dimensie)
- Lae krag (gewoonlik 10ma)
- Monochroom (hulle kom in geel, groen, blou en wit)
- Standaard SPI -koppelvlak, alhoewel u dit na I2C kan verander as u wil
- SSD1309 -bestuurder ('n baie algemene skermbestuurder)
Die SPI -koppelvlak het sewe drade. Hier is die tipiese etikette op die koppelvlak:
- CS - Chip Select
- DC - Data/opdrag
- RES - Herstel
- SDA - Data - dit moet gekoppel wees aan die Arduino Nano pin 11
- SCL - Klok - dit moet aan die Arduino Nano -pen 13 gekoppel word
- VCC - +5 volt
- GND - Grond
U moet ook 'n draadjie hê om die skerm aan die broodbord te koppel. Die skerms het gewoonlik 'n 7-pins kopstuk wat u aan die skerm soldeer. Ek het 7 man-tot-man 20 mc Dupont-verbindings gebruik en dit gesoldeer sodat die drade aan die agterkant van die skerm uitkom.
Stap 3: Stap 3: Koppel die OLED aan die Arduino Nano
Nou is u gereed om u OLED te toets. Ek gebruik 'n ander Arduino Nano net om te toets dat elke skerm wat ek kry werk. Sodra die toetse werk, koppel ek dit aan die robot. Die bedradingsdiagram vir die toetser word in die bostaande figuur getoon. Let daarop dat u die OLED -verbindings kan skuif na ander penne wat digitale uitsette ondersteun, maar as u seker maak dat SCL (klok) op Arduino Nano pin 13 en SDA (data) op Arduino Nano pin 11 is, kan u die standaardinstellings in die sagteware. Dit hou u kode 'n bietjie eenvoudiger.
Stap 4: Stap 4: Toets u skerm
Om u skerm te toets, gebruik ons die u8g2 -biblioteek. Daar is ander biblioteke wat u kan gebruik, maar volgens my ervaring is nie een van hulle so goed in die u8g2 -biblioteek nie. Een kritieke faktor is hoeveel RAM in die Arduino deur die skerm gebruik word. Die u8g2 is die enigste biblioteek wat ek gevind het, gebruik 'n 'Bladsymodus' wat saam met die Arduino Nano werk.
U kan hierdie biblioteek by u Arduino IED voeg deur te soek na "u8g2" in die menu "Beheer biblioteke". U kan die kode ook direk vanaf gethub aflaai.
github.com/olikraus/u8g2
Die toetskode wat ek gebruik, is hier:
github.com/dmccreary/coderdojo-robots/blob…
Daar is 'n paar dinge om op te let. Daar word kommentaar gelewer oor die SCL- en SDA -pennommers omdat dit die standaardpenne op die Nano is. Die konstruktor vir die u8g2 is die belangrikste reël:
// Ons gebruik die SSD1306, 128x64, enkelbladige, naamlose, 4-draads, hardeware, SPI sonder rotasie wat slegs 27% van dinamiese geheue gebruik U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);
Ons gebruik die enkelbladsy-modus, aangesien die modus minimale RAM gebruik. Ons gebruik die 4-draads hardeware-koppelvlak en die OLED het standaard SPI.
Stap 5: Stap 5: Voeg u OLED by die robot
Noudat ons 'n werkende OLED het en ons weet hoe om die u8g2 -biblioteke te initialiseer, is ons gereed om die OLED met ons basisrobot te integreer. Daar is 'n paar dinge om in ag te neem. In ons OLED -toets het ons die penne wat langs mekaar was, gebruik om die bedrading makliker te maak. Ongelukkig het ons pen 9 nodig om ons robot te bestuur, want dit is een van die PWM -penne wat ons nodig het om 'n analoog sein na die motorbestuurder te stuur. Die oplossing is om die draad wat op pen 9 is, na 'n ander gratis pen te skuif en dan die #define-verklaring na die nuwe pen te verander. Om die OLED aan die voorkant van die robot te monteer, het ek twee driehoekige stukke uit plexiglas gesny en warmgeplak hulle na die onderstel. Ek hou altyd daarvan om 'n skuurpapier te gebruik om die oppervlak van die plexiglas op te maak voordat ek die dele aanmekaar plak, sodat dit nie te maklik uitmekaar val nie.
Laat ons dan 'n paar data oor ons OLED kry en 'n paar gesigte op die robot teken!
Stap 6: Stap 6: Vertoon robotparameters
Een van die lekker dinge om 'n skerm te hê, is dat dit regtig help om te ontfout wat in ons robot aangaan terwyl dit rondry. Dit is nie ongewoon dat ontwikkelaars 'n funksie op die tafelblad laat werk as u aan u rekenaar gekoppel is nie, sodat dit NIE werk as die robot rondry nie. Om 'n waarde soos die afstand wat deur die pingsensor gemeet word, te vertoon, is 'n goeie voorbeeld van die vertoon van 'n robotparameter.
Op die foto hierbo toon die eerste reël (Echo Time) die vertragingstyd tussen die klank die ultraklankluidspreker verlaat en die tyd wat dit deur die mikrofoon ontvang word. Hierdie getal word dan omgeskakel na sentimeter in die tweede reël (Afstand in cm). Die teller word opgedateer, tweede soek om aan te toon dat die skerm opgedateer word. Die 'Draai …' word slegs vertoon as die afstand onder 'n spesifieke nommer is wat die draaidrempel genoem word. Beide wiele beweeg vorentoe as die pingafstand bo hierdie getal is. As die getal laer is as die drumpel, draai ons die motors om (rugsteun) en verander dan die rigting.
Hier is 'n voorbeeldkode wat u wys hoe u die waardes van die pingsensor kan neem en die waardes op u OLED -skerm kan vertoon.
Hier is 'n voorbeeld wat drie pingsensors (links, middel en regs) toets en die waardes op die skerm wys:
github.com/dmccreary/coderdojo-robots/blob…
Stap 7: Stap 7: Teken 'n paar gesigte
Nou het ons al die stukke in plek om 'n paar gesigte te teken. Ons studente dink gewoonlik dat die robot 'n gelukkige gesig moet hê as hy vorentoe ry. As dit iets voor hom sien, registreer dit 'n gevoel van verrassing. Dit maak dan 'n terugslag en kyk rond, miskien terwyl die oë beweeg om aan te dui watter rigting dit sal draai.
Die tekenopdrag om 'n gesig te teken, is redelik eenvoudig. Ons kan 'n sirkel vir die buitelyn van die gesig teken en sirkels vir elke oog invul. Die mond kan 'n halwe sirkel wees vir 'n glimlag en 'n gevulde ronde sirkel vir 'n gevoel van verrassing. Dit is die plek waar die kinders hul kreatiwiteit kan gebruik om die uitdrukkings te personaliseer. Ek teken soms doelbewus slegte gesigte en vra die studente om my te help om dit beter te maak.
U kan die funksies display.height () en display.width () gebruik om die grootte van die skerm te kry. In die onderstaande kode stel ons veranderlikes op
half_width = display.width ()/2; half_hight = display.height ()/2;
As u hierdie berekeninge baie keer doen, is die kode 'n bietjie vinniger as dit een keer bereken word en in 'n veranderlike gestoor word. Hier is 'n paar voorbeelde van hoe die vervelige reguit gesig hierbo geteken word:
// ons doen dit aan die begin van elke lus
display.clearDisplay (); // teken 'n ligte gesig vir die agtergronddisplay.fillCircle (halfbreedte, halfhoogte, 31, WIT); // regteroog donker vertoning.fillCirkel (halfbreedte - 10, vertoon.hoogte ()/3, 4, SWART); // linkeroog donkerdisplay.fillCircle (halfbreedte + 10, vertoon.hoogte ()/3, 4, SWART); // trek 'n reguit lyn vir die mondvertoning.drawLine (half_width - 10, display.height ()/3 * 2, half_width + 10, display.height ()/3 * 2, SWART); // hierdie reël stuur ons nuwe gesig na die OLED -skerm display.display ();
Stap 8: Stap 8: Pas aan
Die basiese gesig is net die begin. Studente kan baie variasies skep. Baie studente het 'n klein luidspreker bygevoeg wat klanke of klanke speel terwyl hulle rondbeweeg.
U kan ook kleiner toetsprogramme bou wat u studente help om die motors korrek aan te skakel. Byvoorbeeld, 'n pyl (driehoek) op die skerm sal die student vertel watter rigting die wiel moet draai wanneer u die motors aansluit. Die toetsprogram loop deur elk van die motorrigtings:
- Regs vorentoe
- Regs agteruit
- Links vorentoe
- Links agteruit
Vir elke modus word die skerm opgedateer met 'n nuwe skerm om te wys watter wiel moet draai en in watter rigting.
'N Voorbeeld van die program is hier
github.com/dmccreary/coderdojo-robots/blob…
Daar is baie bykomende voorbeelde en programmeringsbesonderhede op die CoderDojo Robots GitHub FaceBot -bladsy.
Daar is ook 'n weergawe van die FaceBot -robot wat studente in staat stel om al die parameters vir die voorkoming van botsings (spoed vorentoe, draaiafstand, draaityd, draaisnelheid) direk met die skerm te verander. Geen rekenaar is nodig om hierdie robotte te "programmeer" nie! Hierdie weergawes is ideaal vir MakerFairs en geleenthede waarheen u nie rekenaars wil vervoer nie.
Laat weet ons asseblief met watter nuwe gesigte u en u studente vorendag kom!
Gelukkige kodering!
Aanbeveel:
Spelontwerp in vyf stappe: 5 stappe
Spelontwerp in fliek in 5 stappe: Flick is 'n baie eenvoudige manier om 'n speletjie te maak, veral iets soos 'n legkaart, visuele roman of avontuurlike spel
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: 3 stappe
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: in hierdie instruksies gaan ons gesigsopsporing uitvoer op Raspberry Pi 4 met Shunya O/S met behulp van die Shunyaface-biblioteek. Shunyaface is 'n biblioteek vir gesigherkenning/opsporing. Die projek het ten doel om die vinnigste opsporing en herkenningssnelheid te bereik met
DIY Vanity Mirror in eenvoudige stappe (met LED -strookligte): 4 stappe
DIY Vanity Mirror in eenvoudige stappe (met behulp van LED Strip Lights): In hierdie pos het ek 'n DIY Vanity Mirror gemaak met behulp van die LED strips. Dit is regtig cool, en u moet dit ook probeer
Arduino Halloween Edition - Zombies pop -out skerm (stappe met foto's): 6 stappe
Arduino Halloween Edition - Zombies pop -out skerm (stappe met foto's): wil u u vriende skrik en 'n skreeu geraas maak tydens Halloween? Of wil u net 'n goeie grap maak? Hierdie pop-up skerm van Zombies kan dit doen! In hierdie instruksies sal ek u leer hoe u maklik Zombies kan spring deur Arduino te gebruik. Die HC-SR0
Speel Doom op u iPod in 5 maklike stappe !: 5 stappe
Speel Doom op u iPod in 5 maklike stappe !: 'n Stap-vir-stap gids oor hoe u Rockbox op u iPod kan dubbellaai om Doom en tientalle ander speletjies te speel. Dit is iets baie maklik om te doen, maar baie mense staan nog steeds verbaas as hulle sien hoe ek op my iPod doom speel en deurmekaar raak met die instruksies