МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

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

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

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

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

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

Вообще стандарт 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 для изменения свойств входов микросхемы.

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

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

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

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

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

Проект для платы Марсоход уже готов. Вот он: icon Машинка управляемая через Bluetooth (114.5 Кбайт) За основу был взят мой другой проект. Там уже была связь с последовательным портом и был реализован протокол платы 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 - может будет лучше реагировать на датчики. Ну и с датчикаи нужно что-то делать, чтобы не так сильно зависить от внешней освещенности.

 

Комментарии  

-1 #18 stas 14.09.2011 18:23
а как эт всё заказать и по какой ценя?
-1 #17 Алексей 13.03.2011 15:18
Юрий :-) бесс[censored], именно по этому Фау-1 не всегда долетали до цели, но бывало и попадали. В конце концов на дворе 21 век и доступны датчики ускорений и гироскопы MEMS. :) Остается решить только математическую задачку. Кстати Николай говорил что идея "отрастить мозг" марсоходу до сих пор вас обоих не покинула, жду не дождусь чего то более интересного чем в хлам урезанный AVR. Тем паче что существуют архитектуры вычислительных ядер и более приемлемые для 240 LC как например насчет MOS 6502? :-) Был бы рад помочь если надумаете :)
0 #16 ю р и й 13.03.2011 14:51
Цитирую Алексей:
Юрий можно как на Фау-1 :) управлять инерциально, тогда нужна лишь одна исходная точка - стартовая площадка, все остальное это дельты. В качестве инерциального датчика можно применить либо энкодер (без проскальзывания) либо акселерометр.

Энкодер позволит определить только длину пути , а реальное местоположение может зависеть от массы факторов - неодинаковости тяги двигателей, неоднородных свойствах поверхности, ее наклон,
заряд батареи и тд и тп.
0 #15 Алексей 13.03.2011 13:00
Юрий можно как на Фау-1 :) управлять инерциально, тогда нужна лишь одна исходная точка - стартовая площадка, все остальное это дельты. В качестве инерциального датчика можно применить либо энкодер (без проскальзывания ) либо акселерометр.
0 #14 ю р и й 13.03.2011 12:25
Цитирую андрей:
я конечно извиняюсь за своё невежество но реально можно что бы эта гусенечная система каталась по полу так как я нарисую на мониторе?

В общем случае задача довольно сложная, поскольку
нужна система позиционировани я. В частном - например
можно использовать шахматное поле или оптическую
мышь для отслеживания местоположения. Постановка
задачи нужна более конкретная.
0 #13 андрей 13.03.2011 11:18
я конечно извиняюсь за своё невежество но реально можно что бы эта гусенечная система каталась по полу так как я нарисую на мониторе?
0 #12 Ю р и й 10.03.2011 09:09
Цитирую Александр:
А из каких соображений вы решили поставить резисторы между 12 и 13 контактами и DP DN?
Напрямую нельзя?

Чтобы сделать шилд более универсальным.В
данном конкретном примере используются DP и DN,
а в каком-то другом могут понадобиться другие пины,
например F0,F1.Тогда наличие этих резисторов
уже желательно, в целях безопасности.
0 #11 Александр 10.03.2011 08:35
А из каких соображений вы решили поставить резисторы между 12 и 13 контактами и DP DN?
Напрямую нельзя?
0 #10 Роман 07.03.2011 06:03
А кто же на марсе такие линии будет рисовать?
0 #9 Александр 06.03.2011 18:37
Цитирую Алексей:
Александр есть много стандартных ресурсов для поисков комплектующих (радиодеталей) например efind.ru
http://www.efind.ru/icsearch/?search=LMX9838


Алексей! Спасибо. У меня есть пара вопросов. Можно задать их по почте? Кинь мне сообщение чтобы я ответил shururik@gmail.com
0 #8 Алексей 06.03.2011 17:57
Александр есть много стандартных ресурсов для поисков комплектующих (радиодеталей) например efind.ru
http://www.efind.ru/icsearch/?search=LMX9838
0 #7 Александр 06.03.2011 17:11
Цитирую Олег:
Нашел

Где нашел-то?
(извините за несколько сообщений почти одинаковых, просто хотелось бы чтобы человеку на почту пришло уведомление о том, что его комментировали)
0 #6 Александр 06.03.2011 17:09
Где ты нашел?
0 #5 Александр 06.03.2011 17:09
И правда - где купить-то? Поиск по интернету - ничего не дает
0 #4 Олег 19.02.2011 11:58
Нашел
0 #3 Олег 19.02.2011 02:21
Добрый день. Хочу повторить вашу разработку, сделать девайс с обратной связью через bluetooth. Но не могу найти в продаже модули LMX9838. Не подскажете какой-нибудь интернет-магази н?
0 #2 nckm 05.02.2011 15:11
Цитирую Денис:
А где купить траки такие с двигателями???

я брал из старых машинок, но в принципе есть в интернете магазины, например http://www.robotshop.su/e-store/catalog/198/
0 #1 Денис 04.02.2011 10:29
А где купить траки такие с двигателями???

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


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход Машинка, управляемая с компьютера через Bluetooth