Obsah:

FaceBot: 8 krokov
FaceBot: 8 krokov

Video: FaceBot: 8 krokov

Video: FaceBot: 8 krokov
Video: 8 KROKOV K LEPSIEMU ZIVOTU 2024, November
Anonim
FaceBot
FaceBot

Táto príručka vám ukáže, ako vytvoriť lacného robota na predchádzanie kolíziám (39 dolárov) s tvárou na písme. Robíme to pomocou nového lacného, jasného OLED displeja. Naši študenti radi pridávajú tváre svojim robotom. Radi kreslia smajlíky, ktorí sa menia podľa toho, čo robot robí.

K dispozícii je niekoľko malých nízkonákladových robotov za menej ako 25 dolárov, ktoré vám umožnia naučiť sa základy informatiky. Jeden z problémov týchto robotov je, že neposkytujú transparentnosť toho, čo sa deje vo vnútri robota, keď ho staviate. V roku 2018 sa to všetko začalo meniť s dostupnosťou lacných vysokokvalitných OLED displejov. Tieto displeje majú nasledujúce výhody:

  • Sú veľmi svetlé a majú vysoký kontrast. Aj zo svetlej miestnosti sú ľahko čitateľné z mnohých uhlov.
  • Majú dobré rozlíšenie. Tie, ktoré používam, majú 168 x 64 pixelov. To je takmer štvornásobok predchádzajúcich zobrazení, ktoré sme použili.
  • Majú nízky výkon a fungujú konzistentne, aj keď výkon vášho robota klesá.
  • Majú relatívne nízke náklady (každý okolo 16 dolárov) a ceny klesajú.

V minulosti bolo ťažké ich naprogramovať a použili by príliš veľa pamäte na to, aby sa dali použiť s lacnými Arduino Nanos. Nano má iba 2K alebo dynamickú RAM. Táto príručka vám ukáže, ako tieto problémy vyriešiť a postaviť robota, ktorého deti radi programujú.

Krok 1: Krok 1: Zostavte si základného robota

Krok 1: Zostavte si základného robota
Krok 1: Zostavte si základného robota

Pri stavbe FaceBotu zvyčajne začíname so základným robotom. Jedným z príkladov je robot CoderDojo za 25 dolárov, ktorý je tu popísaný. Tento robot používa lacné a obľúbené Arduino Nano, jednoduchý ovládač motora, 2 jednosmerné motory a 4 alebo 6 batérií AA. Väčšina študentov začína používať snímač ping na zostrojenie robota na predchádzanie zrážkam. Pretože poskytuje 5v napájací systém, je ideálny pre FaceBot. Aby boli náklady nízke, zvyčajne nechám svojich študentov objednať diely on-line z e-Bay. Doručenie dielov často trvá 2 až 3 týždne a vyžaduje malé množstvo spájkovania motorov a vypínača. Ostatné spojenia sa vykonávajú pomocou 400-väzbového chleba. Študenti často lepia drôty za tepla, aby nevykĺzli.

V štandardnom prevedení na predchádzanie zrážkam vykonávame jednu zmenu. Senzor ping presúvame z hornej časti podvozku pod podvozok. To ponecháva priestor pre displej na vrchu robota.

Akonáhle budete mať svoje programovanie vyhýbania sa kolíziám, budete môcť pridať tvár!

Krok 2: Krok 2: Nájdite a objednajte si svoj OLED displej

Krok 2: Nájdite a objednajte si svoj OLED displej
Krok 2: Nájdite a objednajte si svoj OLED displej

Keď prišli OLED displeje, lacné boli navrhnuté pre hodinky alebo fitness monitory. V dôsledku toho boli malé, zvyčajne mali priemer asi 1 palec. Dobrou správou je, že boli lacné, okolo 3 dolárov. S týmito displejmi sme postavili niekoľko robotov, ale pretože veľkosť displejov bola obmedzená, mohli sme na obrazovke robiť. Potom v roku 2018 sme začali vidieť, ako sa cena väčších 2,42 palcových OLED obrazoviek znižuje. V januári 2019 sa ceny znížili na približne 16 dolárov. Nakoniec sme mali skvelý displej, ktorý sme mohli použiť na tváre robotov.

Tu sú špecifikácie týchto displejov:

  1. 2,42 palca (uhlopriečka)
  2. 128 pixelov naprieč (rozmer x)
  3. 64 pixelov vysoký (rozmer y)
  4. Nízky výkon (zvyčajne 10 mA)
  5. Monochromatické (prichádzajú v žltej, zelenej, modrej a bielej)
  6. Predvolené rozhranie SPI, aj keď ho môžete zmeniť na I2C
  7. Ovládač SSD1309 (veľmi bežný ovládač displeja)

