Инфракрасный передатчик для микробит.
https://mrobot.by/Контролируйте и управляйте вашими проектами, используя микробит, инфракрасный индикатор, MakeCode.
Компоненты, используемые при работе:
- Микробит панель.
- Инфракрасный индикатор.
- Lego 8884 – ИК приемник.
- Microsoft MakeCode.
- Pxt-powerfunctions. Пакет MakeCode’а, обеспечивающий функционал для микробит. 6. Шаблон MakeCode Project’а с интегрированным пакетом функций.
История.
Лего – торговая марка the LEGO Group, которая не спонсирует данный проект.
Вызов.
Мы изучали разные языки программирования, а также нам пришлись по душе лего брики. Так родилась идея контроля железнодорожных путей lego.
Наше путешествие.
Мы начали со Scratch и Arduino. Имелся рабочий прототип, работающий с ошибками и сложный в установке.
В нашем следующем подходе мы использовали немецкую микробит. Микрокомпьютер the Calliope поставляется вместе с драйвером для мотора, который уменьшает количество необходимого оборудования до платы и кабелей, которые можно сделать самому. Наше первое испытание с моделью Lego провалилось. Анализ показал, что мы хотим полностью контролировать как минимум два двигателя и фонари. Чем больше, тем лучше. The Calliope ограничена одним мотором.
Наше решение.
В итоге мы сделали обычный пакет для MakeCode, позволяющий Микробиту с прикрепленным к нему инфракрасным индикатором посылать команды инфракрасному приемнику. Своеобразный удаленный контроль. Сейчас мы можем контролировать множество устройств с минимальными требованиями к оборудованию и легко программировать. Мы опубликовали наш пакет на GitHub по ссылке.
Сборка.
Вам нужны две вещи: Микробит и инфракрасный индикатор, излучающий инфракрасный свет длиной в 940 нанометров. Любой старый инфракрасный индикатор, скорее всего, подойдет для работы. Мы протестировали SFH 4546 и TSAL 6200. Мы прикрепили индикатор с банановыми разъемами и соединительными кабелями. Соедините длинную ножку индикатора к аналоговому выводу. Мы рекомендуем нулевой вывод, потому что он уже настроен по умолчанию в пакете MakeCode. Вставьте короткую ногу индикатора в GND.
Всего с несколькоми деталями вы можете скрепить Микробит с конструкцией Lego.
Установка програмного обеспечения.
Откройте MakeCode и добавьте пакет функций через Add Package в Advanced меню. Вам нужно ввести ссылку на проект. Затем вернитесь и выберете полученный пакет.
Новые блоки будут доступны через меню функций, и документация по ним будет всплывать при наведении курсора на блоки.
Передача команд функций.
Давайте соединим вместе нашу первую программу. Прежде всего мы олжны настроить вывод инфракрасного индикатора. Вы можете пропустить этот шаг, если используете вывод 0, потому что он идет по умолчанию. Перенастройте направление моторов, если необходимо. Это походит на переключение направления на пульте дистанционного управления.
Теперь пришло время запустить и остановить двигатель, который мы подключили к синему выходу инфракрасного приемника Lego. Не забудьте правильно настроить канал приемника.
Вы также можете использовать функции удаленного контроля Lego для передачи любых других команд в любое время.
Пример: Поезд автоматически останавливается у станции.
Как осуществить остановку на требуемой позиции? Мы решили использовать возможность Микробита замерять световой уровень и спроектировали световой барьер. Мы установили микрокомпьютер в вагоне поезда и построили lighthouse (световой барьер), используя две пары световых индикаторов Lego.
Задачи, которая выполняет программа:
- Задает определенные настройки освещения.
- Останавливает поезд на пять секунд, если уровень света выше заданного.
- После остановки поезд совершает движение до следующей проверки светового уровня.
Код программы:
powerfunctions.useIrLedPin(AnalogPin.P0) powerfunctions.setMotorDirection( PowerFunctionsMotor.Blue1, PowerFunctionsDirection.Backward ) input.onButtonPressed(Button.A, () => { powerfunctions.moveForward(PowerFunctionsMotor.Blue1) }) input.onButtonPressed(Button.B, () => { powerfunctions.float(PowerFunctionsMotor.Blue1) }) basic.forever(() => { led.plotBarGraph(input.lightLevel(), 255) if (input.lightLevel() > 180) { powerfunctions.float(PowerFunctionsMotor.Blue1) basic.pause(5000) powerfunctions.setSpeed(PowerFunctionsMotor.Blue1, 2) basic.pause(3000) } })