Как стать автором
Обновить

Машинка управляемая через Bluetooth

Время на прочтение 3 мин
Количество просмотров 14K
Давно хотел приобщить к программированию своего сына, но как это сделать?
Прошли те времена, когда учились на бейсиках и паскалях. Пытался показать ему TurboPascal — даже кое-что вроде бы начало получаться, но как-то дальше не пошло…

Решил сделать следующую попытку, когда познакомился с детским языком-конструктором Scratch. Это даже не язык — это средство создания скриптов путем перетаскивания на экране «блоков» и соединения их друг с другом. Теперь дело пошло получше. Ребенок смог сделать даже какую-то простую игру. Но ведь нужно двигаться дальше?



Что бы как-то разнообразить «программирование» я придумал сделать машинку, но что бы ее поведением можно было управлять с компьютера программой на Scratch. То есть что бы ребенок смог бы как-то программировать логику поведения машинки.

В самой среде программирования Scratch вроде бы даже есть средства для этого: видимо где-то существуют специальные платы ScratchBoard или SesorBoard подключаемые к компьютеру через последовательный порт.



Эта ScratchBoard плата может посылать в компьютер значения некоторых датчиков (четыре аналоговых датчика A,B,C,D, датчик света, датчик звука, кнопка и т.д.). Из компьютера в плату могут подаваться команды одному мотору: «вкл»/«выкл», направление «туда»/«назад» и мощность от 0 до 100. Программа (скрипт) управления мотором в среде Scratch может выглядеть, например, вот так:



Чем-то напоминает кубики лего — соединяешь разные блоки и получается программа. Ребенок вполне может освоить.

Собственно была идея сделать что-то движущееся, но управляемое из Scratch программы.

Сразу возникает несколько проблем. Первая проблема — как соединить двигающуюся машинку с компьютером — провода явно не подходят. Вторая проблема — это соединение должно быть в виде «последовательного порта», потому что программа Scratch понимает только так. Третья проблема, нужно знать протокол передачи данных в обе стороны. Четвертая проблема — как управлять машинкой если Scratch знает только один мотор? В пятых… Ну хватит перечислять проблемы! Нужно их решать!

1. Приобрел модуль Bluetooth LMX9838. Этот чип хорош тем, что при подаче питания он сразу готов к работе и с компьютера можно сразу установить связь в виде виртуального последовательного порта. Решается сразу 2 проблемы — беспроводная связь и COM-порт. Как припаять этот модуль к платке можно почитать здесь. Чип BGA — все контакты снизу, но к счастью большинство ног не используется. Если перевернуть микросхему и подпаивать проводки сверху, то это сильно упрощает работу. Получился вот такой модуль:



2. С помощью гугла нашел описание протокола Scratch на каком-то японском сайте. Теперь вы можете с ним поближе познакомиться сами, уже на русском языке.

3. Взял плату «Марсоход» — это такой «электронный конструктор» на ПЛИС Альтера. Сделал и зашил в ПЛИС платы проект который реализует последовательный приемопередатчик и принимает и посылает данные по протоколу Scratch, управляет моторами. Еще к плате «Марсоход» подключил два фото-транзистора — это будут «глаза» машинки. Я направил их вниз к земле. Планировал, что бы машинка двигалась по белому листу бумаги, на котором будут нарисованы, например, какие-то препятствия. Собственно эти датчики дают значения «темно» или «светло», а я их передаю в Scratch, как показания сенсоров «C» и «D».



4. Для управления двумя моторами было решено использовать такой параметр как «мощность». Скрипты языка Scratch могут задавать подключенному через ScratchBoard мотору «мощность». Я решил так. Если мощность равна нулю, то первый мотор может работать, а второй нет. Если мощность 50, то могут работать оба мотора. Если мощность установлена 100, то может работать второй мотор, но не первый. Конечно не совсем изящно, но какой-то выход из положения. Включаются же они по команде «мотор вкл», а выключаются по команде «мотор откл».

Ну вот в общем и все.
Вся машинка в сборе выглядит как-то так: два мотора на платформе на гусенечном ходу, плата «Марсоход», оптические датчики-глаза, модуль Bluetooth. На большом листе бумаги рисуем восьмерку черной гуашью (и чтоб высохла).

Ребенок делает программу на Scratch — примерно вот такую:



Потом включаем машинку, устанавливаем Bluetooth связь между компьютером и машинкой. И запускаем Scratch программу: Машинка двигается по полосе, и эту логику задает наша Scratch программа!



ЗЫ: Уже на следующий день мне пришла в голову мысль. Есть машинка с Bluetooth. Может можно управлять ею с сотового телефона? К вечеру программа на Java для моей nokia была готова!



Я написал ее с помощью Sun Wireless Toolkit. Об этом проекте можно подробнее почитать здесь. Там же есть и исходники java программы.
Теги:
Хабы:
+165
Комментарии 88
Комментарии Комментарии 88

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн