МАРСОХОД

Open Source Hardware Project

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

Машинка, управляемая с компьютера через 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 - может будет лучше реагировать на датчики. Ну и с датчикаи нужно что-то делать, чтобы не так сильно зависить от внешней освещенности.

 

Комментарии  

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

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

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

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


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

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

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

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


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


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