Мы уже делали разные автономные машинки, которые ездят вдоль полосы, выбираются из лабиринта. Делали мы и машинки управляемые с IR пульта от телевизора (смотрите здесь и здесь).
Теперь будем делать "радиоуправление", а точнее управление через Bluetooth. В конечном счете цель такая - на компьютере с Bluetooth запускаем среду программирования для детей Scratch. Устанавливаем связь через Bluetooth между компьютером и машинкой. Тогда пишем программу на Scratch, которая управляет машинкой.
Мы раздобыли парочку модулей Bluetooth LMX9838 (National Semiconductor) для наших экспериментов. Документацию на этот модуль можно взять на нашем сайте (
Вообще стандарт Bluetooth включает в себя несколько так называемых "профилей" работы устройства. Один из профилей - режим работы как виртуальный "последовательный порт". Модуль LMX9838 может работать в этом режиме и у него есть контакты "как у последовательного порта", а именно нас интересуют линии приема (RX) и передачи (TX) данных. Ну а плату Марсоход к последовательному порту мы уже подключали.
Я попросил Юру спаять мне платку с этим модулем, чтобы я подключил ее к плате Марсоход. И вот что у него получилось (вид сверху):
И вот вид снизу:
Обратите внимание, что корпус этого модуля Bluetooth выполнен по технологии BGA (Ball Grid Array) - все контакты находятся снизу. На первый взгляд припаять радиолюбителю такой модуль не реально. Однако не все так сложно.
Во-первых, очень многие контакты не используются. Например, группа контактов в центре, номера 41-70 не используются вообще. Так же не используются контакты с номерами 33-40. Таким образом, нужные нам контакты есть только по краям микросхемы. Монтаж модуля существенно упрощается если его установить контактами не к плате, а перевернуть. Припаивать проводки сверху. Схема платки, которая была спаяна нами вот такая:
Модуль включенный по этой схеме работает на прием и передачу данных последовательного порта на скорости 9600 бит/сек, 8 бит данных без бита четности с одним стоп битом. Если изменить схему, изменить подключение контактов OP4 и OP5 модуля LMX9838, то скорость работы можно повысить, например до 115200 или даже больше.
Платка с Bluetooth модулем устанавливается на плату Марсоход с одноименными контактами: GND, DP, DN. Еще один проводок с платки (это питание для нашего модуля Bluetooth) подключаю к ближайшему контакту VCC на плате Марсоход.
При подаче питания на модуль Bluetooth, подключенного по схеме представленной выше, он сразу готов к работе, что очень приятно. Никакого дополнительного программирования модуля LMX9838 не требуется. Если теперь на компьютере (с установленым Bluetooth) сделать поиск Bluetooth устройств в округе, то вы наверняка найдете свое новое устройство.
Конечно виндовс попросит ввести "код доступа" к устройству - наберите четыре нуля "0000" (так написано в документации к модулю). Я попробовал устанавливать связь нашего модуля с Windows 7 - тот сразу находит модуль и после ввода кода "0000" создает на компьютере виртуальный последовательный порт. Виндовс говорит вам какой номер у получившегося порта. В Windows XP то же примерно так же. Только вопросов он задает чуть больше. Интересно, что однажды подключенное Bluetooth устройство запоминается операционной системой. В следующий раз подключится гораздо проще и уже не нужно вводить никаких кодов.
О том, что связь установлена можно догадаться по моргающему светодиоду на нашей платке с модулем Bluetooth.
Теперь поговорим о "глазах" для нашей машинки. В принципе ничего нового я тут не расскажу. Я использую фототранзистор и светодиод для подсветки, как мы это уже делали много раз, например, здесь и здесь (только там использовались оптические, инфракрасные датчики от принтера). У меня светодиод подключен через резистор к напряжению питания. Он просто светит вниз на поверхность, по которой будет ехать машинка. Если внизу поверхность отражает хорошо, то фототранзистор увидит светлое пятно и откроется. Я подключаю два фототранзистора параллельно кнопочкам платы Марсоход key0 и key1. Таким образом, фототранзистор, который видит свет, открывается и замыкает кнопочку. Нужно заметить, что входы key[3:0] внутри микросхемы CPLD подтянуты к напряжению питания VCC внутренним резистором - это задается в свойствах входов CPLD в проекте Quartus II. Используется Assignment Editor для изменения свойств входов микросхемы.
Вот схема для "глаз":
То, что я спаял выглядит вот так:
К сожалению вот эти глаза не очень стабильно работают. Тут нам есть нам чем подумать. Главная проблема - чувствительность. Чувствительность наших датчиков зависит от внешней освещенности, от напряжения питания платы, возможно еще от каких-то факторов. Я для себя понял, что нужно проводить эксперименты в комнате, куда не падает прямой солнечный свет. Иначе датчики срабатывают в произвольные моменты времени и это не приятно.
Проект для платы Марсоход уже готов. Вот он:
и переназначил вход RX и выход TX на другие ноги CPLD на DN и DP соответственно.
Так же была изменена логика работы мотора.
Дело в том, что программа Scratch, к сожалению, может управлять только одним мотором. Для одного мотора в программе Scratch можно установить направление вращения "туда"-"сюда", можно его включить или выключить, а так же задавать "мощность" в виде числа от нуля до ста. Эти параметры передаются через последовательный порт в нашу плату. Протокол передачи данных в обе стороны я уже описывал в других статьях.
Я решил, что будет довольно логично сделать следующим образом. Предположим, что мощность одного мотора может задаваться как 0 (выключить), 50(работать) и 100 (сильно работать). Предположим, что мощность второго мотора зависит от этих же значений, но в обратной зависимости: 0(сильно работать), 50(работать), 100(выключить).
Тогда чтобы ехать прямо нужно включить мощность 50, если нужно поворачивать, то 0 или 100. Вот примерно такая логика была определена в моем проекте для платы Марсоход.
Вот машинка в сборе:
Вид спереди:
Вид на установленый на плату Марсоход модуль Bluetooth:
Ну вот теперь, когда машинка собрана, плата Марсоход зашита новым проектом, можно отдавать ее для программирования детям. С моей помощью ими была написана вот такая программа на Scratch.
На листе бумаги рисуем восьмерку - черной линией, толщиной примерно 2 сантиметра.
Устанавливаем машинку на дорожку, подаем питание, устанавливаем связь Bluetooth между машинкой и компьютером, и запускаем программу Scratch на компьютере!
Вообще-то все работает, но пожалуй на будущее можно внести некоторые изменения. Возможно будет лучше, если скорость связи между модулем Bluetooth и платой Марсоход повысить до 115200 - может будет лучше реагировать на датчики. Ну и с датчикаи нужно что-то делать, чтобы не так сильно зависить от внешней освещенности.
Подробнее...