Vår robot Stefan
By Anatoly Mironov
Roboten Stefan
Här är historian om Stefan, en robot jag och barnen har jobbat på under den senaste månaden. I en sann DIY-anda vill jag skriva om vårt projekt på bloggen och förhoppningsvis inspirera andra att utforska det. I och med projektet innebär en hel del pyssel, så är det lämpat i princip för alla åldrar.
Även om allting togs fram parallellt och stegvis (“i iterationer”), kommer projektet presenteras det i förenklad ordning
- Idé, hur allting uppstod
- Hårdvara, material som vi använt
- Pyssel, utklippning, måleri etc
- Mjukvara (och elektroniken)
- Lärdomar, diverse insikter vi har fått på vägen
Idé
Vi har en microbit v2 som vi har letat användning för. Microbit v2 har en mikrofon och en liten högtalare, definitivt en enorm fördel om man vill få barn med på pysslandet med elektronik. Jag hade sett någonstans på nätet om figurer man kunde göra av mjölkkartonger. “Stefan” då, varför just det namnet? Min fyraåriga dotter brukade skylla på Stefan om det var “någon” som stökade till, råkade trampa på någon annans fötter och sånt. “Det var inte jag, det var Stefan” brukade hon säga ett tag. Så vi kände att vi behövde ge Stefan en kropp, ett ansikte för att göra en rolig grej av det. Under arbetet med roboten har betydelsen av Stefan minskat dock. Roboten behöll sitt fina namn - Stefan - i alla fall.
en enklare gif
Hårdvara
Det här var vad vi använde. Det finns miljontals andra material-kombinationer som kan funka. Tipset är att se vad man har hemma.
Ingredienser
- Mjölkkartong, 1,5 L
- Microbit v2
- 1 Servo-motor (180 grader)
- 2 Krokodilklämmor
- 1 batterihållare för 2xAAA-batterier för att driva microbiten
- 1 batterihållare för 4xAAA-batterier för att driva servon
- Diverse sladdar
- Hobbyfärg
- Elastisk tråd (pärlarmbandstråd)
- Batterier 6xAAA (vi har laddningsbara och kan ladda dem då och då när roboten blir “trött”)
Verktyg:
- Sax
- Limpistol
- Pensel
- Microsoft MakeCode för Microbit (gratis som webbapplikation eller Windows-app). Windows-app har fördelen att man kan skriva till microbiten direkt, utan att ladda ner det först, plus att det kommer ihåg dina senaste projekt
Pyssel
Roboten Stefan skulle säga “Hej” och han måste kunna öppna munnen. Det första vi gjorde var just att klippa ut munnen. Vi klistrade fast servon (efter långa undersökningar i vilken vinkel och hur mycket den rörde sig). Vi använde limpistol för att sätta fast servon. För att munnen skulle stängas, följa med servon tillbaka, knöt vi läppen till servon med en rosa elastisk tråd (den har man för att göra pärlarmband bland annat).
Vi satte fast servon med limpistol.
Roboten Stefan skulle också kunna visa med sin “näsa”. Vi gjorde ett fyrkantigt hål för microbitens ledlampor. För knapparna och A och B gjorde vi små hål. På det sättet kunde man jacka in microbiten in i de hålen så att det höll sig fast. Knapparna blev irisar i Stefans ögon senare.
På baksidan gjorde vi ett runt hål för att Stefan kunde gå på toa 💩. (Det var inte min idé 😜).
Stefan behövde också ett större hål på baksidan för att stoppa in elektroniken.
Målningen var väldigt kul och det gjorde vi i många omgångar (ibland med en hel veckas mellanrum, så länge tålamodet räckte och när lusten att måla var på topp). Prototypen på ansiketet skissade vi först på papper.
Prototypen på Stefans ansikte
Stefan skulle ha stora tänder, röda läppar och blå ögon. 🤩
Frost-fantasten målar Stefan.
Elektroniken kopplade vi med några krokodilklämmor och sladdar. Vi försökte följa samma färgkodning. PIN 1 använde vi för att styra. GND delades av microbiten, servon och servons batteripack.
Här kan man se hur sladdarna är kopplade.
Mjukvaran
Vi använde MakeCode for micro:bit, en app från Microsoft Store.
MakeCode i Microsoft Store
Projektet döpte vi till Stefan, kort och gott.
Projektet Stefan
Vi använde blockprogrammering. Det är kul även för mig som “skriv”-programmerar på jobbet. What-You-See-Is-What-You-Get (nästan i alla fall) är såklart toppen för barn.
Blockprogrammering i MakeCode
Nackdelen med blockprogrammering är att det inte är så lätt att återanvända koden eller spara koden. Som tur är kan man bara öppna den i python eller javascript. Vi (jag) satsade på python, för att det är vackert och koncist. Den aktuella koden är sparad på github, den kan dock ändras och justeras i framtiden:
Låt oss gå igenom blocken lite grann. Programmet består av tre huvudkomponenter:
- Vid start (det som händer när Stefan slås på): Den visar “STEFAN” med rullande bokstäver, spelar upp ljudet Mysterious.
- För alltid (det Stefan gör under sin vakna tid, huvudprogrammet): den spelar upp 6 gånger “Hello” och öppnar munnen samtidigt, lika många gånger. Om ljudet runtomkring tyst/lågt, tystnar även Stefan. Om Stefan hör högre ljud (någon kommer in i rummet och pratar eller någon ropar “hej”), börjar Stefan säga “Hej” från början igen, och öppna munnen, och detta 6 gånger igen. Så fortsätter det tills man stänger av Stefan.
- Vid knapptryck (möjligheten att styra Stefan med knappar, ifall inget annat funkar): när man trycker på A-knappen, börjar Stefan hälsa och prata, när man trycker på B-knappen, slutar Stefan.
Stefan vaknar - “vid start”
Huvudmomentet - “för alltid”
Så knapparna användes mest för felsökning och återställning i början. Även om de inte används idag, har vi behållit funktionen för säkerhets skull.
Knapparna A och B sätter och stänger av Stefan.
Lärdomar
Den sista bilden med knapptrycken får vara den första lärdomen. Vi hade flera variabler: paus, running, cycles. Så småningom hade vi endast “cycles” - cykler för hälsningar. En cykel är en munöppning och Hello-fras. Den börjar på 1 och slutar efter 6 gånger. Upptäcker en högre ljudnivå, börjar den från början. Vi skulle kunna ha nedräkning istället, men det blev uppräkning istället.
Hakan vikte vi först, men det var trögt, så vi skära långa sträck i vecket för att göra munöppningen lite smidigare.
Servon drevs först av microbit, det var oväsen även när munnen var stängd, servon “darrade” och väsnades. Vi kopplade in ett extra batteripack endast för servon, då blev det tyst. GND delas av microbiten och servons batteripack.
Vi fick experimentera ganska mycket med servons grader, och hittade bra vinklar till slut. Lite mer än 90 grader: 180 och 60. Detta beror främst på själva servons placering och elastiska tråden, man fick ta i lite mer för att den skulle spänna tråden och stänga munnen.
Tidigt i projektet hade vi en powerbank som drev det hela. Tyvärr stängde den av sig vid inaktivitet. En bra funktion för mobilladdning, men dåligt för Stefan.
Powerbanken fick plats men klarade inte uppgiften.
Mjölkkartongen kändes lite skum när man målade på den med hobbyfärg, som om den inte riktigt ville fastna i. Men vi tänkte att Stefan inte skulle trivas i att vara perfektionist, så det syns igenom att det inte är mjölk, utan en laktosfri mjölkdryck på vissa ställen.
“Vid högt ljud” fungerar inte. Det upptäcktes inte eller var det i osynk, så vi fick skriva om det till att mäta ljudnivån i varje körning i huvudmomentet, alltså i “för alltid”.
Det finns “döda vinklar” i systemet. Ljudnivån mäts, och sedan är det vissa pauser då ljudnivån inte mäts. Det har hänt att högt ljud har passerat förbi. Det vore bättre med ett event - “vid högt ljud”, men det fungerade tyvärr inte. Även med “döda vinklar” (sekunder) är det förvånansvärt pålitligt. Helt enkelt att vi tilltalar Stefan med högre röst, och inte använder Stefan som en supermaskin kapabel att upptäcka varenda ljudnivåhöjning. Vår tolerans för Stefans tillkortakommanden är helt enkelt mycket högre.
Så ser den ut och så hälsar vår robot Stefan