Mundarija:
- 1 -qadam: 1 -qadam: Asosiy robotingizni yarating
- 2 -qadam: 2 -qadam: OLED -displeyingizni toping va buyurtma qiling
- 3 -qadam: 3 -qadam: OLED -ni Arduino Nano -ga ulang
- 4 -qadam: 4 -qadam: Displeyingizni sinab ko'ring
- 5 -qadam: 5 -qadam: OLED -ni robotga qo'shing
- 6 -qadam: 6 -qadam: Robot parametrlarini ko'rsatish
- 7 -qadam: 7 -qadam: Ba'zi yuzlarni chizish
- 8 -qadam: 8 -qadam: sozlash
Video: FaceBot: 8 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Bu qo'llanma sizga shriftda yuzi bo'lgan, to'qnashuvni oldini oluvchi arzon narxdagi ($ 39) robotni qanday yaratishni ko'rsatib beradi. Biz buni arzon, yangi OLED-displey yordamida qilamiz. Bizning o'quvchilarimiz robotlarga yuz qo'shishni yaxshi ko'radilar. Ular robot nima qilayotganiga qarab o'zgaradigan tabassumli yuzlarni chizishni yaxshi ko'radilar.
25 dollardan past narxda bir nechta kichik robot-uskunalar mavjud, ular sizga informatika asoslarini o'rgatishga imkon beradi. Bu robotlar bilan bog'liq muammolardan biri shundaki, ular robotni qurayotganingizda uning ichida nima bo'layotganiga shaffoflikni ta'minlamaydi. 2018 yilda hamma narsa OLED-displeylarning arzonligi bilan o'zgara boshladi. Ushbu displeylar quyidagi afzalliklarga ega:
- Ular juda yorqin va yuqori kontrastli. Hatto yorug 'xona ham ularni har tomondan o'qish oson.
- Ular yaxshi aniqlikka ega. Men foydalanadiganlar 168x64 piksel. Bu biz ishlatgan oldingi displeylardan deyarli 4 baravar ko'p.
- Ular kam quvvatga ega va hatto sizning robotingiz quvvati pasayganda ham doimiy ishlaydi.
- Ular nisbatan arzon (har biri 16 dollar atrofida) va narxlar pasaymoqda.
Ilgari, ularni dasturlash juda qiyin bo'lgan va arzon Arduino Nanos bilan ishlash uchun juda ko'p xotira ishlatilgan. Nano faqat 2K yoki dinamik RAMga ega. Ushbu qo'llanma sizga bu muammolarni qanday hal qilishni va bolalar dasturlashni yaxshi ko'radigan robotni yaratishni ko'rsatib beradi.
1 -qadam: 1 -qadam: Asosiy robotingizni yarating
FaceBot -ni yaratish uchun biz odatda asosiy robotdan boshlaymiz. Bir misol, bu erda tasvirlangan $ 25 CoderDojo Robot. Bu robot arzon va ommabop Arduino Nano, oddiy dvigatelni boshqaruvchi, 2 ta doimiy dvigatel va 4 yoki 6 ta AA batareyalaridan foydalanadi. Ko'pgina talabalar to'qnashuvni oldini olish uchun robot yaratish uchun ping sensoridan foydalanishni boshlaydilar. 5V quvvat tizimini ta'minlaganligi uchun u FaceBot uchun juda mos keladi. Xarajatlarni past darajada ushlab turish uchun men odatda o'quvchilarimga ehtiyot qismlarni onlayn Baydan buyurtma beraman. Qismlarga odatda 2-3 hafta vaqt ketadi va dvigatellar va quvvat kaliti uchun oz miqdorda lehim talab qilinadi. Qolgan ulanishlar 400 ta bog'langan non paneli yordamida amalga oshiriladi. Talabalar tez-tez chiqib ketmasliklari uchun simlarni issiq yopishtirishadi.
To'qnashuvni oldini olishning standart dizayniga bitta o'zgartirish kiritdik. Biz ping sensorini shassisning yuqori qismidan shassis ostiga o'tkazamiz. Bu robotning tepasida ko'rsatilishi uchun joy qoldiradi.
To'qnashuvni oldini olish dasturiga ega bo'lgandan so'ng, siz yuz qo'shish uchun o'qiysiz!
2 -qadam: 2 -qadam: OLED -displeyingizni toping va buyurtma qiling
OLED -displeylar chiqqanda, arzonlari soat yoki fitnes monitorlari uchun mo'ljallangan edi. Natijada ular kichik, odatda 1 dyuym atrofida edi. Yaxshi xabar shundaki, ular arzon, taxminan 3 dollar. Biz bu displeylar yordamida bir nechta robotlarni qurdik, lekin displeylarning o'lchamlari cheklanganligi sababli, biz ekranda nima qila olardik. Keyin 2018 yilda biz 2,42 dyuymli katta OLED -ekranlarning narxi tushishini ko'rishni boshladik. 2019 yil yanvar oyida narxlar taxminan 16 dollarga tushdi. Nihoyat, biz robot yuzlarimiz uchun ishlatilishi mumkin bo'lgan ajoyib displeyga ega bo'ldik.
Mana bu displeylarning texnik xususiyatlari:
- 2,42 dyuym (diagonal o'lchov)
- Diametri 128 x (o'lchovli)
- Balandligi 64 piksel (y o‘lchamli)
- Kam quvvat (odatda 10ma)
- Monoxrom (ular sariq, yashil, ko'k va oq ranglarda bo'ladi)
- Standart SPI interfeysi, lekin agar xohlasangiz, uni I2C ga o'zgartirishingiz mumkin
- SSD1309 drayveri (juda keng tarqalgan displey drayveri)
SPI interfeysi etti simdan iborat. Mana, interfeysdagi odatiy belgilar:
- CS - Chip tanlash
- DC - Ma'lumotlar/Buyruq
- RES - asl holatini tiklash
- SDA - Ma'lumotlar - bu Arduino Nano pin 11 ga ulangan bo'lishi kerak
- SCL - Soat - bu Arduino Nano pin 13 ga ulangan bo'lishi kerak
- VCC - +5 volt
- GND - er
Bundan tashqari, displeyni taxtaga ulash uchun sizga sim kerak bo'ladi. Displeylar odatda 7-pinli sarlavhaga ega, siz ularni lehimsiz. Men 20 mc Dupont erkak-erkak 7 konnektoridan foydalandim va ularni lehimladim, shunda ekranning orqa tomonidagi simlar chiqib ketdi.
3 -qadam: 3 -qadam: OLED -ni Arduino Nano -ga ulang
Endi siz OLED -ni sinab ko'rishga tayyormiz. Men har bir displey ishlayotganini tekshirish uchun boshqa Arduino Nano -dan foydalanaman. Sinovlar tugagach, men uni robotga ulayman. Sinov qurilmasining ulanish sxemasi yuqoridagi rasmda ko'rsatilgan. E'tibor bering, siz OLED ulanishlarini raqamli chiqishni qo'llab -quvvatlaydigan boshqa pinlarga ko'chirishingiz mumkin, lekin agar siz SCL (soat) Arduino Nano pin 13 va SDA (ma'lumotlar) Arduino Nano pin 11 da joylashganligiga ishonch hosil qilsangiz, standart sozlamalarni ishlatishingiz mumkin. dasturiy ta'minot. Bu sizning kodingizni biroz soddalashtiradi.
4 -qadam: 4 -qadam: Displeyingizni sinab ko'ring
Displeyni tekshirish uchun u8g2 kutubxonasidan foydalanamiz. Siz foydalanishingiz mumkin bo'lgan boshqa kutubxonalar bor, lekin mening tajribamga ko'ra, ularning hech biri u8g2 kutubxonasida yaxshi emas. Muhim omillardan biri bu displeyda Arduino -da qancha RAM ishlatilishidir. U8g2 - men topgan yagona sahifa, u Arduino Nano bilan ishlaydigan "Sahifa rejimi" ni ishlatadi.
Siz ushbu kutubxonani Arduino IED -ga "Kutubxonalarni boshqarish" menyusida "u8g2" ni qidirish orqali qo'shishingiz mumkin. Kodni to'g'ridan -to'g'ri gethub -dan yuklab olishingiz mumkin.
github.com/olikraus/u8g2
Men foydalanadigan test kodi bu erda:
github.com/dmccreary/coderdojo-robots/blob…
E'tibor qilish kerak bo'lgan bir nechta narsa bor. SCL va SDA pin raqamlari izohlanadi, chunki ular nanodagi standart pinlardir. U8g2 uchun konstruktor kalit chiziqdir:
// Biz SSD1306, 128x64, bitta sahifali, noma'lum, 4 simli, Uskuna, SPI-dan foydalanamiz, u faqat 27% dinamik xotiradan foydalanadi
Biz bitta sahifali rejimdan foydalanmoqdamiz, chunki bu rejim minimal RAMdan foydalanadi. Biz 4 simli apparat interfeysidan foydalanmoqdamiz va OLED sukut bo'yicha SPI bilan birga keladi.
5 -qadam: 5 -qadam: OLED -ni robotga qo'shing
Endi bizda ishlaydigan OLED bor va u8g2 kutubxonalarini qanday ishga tushirishni bilamiz, biz OLEDni asosiy robotimiz bilan birlashtirishga tayyormiz. Ko'rib chiqish kerak bo'lgan bir nechta narsalar bor. OLED testida biz simlarni osonlashtirish uchun bir -birining yonida joylashgan pimlardan foydalandik. Afsuski, bizga robotni boshqarish uchun 9 -pin kerak, chunki u dvigatel drayveriga analog signal yuborishimiz kerak bo'lgan PWM pinlaridan biridir. Yechim-9-pinli simni boshqa bo'sh pinga ko'chirish va keyin #define iborasini yangi pinga o'zgartirish. OLED-ni robotning old qismiga o'rnatish uchun men pleksiglas va issiq yopishtirilgan ikkita uchburchak bo'lakni kesib oldim. ularni shassiga. Men har doim qismlarni issiq yopishtirishdan oldin, pleksiglas yuzasini silliqlash uchun bir oz zımpara qog'ozini ishlatishni yaxshi ko'raman, shunda ular osonlikcha ajralib ketmaydi.
Keling, OLED -dagi ba'zi ma'lumotlarni olaylik va robotga bir nechta yuzlarni chizamiz!
6 -qadam: 6 -qadam: Robot parametrlarini ko'rsatish
Displeyga ega bo'lishning yaxshi tomonlaridan biri shundaki, u robotni aylanib yurganida nima bo'layotganini aniqlashga yordam beradi. Kompyuterga ulanganingizda, ishlab chiqaruvchilarning ish stolida ishlashi faqat robot aylanib yurganida ishlamaydi. Ping sensori o'lchagan masofa kabi qiymatni ko'rsatish robot parametrlarini ko'rsatishning yaxshi namunasidir.
Yuqoridagi rasmda, birinchi qatorda (Echo Time) tovush ultrasonik karnaydan chiqib ketishi va mikrofon qabul qilgan vaqt orasidagi kechikish vaqti ko'rsatilgan. Keyin bu raqam ikkinchi qatorda santimetrga aylanadi (masofa sm). Hisoblagichni qidirish yangilanadi, displey yangilanayotganini ko'rsatadi. "Burilish …" faqat masofa ma'lum chegaradan past bo'lsa, ko'rsatiladi. Agar ping masofasi bu raqamdan yuqori bo'lsa, ikkala g'ildirak ham oldinga siljiydi. Agar raqam burilish chegarasidan past bo'lsa, biz dvigatellarni teskari yo'naltiramiz (zaxira) va keyin yo'nalishni o'zgartiramiz.
Bu erda ping sensoridan qiymatlarni qanday olish va OLED ekranida ko'rsatishni ko'rsatadigan namunali kod.
Mana, uchta ping sensorini (chap, markaz va o'ng) sinovdan o'tkazadigan va displeydagi qiymatlarni ko'rsatadigan misol:
github.com/dmccreary/coderdojo-robots/blob…
7 -qadam: 7 -qadam: Ba'zi yuzlarni chizish
Endi bizda yuzlarni chizish uchun barcha qismlar tayyor. Bizning talabalar odatda robot oldinga qarab ketayotgan bo'lsa, uning yuzi baxtli bo'lishi kerak deb o'ylashadi. U oldida nimadir ko'rganda, u hayratda qoladi. Keyin u orqaga o'girilib, atrofga qaraydi, ehtimol ko'zlari qaysi tomonga burilishini bildiradi.
Yuzni chizish buyrug'i juda oddiy. Biz yuzning konturi uchun aylana chizishimiz va har bir ko'z uchun aylana bilan to'ldirishimiz mumkin. Og'iz tabassum uchun yarim doira va ajablanish hissi uchun to'ldirilgan dumaloq doira bo'lishi mumkin. Bu erda bolalar o'z ijodlarini ifodalarni shaxsiylashtirish uchun ishlatishi mumkin. Men ba'zida ataylab yomon yuzlarni chizaman va talabalardan ularni yaxshiroq qilishimga yordam berishlarini so'rayman.
Displey hajmini olish uchun display.height () va display.width () funktsiyalaridan foydalanishingiz mumkin. Quyidagi kodda biz o'zgaruvchilarni o'rnatamiz
half_width = display.width ()/2; half_height = display.height ()/2;
Agar siz bu hisob -kitoblarni ko'p marta qilsangiz, kod bir marta hisoblansa va o'zgaruvchida saqlansa, biroz tezroq bo'ladi. Mana, zerikarli tekis yuz qanday chizilganiga misol:
// biz buni har bir tsikl boshida qilamiz
display.clearDisplay (); // backgrounddisplay.fillCircle (yarim kenglik, yarim balandlik, 31, OQ); // chap ko'z darkdisplay.fillCircle (yarim kenglik + 10, displey balandligi ()/3, 4, QORA); // og'iz displeyi uchun to'g'ri chiziq chizish.drawLine (yarim kenglik - 10, displey.height ()/3 * 2, yarim kenglik + 10, displey.height ()/3 * 2, Qora); // bu chiziq bizning yangi yuzimizni OLED displey displeyiga yuboradi.display ();
8 -qadam: 8 -qadam: sozlash
Asosiy yuzni chizish - bu faqat boshlanish. Talabalar turli xil variantlarni yaratishi mumkin. Ko'plab talabalar, ular harakatlanayotganda, ohang yoki tovushni o'ynaydigan kichik karnayni qo'shishdi.
Shuningdek, siz o'quvchilaringizga motorlarni to'g'ri ulashga yordam beradigan kichikroq test dasturlarini tuzishingiz mumkin. Masalan, ekrandagi o'q (uchburchak) o'quvchiga dvigatellarni ulashda g'ildirak qaysi tomonga burilishi kerakligini aytadi. Sinov dasturi har bir dvigatel yo'nalishi bo'yicha aylanadi:
- O'ngga Oldinga
- O'ng teskari
- Chap oldinga
- Chapga teskari
Har bir rejim uchun ekran yangi displey bilan yangilanadi va qaysi g'ildirak qay tomonga burilishi kerakligini ko'rsatadi.
Bu dasturga misol bu erda
github.com/dmccreary/coderdojo-robots/blob…
CoderDojo Robots GitHub FaceBot sahifasida ko'plab qo'shimcha misollar va dasturlash tafsilotlari mavjud.
FaceBot robotining versiyasi ham mavjud, u o'quvchilarga to'qnashuvdan saqlanishning barcha parametrlarini (oldinga tezlik, burilish masofasi, burilish vaqti, burilish tezligi) displey yordamida to'g'ridan -to'g'ri o'zgartirish imkonini beradi. Bu robotlarni "dasturlash" uchun hech qanday kompyuter kerak emas! Bu versiyalar MakerFairs va siz kompyuterlarni aylantirmoqchi bo'lmagan voqealar uchun juda mos keladi.
Iltimos, bizga va sizning talabalaringizga qanday yangi yuzlar kelishini aytib bering!
Baxtli kodlash!
Tavsiya:
To'g'ridan-to'g'ri raqamli sintez (DDS) chipli MIDI tomonidan boshqariladigan qadam dvigateli: 3 qadam
To'g'ridan-to'g'ri raqamli sintez (DDS) chipli MIDI tomonidan boshqariladigan qadamli dvigatel: Siz hech qachon mini-loyihaga aylanishingiz kerak degan yomon fikrga keldingizmi? Xo'sh, men AD9833 to'g'ridan -to'g'ri raqamli sintez (DDS) moduli yordamida musiqa yaratishga qaratilgan Arduino Due uchun chizgan eskiz bilan o'ynab yurardim … va bir paytlar men o'yladim
Arduino uchun qadam tezligini boshqarish menyusi: 6 qadam
Arduino uchun qadam tezligini boshqarish menyusi: Bu SpeedStepper kutubxonasi qadam dvigatelining tezligini nazorat qilish uchun AccelStepper kutubxonasining qayta yozilishi. SpeedStepper kutubxonasi sizga belgilangan dvigatel tezligini o'zgartirishga imkon beradi, so'ngra xuddi shu algoritm yordamida yangi belgilangan tezlikka tezlashadi/sekinlashadi
Qanday qilib qadam taymerini yasash mumkin?: 3 qadam (rasmlar bilan)
Qanday qilib qadam taymerini yasash mumkin ?: Men ko'plab sport turlarida yaxshi qatnashardim: yurish, yugurish, velosiped haydash, badminton o'ynash va hokazo. Men tez orada sayohat qilishni yaxshi ko'raman. Xo'sh, qorin qornimga qarang …… Xo'sh, baribir, men mashg'ulotlarni qaytadan boshlashga qaror qildim. Qanday uskunani tayyorlashim kerak?
Arduino UNO bilan qadam motor: 3 qadam
Arduino UNO bilan qadam dvigateli: Bosqichli motorlar - bu alohida bosqichlarda harakatlanadigan shahar motorlari. Ularda "fazalar" deb nomlangan guruhlarga bo'lingan bir nechta rulon bor. Har bir fazani ketma -ket quvvatlantirganda, dvigatel birma -bir aylanadi, zinapoyali dvigatellar juda foydali
Kompyuteringizni qadam dvigateli bilan boshqaring!: 9 qadam (rasmlar bilan)
Kompyuteringizni qadam dvigateli bilan boshqaring!: Oldingi ko'rsatmalarimdan birida men sizga step motorini aylanuvchi kodlovchi sifatida qanday ishlatishni ko'rsatdim. Bu yo'riqnomada keling, undan kompyuterni boshqarish uchun qanday foydalanish kerakligini bilib olaylik. Shunday qilib, ko'p vaqt sarflamasdan, boshlaylik