Оглавление:

Деревянный пульт Bluetooth для поезда Lego Duplo: 3 шага (с изображениями)
Деревянный пульт Bluetooth для поезда Lego Duplo: 3 шага (с изображениями)

Видео: Деревянный пульт Bluetooth для поезда Lego Duplo: 3 шага (с изображениями)

Видео: Деревянный пульт Bluetooth для поезда Lego Duplo: 3 шага (с изображениями)
Видео: Мармок VR робот 2024, Ноябрь
Anonim
Деревянный пульт Bluetooth для поезда Lego Duplo
Деревянный пульт Bluetooth для поезда Lego Duplo
Деревянный пульт Bluetooth для поезда Lego Duplo
Деревянный пульт Bluetooth для поезда Lego Duplo

Моим детям очень понравился этот маленький поезд Lego Duplo, особенно моей младшей, которая изо всех сил пытается общаться с помощью слов, поэтому я хотел создать для нее что-то, что помогло бы ей играть с поездом независимо от взрослых или телефонов / планшетов. Что-то, что добавило бы поезду дополнительное измерение и повысило бы игровую ценность.

В наборе Lego уже есть несколько способов управления поездом, вы можете подтолкнуть его вперед, чтобы запустить, и удерживать, чтобы остановить, вы можете управлять им с помощью цветных меток, которые идут на рельсы, поэтому, когда поезд проезжает мимо, он запускает различные действия, т.е. вперед, назад, воспроизведение звуков включает свет. Вы также можете загрузить приложение для телефона или планшета, которое может подключаться к поезду через Bluetooth.

Здесь полный обзор поезда

Покопавшись в Интернете, я обнаружил, что там было довольно много разных людей, у которых был весь готовый код для управления поездом. Узел Poweredup, написанный nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/), выглядел как идеальный запуск, он был написан с использованием Javascript, с которым я не был частично знаком, но подумал, если я мог бы найти микрочип на основе java, это было бы хорошим началом.

Опять же, снова поискав в Интернете, я нашел систему espruino, она похожа на ardiuno, но основана на javascript. Код espriuno можно было загрузить на микрочип MDBT42Q со встроенным Bluetooth. Я подумал, что если бы я мог загрузить в него "включенный" модуль, я был бы на полпути, однако это было не так, поскольку модуль содержал много библиотек, слишком больших для загрузки на MDBT42Q, поэтому, похоже, мне нужно найти более простое решение….

Шаг 1: Код

Код
Код

Эспринуо

Для тех, кто не знает платформу Espruino https://www.espruino.com (а я не знал), она очень похожа на Arduino, есть несколько основных отличий, написанных для javascript, а не c, она кажется немного новее так что есть примеры, однако поддержка через форумы отличная и очень полезная.

Javascript встречает поезд

Первым препятствием было подключение к поезду через bluetooth. Это можно сделать с помощью класса NRF, который поставляется с кодом espruino.

NRF.connect можно использовать для подключения к поезду, однако вам сначала нужно найти адрес самого поезда, вы можете использовать NRF.findDevices, чтобы получить эту информацию.

Как только вы это сделаете, вам нужно отправить поезду два значения для рукопожатия с поездом, для моего поезда это было «00001623-1212-efde-1623-785feabcd123», за которым следует «00001624-1212-efde-1623-785feabcd123», я полагаю это будет одинаково для всех комплектов паровозов, но в других версиях, т.е. грузовой комплект может отличаться

Получив это, вы можете подключить поезд, используя следующую функцию: можете ли вы сказать, когда поезд подключился, поскольку он будет мигать фарами синим

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

