Innehållsförteckning:
- Steg 1: Steg 1: Bygg din basrobot
- Steg 2: Steg 2: Hitta och beställ din OLED -skärm
- Steg 3: Steg 3: Anslut OLED till Arduino Nano
- Steg 4: Steg 4: Testa din skärm
- Steg 5: Steg 5: Lägg till din OLED i roboten
- Steg 6: Steg 6: Visa robotparametrar
- Steg 7: Steg 7: Rita några ansikten
- Steg 8: Steg 8: Anpassa
Video: FaceBot: 8 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
Den här guiden visar dig hur du skapar en lågkostnadsrobot ($ 39) för att undvika kollisioner med ett ansikte på teckensnittet. Vi gör detta genom att använda en ny billig, ljus OLED-skärm. Våra studenter älskar att lägga till ansikten till sina robotar. De gillar att rita smiley -ansikten som förändras utifrån vad roboten gör.
Det finns flera små billiga robotar tillgängliga för under $ 25 som låter dig lära dig grunderna i datavetenskap. Ett av problemen med dessa robotar är att de inte ger transparens om vad som händer inne i roboten medan du bygger den. Under 2018 började allt förändras med tillgängligheten av billiga högkvalitativa OLED-skärmar. Dessa skärmar har följande fördelar:
- De är mycket ljusa och har hög kontrast. Även i ett ljust rum är de lätta att läsa från många vinklar.
- De har bra upplösning. De jag använder är 168x64 pixlar. Detta är nästan fyra gånger tidigare displayer som vi har använt.
- De har låg effekt och de fungerar konsekvent även när din robots kraft faller.
- De är relativt låga (cirka 16 dollar vardera) och priserna sjunker.
Tidigare har de varit svåra att programmera och skulle använda för mycket minne för att användas med billiga Arduino Nanos. Nano har bara 2K eller dynamiskt RAM -minne. Den här guiden visar dig hur du löser dessa problem och bygger en robot som barn älskar att programmera.
Steg 1: Steg 1: Bygg din basrobot
För att bygga en FaceBot börjar vi vanligtvis med basrobot. Ett exempel är $ 25 CoderDojo Robot som beskrivs här. Denna robot använder den billiga och populära Arduino Nano, en enkel motorstyrenhet, 2 DC-motorer och 4 eller 6 AA-batterier. De flesta elever börjar använda pingsensorn för att bygga en robot för att undvika kollisioner. Eftersom det ger ett 5v kraftsystem är det perfekt för FaceBot. För att hålla kostnaderna låga brukar jag få mina elever att beställa delarna online från e-Bay. Delarna tar ofta 2-3 veckor att komma fram och kräver en mindre mängd lödning för motorer och strömbrytare. Resten av anslutningarna görs med en 400-tie-brödbräda. Eleverna limmar ofta in trådarna så att de inte glider ut.
Det finns en ändring vi gör i standarddesignen för att undvika kollisioner. Vi flyttar ping -sensorn från toppen av chassit till under chassit. Detta ger utrymme för displayen ovanpå roboten.
När du har din kollisionsundvikande programmering läses du för att lägga till ett ansikte!
Steg 2: Steg 2: Hitta och beställ din OLED -skärm
När OLED -skärmar kom ut, var de billiga dem utformade för klockor eller fitnessmonitorer. Som ett resultat var de små, vanligtvis cirka 1 tum breda. Den goda nyheten är att de var billiga, cirka $ 3. Vi byggde några robotar med dessa skärmar, men eftersom storleken på skärmarna var begränsade vad vi kunde göra på skärmen. Sedan 2018 började vi se kostnaden för de större 2,42 tums OLED -skärmarna komma ner i pris. I januari 2019 sjunker priserna till cirka $ 16. Vi hade äntligen en fantastisk display som vi kunde använda för våra robotytor.
Här är specifikationerna för dessa skärmar:
- 2,42 tum (diagonal mätning)
- 128 pixlar över (x-dimension)
- 64 pixlar hög (y-dimension)
- Låg effekt (vanligtvis 10ma)
- Monokrom (de finns i gult, grönt, blått och vitt)
- Standard SPI -gränssnitt även om du kan ändra det till I2C om du vill
- SSD1309 -drivrutin (en mycket vanlig bildskärmsdrivrutin)
SPI -gränssnittet har sju trådar. Här är de typiska etiketterna på gränssnittet:
- CS - Chip Select
- DC - Data/kommando
- RES - Återställ
- SDA - Data - detta bör anslutas till Arduino Nano pin 11
- SCL - Klocka - detta bör anslutas till Arduino Nano pin 13
- VCC - +5 volt
- GND - Jord
Du måste också ha lite kabel för att ansluta skärmen till brödbrädan. Skärmarna kommer vanligtvis med en 7-stifts rubrik som du lödar till displayen. Jag använde 7 man-till-han-20mc Dupont-kontakter och lödde dem så att ledningarna kom ut på baksidan av displayen.
Steg 3: Steg 3: Anslut OLED till Arduino Nano
Nu är du redo att testa din OLED. Jag använder en annan Arduino Nano bara för att testa att varje skärm jag får fungerar. När testerna fungerar så ansluter jag det till roboten. Kopplingsschemat för testaren visas i figuren ovan. Observera att du kan flytta OLED -anslutningarna till andra stift som stöder digitala utgångar, men om du ser till att SCL (klocka) är på Arduino Nano pin 13 och SDA (data) är på Arduino Nano pin 11 kan du använda standardinställningarna i mjukvaran. Detta håller din kod lite enklare.
Steg 4: Steg 4: Testa din skärm
För att testa din bildskärm använder vi u8g2 -biblioteket. Det finns andra bibliotek du kan använda, men enligt min erfarenhet är inget av dem lika bra på u8g2 -biblioteket. En kritisk faktor är hur mycket RAM -minne i Arduino som används av displayen. U8g2 är det enda biblioteket jag hittade som använder ett "Sidläge" som fungerar med Arduino Nano.
Du kan lägga till detta bibliotek i din Arduino IED genom att söka efter "u8g2" i menyn "Hantera bibliotek". Du kan också ladda ner koden direkt från gethub.
github.com/olikraus/u8g2
Testkoden som jag använder är här:
github.com/dmccreary/coderdojo-robots/blob…
Det finns några saker att notera. SCL- och SDA -stiftnumren kommenteras eftersom de är standardnålarna på Nano. Konstruktören för u8g2 är nyckelraden:
// Vi använder SSD1306, 128x64, enkelsidig, namngiven, 4-trådig, hårdvara, SPI utan rotation som bara använder 27% av dynamiskt minne U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_PIN;
Vi använder enkelsidesläget eftersom det läget använder minimalt med RAM. Vi använder 4-trådars hårdvarugränssnitt och OLED kommer som standard med SPI.
Steg 5: Steg 5: Lägg till din OLED i roboten
Nu när vi har en fungerande OLED och vi vet hur vi initierar u8g2 -biblioteken är vi redo att integrera OLED med vår basrobot. Det finns några saker att tänka på. I vårt OLED -test använde vi stiften som var bredvid varandra för att göra ledningen enklare. Tyvärr behöver vi stift 9 för att köra vår robot eftersom det är en av PWM -stiften som vi behöver för att skicka en analog signal till motorföraren. Lösningen är att flytta tråden som sitter på stift 9 till en annan ledig stift och sedan ändra #define-satsen till den nya stiftet. För att montera OLED på framsidan av roboten klippte jag två triangulära bitar ur plexiglas och varmlimmade dem till chassit. Jag gillar alltid att använda lite sandpapper för att grova upp plexiglasets yta innan jag varmlimmer ihop delarna så att de inte går isär alltför lätt.
Låt oss sedan få lite information om vår OLED och rita några ansikten på roboten!
Steg 6: Steg 6: Visa robotparametrar
En av de fina sakerna med att ha en skärm är att det verkligen hjälper till att felsöka vad som händer inne i vår robot medan den kör runt. Det är inte ovanligt att utvecklare har en funktion som fungerar på skrivbordet när du är ansluten till din dator bara för att den INTE ska fungera när roboten kör runt. Att visa ett värde som avståndet mätt av pingsensorn är ett bra exempel på att visa en robotparameter.
På bilden ovan visar den första raden (Echo Time) fördröjningstiden mellan när ljudet lämnar ultraljudshögtalaren och den tid det tas emot av mikrofonen. Detta nummer konverteras sedan till centimeter i den andra raden (Avstånd i cm). Räknaren uppdateras sökningen andra för att visa att skärmen uppdateras. "Vändning …" visas bara om avståndet är under ett specifikt nummer som kallas svängtröskel. Båda hjulen går framåt om pingavståndet är över detta nummer. Om siffran är under varvtröskeln så backar vi motorerna (backar) och ändrar sedan riktning.
Här är några exempelkoder som visar hur du tar värdena från ping -sensorn och visar värdena på din OLED -skärm.
Här är ett exempel som testar tre ping -sensorer (vänster, mitten och höger) och visar värdena på displayen:
github.com/dmccreary/coderdojo-robots/blob…
Steg 7: Steg 7: Rita några ansikten
Nu har vi alla bitar på plats för att rita några ansikten. Våra elever tycker oftast att roboten ska ha ett glatt ansikte om den kör framåt. När den ser något framför sig, registrerar den en känsla av överraskning. Den backar sedan upp och ser sig omkring, kanske med ögonen i rörelse för att signalera vilken riktning den kommer att vända.
Ritningskommandot för att rita ett ansikte är ganska enkelt. Vi kan rita en cirkel för ansiktets konturer och fylla i cirklar för varje öga. Munnen kan vara en halv cirkel för ett leende och en fylld rund cirkel för en känsla av överraskning. Det är här som barnen kan använda sin kreativitet för att anpassa uttrycken. Jag ritar ibland medvetet dåliga ansikten och ber eleverna att hjälpa mig att göra dem bättre.
Du kan använda funktionerna display.height () och display.width () för att få storleken på displayen. I koden nedan sätter vi upp variabler
half_width = display.width ()/2; half_height = display.height ()/2;
Om du gör dessa beräkningar många gånger är koden lite snabbare om de beräknas en gång och lagras i en variabel. Här är några exempel på hur det tråkiga raka ansiktet ovan ritas:
// vi gör detta i början av varje loop
display.clearDisplay (); // rita ett ljust ansikte för backgrounddisplay.fillCircle (half_width, half_height, 31, WHITE); // höger öga mörk display.fillCircle (half_width - 10, display.height ()/3, 4, SVART); // vänster öga mörkdisplay.fillCirkel (halvbredd + 10, display.höjd ()/3, 4, SVART); // rita en rak linje för munnen display.drawLine (half_width - 10, display.height ()/3 * 2, half_width + 10, display.height ()/3 * 2, SVART); // denna rad skickar vårt nya ansikte till OLED -displayen display.display ();
Steg 8: Steg 8: Anpassa
Att rita det grundläggande ansiktet är bara början. Eleverna kan skapa många varianter. Många elever har lagt till en liten högtalare som spelar toner eller ljud när de rör sig.
Du kan också bygga mindre testprogram som hjälper dina elever att koppla ihop motorerna korrekt. Till exempel visar en pil (triangel) på skärmen eleven vilken riktning hjulet ska vända när du ansluter motorerna. Testprogrammet går igenom var och en av motorriktningarna:
- Höger framåt
- Höger omvänd
- Vänster framåt
- Vänster omvänd
För varje läge uppdateras skärmen med en ny display för att visa vilket hjul som ska rotera och i vilken riktning.
Ett exempel på det programmet finns här
github.com/dmccreary/coderdojo-robots/blob…
Det finns många ytterligare exempel och programmeringsdetaljer på CoderDojo Robots GitHub FaceBot -sida.
Det finns också en version av FaceBot -roboten som gör att eleverna kan ändra alla parametrar för att undvika kollisioner (hastighet framåt, svängavstånd, varvtid, varvhastighet) direkt med hjälp av displayen. Ingen dator krävs för att "programmera" dessa robotar! Dessa versioner är idealiska för MakerFairs och evenemang som du inte vill transportera datorer runt.
Låt oss veta vilka nya ansikten du och dina elever kommer på!
Glad kodning!
Rekommenderad:
Arduino Car Reverse Parking Alert System - Steg för steg: 4 steg
Arduino Car Reverse Parking Alert System | Steg för steg: I det här projektet kommer jag att utforma en enkel Arduino Car Reverse Parking Sensor Circuit med Arduino UNO och HC-SR04 Ultrasonic Sensor. Detta Arduino -baserade bilomvändningsvarningssystem kan användas för autonom navigering, robotavstånd och andra
Steg för steg PC -byggnad: 9 steg
Steg för steg PC -byggnad: Tillbehör: Hårdvara: ModerkortCPU & CPU -kylarePSU (strömförsörjningsenhet) Lagring (HDD/SSD) RAMGPU (krävs inte) CaseTools: Skruvmejsel ESD -armband/mathermisk pasta med applikator
Tre högtalarkretsar -- Steg-för-steg handledning: 3 steg
Tre högtalarkretsar || Steg-för-steg-handledning: Högtalarkretsen förstärker ljudsignalerna som tas emot från miljön till MIC och skickar den till högtalaren varifrån förstärkt ljud produceras. Här visar jag dig tre olika sätt att göra denna högtalarkrets med:
Steg-för-steg-utbildning i robotik med ett kit: 6 steg
Steg-för-steg-utbildning i robotik med ett kit: Efter ganska många månader av att bygga min egen robot (se alla dessa), och efter att två gånger ha misslyckats med delar, bestämde jag mig för att ta ett steg tillbaka och tänka om min strategi och riktning. De flera månaders erfarenhet var ibland mycket givande och
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)