Давно хотел приобщить к программированию своего сына, но как это сделать? Прошли те времена, когда учились на бейсиках и паскалях. Пытался показать ему 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 программы. Источник: http://habrahabr.ru/blogs/DIY/113079/