Turinys:

„FaceBot“: 8 žingsniai
„FaceBot“: 8 žingsniai

Video: „FaceBot“: 8 žingsniai

Video: „FaceBot“: 8 žingsniai
Video: CS:GO | FaceBot MINI MOVIE 8 2024, Lapkritis
Anonim
„FaceBot“
„FaceBot“

Šis vadovas parodys, kaip sukurti nebrangų (39 USD) susidūrimo išvengimo robotą su šrifto veidu. Tai darome naudodami naują nebrangų, ryškų OLED ekraną. Mūsų studentai mėgsta pridėti veidų prie savo robotų. Jie mėgsta piešti šypsenėles, kurios keičiasi atsižvelgiant į tai, ką daro robotas.

Yra keletas mažų nebrangių robotų, kurių kaina yra mažesnė nei 25 USD ir kurie leidžia mokyti informatikos pagrindų. Viena iš šių robotų problemų yra ta, kad jie nesuteikia skaidrumo, kas vyksta roboto viduje, kol jį kuriate. 2018 m. Visa tai pradėjo keistis, nes buvo prieinami nebrangūs aukštos kokybės OLED ekranai. Šie ekranai turi šiuos privalumus:

  • Jie yra labai ryškūs ir turi didelį kontrastą. Net šviesiame kambaryje juos lengva perskaityti iš įvairių pusių.
  • Jie turi gerą rezoliuciją. Mano naudojami yra 168x64 pikselių. Tai beveik 4 kartus daugiau nei ankstesni mūsų naudojami ekranai.
  • Jie yra mažos galios ir nuosekliai veikia net tada, kai jūsų roboto galia mažėja.
  • Jų kaina yra palyginti maža (apie 16 USD), o kainos mažėja.

Anksčiau juos buvo sunku užprogramuoti ir jie sunaudodavo per daug atminties, kad būtų naudojami su pigiais „Arduino Nanos“. „Nano“turi tik 2K arba dinaminę RAM. Šis vadovas parodys, kaip išspręsti šias problemas ir sukurti robotą, kurį vaikai mėgsta programuoti.

1 žingsnis: 1 žingsnis: sukurkite savo bazinį robotą

1 žingsnis: sukurkite savo bazinį robotą
1 žingsnis: sukurkite savo bazinį robotą

Norėdami sukurti „FaceBot“, paprastai pradedame nuo bazinio roboto. Vienas iš pavyzdžių yra čia aprašytas 25 USD vertės „CoderDojo Robot“. Šis robotas naudoja nebrangų ir populiarų „Arduino Nano“, paprastą variklio valdiklį, 2 nuolatinės srovės variklius ir 4 arba 6 AA baterijas. Daugelis studentų pradeda naudoti ping jutiklį, kad sukurtų susidūrimo išvengimo robotą. Kadangi ji tiekia 5 V maitinimo sistemą, ji puikiai tinka „FaceBot“. Kad išlaidos būtų mažos, dažniausiai mokiniai užsako detales internetu iš „e-Bay“. Dalys dažnai užtrunka 2-3 savaites ir reikalauja nedidelio variklių ir maitinimo jungiklio litavimo. Likusios jungtys yra pagamintos naudojant 400 kaklaraiščių lentą. Studentai dažnai karštai klijuoja laidus, kad jie neslystų.

Atliekame vieną standartinio susidūrimo išvengimo dizaino pakeitimą. Perkeliame „ping“jutiklį iš važiuoklės viršaus į važiuoklę. Tai palieka erdvę ekranui ant roboto.

Kai susidursite su susidūrimo išvengimo programavimu, būsite perskaitytas ir pridėsite veidą!

2 veiksmas: 2 veiksmas: raskite ir užsisakykite savo OLED ekraną

2 veiksmas: raskite ir užsisakykite savo OLED ekraną
2 veiksmas: raskite ir užsisakykite savo OLED ekraną

