Obsah:

FaceBot: 8 kroků
FaceBot: 8 kroků

Video: FaceBot: 8 kroků

Video: FaceBot: 8 kroků
Video: Česky krok za krokem 2 (B1) - Lekce 8 - DIKTÁT 2024, Listopad
Anonim
FaceBot
FaceBot

Tato příručka vám ukáže, jak vytvořit levného robota pro zamezení kolizím (39 USD) s tváří na písmu. Děláme to pomocí nového levného, jasného OLED displeje. Naši studenti rádi přidávají do svých robotů tváře. Rádi kreslí smajlíky, kteří se mění podle toho, co robot dělá.

K dispozici je několik malých levných robotů za méně než 25 USD, které vám umožní naučit se základy počítačové vědy. Jedním z problémů těchto robotů je, že neposkytují transparentnost toho, co se děje uvnitř robota, když jej stavíte. V roce 2018 se to vše začalo měnit s dostupností levných vysoce kvalitních OLED displejů. Tyto displeje mají následující výhody:

  • Jsou velmi jasné a mají vysoký kontrast. I ve světlé místnosti jsou snadno čitelné z mnoha úhlů.
  • Mají dobré rozlišení. Ty, které používám, jsou 168x64 pixelů. To je téměř čtyřnásobek předchozích displejů, které jsme použili.
  • Mají nízký výkon a fungují konzistentně, i když výkon vašeho robota klesá.
  • Jsou to relativně nízké náklady (každý kolem 16 $) a ceny klesají.

V minulosti bylo obtížné je naprogramovat a využily by příliš mnoho paměti, než aby mohly být použity s levnými Arduino Nanos. Nano má pouze 2K nebo dynamickou RAM. Tato příručka vám ukáže, jak tyto problémy vyřešit a postavit robota, kterého děti rády programují.

Krok 1: Krok 1: Sestavte si základního robota

Krok 1: Sestavte si základního robota
Krok 1: Sestavte si základního robota

Pro stavbu FaceBota obvykle začínáme se základním robotem. Jedním příkladem je robot CoderDojo za 25 $, který je zde popsán. Tento robot využívá levné a oblíbené Arduino Nano, jednoduchý ovladač motoru, 2 stejnosměrné motory a 4 nebo 6 baterií AA. Většina studentů začíná používat snímač ping k sestavení robota pro zamezení kolizím. Protože poskytuje 5v napájecí systém, je ideální pro FaceBot. Aby byly náklady nízké, obvykle nechávám své studenty objednat díly online z e-Bay. Doručení dílů často trvá 2–3 týdny a vyžadují malé množství pájení motorů a vypínače. Zbytek připojení je provedeno pomocí 400-kravatového prkénka. Studenti často lepí dráty za tepla, aby nevyklouzly.

Ve standardním provedení pro zabránění kolizím provádíme jednu změnu. Přesuneme snímač ping z horní části podvozku pod podvozek. To ponechává prostor pro displej v horní části robota.

Jakmile budete mít program pro zabránění kolizím, budete načteni, abyste přidali tvář!

Krok 2: Krok 2: Najděte a objednejte si svůj OLED displej

Krok 2: Najděte a objednejte si svůj OLED displej
Krok 2: Najděte a objednejte si svůj OLED displej

Když vyšly OLED displeje, ty levné byly určeny pro hodinky nebo fitness monitory. V důsledku toho byly malé, obvykle asi 1 palec napříč. Dobrou zprávou je, že byly levné, kolem 3 $. Postavili jsme několik robotů s těmito displeji, ale protože velikost displejů byla omezená, mohli jsme na obrazovce dělat. Poté v roce 2018 jsme začali vidět, že cena větších 2,42 palcových OLED obrazovek klesá v ceně. V lednu 2019 se ceny snížily na přibližně 16 USD. Nakonec jsme měli skvělý displej, který jsme mohli použít pro tváře robotů.

Zde jsou specifikace těchto displejů:

  1. 2,42 palce (úhlopříčka měření)
  2. 128 pixelů napříč (rozměr x)
  3. 64 pixelů vysoký (rozměr y)
  4. Nízký výkon (obvykle 10 mA)
  5. Jednobarevné (jsou žluté, zelené, modré a bílé)
  6. Výchozí rozhraní SPI, i když ho můžete změnit na I2C
  7. Ovladač SSD1309 (velmi běžný ovladač zobrazení)

Rozhraní SPI má sedm vodičů. Zde jsou typické popisky rozhraní:

  1. CS - Chip Select
  2. DC - Data/příkaz
  3. RES - Reset
  4. SDA - Data - toto by mělo být připojeno k pinu Arduino Nano pin 11
  5. SCL - Hodiny - toto by mělo být připojeno k pinu Arduino Nano pin 13
  6. VCC - +5 voltů
  7. GND - Ground

Budete také potřebovat nějaký vodič pro připojení displeje k prkénku. Displeje se obvykle dodávají se 7kolíkovým konektorem, který připájíte k displeji. Použil jsem 7 20mc konektorů Dupont typu male-to-male a připájel je tak, aby dráty vyšly ze zadní části displeje.

Krok 3: Krok 3: Připojte OLED k Arduino Nano

Krok 3: Připojte OLED k Arduino Nano
Krok 3: Připojte OLED k Arduino Nano
Krok 3: Připojte OLED k Arduino Nano
Krok 3: Připojte OLED k Arduino Nano

Nyní jste připraveni svůj OLED otestovat. Používám další Arduino Nano, abych otestoval, že každý displej, který dostanu, funguje. Jakmile testy fungují, připojím ho k robotu. Schéma zapojení testeru je znázorněno na obrázku výše. Všimněte si toho, že připojení OLED můžete přesunout na jiné piny, které podporují digitální výstupy, ale pokud se ujistíte, že SCL (hodiny) jsou na pinu Arduino Nano 13 a SDA (data) jsou na pinu Arduino Nano pinu 11, můžete použít výchozí nastavení v software. Díky tomu bude váš kód o něco jednodušší.

Krok 4: Krok 4: Otestujte si displej

Krok 4: Otestujte svůj displej
Krok 4: Otestujte svůj displej

K otestování vašeho displeje použijeme knihovnu u8g2. Existují další knihovny, které můžete použít, ale podle mých zkušeností žádná z nich není tak dobrá v knihovně u8g2. Jedním z kritických faktorů je, kolik paměti RAM v Arduinu využívá displej. U8g2 je jediná knihovna, kterou jsem našel a která používá „režim stránky“, který bude fungovat s Arduino Nano.

Tuto knihovnu můžete přidat do svého Arduino IED hledáním „u8g2“v nabídce „Spravovat knihovny“. Kód si také můžete stáhnout přímo z gethub.

github.com/olikraus/u8g2

Testovací kód, který používám, je zde:

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

Je třeba poznamenat několik věcí. Čísla pinů SCL a SDA jsou komentována, protože se jedná o výchozí piny na Nano. Klíčem je konstruktor pro u8g2:

// Používáme SSD1306, 128x64, jednostránkové, nejmenované, 4vodičové, Hardware, SPI bez otáčení, které využívá pouze 27% dynamické pamětiU8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);

Používáme jednostránkový režim, protože tento režim využívá minimální RAM. Používáme 4vodičové hardwarové rozhraní a OLED je standardně vybaven SPI.

Krok 5: Krok 5: Přidejte svůj OLED do robota

Krok 5: Přidejte svůj OLED do robota
Krok 5: Přidejte svůj OLED do robota

Nyní, když máme funkční OLED a víme, jak inicializovat knihovny u8g2, jsme připraveni integrovat OLED s naším základním robotem. Je třeba zvážit několik věcí. V našem testu OLED jsme použili kolíky, které byly všechny vedle sebe, abychom usnadnili zapojení. Bohužel k ovládání našeho robota potřebujeme pin 9, protože je to jeden z pinů PWM, které potřebujeme k odeslání analogového signálu do ovladače motoru. Řešením je přesunout drát, který je na kolíku 9, na jiný volný kolík a poté změnit příkaz #define na tento nový kolík. Chcete-li namontovat OLED na přední část robota, vyřízl jsem dva trojúhelníkové kusy z plexiskla a zalepil je za tepla do podvozku. Vždy rád použiji nějaký brusný papír na zdrsnění povrchu plexiskla, než díly zalepím za tepla, aby se nerozdělily příliš snadno.

Dále získáme nějaká data o našem OLED a nakreslíme nějaké tváře na robota!

Krok 6: Krok 6: Zobrazte parametry robota

Krok 6: Zobrazte parametry robota
Krok 6: Zobrazte parametry robota

Jedna z hezkých věcí na displeji je, že opravdu pomáhá při ladění toho, co se děje uvnitř našeho robota, když se pohybuje kolem. Není neobvyklé, že vývojářům funguje funkce na ploše, když jste připojeni k počítači, aby nefungovala, když se robot pohybuje kolem. Zobrazení hodnoty, jako je vzdálenost naměřená snímačem ping, je dobrým příkladem zobrazení parametru robota.

Na výše uvedené fotografii první řádek (Echo Time) ukazuje dobu zpoždění mezi tím, kdy zvuk opouští ultrazvukový reproduktor, a časem, kdy je přijat mikrofonem. Toto číslo je pak převedeno na centimetry ve druhém řádku (Vzdálenost v cm). Počitadlo se aktualizuje jako druhé, aby se ukázalo, že se displej aktualizuje. „Otáčení…“se zobrazuje pouze tehdy, je -li vzdálenost pod určitým číslem, kterému se říká práh otočení. Pokud je vzdálenost pingu nad tímto číslem, obě kola se pohybují vpřed. Pokud je číslo pod prahovou hodnotou otáčení, obrátíme motory (zálohování) a poté změníme směr.

Zde je ukázkový kód, který ukazuje, jak převzít hodnoty ze snímače ping a zobrazit hodnoty na obrazovce OLED.

Zde je příklad, který testuje tři senzory ping (vlevo, uprostřed a vpravo) a zobrazuje hodnoty na displeji:

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

Krok 7: Krok 7: Nakreslete některé tváře

Krok 7: Nakreslete některé tváře!
Krok 7: Nakreslete některé tváře!

Nyní máme všechny figurky na svém místě, abychom nakreslili nějaké tváře. Naši studenti si obvykle myslí, že by robot měl mít šťastnou tvář, pokud jede vpřed. Když vidí něco před sebou, zaregistruje pocit překvapení. Potom couvá a rozhlíží se, možná očima pohybujícími se na znamení, jakým směrem se otočí.

Příkaz kreslení na kreslení obličeje je velmi jednoduchý. Můžeme nakreslit kruh pro obrys obličeje a vyplnit kruhy pro každé oko. Ústa mohou být půlkruhová pro úsměv a plná kulatá pro pocit překvapení. Toto je místo, kde mohou děti využít svoji kreativitu k přizpůsobení výrazů. Někdy záměrně kreslím špatné tváře a žádám studenty, aby mi pomohli je zlepšit.

K získání velikosti displeje můžete použít funkce display.height () a display.width (). V níže uvedeném kódu nastavujeme proměnné

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

Pokud tyto výpočty provedete mnohokrát, je kód o něco rychlejší, pokud jsou vypočítány jednou a uloženy v proměnné. Zde je několik příkladů, jak je nakreslena nudná rovná plocha výše:

// děláme to na začátku každé smyčky

display.clearDisplay (); // nakreslete světlý obličej na pozadídisplay.fillCircle (poloviční šířka, poloviční výška, 31, BÍLÁ); // pravé oko tmavé zobrazení.fillCircle (poloviční šířka - 10, display.height ()/3, 4, ČERNÁ); // levé oko darkdisplay.fillCircle (poloviční šířka + 10, display.height ()/3, 4, ČERNÉ); // nakreslete přímku pro zobrazení v ústí.drawLine (poloviční šířka - 10, display.height ()/3 * 2, poloviční šířka + 10, display.height ()/3 * 2, ČERNÁ); // tento řádek odešle naši novou tvář na displej OLED.display ();

Krok 8: Krok 8: Přizpůsobení

Krok 8: Přizpůsobení
Krok 8: Přizpůsobení

Kreslení základní tváře je jen začátek. Studenti mohou vytvářet mnoho variací. Mnoho studentů přidalo malý reproduktor, který při pohybu hraje tóny nebo zvuky.

Můžete také vytvořit menší testovací programy, které pomohou vašim studentům správně zapojit motory. Například šipka (trojúhelník) na obrazovce řekne studentovi, jakým směrem by se mělo kolo otáčet, když připojujete motory. Program testu cykluje každým ze směrů motoru:

  1. Pravá vpřed
  2. Pravý reverz
  3. Vlevo vpřed
  4. Vlevo vzad

Pro každý režim je obrazovka aktualizována o nový displej, který ukazuje, které kolo by se mělo otáčet a v jakém směru.

Příklad tohoto programu je zde

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

Na stránce CoderDojo Robots GitHub FaceBot je mnoho dalších příkladů a podrobností o programování.

Existuje také verze robota FaceBot, která umožňuje studentům měnit všechny parametry pro zamezení kolizím (rychlost vpřed, vzdálenost zatáčky, doba zatáčky, rychlost zatáčky) přímo pomocí displeje. K „programování“těchto robotů není potřeba žádný počítač! Tyto verze jsou ideální pro MakerFairs a události, kolem kterých nechcete tahat počítače.

Dejte nám prosím vědět, s jakými novými tvářemi vy a vaši studenti přicházíte!

Šťastné kódování!

Doporučuje: