2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Mening bolalarim Lego Duplo -ning bu kichkina poezdini yaxshi ko'rishardi, ayniqsa, so'zlar bilan gaplasha olmaydigan, eng kichigi, shuning uchun men unga kattalar yoki telefonlar/planshetlardan qat'i nazar, poezd bilan o'ynashga yordam beradigan narsa qurmoqchi edim. Poezdga qo'shimcha hajm qo'shadigan va unga qo'shimcha o'yin qiymatini beradigan narsa
Lego to'plamida poezdni boshqarishning bir necha yo'li bor, siz uni oldinga siljitib, to'xtatish uchun ushlab turishingiz mumkin, siz yo'lda ketadigan rangli teglar yordamida boshqarishingiz mumkin, shuning uchun poezd uning ustidan o'tib ketganda turli harakatlarni keltirib chiqaradi. oldinga, teskari, o'yin tovushlari chiroqlarni yoqadi. Siz poezdga bluetooth orqali ulanadigan telefon yoki planshet uchun ilovani ham yuklab olishingiz mumkin.
Bu erda poezdning to'liq sharhi
Internetda ov qilgandan so'ng, men poezdni boshqarish uchun tayyor yozma kodga ega bo'lgan juda kam odam borligini topdim. Nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) tomonidan yozilgan "Poweredup" tuguni juda yaxshi boshlanganga o'xshardi, men Javascript yordamida yozilganman. java asosidagi mikrochipni topa olardi, bu yaxshi boshlanish bo'lardi.
Yana Internetda ov qilgandan so'ng, men espruino tizimini topdim, bu ardiunoga o'xshaydi, lekin javascript atrofida. Espriuno kodini bluetooth joylashtirilgan MDBT42Q mikrosxemasiga yuklash mumkin. Agar men "quvvatlantirilgan" modulni yuklay olsam, yarim yo'lda bo'laman, deb o'yladim, lekin bu oddiy kutubxonalar uchun MDBT42Q -ni yuklash uchun katta hajmdagi modul emas edi, shuning uchun menga kerak oddiy echim toping ….
1 -qadam: Kod
Esprinuo
Espruino platformasini bilmaganlar uchun https://www.espruino.com (va men bilmaganman) bu Arduino -ga juda o'xshashmi, u erda bir nechta asosiy farqlar bor, ular javascript uchun yozilgan, aksincha, biroz yangi ko'rinadi misollar yo'q, lekin forumlar orqali qo'llab -quvvatlash juda yaxshi va juda foydali.
Javascript poezd bilan uchrashadi
Birinchi to'siq bluetooth orqali poezdga ulanish edi, buni espruino kodida yuboriladigan NRF klassi yordamida amalga oshirish mumkin.
NRF.connect poezdga ulanish uchun ishlatilishi mumkin, lekin birinchi navbatda poezdning manzilini topishingiz kerak, siz bu ma'lumotni olish uchun NRF.findDevices -dan foydalanishingiz mumkin.
Buni qilganingizdan so'ng, siz poezd bilan o'zaro bog'lanish uchun poezdga ikkita qiymat yuborishingiz kerak, chunki mening poezdim "00001623-1212-efde-1623-785feabcd123" va keyin "00001624-1212-efde-1623-785feabcd123" edi. Bu barcha bug 'poezdlari uchun bir xil bo'ladi, lekin boshqa versiyalar, ya'ni yuk to'plami boshqacha bo'lishi mumkin
Buni olganingizdan so'ng, siz poezdni quyidagi funktsiyadan foydalanib ulashingiz mumkin, poezd qachon ulanganligini ayta olasizmi, chunki u ko'k chiroqni yonadi.
NRF.connect ("e0: 7d: ea: 0c: 03: 29"), keyin (funktsiya (g) {
console.log ("Ulanishni boshlash 2"); gatt = g; qaytish gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). keyin (funktsiya (xizmat) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). keyin (funksiya (xarakteristikasi) {Characteristic_store = xarakteristikasi; qaytish xarakteristikasi.readValue ();} keyin. (qiymat => {console.log (qiymat);}). keyin
Qiziqarli narsalar
Endi siz poezdga ulandingiz, uni oldinga siljitish, ovoz chiqarish va chiroqni yoqish va o'chirish kabi barcha qiziqarli narsalar vaqti keldi. Poyezdga tayyorgarlik qiymatini, so'ngra haqiqiy buyruqni yuborish oddiy vazifadir
play_horn () {funktsiyasi
console.log ("xabar =", Characteristic_store); const prepval = yangi Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = yangi Uint8Array ([0x08, 0x00, 0x81, 0x01, 0x11, 0x51, 0x01, 0x09]); Characteristic_store.writeValue (prepval).then (_ => {Characteristic_store.writeValue (sendvalue);}); }
Men ishlatgan buyruqlardan boshqa buyruqlarni topish uchun siz biroz qazishingiz kerak bo'lishi mumkin
Tugmalar va dastaklar
Masofadan boshqarish pultining old tomoni juda to'g'ri - to'rtta tugma (tovushlarni ijro etish, chiroqlarni yoqish va o'chirish) va bitta potentsiometr, u dastagiga ulanadi, shunda siz poezdning tezligi va yo'nalishini boshqarishingiz mumkin.
Tugmani tortish qarshiligiga hojat yo'q, buning o'rniga siz buni kodda qilishingiz mumkin, ya'ni
pinMode (D15, 'input_pulldown');
Siz potentsiometrni kirishlardan biriga ulashingiz va uni quyidagi buyruq yordamida analog signalni o'qishingiz mumkin
var o'qish = analogRead (D31);
Arduinoning boshqa farqi shundaki, esprunioda sozlash va pastadir yo'q. Shunday qilib, men barcha alohida buyruqlarni/tetiklarni funktsiyalarga joylashtiraman va keyin har 100 millisekundda aylanadigan setIntervalni o'rnataman, tugmani tinglayman va tugma bosilganda kerakli funktsiyani ishga tushiraman.
agar (digitalRead (D15) == 1) {play_horn (); }
Qo'lni boshqarish biroz murakkabroq edi, chunki tezlikni bosqichma -bosqich sozlash mumkin edi, shuning uchun avval analog qiymatni funktsiyaga yuborishim kerak edi.
var o'qish = analogRead (D31);
poezd yo'nalishi (o'qish * 1024);
Keyin train_direction funktsiyasida men pot qiymatiga qarab buyruqni 6 xil bosqichga ajratdim
Butun yo'l bo'ylab, poezdga oldinga to'liq tezlik bilan borishini aytadi
Yarim yo'lgacha, poezdga 50% tezlikda oldinga borishini aytadi
O'rta, poezdga to'xtashini aytadi
Yarim pastga, poezdga 50% tezlikda orqaga ketishni aytadi
To'liq pastga, poezdga teskari yo'nalishda to'liq tezlikni ketishini aytadi
ya'ni
train_direction funktsiyasi (dir_val) {
//console.log("message = ", Characteristic_store); const prepval = yangi Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = yangi Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x00]); if (dir_val> 300 && dir_val 400 && dir_val 500) {const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x64]); } if (dir_val 200) {const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xe2]); } if (dir_val 100) {const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xce]); } if (dir_val {Characteristic_store.writeValue (sendvalue);}); }
To'liq kod quyidagi havola uchun bo'lishi mumkin
2 -qadam: simlarni ulash
Simlarni ulash eng oddiy qismi edi
Bu faqat D15, D16, D17 va D18 ga ulangan 4 ta tugmachadan iborat edi, bu qarshilikni o'chirish rezistoridan iborat edi, chunki bu kodda qilingan va D31 ga ulangan 10k rezistor.
Men hali ham quvvat manbai ustida ishlayapman, lekin hozirda barcha quvvat mikro usb uzilishidan kelib chiqadi va bu ularni to'g'ridan -to'g'ri quvvat bankiga yoki USB portiga ulash mumkin.
3 -qadam: Qurilish
Masofadan boshqarish pulti asosan 3 mm, 6 mm yoki 9 mm A4 o'lchamdagi kontrplakdan yasalgan bo'lib, ular mening CNC dastgohimni kesadi, lekin shablon yordamida men qo'lda qilish imkonsiz bo'lardi.
Umid qilamanki, shablon va fotosuratlar sizga kerak bo'lgan hamma narsani beradi, ammo yordam beradigan bir nechta eslatmalar
3 mm bosish tugmachasi tugmachani yopish uchun mo'ljallangan, bo'sh joy tugmachani to'g'ri joyiga qo'yadi, lekin biz sizga orqa tarafdagi oyoqqa kirishga ruxsat beramiz, shunda siz mikrochipga lehim qila olasiz, aksincha MDBT42Q ni o'rnatishingiz mumkin. bir oz elim yordamida. Old tomondan siz ko'pik qo'shishingiz kerak bo'ladi, shuning uchun tugmachalarni bosganingizda, siz buloqlardan foydalanishingiz mumkin.
9 mm tugmachalarga logotipning bo'yog'i, o'yma yoki boshqa tugma nima kerakligini ko'rsatadigan biror narsa kerak bo'ladi
Qo'lni/dastani qatlamli qilish kerak, men ularni 6 mm dübel bilan ishlatib, ularni to'g'ri holatga keltirdim.