Kai pasirodė OLED ekranai, pigūs buvo sukurti laikrodžiams ar kūno rengybos monitoriams. Dėl to jie buvo maži, paprastai apie 1 colio skersmens. Geros naujienos yra tai, kad jos buvo pigios, apie 3 USD. Mes sukūrėme kelis robotus su šiais ekranais, tačiau dėl to, kad ekranų dydis buvo ribotas, mes galėjome tai padaryti ekrane. Tada 2018 m. Pradėjome matyti didesnių 2,42 colių OLED ekranų kainą. 2019 metų sausį kainos nukrito iki maždaug 16 USD. Pagaliau turėjome puikų ekraną, kurį galėjome panaudoti savo robotų veidams.

Čia pateikiamos šių ekranų specifikacijos:

  1. 2,42 colio (įstrižainės matavimas)
  2. 128 pikselių skersmuo (x matmuo)
  3. 64 pikselių aukštis (y matmuo)
  4. Maža galia (paprastai 10 mA)
  5. Nespalvotas (yra geltonos, žalios, mėlynos ir baltos spalvos)
  6. Numatytoji SPI sąsaja, nors, jei norite, galite ją pakeisti į I2C
  7. SSD1309 tvarkyklė (labai dažna ekrano tvarkyklė)

SPI sąsaja turi septynis laidus. Štai tipiškos sąsajos etiketės:

  1. CS - lusto pasirinkimas
  2. DC - duomenys/komanda
  3. RES - Atstatyti
  4. SDA - duomenys - tai turėtų būti prijungta prie „Arduino Nano“kaiščio 11
  5. SCL - Laikrodis - tai turėtų būti prijungta prie „Arduino Nano“kaiščio 13
  6. VCC - +5 voltai
  7. GND - žemė

Norėdami prijungti ekraną prie duonos lentos, taip pat turėsite turėti tam tikrą laidą. Paprastai ekranuose yra 7 kontaktų antraštė, kurią priklijuojate prie ekrano. Aš panaudojau 7 20 mc Dupont jungtis nuo vyrų iki vyrų ir jas litavau taip, kad laidai išeitų ekrano gale.

3 veiksmas: 3 veiksmas: prijunkite OLED prie „Arduino Nano“

3 veiksmas: prijunkite OLED prie „Arduino Nano“
3 veiksmas: prijunkite OLED prie „Arduino Nano“
3 veiksmas: prijunkite OLED prie „Arduino Nano“
3 veiksmas: prijunkite OLED prie „Arduino Nano“

Dabar esate pasiruošę išbandyti savo OLED. Aš naudoju kitą „Arduino Nano“tik norėdamas patikrinti, ar kiekvienas gautas ekranas veikia. Kai tik bandymai pavyks, aš jį prijungsiu prie roboto. Testerio prijungimo schema parodyta aukščiau esančiame paveikslėlyje. Atminkite, kad OLED jungtis galite perkelti į kitus kaiščius, palaikančius skaitmeninius išėjimus, tačiau jei įsitikinsite, kad SCL (laikrodis) yra „Arduino Nano“kaiščio 13, o SDA (duomenys) - „Arduino Nano“kaiščio 11, galite naudoti numatytuosius nustatymus programinė įranga. Taip jūsų kodas bus šiek tiek paprastesnis.

4 veiksmas: 4 veiksmas: išbandykite savo ekraną

4 veiksmas: išbandykite savo ekraną
4 veiksmas: išbandykite savo ekraną

Norėdami patikrinti jūsų ekraną, naudosime u8g2 biblioteką. Yra ir kitų bibliotekų, kurias galite naudoti, tačiau, mano patirtimi, nė viena iš jų nėra tokia gera u8g2 bibliotekoje. Svarbus veiksnys yra tai, kiek „Arduino“RAM naudoja ekranas. „U8g2“yra vienintelė mano rasta biblioteka, kurioje naudojamas „Puslapio režimas“, kuris veiks su „Arduino Nano“.

Šią biblioteką galite pridėti prie „Arduino IED“, meniu „Tvarkyti bibliotekas“ieškodami „u8g2“. Taip pat galite atsisiųsti kodą tiesiai iš „gethub“.

github.com/olikraus/u8g2

Mano naudojamas bandymo kodas yra čia:

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

Reikia atkreipti dėmesį į keletą dalykų. SCL ir SDA kaiščių numeriai komentuojami, nes jie yra numatytieji „Nano“kaiščiai. „U8g2“konstruktorius yra pagrindinė eilutė:

// Mes naudojame SSD1306, 128x64, vieno puslapio, be pavadinimo, 4 laidų, aparatinė įranga, SPI be sukimosi, kuri naudoja tik 27% dinaminės atminties.

Mes naudojame vieno puslapio režimą, nes šis režimas naudoja minimalią RAM. Mes naudojame 4 laidų aparatūros sąsają, o OLED pagal numatytuosius nustatymus yra su SPI.

5 veiksmas: 5 veiksmas: pridėkite savo OLED prie roboto

5 veiksmas: pridėkite savo OLED prie roboto
5 veiksmas: pridėkite savo OLED prie roboto

Dabar, kai turime veikiantį OLED ir žinome, kaip inicijuoti „u8g2“bibliotekas, esame pasirengę integruoti OLED su savo pagrindiniu robotu. Yra keletas dalykų, kuriuos reikia apsvarstyti. Atlikdami OLED testą, naudojome vienas šalia kito esančius kaiščius, kad būtų lengviau prijungti laidus. Deja, mums reikia 9 kaiščio, kad galėtume valdyti mūsų robotą, nes tai yra vienas iš PWM kaiščių, kurį turime siųsti analoginį signalą variklio vairuotojui. Sprendimas yra perkelti laidą, esantį ant 9 kaiščio, į kitą laisvą kaištį ir pakeisti #define teiginį į tą naują kaištį. Norėdami pritvirtinti OLED prie roboto priekio, iš organinio stiklo iškirpiau du trikampius gabalus ir karštai priklijavau juos prie važiuoklės. Aš visada mėgstu naudoti tam tikrą šlifavimo popierių, kad sugriautumėte organinio stiklo paviršių, kol karštai klijuosite dalis, kad jos pernelyg lengvai neatsiskirtų.

Toliau paimkime duomenis apie savo OLED ir nupieškime veidus ant roboto!

6 veiksmas: 6 veiksmas: rodykite roboto parametrus

6 veiksmas: rodykite roboto parametrus
6 veiksmas: rodykite roboto parametrus

Vienas iš malonių dalykų, susijusių su ekranu, yra tai, kad jis tikrai padeda derinti tai, kas vyksta mūsų roboto viduje, kol jis važinėja. Neretai kūrėjai turi funkciją, veikiančią darbalaukyje, kai esate prisijungę prie kompiuterio, kad robotas nevažinėdamas neveiktų. Vertės, tokios kaip atstumas, išmatuotas „ping“jutikliu, rodymas yra geras roboto parametro rodymo pavyzdys.

Aukščiau esančioje nuotraukoje pirmoje eilutėje (aido laikas) rodomas delsos laikas nuo tada, kai garsas palieka ultragarsinį garsiakalbį, ir laikas, kai jį priima mikrofonas. Tada šis skaičius antroje eilutėje paverčiamas centimetrais (atstumas cm). Skaitliukas atnaujinamas paieška antra, kad būtų rodomas ekranas atnaujinamas. „Pasukimas…“rodomas tik tuo atveju, jei atstumas yra mažesnis už konkretų skaičių, vadinamą posūkio slenksčiu. Abu ratai juda į priekį, jei ping atstumas yra didesnis už šį skaičių. Jei skaičius yra mažesnis už apsisukimo slenkstį, mes pakeičiame variklius (atsargines kopijas) ir tada keičiame kryptį.

Čia yra pavyzdinis kodas, parodantis, kaip paimti vertes iš „ping“jutiklio ir rodyti vertes OLED ekrane.

Štai pavyzdys, kuriame išbandomi trys „ping“jutikliai (kairėje, centre ir dešinėje) ir rodomos vertės ekrane:

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

7 žingsnis: 7 žingsnis: nupieškite veidus

7 žingsnis: nupieškite veidus!
7 žingsnis: nupieškite veidus!

Dabar mes turime visas dalis, kad nupieštume kai kuriuos veidus. Mūsų mokiniai paprastai mano, kad robotas turi būti laimingo veido, jei jis važiuoja į priekį. Kai jis mato kažką priešais save, jis užfiksuoja netikėtumo jausmą. Tada jis atsitraukia ir apsižvalgo, galbūt akys juda, kad parodytų, kuria kryptimi pasuks.

Piešimo komanda piešti veidą yra gana paprasta. Mes galime nupiešti apskritimą veido kontūrai ir užpildyti kiekvienos akies apskritimus. Burna gali būti pusapskritis šypsenai, o užpildytas apvalus apskritimas - netikėtumo jausmui. Tai vieta, kur vaikai gali panaudoti savo kūrybiškumą, kad suasmenintų išraiškas. Kartais sąmoningai piešiu blogus veidus ir prašau studentų padėti man juos pagerinti.

Norėdami gauti ekrano dydį, galite naudoti funkcijas display.height () ir display.width (). Žemiau esančiame kode mes nustatome kintamuosius

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

Jei šiuos skaičiavimus atliksite daug kartų, kodas bus šiek tiek greitesnis, jei jie bus apskaičiuoti vieną kartą ir saugomi kintamajame. Štai keletas pavyzdžių, kaip nupieštas nuobodus tiesus veidas aukščiau:

// tai darome kiekvienos kilpos pradžioje

display.clearDisplay (); // nubrėžkite šviesų veidą fone display.fillCircle (pusės pločio, pusės aukščio, 31, BALTA); // dešinės akies tamsus ekranas.fillCircle (pusės pločio - 10, display.height ()/3, 4, BLACK); // kairioji akis darkdisplay.fillCircle (pusės pločio + 10, ekranas.aukštis ()/3, 4, JUODAS); // nubrėžkite tiesią liniją burnos ekranui.drawLine (half_width - 10, display.height ()/3 * 2, half_width + 10, display.height ()/3 * 2, BLACK); // ši eilutė siunčia mūsų naują veidą į OLED ekrano ekraną.display ();

8 veiksmas: 8 veiksmas: pritaikykite

8 veiksmas: pritaikykite
8 veiksmas: pritaikykite

Piešti pagrindinį veidą yra tik pradžia. Studentai gali sukurti daugybę variantų. Daugelis studentų pridėjo nedidelį garsiakalbį, kuris judėdamas skamba tonais ar garsais.

Taip pat galite sukurti mažesnes testavimo programas, kurios padės mokiniams teisingai prijungti variklius. Pavyzdžiui, rodyklė (trikampis) ekrane parodys mokiniui, kuria kryptimi ratas turėtų suktis, kai jungiate variklius. Bandymo programa vyksta pagal kiekvieną variklio kryptį:

  1. Į priekį
  2. Dešinė atbulinė eiga
  3. Kairė į priekį
  4. Kairysis reversas

Kiekvieno režimo ekrane atnaujinamas naujas ekranas, rodantis, kuris ratas turėtų suktis ir kokia kryptimi.

Šios programos pavyzdys yra čia

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

„CoderDojo Robots GitHub FaceBot“puslapyje yra daug papildomų pavyzdžių ir programavimo detalių.

Taip pat yra „FaceBot“roboto versija, leidžianti studentams tiesiogiai pakeisti visus susidūrimo išvengimo parametrus (greitį pirmyn, posūkio atstumą, apsisukimo laiką, posūkio greitį). Šiems robotams „užprogramuoti“nereikia jokio kompiuterio! Šios versijos idealiai tinka „MakerFairs“ir renginiams, kurių nenorite gabenti aplink.

Praneškite mums, kokių naujų veidų sugalvojate jūs ir jūsų mokiniai!

Laimingo kodavimo!

Rekomenduojamas: