Я уже писал, про очень интересную среду программирования для детей – программу Scratch. Теперь мы хотим подключить несколько внешних датчиков (например кнопочек), а так же лампочки или светодиодики и моторчик к компьютеру и управлять всем этим хозяйством программой, написанной на языке Scratch. Как это можно сделать?
Вообще-то существуют какие-то платы для этого, целые наборы-конструкторы для детей. Где это можно купить я не знаю, но зато у меня есть плата Марсоход и я думаю смогу подключить ее к компьютеру и использовать совместно с программой Scratch.
Чтобы осуществить задуманное нужно было найти в интернете протокол обмена информацией между программой Scratch и существующими платами типа PicoBoard или ScratchBoard. Мне пришлось много чего почитать в интернете и проделать массу экспериментов. Зато сейчас я готов поделиться с вами этой информацией. Итак...
Первое. Мне кажется, что официальная версия программы Scratch, ну та, которую мы выкачали с сайта http://scratch.mit.edu на самом деле не поддерживает управление моторчиком. Честно говоря меня этот факт очень расстроил... Правда не на долго. На одном японском сайте (уже честно не помню на каком) я обнаружил инструкцию, как все-таки заставить Scratch работать с моторчиком. Для этого нужно после установки программы Scratch версии 1.4 заменить один из ее файлов. Вам нужно скачать с нашего сайта вот этот файл:
Второе. Программа Scratch общается с подключенной платой через последовательный порт. Даже если плата подключается как USB устройство, все равно для компьютера это «последовательный порт». Чтобы увидеть показания датчиков, подключенных через плату к компьютеру сделайте следующее. В программе Scratch выберите блок сенсоров и нажмите правую кнопку мыши на сенсоре «Рычажок», появится выпадающее меню – выбирайте «показать данные ScratchBoard».
После этого, в окне с Кошкой появится небольшая табличка с показаниями датчиков.
Если нажать правую кнопку мыши на этой табличке, то появится меню, из которого нужно выбрать пункт «Выбрать серийный/USB порт» и затем уже порт с нужным номером. Тут, конечно, есть небольшая проблема. Нужно знать номер последовательного порта, к которому будет подключена наша плата. Если в вашем компьютере нет последовательного порта, то вы можете использовать шнур переходник USB-to-Serial (они продаются в компьютерных магазинах). При подключении такого кабеля в списке устройств компьютера появляется новый последовательный порт и номер порта можно назначить вручную. Чтобы добраться до этих настроек в компьютере с Windows, обычно можно нажать кнопку ПУСК, затем найти пункт меню Мой компьютер, нажать правую кнопку на нем и в новом меню – Управление. Вот примерно что у вас должно получиться:
Будем надеяться, что вы точно знаете номер последовательного порта к которому будет подключена наша плата или что вы смогли его настроить. У меня это COM4.
Третье. Должен сказать, что видимо настоящая плата ScratchBoard поддерживает несколько разных датчиков. Это видно даже из таблички, показанной выше. Я не видел плату ScratchBoard, но думаю, что на ней датчик света, датчик звука, кнопочка, рычажок-потенциометр и еще четыре аналоговых датчика A, B, C, D.
На нашей плате Марсоход есть всего четыре кнопочки. Вот мы их и будем использовать как датчики A, B, C, D.
Рассмотрим протокол передачи данных между компьютером и платой ScratchBoard и теперь и платой Марсоход:
- Связь идет по последовательному порту на скорости 38400 бит в секунду.
- Плата ждет, когда компьютер пришлет ей всего один байт.
Старший бит в этом байте команды обозначает «включить мотор», если бит установлен. Если старший бит сброшен, то это значит «выключить мотор». Следующий бит (номер шесть, если начинать нумерацию от нуля) обозначает направление вращения моторчика «туда» или «сюда». Оставшиеся шесть бит кодируют «мощность» моторчика.
- В ответ на этот один байт команды подключенная плата посылает компьютеру целых 18 байт. Это 9 групп по два байта. Каждые два байта кодируют значание какого-то датчика.
Интересно, что хотя значения датчиков находятся в пределе от 0 до 1023, все равно программа Scratch масштабирует их значения от 0 до 100.
Номера каналов выглядят вот так:
датчик D = 0;
датчик C = 1;
датчик B = 2;
кнопка = 3;
датчик A = 4;
датчик Свет = 5;
датчик Звук = 6;
датчик Рычажок = 7;
канал для номера версии платы = 15;
Вот так и происходит обмен. Компьютер посылает плате один байт и получает в ответ 18. Затем все повторяется снова и снова.
У нас на сайте уже был проект подключения платы Марсоход по последовательному порту. Правда там использовалась дополнительная платка – переходник – преобразователь уровней CMOS в уровни интерфейса RS232 последовательного порта. Ну что же, пока без этого переходника не обойтись.
Взяв за основу тот проект, немного модифицировав его, я получил «новую плату», способную взаимодействовать со средой программирования Scratch. Она работает по описанному выше протоколу. Проект в среде Altera Quartus II для платы Марсоход вот здесь:
Если у вас есть плата Марсоход, то вы можете взять наш проект, и записать в чип CPLD новую прошивку. Изготовьте преобразователь уровней, как было описано раньше.
Теперь можно подключать плату и управлять с ее помощью моторчиком и слушать ее датчики – четыре кнопочки!
Как я уже говорил раньше, на настоящей плате ScratchBoard датчики A, B, C, D – это аналоговые датчики и они должны передавать значение от 0 до 1023. Программа Scratch масштабирует эти значения от 0 до 100. Поскольку у нас есть четыре кнопочки на плате Марсоход, и у них есть только два состояния: включен или выключен, то программа Scratch будет видеть значения от этих датчиков только либо 0 либо 100. Промежуточных значений не будет.
Давайте попробуем сделать пробную программу для Scratch.
Создадим объект Лампочка с двумя Костюмами: это внешний вид «горит» и «не горит».
А скрипт для этого объекта сделаем очень простой:
Лампочка будет загораться, если на плате Марсоход нажата первая кнопочка.
Теперь продублируем этот объект еще три раза. Всего у нас будет четыре лампочки по числу кнопочек на плате. Измените в скриптах новых объектов условие «если». Для каждой лампочки должен быть свой сенсор: сопротивление-A, сопротивление-B, сопротивление-C, сопротивление-D.
Сделаем еще один объект Мотор.
У него будет три Костюма: "включен и крутится вправо", "включен и крутится влево", "не крутится". Вот так:
Скрипт для Мотора сделаем вот такой:
Когда нажмем на клавиатуре компьютера кнопочку влево, то мотор будет крутиться в одну сторону, если нажмем кнопку вправо, то мотор начнет крутиться в другую сторону. Если ничего не нажато, то мотор остановится.
Можно проверять!
Подключаем плату Марсоход. Подаем на нее питание. Включаем сенсоры в программе Scratch и запускаем скрипты. Вот что получилось:
Подробнее...