Satura rādītājs:

FaceBot: 8 soļi
FaceBot: 8 soļi

Video: FaceBot: 8 soļi

Video: FaceBot: 8 soļi
Video: Dance Moms: Full Dance - Lilly's Solo "Inside Out" (Season 8) | Lifetime 2024, Oktobris
Anonim
FaceBot
FaceBot

Šajā rokasgrāmatā tiks parādīts, kā izveidot lētu (39 USD) sadursmju novēršanas robotu ar seju fontu. Mēs to darām, izmantojot jaunu lētu, spilgtu OLED displeju. Mūsu skolēniem patīk saviem robotiem pievienot sejas. Viņiem patīk zīmēt smaidīgas sejas, kas mainās atkarībā no robota darbības.

Ir pieejami vairāki mazi zemu izmaksu roboti, kuru cena ir mazāka par 25 ASV dolāriem, kas ļauj iemācīt datorzinātņu pamatus. Viena no šo robotu problēmām ir tā, ka tie nenodrošina pārredzamību par to, kas notiek robota iekšienē, kamēr jūs to veidojat. 2018. gadā tas viss sāka mainīties, pateicoties zemu izmaksu augstas kvalitātes OLED displeju pieejamībai. Šiem displejiem ir šādas priekšrocības:

  • Tie ir ļoti spilgti un ar lielu kontrastu. Pat gaišā telpā tos ir viegli nolasīt no daudziem leņķiem.
  • Viņiem ir laba izšķirtspēja. Es izmantoju 168x64 pikseļus. Tas ir gandrīz četras reizes vairāk nekā iepriekš izmantotie displeji.
  • Tie ir mazjaudīgi un darbojas konsekventi pat tad, ja jūsu robota jauda samazinās.
  • Tās ir salīdzinoši zemas izmaksas (aptuveni 16 USD katra), un cenas samazinās.

Agrāk tos bija grūti ieprogrammēt, un tie izmantoja pārāk daudz atmiņas, lai tos varētu izmantot ar zemu izmaksu Arduino Nanos. Nano ir tikai 2K vai dinamiska RAM. Šī rokasgrāmata parādīs, kā novērst šīs problēmas un izveidot robotu, kuru bērniem patīk programmēt.

1. darbība: 1. darbība: izveidojiet savu bāzes robotu

1. solis: izveidojiet savu bāzes robotu
1. solis: izveidojiet savu bāzes robotu

Lai izveidotu FaceBot, mēs parasti sākam ar bāzes robotu. Viens piemērs ir $ 25 CoderDojo robots, kas aprakstīts šeit. Šis robots izmanto lēto un populāro Arduino Nano, vienkāršu motora kontrolieri, 2 līdzstrāvas motorus un 4 vai 6 AA baterijas. Lielākā daļa studentu sāk izmantot ping sensoru, lai izveidotu sadursmes novēršanas robotu. Tā kā tas nodrošina 5 V barošanas sistēmu, tas ir lieliski piemērots FaceBot. Lai izmaksas būtu zemas, es parasti lieku studentiem pasūtīt detaļas tiešsaistē no e-Bay. Daļas bieži tiek piegādātas 2-3 nedēļas, un tām ir nepieciešams neliels daudzums lodēšanas motoriem un barošanas slēdzim. Pārējie savienojumi tiek veikti, izmantojot 400 saišu maizes dēli. Studenti bieži karsti pielīmē vadus, lai tie neslīdētu ārā.

Mēs veicam vienu izmaiņu standarta konstrukcijā, lai izvairītos no sadursmēm. Mēs pārvietojam ping sensoru no šasijas augšdaļas uz zem šasijas. Tas atstāj vietu displejam robota augšpusē.

Pēc sadursmju novēršanas programmēšanas jūs lasāt, lai pievienotu seju!

2. darbība: 2. darbība. Atrodiet un pasūtiet savu OLED displeju

2. darbība. Atrodiet un pasūtiet OLED displeju
2. darbība. Atrodiet un pasūtiet OLED displeju