Rozhranie SPI má sedem káblov. Tu sú typické štítky rozhrania:

  1. CS - Chip Select
  2. DC - Údaje/Príkaz
  3. RES - Resetovať
  4. SDA - údaje - toto by malo byť pripojené k pinu Arduino Nano pin 11
  5. SCL - Hodiny - mali by byť pripojené k pinu Arduino Nano pin 13
  6. VCC - +5 voltov
  7. GND - zem

Budete tiež potrebovať kábel na pripojenie displeja k doske. Displeje sa zvyčajne dodávajú so 7-kolíkovým konektorom, ktorý spájkujete s displejom. Použil som 7 konektorov Dupont 20 muž-samec na 20 mc a spájkoval som ich tak, aby káble vychádzali zo zadnej časti displeja.

Krok 3: Krok 3: Pripojte OLED k Arduino Nano

Krok 3: Pripojte OLED k Arduino Nano
Krok 3: Pripojte OLED k Arduino Nano
Krok 3: Pripojte OLED k Arduino Nano
Krok 3: Pripojte OLED k Arduino Nano

Teraz ste pripravení otestovať svoju OLED. Používam ďalšie Arduino Nano, aby som otestoval, či každý zobrazený displej funguje. Akonáhle testy fungujú, potom ho pripojím k robotovi. Schéma zapojenia testera je zobrazená na obrázku vyššie. Všimnite si toho, že pripojenia OLED môžete presunúť na iné piny, ktoré podporujú digitálne výstupy, ale ak sa ubezpečíte, že SCL (hodiny) sú na pine Arduino Nano 13 a SDA (údaje) sú na pine Arduino Nano pinu 11, môžete použiť predvolené nastavenia v softvér. Vďaka tomu bude váš kód o niečo jednoduchší.

Krok 4: Krok 4: Otestujte si displej

Krok 4: Otestujte si displej
Krok 4: Otestujte si displej

Na testovanie vášho displeja použijeme knižnicu u8g2. Môžete použiť aj ďalšie knižnice, ale podľa mojich skúseností žiadna z nich nie je taká dobrá v knižnici u8g2. Jedným z kritických faktorov je, koľko pamäte RAM v Arduine používa displej. U8g2 je jediná knižnica, ktorú som našiel a ktorá používa „režim stránky“, ktorý bude fungovať s Arduino Nano.

Túto knižnicu môžete pridať do svojho IED Arduino vyhľadaním výrazu "u8g2" v ponuke "Spravovať knižnice". Kód si môžete stiahnuť aj priamo z gethub.

github.com/olikraus/u8g2

Testovací kód, ktorý používam, je tu:

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

Je potrebné poznamenať niekoľko vecí. Čísla pinov SCL a SDA sú komentované, pretože sú to predvolené piny na Nano. Konštruktér pre u8g2 je kľúčový riadok:

// Používame SSD1306, 128x64, jednostranové, bezmenné, 4-vodičové, hardvérové, SPI bez otáčania, ktoré využíva iba 27% dynamickej pamäteU8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);

Používame jednostránkový režim, pretože tento režim používa minimálnu pamäť RAM. Používame 4-vodičové hardvérové rozhranie a OLED je štandardne dodávaný s SPI.

Krok 5: Krok 5: Pridajte svoju OLED do robota

Krok 5: Pridajte svoju OLED do robota
Krok 5: Pridajte svoju OLED do robota

Teraz, keď máme funkčný OLED a vieme, ako inicializovať knižnice u8g2, sme pripravení integrovať OLED do nášho základného robota. Je potrebné zvážiť niekoľko vecí. V našom teste OLED sme na uľahčenie zapojenia použili kolíky, ktoré boli všetky vedľa seba. Na pohon nášho robota bohužiaľ potrebujeme kolík 9, pretože je to jeden z pinov PWM, ktoré potrebujeme na odoslanie analógového signálu do ovládača motora. Riešením je presunúť drôt, ktorý je na kolíku 9, na iný voľný kolík a potom zmeniť príkaz #define na tento nový kolík. Na montáž OLED na prednú stranu robota som vyrezal dva trojuholníkové kusy z plexiskla a zalepil ich za tepla. ich k podvozku. Vždy rád použijem brúsny papier na hrubovanie povrchu plexiskla, než diely zalepím za tepla, aby sa nerozdelili príliš ľahko.

Ďalej získajme údaje o našom OLED a nakreslíme niektoré tváre do robota!

Krok 6: Krok 6: Zobrazte parametre robota

Krok 6: Zobrazte parametre robota
Krok 6: Zobrazte parametre robota

Jednou z príjemných vecí na displeji je to, že skutočne pomáha pri ladení toho, čo sa deje v našom robote, keď sa pohybuje. Nie je neobvyklé, že vývojári majú funkciu, ktorá funguje na ploche, keď ste pripojení k počítaču, aby nefungovala, keď sa robot pohybuje okolo. Zobrazenie hodnoty, ako je vzdialenosť nameraná snímačom ping, je dobrým príkladom zobrazenia parametra robota.

Na vyššie uvedenej fotografii prvý riadok (Čas ozveny) zobrazuje čas oneskorenia medzi odchodom zvuku z ultrazvukového reproduktora a časom, kedy je prijatý mikrofónom. Toto číslo sa potom prevedie na centimetre v druhom riadku (vzdialenosť v cm). Počítadlo sa aktualizuje vyhľadávaním, aby sa ukázalo, že sa aktualizuje displej. „Otáčanie …“sa zobrazuje iba vtedy, ak je vzdialenosť pod určitým číslom, ktoré sa nazýva prahová hodnota odbočenia. Obe kolesá sa pohybujú dopredu, ak je vzdialenosť pingu nad týmto číslom. Ak je číslo pod prahovou hodnotou otáčania, obrátime motory (zálohovanie) a potom zmeníme smer.

Tu je niekoľko ukážkových kódov, ktoré vám ukazujú, ako prevziať hodnoty zo senzora ping a zobraziť hodnoty na obrazovke OLED.

Tu je príklad, ktorý testuje tri snímače ping (ľavý, stredný a pravý) a zobrazuje hodnoty na displeji:

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

Krok 7: Krok 7: Nakreslite niektoré tváre

Krok 7: Nakreslite niektoré tváre!
Krok 7: Nakreslite niektoré tváre!

Teraz máme všetky figúrky na mieste, aby sme nakreslili niektoré tváre. Naši študenti si zvyčajne myslia, že robot by mal mať šťastnú tvár, ak ide dopredu. Keď vidí niečo pred sebou, zaregistruje pocit prekvapenia. Potom cúvne a rozhliada sa, možno očami pohnútkami signalizuje, akým smerom sa otočí.

Príkaz na kreslenie na kreslenie tváre je veľmi jednoduchý. Môžeme nakresliť kruh pre obrys tváre a vyplniť kruhy pre každé oko. Ústa môžu byť polkruh pre úsmev a plný okrúhly kruh pre pocit prekvapenia. Toto je miesto, kde deti môžu využiť svoju kreativitu na prispôsobenie výrazov. Niekedy úmyselne kreslím zlé tváre a žiadam študentov, aby mi pomohli ich zlepšiť.

Na zobrazenie veľkosti displeja môžete použiť funkcie display.height () a display.width (). V nižšie uvedenom kóde nastavujeme premenné

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

Ak tieto výpočty robíte mnohokrát, kód je o niečo rýchlejší, ak sú vypočítané raz a uložené v premennej. Tu je niekoľko príkladov toho, ako je nakreslená nudná rovná tvár vyššie:

// robíme to na začiatku každej slučky

display.clearDisplay (); // nakreslite svetlú tvár na pozadiedisplay.fillCircle (polovičná šírka, polovičná výška, 31, BIELA); // pravé oko tmavé zobrazenie.fillCircle (polovičná šírka - 10, display.height ()/3, 4, ČIERNE); // ľavé oko tmavédisplay.fillCircle (polovičná šírka + 10, display.height ()/3, 4, ČIERNE); // nakreslite priamku pre zobrazenie v ústach.drawLine (polovičná šírka - 10, display.height ()/3 * 2, polovičná šírka + 10, display.height ()/3 * 2, ČIERNA); // tento riadok posiela našu novú tvár na displej OLED.display ();

Krok 8: Krok 8: Prispôsobenie

Krok 8: Prispôsobenie
Krok 8: Prispôsobenie

Kreslenie základnej tváre je len začiatok. Študenti môžu vytvoriť veľa variácií. Mnoho študentov pridalo malý reproduktor, ktorý pri ich pohybe prehráva tóny alebo zvuky.

Môžete tiež vytvoriť menšie testovacie programy, ktoré pomôžu vašim študentom zapojiť motory správne. Napríklad šípka (trojuholník) na obrazovke povie študentovi, akým smerom by sa malo koleso otáčať, keď pripájate motory. Testovací program cykluje všetkými smermi motora:

  1. Pravý vpred
  2. Pravý reverz
  3. Vľavo vpred
  4. Vľavo vzad

V každom režime je obrazovka aktualizovaná o nový displej, ktorý ukazuje, ktoré koliesko sa má otáčať a v akom smere.

Príklad tohto programu je tu

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

Na stránke CoderDojo Robots GitHub FaceBot je mnoho ďalších príkladov a podrobností o programovaní.

Existuje aj verzia robota FaceBot, ktorá umožňuje študentom meniť všetky parametre vyhýbania sa kolíziám (rýchlosť vpred, vzdialenosť v zákrute, čas zatáčania, rýchlosť otáčania) priamo pomocou displeja. Na „programovanie“týchto robotov nie je potrebný žiadny počítač! Tieto verzie sú ideálne pre veľtrhy MakerFair a akcie, okolo ktorých nechcete ťahať počítače.

Dajte nám vedieť, s akými novými tvárami vy a vaši študenti prichádzate!

Šťastné kódovanie!

Odporúča: