Машинка, управляемая с компьютера через Bluetooth

Мы уже делали разные автономные машинки, которые ездят вдоль полосы, выбираются из лабиринта. Делали мы и машинки управляемые с IR пульта от телевизора (смотрите здесь и здесь).

Bluetooth и плата Марсоход

Теперь будем делать "радиоуправление", а точнее управление через Bluetooth. В конечном счете цель такая - на компьютере с Bluetooth запускаем среду программирования для детей Scratch. Устанавливаем связь через Bluetooth между компьютером и машинкой. Тогда пишем программу на Scratch, которая управляет машинкой.

Мы раздобыли парочку модулей Bluetooth LMX9838 (National Semiconductor) для наших экспериментов. Документацию на этот модуль можно взять на нашем сайте (

Модуль Bluetooth ( 1202427 bytes )
). Этот модуль замечателен тем, что является законченным решением - в одном корпусе микросхемы упакованы и контроллер, и радиомодуль, и антенна.

Вообще стандарт Bluetooth включает в себя несколько так называемых "профилей" работы устройства. Один из профилей - режим работы как виртуальный "последовательный порт". Модуль LMX9838 может работать в этом режиме и у него есть контакты "как у последовательного порта", а именно нас интересуют линии приема (RX) и передачи (TX) данных. Ну а плату Марсоход к последовательному порту мы уже подключали.

Я попросил Юру спаять мне платку с этим модулем, чтобы я подключил ее к плате Марсоход. И вот что у него получилось (вид сверху):

Припаиваем модуль Bluetooth LMX9838

И вот вид снизу:

Припаиваем модуль Bluetooth LMX9838

Обратите внимание, что корпус этого модуля Bluetooth выполнен по технологии BGA (Ball Grid Array) - все контакты находятся снизу. На первый взгляд припаять радиолюбителю такой модуль не реально. Однако не все так сложно.

Во-первых, очень многие контакты не используются. Например, группа контактов в центре, номера 41-70 не используются вообще. Так же не используются контакты с номерами 33-40. Таким образом, нужные нам контакты есть только по краям микросхемы. Монтаж модуля существенно упрощается если его установить контактами не к плате, а перевернуть. Припаивать проводки сверху. Схема платки, которая была спаяна нами вот такая:

Припаиваем модуль Bluetooth LMX9838 - принципиальная схема
Модуль включенный по этой схеме работает на прием и передачу данных последовательного порта на скорости 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 для изменения свойств входов микросхемы.

Вот схема для "глаз":

Оптические датчики для машинки-робота

То, что я спаял выглядит вот так:

Оптические датчики для машинки с платой Марсоход

К сожалению вот эти глаза не очень стабильно работают. Тут нам есть нам чем подумать. Главная проблема - чувствительность. Чувствительность наших датчиков зависит от внешней освещенности, от напряжения питания платы, возможно еще от каких-то факторов. Я для себя понял, что нужно проводить эксперименты в комнате, куда не падает прямой солнечный свет. Иначе датчики срабатывают в произвольные моменты времени и это не приятно.

Проект для платы Марсоход уже готов. Вот он:

За основу был взят мой другой проект. Там уже была связь с последовательным портом и был реализован протокол платы ScratchBoard, которая поддерживается средой программирования для детей Scratch. Я изменил скорость связи
и переназначил вход RX и выход TX на другие ноги CPLD на DN и DP соответственно.
Так же была изменена логика работы мотора.

Дело в том, что программа Scratch, к сожалению, может управлять только одним мотором. Для одного мотора в программе Scratch можно установить направление вращения "туда"-"сюда", можно его включить или выключить, а так же задавать "мощность" в виде числа от нуля до ста. Эти параметры передаются через последовательный порт в нашу плату. Протокол передачи данных в обе стороны я уже описывал в других статьях.

Я решил, что будет довольно логично сделать следующим образом. Предположим, что мощность одного мотора может задаваться как 0 (выключить), 50(работать) и 100 (сильно работать). Предположим, что мощность второго мотора зависит от этих же значений, но в обратной зависимости: 0(сильно работать), 50(работать), 100(выключить).

Тогда чтобы ехать прямо нужно включить мощность 50, если нужно поворачивать, то 0 или 100. Вот примерно такая логика была определена в моем проекте для платы Марсоход.

Вот машинка в сборе:

Машинка управляемая платой Марсоход с модулем Bluetooth

Вид спереди:

Машинка управляемая платой Марсоход с модулем Bluetooth

Вид на установленый на плату Марсоход модуль Bluetooth:

Машинка управляемая платой Марсоход с модулем Bluetooth

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

Программа на Scratch для управления машинкой движущейся по полосе

На листе бумаги рисуем восьмерку - черной линией, толщиной примерно 2 сантиметра.

Устанавливаем машинку на дорожку, подаем питание, устанавливаем связь Bluetooth между машинкой и компьютером, и запускаем программу Scratch на компьютере!

Вообще-то все работает, но пожалуй на будущее можно внести некоторые изменения. Возможно будет лучше, если скорость связи между модулем Bluetooth и платой Марсоход повысить до 115200 - может будет лучше реагировать на датчики. Ну и с датчикаи нужно что-то делать, чтобы не так сильно зависить от внешней освещенности.

 


Добавить комментарий