İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Çocuklarım bu küçük Lego Duplo trenini sevdiler, özellikle kendini kelimelerle ifade etmekte zorlanan en küçüğüm, bu yüzden ona trenle yetişkinlerden veya telefonlardan/tabletlerden bağımsız olarak oynamasına yardımcı olacak bir şey inşa etmek istedim. Trene ekstra bir boyut katacak ve ona ekstra oyun değeri verecek bir şey
Lego setinin treni kontrol etmek için zaten birkaç yolu var, başlatmak için ileri itebilir ve durdurmak için basılı tutabilirsiniz, rayda giden renk etiketlerini kullanarak kontrol edebilirsiniz, böylece tren üzerinden geçtiğinde farklı eylemleri tetikler, yani ileri, geri, ses çal, ışıkları aç. Ayrıca telefonunuz veya tabletiniz için bluetooth üzerinden trene bağlanabilen bir uygulama indirebilirsiniz.
İşte trenin tam bir incelemesi
İnternette biraz araştırdıktan sonra, treni kontrol etmek için tüm hazır yazılı kodları olan oldukça az sayıda farklı insan olduğunu gördüm. nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) tarafından yazılan 'Poweredup' düğümü mükemmel bir başlangıç gibi görünüyordu, Kısmen aşina olmadığım ama düşündüm ki Javascript kullanılarak yazılmıştır. Java tabanlı mikroçip bulabilirseniz bu iyi bir başlangıç olur.
Yine internette dolaştıktan sonra espruino sistemini buldum, bu ardiuno'ya benzer ama javascript tabanlı. Espriuno kodu, bluetooth gömülü olan bir MDBT42Q mircochip'e yüklenebilir. "Güçlendirilmiş" modülü yükleyebilseydim, orada yarı yolda olacağımı düşündüm, ancak bu basit bir modül, MDBT42Q'ya yüklemek için birçok kütüphanede bulunan büyük bir modül değildi, bu yüzden öyle görünüyor ki yapmak zorundayım. daha basit bir çözüm bulun….
Adım 1: Kod
Esprinuo
Espruino platformunu bilmeyenler için https://www.espruino.com (ve ben yapmadım) Arduino'ya çok benziyor mu, C yerine javascript için yazdığı birkaç ana fark var, Biraz daha yeni geliyor bu yüzden örnekler yok, ancak forumlar aracılığıyla verilen destek harika ve çok yardımcı oluyor.
Javascript trenle tanışın
İlk engel, trene bluetooth üzerinden bağlanmaktı, Bu, espruino koduyla birlikte gelen NRF sınıfı kullanılarak yapılabilir.
NRF.connect, trene bağlanmak için kullanılabilir, ancak ilk önce trenin adresini bulmanız gerekir, bu bilgiyi almak için NRF.findDevices'ı kullanabilirsiniz.
Bunu yaptıktan sonra, trenle el sıkışmak için trene iki değer göndermeniz gerekir, benim trenim için bu "00001623-1212-efde-1623-785feabcd123" ve ardından "00001624-1212-efde-1623-785feabcd123" idi sanırım bu tüm buharlı tren seti için aynı olacak ancak diğer versiyonlar yani kargo seti farklı olabilir
Buna sahip olduğunuzda, aşağıdaki gibi bir işlevi kullanarak treni bağlayabilirsiniz, trenin ne zaman bağlandığını, mavi renkte yanıp söneceğini söyleyebilir misiniz?
NRF.connect("e0:7d:ea:0c:03:29").then(function(g) {
console.log("Bağlantı başlatılıyor2"); gatt = g; gatt.getPrimaryService("00001623-1212-efde-1623-785feabcd123"); }).then(function(service) { return service.getCharacteristic("00001624-1212-efde-1623-785feabcd123"); }).then(function(characteristic) { Karakteristik_store = karakteristik; dönüş özelliği.readValue(); }).then(değer => { console.log(değer); }).then(function() { console.log("Tren Bağlı"); bağlı = 1;
eğlenceli şeyler
Artık trene bağlandınız, treni ilerletmek, ses çıkarmak ve ışığı açıp kapatmak gibi tüm eğlenceli şeylerin zamanı geldi. Trene bir hazırlık değeri göndermek basit bir iş, ardından asıl komut yani
işlev play_horn() {
konsol.log("mesaj = ", Karakteristik_store); const prepval = new Uint8Array([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x01, 0x11, 0x51, 0x01, 0x09]); Characteristic_store.writeValue(prepval).then(_ => { Characteristic_store.writeValue(sendvalue); }); }
Kullandıklarımdan başka bir komut bulmak için biraz araştırma yapmanız gerekebilir.
Düğmeler ve Kollar
Uzaktan kumandanın fiziksel tarafı, dört düğme (sesleri çalmak, ışıkları açıp kapatmak için) ve trenin hızını ve yönünü kontrol edebilmeniz için kola bağlanan bir potansiyometredir.
Düğmenin çekme direncine ihtiyacı yoktur, bunun yerine bunu kodda yapabilirsiniz, yani
pinMode(D15, 'input_pulldown');
Potansiyometreyi girişlerden birine bağlayabilir ve ardından aşağıdaki komutu kullanarak analog sinyali okuyabilirsiniz.
var okuma = analogRead(D31);
Arduino'nun diğer farkı, esprunio'nun bir kurulum ve döngüye sahip olmamasıdır. Bunun yerine, tüm ayrı komutları/tetikleyicileri işlevlere yerleştiriyorum ve ardından her 100 milisaniyede bir döngüye giren setInterval ayarını yapıyorum, düğmeyi dinliyorum ve düğmeye basıldığında gerekli işlevi çalıştırıyorum.
if (digitalRead(D15) == 1) { play_horn(); }
Hızı kademeli olarak ayarlayabilmek istediğim için kolu hareket ettirmek biraz daha karmaşıktı, bu yüzden önce analog değeri işleve göndermek zorunda kaldım.
var okuma = analogRead(D31);
train_direction(okuma * 1024);
Sonra train_direction işlevinde, pot değerine göre komutu 6 farklı artışa böldüm.
Tamamen yukarı, trene tam hızda ilerlemesini söyler
Yolun yarısında, trene %50 hızla ilerlemesini söyler
Orta, trene durmasını söyler
Yarı yolda, trene %50 hızla geri gitmesini söyler
Tamamen aşağı, trene tam hızda geri gitmesini söyler
yani
function train_direction(dir_val) {
//console.log("mesaj = ", Karakteristik_store); const prepval = new Uint8Array([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = new 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); }); }
Tam kod aşağıdaki bağlantı için aşağı olabilir
Adım 2: Kablolama
Kablolama en basit kısımdı
Kodda olduğu gibi herhangi bir çekme direnci olmadan D15, D16, D17 ve D18'e bağlı 4 buton ve D31'e bağlı 1 10k dirençten oluşuyordu.
Hala güç kaynağı üzerinde çalışıyorum ama şu anda tüm güç bir mikro usb çıkışından geliyor ve bu doğrudan bir güç bankasına veya bir USB bağlantı noktasına bağlanabilirler
Adım 3: Yapı
Uzaktan kumanda çoğunlukla 3 mm, 6 mm veya 9 mm A4 kontrplak levhalardan oluşuyor, CNC makinemde kesiliyorlar, ancak sağlanan şablonu kullanarak elle yapmak imkansız olmasa da
Şablonun ve fotoğrafların size yeniden düzenlemeniz için gereken her şeyi vereceğini umuyorum, ancak yardımcı olabilecek birkaç not var
3mm Basma Düğmesi montajı, basma düğmesini yapıştırmak içindir, boşluk düğmeyi doğru yere yerleştirecektir ancak mikroçipi lehimleyebilmeniz için arkadaki bacağa erişmenize izin veriyoruz, ters tarafta MDBT42Q'yu da monte edebilirsiniz biraz tutkal kullanarak. Ön tarafa o kadar köpük eklemeniz gerekecek ki, düğmelere bastığınızda biraz zıplasın, ayrıca yayları da kullanabilirsiniz.
9 mm'lik düğmeler, hangi düğmenin ne yaptığını göstermek için logonun boyasına, gravürüne veya başka bir şeye ihtiyaç duyacaktır.
Kolun/Kolun katmanlanması gerekecek, tüm doğru konumlarda hizalamalarına yardımcı olması için 6 mm'lik bir dübel kullandım