console.log («Запуск подключения2»); gatt = g; return gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). then (function (service) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). then (function (характеристика) {Characteristic_store = характеристика; return характеристика.readValue ();}).then (value => {console.log (value);}). then (function () {console.log («Поезд подключен»); connected = 1;

Веселые вещи

Теперь, когда вы подключились к поезду, пришло время для всех забавных вещей, таких как движение вперед, создание звука, включение и выключение света. Это простая задача - отправить поезду значение подготовки, за которым следует фактическая команда, т.е.

function play_horn () {

console.log ("message =", Хранилище_характеристик); const Preval = 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 (предварительное значение).then (_ => {Characteristic_store.writeValue (sendvalue);}); }

Возможно, вам придется немного покопаться, чтобы найти другую команду, кроме тех, которые я использовал

Кнопки и рычаги

Физическая сторона пульта дистанционного управления - это очень простые четыре кнопки (для воспроизведения звуков, включения и выключения света) и один потенциометр, который подключается к рычагу, чтобы вы могли контролировать скорость и направление поезда.

Кнопке не нужен подтягивающий резистор, вместо этого вы можете сделать это в коде, т.е.

pinMode (D15, 'input_pulldown');

Вы можете подключить потенциометр к одному из входов, а затем прочитать аналоговый сигнал, используя следующую команду

чтение переменных = аналоговое чтение (D31);

Другое отличие от Arduino заключается в том, что esprunio не имеет настройки и цикла. Поэтому вместо этого я помещаю все отдельные команды / триггеры в функции, а затем настраиваю setInterval, который повторяется каждые 100 миллисекунд, прослушивая кнопку, а затем запускаю требуемую функцию при нажатии кнопки.

если (digitalRead (D15) == 1) {play_horn (); }

Управление рычагом было немного сложнее, так как я хотел иметь возможность постепенно регулировать скорость, поэтому сначала мне пришлось отправить аналоговое значение в функцию.

чтение переменных = аналоговое чтение (D31);

train_direction (чтение * 1024);

Затем в функции train_direction я разбил команду на 6 различных приращений в зависимости от значения pot

Всю дорогу говорит поезду идти полным ходом вперед

На полпути, говорит поезду двигаться вперед со скоростью 50%.

Середина, говорит поезду остановиться

На полпути вниз, поезд отправляется назад со скоростью 50%.

Всю дорогу вниз говорит поезду, чтобы он ехал на полной скорости задним ходом.

т.е.

function train_direction (dir_val) {

//console.log("message = ", Characteristic_store); const Preval = 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);}); }

Полный код можно найти по ссылке ниже

Шаг 2: Электромонтаж

Электропроводка
Электропроводка
Электропроводка
Электропроводка

Электропроводка была самой простой частью

Он просто состоял из 4 кнопок, подключенных к D15, D16, D17 и D18 без подтягивающего резистора, как это было сделано в коде, и 1 резистора 10 кОм, подключенного к D31.

Я все еще работаю над блоком питания, но в настоящее время все питание поступает от разъема micro-USB, и его можно подключить напрямую к блоку питания или USB-порту.

Шаг 3: Сборка

Сборка
Сборка
Сборка
Сборка
Сборка
Сборка
Сборка
Сборка

Пульт в основном состоит из листов фанеры формата А4 толщиной 3 мм, 6 мм или 9 мм. Они были вырезаны на моем станке с ЧПУ, но с использованием предоставленного шаблона, хотя это было бы невозможно сделать вручную.

Я надеюсь, что шаблон и фотографии дадут вам все, что вам нужно для переделки, однако есть несколько примечаний, которые могут помочь

Крепление для кнопки 3 мм предназначено для прикрепления кнопки, зазор будет позиционировать кнопку в правильном месте, но мы позволяем вам получить доступ к ножке на задней панели, чтобы вы могли припаять ее к микрочипу, на обратной стороне вы также можете установить MDBT42Q используя немного клея. Спереди вам нужно будет добавить такую пену, чтобы кнопки немного подпрыгивали, когда вы их нажимаете, вы также можете использовать пружины.

Для кнопок 9 мм потребуется краска, гравировка или что-то еще, чтобы показать, какая кнопка что делает

Рычаг / ручку нужно будет наслоить, я использовал 6-миллиметровый дюбель, чтобы выровнять их во всех правильных положениях.

Рекомендуемые: