Мазмуну:

Lego Duplo Train үчүн жыгач Bluetooth Remote: 3 кадам (Сүрөттөр менен)
Lego Duplo Train үчүн жыгач Bluetooth Remote: 3 кадам (Сүрөттөр менен)

Video: Lego Duplo Train үчүн жыгач Bluetooth Remote: 3 кадам (Сүрөттөр менен)

Video: Lego Duplo Train үчүн жыгач Bluetooth Remote: 3 кадам (Сүрөттөр менен)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Ноябрь
Anonim
Lego Duplo Train үчүн жыгач Bluetooth Remote
Lego Duplo Train үчүн жыгач Bluetooth Remote
Lego Duplo Train үчүн жыгач Bluetooth Remote
Lego Duplo Train үчүн жыгач Bluetooth Remote

Менин балдарым бул кичинекей Lego Duplo поездин жакшы көрүштү, айрыкча менин сөзүм менен сүйлөшө албаган эң кичүүм, ошондуктан мен ага поезд менен чоңдорго же телефондорго/планшеттерге көз карандысыз ойноого жардам бере турган бир нерсе кургум келди. Поездге кошумча өлчөм кошуп, ага кошумча оюн маанисин бере турган нерсе

Lego топтомунда поездди башкаруунун анча -мынча жолу бар, аны токтотуу үчүн аны алдыга түртүүгө жана кармап турууга болот, аны жолдо бараткан түстүү белгилердин жардамы менен башкара аласыз, андыктан поезд анын үстүнөн өткөндө ар кандай аракеттерди жаратат. алдыга, артка, ойноо үндөрү жарыкты күйгүзөт. Сиз поездге Bluetooth аркылуу туташа турган телефонуңузду же планшетиңиз үчүн колдонмону жүктөп алсаңыз болот.

Бул жерде поезддин толук кароосу

Интернетте аңчылык кылгандан кийин, мен поездди башкарууга даяр жазылган коду бар ар кандай адамдар бар экенин таптым. Nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) тарабынан жазылган "Poweredup" түйүнү кемчиликсиз башталыш сыяктуу көрүнгөн, мен Javascriptтин жардамы менен жазылган, бирок мен аны менен тааныш эмесмин, бирок эгер ойлосом java негизиндеги микрочипти таба алса, бул жакшы башталыш болмок.

Дагы интернетте аңчылык кылгандан кийин, мен espruino системасын таптым, бул ардиуного окшош, бирок javascriptтин айланасындагы база. Эсприуно коду bluetooth камтылган MDBT42Q микрочипине жүктөлүшү мүмкүн. Эгерде мен "иштетилген" модулду жүктөй алсам, анда мен жарым жолдо болмокмун деп ойлогом, бирок бул жөнөкөй эмес, көптөгөн китепканаларда MDBT42Q жүктөө үчүн камтылган модуль, андыктан мага керек окшойт жөнөкөй чечим табуу ….

1 -кадам: Код

Кодекс
Кодекс

Esprinuo

Espruino платформасын билбегендер үчүн https://www.espruino.com (жана мен андай эмесмин) бул Arduino менен абдан окшош, JavaScript үчүн жазылган бир нече негизги айырмасы бар, тескерисинче, бир аз жаңы окшойт мисалдар жок, бирок форумдар аркылуу колдоо чоң жана абдан пайдалуу.

Javascript поездге жолугат

Биринчи тоскоолдук bluetooth аркылуу поездге туташуу болчу, Бул espruino коду менен келген NRF классын колдонуп жасалышы мүмкүн.

NRF.connect поездге туташуу үчүн колдонулушу мүмкүн, бирок поезддин дарегин биринчи табууңуз керек, бул маалыматты алуу үчүн NRF.findDevices колдонсоңуз болот.

Муну кылгандан кийин, поездге поезд менен кол алышуу үчүн эки маанини жөнөтүү керек, менин поездим үчүн бул "00001623-1212-efde-1623-785feabcd123", андан кийин "00001624-1212-efde-1623-785feabcd123" болчу Бул бардык буу поезддери үчүн бирдей болот, бирок башка версиялар, башкача айтканда, жүк топтому башкача болушу мүмкүн

Муну алгандан кийин, сиз поездди төмөндөгүдөй функцияны колдонуп туташтыра аласыз, поезд качан кошулганын айта аласызбы, анткени ал фаралар көк түстө жаркырайт

NRF.connect ("e0: 7d: ea: 0c: 03: 29"). Анан (function (g) {

console.log ("Байланыш башталууда2"); gatt = g; return gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). анда (функция (кызмат) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). анан (функция (мүнөздөмө) {Characteristic_store = мүнөздөмө; кайтаруу мүнөздөмөсү.readValue ();}). анан (value => {console.log (value);}). анан (function () {console.log ("Train Connected"); connect = 1;

Кызыктуу нерселер

Эми сиз поездге тутадыңыз, аны алдыга жылдыруу, үн чыгаруу жана жарыкты күйгүзүү жана өчүрүү сыяктуу кызыктуу нерселердин убактысы келди. Бул поездге даярдык маанисин жөнөтүү, андан кийин иш жүзүндөгү буйрукту аткаруу

play_horn () {функциясы

console.log ("message =", Characteristic_store); const prepval = жаңы Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = жаңы Uint8Array ([0x08, 0x00, 0x81, 0x01, 0x11, 0x51, 0x01, 0x09]); Characteristic_store.writeValue (prepval).then (_ => {Characteristic_store.writeValue (sendvalue);}); }

Мен колдонгондон башка буйрукту табуу үчүн бир аз чукулоо керек болушу мүмкүн

Баскычтар жана рычагдар

Алыстан башкаруунун физикалык тарабы абдан алдыга карай төрт баскыч (үндөрдү ойнотуу, жарыкты күйгүзүү жана өчүрүү) жана рычагга туташкан бир потенциометр, ошондуктан сиз поезддин ылдамдыгын жана багытын башкара аласыз.

Бул баскычка каршылыктын кереги жок, анын ордуна сиз муну коддо жасай аласыз, б.а

pinMode (D15, 'input_pulldown');

Сиз потенциометрди кирүүлөрдүн бирине туташтырып, анан аналогдук сигналды төмөнкү буйрукту колдонуп окуй аласыз

var read = analogRead (D31);

Ардуинонун башка айырмасы, esprunioдо орнотуу жана укурук жок. Ошентип, анын ордуна мен бардык бөлөк командаларды/триггерлерди функцияларга коём, андан кийин setInterval орнотом, ал ар бир 100 миллисекундта айланат, баскычты угуп, анан баскыч басылганда керектүү функцияны иштетем.

if (digitalRead (D15) == 1) {play_horn (); }

Ылдамдыкты иштетүү бир аз татаалыраак болчу, анткени ылдамдыкты акырындык менен жөнгө салууну каалагандыктан, адегенде функцияга аналогдук маанини жөнөтүүм керек болчу.

var read = analogRead (D31);

train_direction (окуу * 1024);

Андан кийин train_direction функциясында мен казандын маанисине негизделген 6 түрдүү көбөйтүүгө буйрук бердим

Бара -бара, поездге алдыга толук ылдамдыкта кетүүнү айтат

Жарым жолго чейин, поездге 50% ылдамдык менен алдыга кетүүнү айтат

Орто, поездге токтогула дейт

Жарым жол түшүп, поездге 50% ылдамдык менен артка кетүүнү айтат

Ылдый түшүп, поездге толук ылдамдыкта артка кетүүнү айтат

б.а

train_direction функциясы (dir_val) {

//console.log("message = ", Characteristic_store); const prepval = жаңы Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = жаңы 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);}); }

Толук кодду төмөнкү шилтемеден алсаңыз болот

2 -кадам: Кабелдик

Wiring
Wiring
Wiring
Wiring

Электр өткөргүчтөрү эң жөнөкөй бөлүгү болгон

Бул жөн эле D15, D16, D17 жана D18ге туташтырылган 4 баскычтан турган, бул кандайдыр бир каршылыкты алып салуу менен, анткени бул коддо жана D31ге туташкан 10k каршылыгында болгон.

Мен дагы эле электр менен камсыздоо боюнча иштеп жатам, бирок азыркы учурда бардык кубаттуулук микро USB портунан келип чыгат жана бул түздөн -түз кубат банкына же USB портуна туташтырылышы мүмкүн

3 -кадам: куруу

Build
Build
Build
Build
Build
Build
Build
Build

Алыстан башкаруу пульту негизинен 3мм, 6мм же 9мм А4 фанерадан турат, алар менин CNC машинамды кесип салышат, бирок шаблонду колдонушат, бирок кол менен жасоо мүмкүн эмес.

Мен шаблон жана сүрөттөр сизге керектүү нерселердин бардыгын берет деп үмүттөнөм, бирок жардам бере турган бир нече жазуулар бар

3мм баскычты орнотуу баскычты жабыш үчүн, боштук баскычты туура жерге жайгаштырат, бирок биз сизге микрочипке ширетүү үчүн арткы бутуңузга кирүүгө уруксат беребиз, тескерисинче MDBT42Q орнотсоңуз болот бир аз клей колдонуу. Алдыңкы жагына ушунчалык көбүк кошушуңуз керек, андыктан баскычтарды басканда бир аз секирет, булактарды колдонсоңуз болот

9мм баскычтарга логотип же боёк, гравировка же башка нерсе керек болот, ал баскыч эмне кылаарын көрсөтөт

Реверч/тутканы катмарлаш керек, мен аларды туура позицияларда тегиздөө үчүн 6 мм дюбель колдондум.

Сунушталууда: