Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Övladlarım bu kiçik Lego Duplo qatarını çox sevdi, xüsusən də özünü sözlərlə danışmaqda çətinlik çəkən ən gəncim, ona böyüklərdən və ya telefonlardan/tabletlərdən asılı olmayaraq qatarla oynamasına kömək edəcək bir şey qurmaq istədim. Qatara əlavə bir ölçü əlavə edəcək və ona əlavə oyun dəyəri verəcək bir şey
Lego dəstinin qatarı idarə etmək üçün çox az yolu var, onu dayandırmaq üçün irəli çəkə bilərsiniz, yolda gedən rəng etiketlərindən istifadə edərək idarə edə bilərsiniz, buna görə də qatar onun üzərindən keçəndə fərqli hərəkətlərə səbəb olur. irəli, geri, oyun səsləri işıqları yandırır. Telefonunuza və ya planşetinizə bluetooth vasitəsilə qatara qoşula bilən bir tətbiq yükləyə bilərsiniz.
Burada qatarın tam icmalı
İnternetdə ovladıqdan sonra, qatarı idarə etmək üçün hazır yazılı kodu olan çox az adam olduğunu gördüm. Nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) tərəfindən yazılan 'Poweredup' qovşağı mükəmməl bir başlanğıc kimi görünürdü, qismən tanımadığım, amma düşündüyümü düşündüyüm Javascriptdən istifadə edərək yazılmışdır. java əsaslı mikroçip tapa bilsəydim, bu yaxşı bir başlanğıc olardı.
Yenə internetdə ovladıqdan sonra espruino sistemini tapdım, bu ardiuno -ya bənzəyir, ancaq javascript ətrafında. Espriuno kodu, bluetooth daxil edilmiş bir MDBT42Q mircochipinə yüklənə bilər. "Gücləndirilmiş" modulu yükləyə bilsəm, oranın yarısında olacağımı düşündüm, amma bu sadə deyil ki, MDBT42Q yükləmək üçün bir çox kitabxanada olan bir modul deyil, buna görə də məcburam daha sadə bir həll tapın ….
Addım 1: Kod
Esprinuo
Espruino platformasını bilməyənlər üçün https://www.espruino.com (və etmədim) Arduino ilə çox oxşardır, JavaScript üçün yazdığı bir neçə əsas fərq var c, Bir az daha yeni hiss olunur buna görə nümunələr olmasa da forumlar vasitəsilə verilən dəstək böyük və çox faydalıdır.
Javascript qatarla tanış olur
İlk maneə, bluetooth vasitəsi ilə qatara qoşulmaq idi, bu espruino kodunda göndərilən NRF sinifindən istifadə etməklə edilə bilər.
NRF.connect qatara qoşulmaq üçün istifadə edilə bilər, ancaq ilk olaraq qatarın ünvanını tapmaq lazımdır, bu məlumatı əldə etmək üçün NRF.findDevices istifadə edə bilərsiniz.
Bunu etdikdən sonra, qatarla əl sıxışmaq üçün qatara iki dəyər göndərməlisiniz, çünki mənim qatarım "00001623-1212-efde-1623-785feabcd123" idi və "00001624-1212-efde-1623-785feabcd123" inanıram Bu, bütün buxar qatarları üçün eyni olacaq, lakin digər versiyalar yəni yük dəsti fərqli ola bilər
Bunu əldə etdikdən sonra qatarı aşağıdakı kimi bir funksiyadan istifadə edərək bağlaya bilərsiniz, qatarın nə vaxt bağlandığını deyə bilərsiniz, çünki faralar mavi yanıb sönəcək.
NRF.connect ("e0: 7d: ea: 0c: 03: 29"). Sonra (funksiya (g) {
console.log ("Bağlanmağa başlama2"); gatt = g; qayıt gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). sonra (funksiya (xidmət) {qayıtma xidməti.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). sonra (funksiya (xarakterik) {Characteristic_store = xarakterik; qaytarılma xarakteristikası.readValue ();). sonra (dəyər => {console.log (dəyər);}). sonra (function () {console.log ("Train Connected"); bağlı = 1;
Əyləncəli şeylər
İndi qatara bağlandınız, irəli getmək, səs çıxarmaq və işığı yandırıb söndürmək kimi bütün əyləncəli işlərin vaxtı gəldi. Qatara hazırlıq dəyəri göndərmək, sonra əmrini yerinə yetirmək sadə bir işdir
play_horn () {funksiyası
console.log ("mesaj =", Characteristic_store); const prepval = yeni Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = yeni Uint8Array ([0x08, 0x00, 0x81, 0x01, 0x11, 0x51, 0x01, 0x09]); Characteristic_store.writeValue (əvvəlcədən). Sonra (_ => {Characteristic_store.writeValue (sendvalue);}); }
İstifadə etdiyimdən başqa bir əmr tapmaq üçün bir az qazmaq lazım ola bilər
Düymələr və qollar
Pultun fiziki tərəfi çox düz irəli dörd düymədir (səsləri çalmaq, işıqları yandırmaq və söndürmək üçün) və qola qoşulmuş bir potansiyometrdir ki, qatarın sürətini və istiqamətini idarə edə biləsiniz.
Düymənin müqavimət çəkməsinə ehtiyac yoxdur, bunun əvəzinə bunu kodda edə bilərsiniz, yəni
pinMode (D15, 'input_pulldown');
Potensiometrini girişlərdən birinə bağlaya və sonra aşağıdakı əmri istifadə edərək analoq siqnalı oxuya bilərsiniz
var oxu = analogRead (D31);
Arduino -dan digər fərq, esprunio -nun bir quruluşa və döngəyə malik olmamasıdır. Bunun əvəzinə bütün ayrı əmrləri/tetikleyiciləri funksiyalara yerləşdirirəm və sonra hər 100 millisaniyədə bir döngə quran setInterval qururam, düyməni dinləyirəm və sonra düyməyə basıldıqda lazım olan funksiyanı işə salıram.
əgər (digitalRead (D15) == 1) {play_horn (); }
Sürəti tədricən tənzimləmək istədiyi üçün qolu hərəkət etdirmək bir az daha mürəkkəb idi, buna görə əvvəlcə analoq dəyərini funksiyaya göndərməli oldum.
var oxu = analogRead (D31);
train_direction (oxu * 1024);
Sonra train_direction funksiyasında qazanın dəyərinə əsasən əmri 6 fərqli artıma ayırdım
Bütün yolda, qatara irəli sürətlə getməsini söyləyir
Yarım yolda, qatara 50% sürətlə irəli getməsini söyləyir
Orta, qatara dayanmasını söyləyir
Yarım yol aşağı düşəndə qatara 50% sürətlə geriyə getməsini söyləyir
Aşağıya doğru, qatarın tərsinə tam sürətlə getməsini söyləyir
yəni
train_direction (dir_val) funksiyası
//console.log("message = ", Characteristic_store); const prepval = yeni Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = yeni 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 = yeni Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xe2]); } if (dir_val 100) {const sendvalue = yeni Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xce]); } if (dir_val {Characteristic_store.writeValue (sendvalue);}); }
Tam kod aşağıdakı linkdə ola bilər
Addım 2: Kablolama
Kabel qurğusu ən sadə hissə idi
Bu, D15, D16, D17 və D18 -ə bağlı olan 4 düymədən ibarət idi və bu, hər hansı bir çəkmə müqavimətini çıxartdı, çünki bu kodda edildi və D31 -ə qoşulan 10k rezistor.
Mən hələ də enerji təchizatı üzərində işləyirəm, amma hazırda bütün güc mikro usb -dən çıxır və bu birbaşa bir güc bankına və ya USB portuna qoşula bilər.
Addım 3: Quraşdırma
Uzaqdan, əsasən 3 mm, 6 mm və ya 9 mm A4 ölçülü kontrplak təbəqələrdən hazırlanır, CNC maşınımı kəsdikləri yerdə, ancaq istədiyim şablonu istifadə etsəm də əllə etmək qeyri -mümkün olardı.
Ümid edirəm ki, şablon və fotoşəkillər sizə lazım olan hər şeyi verəcək, ancaq kömək edə biləcək bir neçə qeyd var
3 mm Push Button montajı düyməni sıxmaq üçün hazırlanmışdır, boşluq düyməni düzgün yerə yerləşdirəcək, ancaq mikro çipə lehimləmək üçün arxa ayağınıza daxil olmağınıza icazə veririk, əksinə MDBT42Q quraşdıra bilərsiniz. bir az yapışqan istifadə edərək. Ön tərəfə o qədər köpük əlavə etməlisiniz ki, düymələri basıldıqda bir az sıçrayış təmin etsin, yaylardan da istifadə edə bilərsiniz.
9 mm düymələr, hansı düymənin nə etdiyini göstərmək üçün loqonun ya boya, oyma və ya başqa bir şeyə ehtiyac duyacaq
Kolu/Sapı qatlamaq lazımdır, onları bütün düzgün mövqelərdə hizalamaq üçün 6 mm dübel istifadə etdim.