Kad iznāca OLED displeji, zemo cenu diski bija paredzēti pulksteņiem vai fitnesa monitoriem. Tā rezultātā tie bija mazi, parasti apmēram 1 collas. Labā ziņa ir tā, ka tās bija lētas, aptuveni 3 USD. Mēs izveidojām dažus robotus ar šiem displejiem, taču, tā kā displeju izmēri bija ierobežoti, mēs varējām to izdarīt ekrānā. Tad 2018. gadā mēs sākām redzēt, ka ir samazinājušās izmaksas par lielākiem 2,42 collu OLED ekrāniem. 2019. gada janvārī cenas pazeminājās līdz aptuveni 16 USD. Beidzot mums bija lielisks displejs, ko varētu izmantot mūsu robotu sejām.

Šeit ir šo displeju specifikācijas:

  1. 2,42 collas (diagonāles mērījums)
  2. 128 pikseļi (x dimensija)
  3. 64 pikseļi augsts (y dimensija)
  4. Zema jauda (parasti 10 mA)
  5. Vienkrāsains (tie ir dzeltenā, zaļā, zilā un baltā krāsā)
  6. Noklusējuma SPI saskarne, lai gan, ja vēlaties, varat to mainīt uz I2C
  7. SSD1309 draiveris (ļoti izplatīts displeja draiveris)

SPI saskarnei ir septiņi vadi. Šeit ir tipiskās saskarnes etiķetes:

  1. CS - mikroshēmas izvēle
  2. DC - dati/komanda
  3. RES - Atiestatīt
  4. SDA - dati - tas jāpievieno Arduino Nano tapai 11
  5. SCL - Pulkstenis - tas jāpievieno Arduino Nano tapai 13
  6. VCC - +5 volti
  7. GND - zeme

Jums būs nepieciešams arī kāds vads, lai displeju savienotu ar maizes dēli. Displejiem parasti ir 7 kontaktu galvene, ko pielodējat displejā. Es izmantoju 7 20mc Dupont savienotājus no vīriešiem līdz vīriešiem un lodēju tos tā, lai vadi izietu displeja aizmugurē.

3. darbība: 3. darbība: savienojiet OLED ar Arduino Nano

3. darbība: savienojiet OLED ar Arduino Nano
3. darbība: savienojiet OLED ar Arduino Nano
3. darbība: savienojiet OLED ar Arduino Nano
3. darbība: savienojiet OLED ar Arduino Nano

Tagad jūs esat gatavs pārbaudīt savu OLED. Es izmantoju citu Arduino Nano, lai pārbaudītu, vai katrs displejs darbojas. Kad testi darbojas, es to savienoju ar robotu. Testētāja elektroinstalācijas shēma ir parādīta attēlā iepriekš. Ņemiet vērā, ka varat pārvietot OLED savienojumus uz citām tapām, kas atbalsta digitālās izejas, taču, ja esat pārliecinājies, ka SCL (pulkstenis) ir ieslēgts Arduino Nano pin 13 un SDA (dati) ir Arduino Nano pin 11, varat izmantot noklusējuma iestatījumus programmatūru. Tas padara jūsu kodu nedaudz vienkāršāku.

4. darbība: 4. darbība: pārbaudiet savu displeju

4. darbība: pārbaudiet savu displeju
4. darbība: pārbaudiet savu displeju

Lai pārbaudītu jūsu displeju, mēs izmantosim bibliotēku u8g2. Ir arī citas bibliotēkas, kuras varat izmantot, taču, manuprāt, neviena no tām nav tik laba u8g2 bibliotēkā. Viens kritisks faktors ir tas, cik daudz RAM Arduino izmanto displejs. U8g2 ir vienīgā bibliotēka, kuru atradu un kurā tiek izmantots lapas režīms, kas darbosies ar Arduino Nano.

Šo bibliotēku varat pievienot savam Arduino IED, izvēlnē “Pārvaldīt bibliotēkas” meklējot “u8g2”. Varat arī lejupielādēt kodu tieši no gethub.

github.com/olikraus/u8g2

Pārbaudes kods, ko izmantoju, ir šeit:

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

Jāņem vērā dažas lietas. SCL un SDA tapu numuri tiek komentēti, jo tie ir noklusējuma tapas Nano. U8g2 konstruktors ir galvenā līnija:

// Mēs izmantojam SSD1306, 128x64, vienas lappuses, bez nosaukuma, 4 vadi, aparatūra, SPI bez rotācijas, kas izmanto tikai 27% dinamiskās atmiņas.

Mēs izmantojam vienas lapas režīmu, jo šis režīms izmanto minimālu RAM. Mēs izmantojam 4 vadu aparatūras saskarni, un OLED pēc noklusējuma ir aprīkots ar SPI.

5. darbība: 5. darbība: pievienojiet OLED robotam

5. solis: pievienojiet OLED robotam
5. solis: pievienojiet OLED robotam

Tagad, kad mums ir strādājošs OLED un mēs zinām, kā inicializēt u8g2 bibliotēkas, mēs esam gatavi integrēt OLED ar mūsu bāzes robotu. Ir jāņem vērā dažas lietas. Savā OLED testā mēs izmantojām tapas, kas visas atradās blakus, lai atvieglotu elektroinstalāciju. Diemžēl mums ir nepieciešama 9. tapa, lai vadītu mūsu robotu, jo tā ir viena no PWM tapām, kas mums jānosūta analogs signāls motora vadītājam. Risinājums ir pārvietot vadu, kas atrodas uz 9. tapas, uz citu brīvu tapu un pēc tam mainīt #define paziņojumu uz jauno tapu. Lai uzstādītu OLED robota priekšpusē, es izgriezu divus trīsstūrveida gabalus no plexiglass un karsti pielīmēju tos pie šasijas. Man vienmēr patīk izmantot kādu smilšpapīru, lai sasmalcinātu organiskā stikla virsmu, pirms es salīmēju detaļas kopā, lai tās pārāk viegli nesadalītos.

Tālāk iegūstam dažus datus par mūsu OLED un uzzīmējam dažas sejas uz robota!

6. darbība: 6. darbība: parādiet robota parametrus

6. darbība: parādiet robota parametrus
6. darbība: parādiet robota parametrus

Viena no jaukajām lietām par displeju ir tā, ka tas patiešām palīdz atkļūdot to, kas notiek mūsu robotā, kamēr tas brauc apkārt. Nav nekas neparasts, ka izstrādātājiem darbvirsmā darbojas funkcija, kad esat savienots ar datoru, lai tā nedarbotos, kad robots brauc apkārt. Labs robota parametra parādīšanas piemērs ir tādas vērtības parādīšana kā ping sensora izmērītais attālums.

Iepriekš redzamajā fotoattēlā pirmā rinda (atbalss laiks) parāda aizkaves laiku starp brīdi, kad skaņa atstāj ultraskaņas skaļruni, un laiku, kad to uztver mikrofons. Pēc tam šis skaitlis tiek pārvērsts centimetros otrajā rindā (attālums cm). Skaitītājs tiek atjaunināts, meklējot otro reizi, lai parādītu, ka displejs tiek atjaunināts. "Pagrieziens …" tiek parādīts tikai tad, ja attālums ir mazāks par noteiktu skaitli, ko sauc par pagrieziena slieksni. Abi riteņi virzās uz priekšu, ja ping attālums pārsniedz šo skaitli. Ja skaitlis ir zem pagrieziena sliekšņa, mēs mainām dzinējus (dublējumkopijas) un pēc tam mainām virzienu.

Šeit ir daži koda paraugi, kas parāda, kā ņemt vērtības no ping sensora un parādīt vērtības jūsu OLED ekrānā.

Šeit ir piemērs, kas pārbauda trīs ping sensorus (pa kreisi, centrā un pa labi) un parāda vērtības displejā:

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

7. solis: 7. solis: uzzīmējiet dažas sejas

7. solis: uzzīmējiet dažas sejas!
7. solis: uzzīmējiet dažas sejas!

Tagad mums ir visi gabali, lai uzzīmētu dažas sejas. Mūsu skolēni parasti domā, ka robotam jābūt laimīgai sejai, ja tas brauc uz priekšu. Kad tas ierauga kaut ko sev priekšā, tas reģistrē pārsteiguma sajūtu. Pēc tam tas atkāpjas un paskatās apkārt, iespējams, acīm kustoties, lai norādītu, kādā virzienā tas pagriezīsies.

Zīmēšanas komanda sejas zīmēšanai ir diezgan vienkārša. Mēs varam uzzīmēt apli sejas kontūrai un aizpildīt apļus katrai acij. Mute var būt pusloku smaidam un aizpildīts apaļš aplis pārsteiguma sajūtai. Šī ir vieta, kur bērni var izmantot savu radošumu, lai personalizētu izteiksmes. Es dažreiz apzināti uzzīmēju sliktas sejas un lūdzu studentus palīdzēt man tās uzlabot.

Lai iegūtu displeja izmēru, varat izmantot funkcijas display.height () un display.width (). Zemāk esošajā kodā mēs iestatām mainīgos

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

Ja veicat šos aprēķinus daudzas reizes, kods ir nedaudz ātrāks, ja tie tiek aprēķināti vienu reizi un saglabāti mainīgajā. Šeit ir daži piemēri tam, kā ir uzzīmēta garlaicīgā taisnā seja:

// mēs to darām katras cilpas sākumā

display.clearDisplay (); // uzzīmējiet gaišu seju fonamdisplay.fillCircle (pusplatums, puse augstums, 31, BALTS); // labās acs tumšais displejs.fillCircle (pusplatums - 10, display.height ()/3, 4, BLACK); // kreisā acs darkdisplay.fillCircle (pusplatums + 10, displejs.augstums ()/3, 4, BLACK); // uzzīmējiet taisnu līniju mutes displejam.drawLine (pusplatums - 10, displejs.augstums ()/3 * 2, pusplatums + 10, displejs.augstums ()/3 * 2, BLACK); // šī rinda nosūta mūsu jauno seju uz OLED displeja displeju.display ();

8. darbība: 8. darbība: pielāgojiet

8. darbība: pielāgojiet
8. darbība: pielāgojiet

Pamata sejas uzzīmēšana ir tikai sākums. Studenti var izveidot daudzas variācijas. Daudzi studenti ir pievienojuši nelielu skaļruni, kas pārvietojas un atskaņo toņus vai skaņas.

Varat arī izveidot mazākas pārbaudes programmas, kas palīdz studentiem pareizi savienot motorus. Piemēram, bultiņa (trīsstūris) uz ekrāna studentam pateiks, kādā virzienā ritenim vajadzētu griezties, kad pievienojat motorus. Pārbaudes programma tiek veikta katrā motora virzienā:

  1. Pa labi Uz priekšu
  2. Labais reverss
  3. Pa kreisi Uz priekšu
  4. Kreisais reverss

Katram režīmam ekrāns tiek atjaunināts ar jaunu displeju, lai parādītu, kuram ritenim jāgriežas un kādā virzienā.

Šīs programmas piemērs ir šeit

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

CoderDojo Robots GitHub FaceBot lapā ir daudz papildu piemēru un programmēšanas detaļu.

Ir arī FaceBot robota versija, kas ļauj studentiem mainīt visus sadursmju novēršanas parametrus (ātrumu uz priekšu, pagrieziena attālumu, pagrieziena laiku, pagrieziena ātrumu) tieši, izmantojot displeju. Šo robotu "programmēšanai" nav nepieciešams dators! Šīs versijas ir ideāli piemērotas MakerFairs un pasākumiem, kuros nevēlaties vilkt datorus.

Lūdzu, dariet mums zināmu, ar kādām jaunām sejām nākat klajā jūs un jūsu studenti!

Laimīgu kodēšanu!

Ieteicams: