Программист
0,0
рейтинг
16 января 2012 в 13:56

Говорящая машинка из старого мобильника из песочницы

Привет, Хабр. Наверное у каждого человека дома валяются старые мобильники. Сдохла батарея, поцарапался экран, просто надоел.

В ряде случаев такой «старый» телефон — довольно продвинутое устройство.
Например бывший дочкин SonyEricsson Z310i — java, bluetooth, камера, gprs. Отчего бы не использовать его для воплощения своей старой детской мечты — радиоуправляемая машинка с камерой на борту? И вот сошлось вместе несколько обстоятельств: валяется телефон, откуда-то взялась сломанная машинка без пульта, подрос младший сын, на хабре попалась статья, в интернете нашелся сайт.

Итак, алгоритм:


  • пользователь П нажимает кнопки на сотовом телефоне Т1
  • Т1 передает команды по bluetooth
  • машинка везет на себе сотовый телефон Т2, который их получает и передает их по звуковому каналу(проводной hands-free) на микроконтроллер
  • МК, в свою очередь, распознает команды и управляет двигателями, лампочками и всем прочим.
  • Т2 снимает на камеру происходящее и передает обратно на Т1,
  • Т1 передает полученное изображение по оптической связи П
  • ????
  • П радуется


Инструменты и материалы


В один из магазинов ушел заказ, и через некоторое время я стал обладателем отладочной платы STM32L-DISCOVERY, макетной платы, драйвера двигателя L293D, и всякой разъемно-проводной мелочи.
В качестве первого шага была заклеена сломанная подвеска машинки, проверены двигатели, измерено их потребление. В интернете найдена документация на плату, процессор и L293D.
В качестве IDE был выбран IAR.

Действия руками


Естественно, были пройдены все этапы программирования мк — поморгать, написать что-то свое на жкд, погудеть. Для отладки работы периферии очень помогли тестер, детский электронный конструктор и старенький осциллограф.
image
Вообще написание кода на мк состоит в основном из подтачивания и комбинирования стандартных примеров.
Следующий этап — приготовить плату, припаять драйвер двигателя и попробовать реальное управление. По краям платы мк выведены почти все его ноги на довольно длинные пины со стандартным шагом 2.5 мм, причем и вверх, и вниз. Для подключения на весу использовались разъемы PBS-6. Готовое устройство на самой машинке — это кусок макетной платы с такими же разъемами, т. е. самопальный шилдбоард. И вот драйвер двигателя подключен, и мы уже моргаем лампочкой накаливания из конструктора. Теперь припаиваем питание на разъем под ножки GND и EXT_5V. Очень удачно, что питание и управляющие ноги стоят по диагонали — платы неплохо держатся вместе всего на двух разъемах. Припаиваем батарейный блок, провода к моторам(забавно, что их можно путать — перепрограммировать контроллер проще, чем распутывать проводки). Небольшая программка — и вот уже слепая и глухая машинка ездит туда-сюда, и исполняет разворот в 12 приемов.

Командование


После недолгого гугления и задумчивых взглядов в осциллограф было принято простейшее решение — команды кодируются синусоидальными сигналами разной частоты. Со стороны телефона частоты формируются проигрыванием WAV потока 8бит, моно, 8кГц дискретизации. В качестве командных частот выбраны делители частоты дискретизации, т.е. 160, 200, 250...2000 Гц. Таким образом, на данном этапе мы имеем 9 команд, из которых 7 используются для движения(вперед, назад, вперед-влево, назад-вправо… стоп).
Для измерения частоты на стороне МК применяется таймер, прерывание и компаратор. Отрицательный вход компаратора коммутирован на внутреннее опорное напряжение 0.3В(Vref/4), выход компаратора настроен на вызов прерывания при прохождении переднего фронта импульса. 16-битный таймер считает импульсы частоты 8МГц. В момент прерывания считывается значение счетчика таймера и сравнивается с предыдущим отсчетом. В случае обнаружения 5 примерно одинаковых импульсов подряд команда считается принятой. Для того, чтобы машинка остановилась в случае выхода из зоны приема, телефон-пульт в перерывах между командами периодически передает нулевые байты. Если телефон-приемник не получает никаких команд в течении примерно 200 мсек, двигатели выключаются.

И на этой радостной ноте начинаются проблемы.


Оказалось, что выбранный телефон не поддерживает bluetooth из-под java. у другого полудохлого телефона — SonyEricsson C702 — так завалена Ачх в верхих частотах, что команды не опознаются. Третий телефон — мой основной Samsung B2100 -обладает невероятным количеством багов в java, что с ним вообще почти невозможно работать. Камера на C702 умудряется выдавать какие-то невероятные по размеру фотографии, которые затем долго и нудно передаются по bluetooth.
Кроме этого всего, при отладке схемы воспроизведения звука я неудачно ткнул щупом осциллографа в плату. Веселый огонек и струйка дыма заставила было меня попрощаться с платой МК, но оказалось, что все не так страшно. Я всего лишь спалил диод в цепи питания программатора и один из выходов МК. Теперь для прошивки и отладки программы необходимо подключать не только USB, но и батареечное питание, а прожженный выход пришлось перепаять на свободный исправный пин.
image

В результате в начальную задумку были внесены коррективы — напряжение в звуковом тракте сравнивается с землей, а фотографии, полученные с камеры пережимаются в JPEG 100*160пикс перед передачей.

Звуковой тракт, свинец и фары


Наличие на борту контроллера ЦАП и довольно большого количества флеш-памяти(128кб) навело на мысль, что можно научить машинку говорить. Для этого мы с сынишкой записали 2 WAV-файла, и добавили их в программу. Записывать звуки пришлось на нетбуке жены с Windows XP, т.к. стандартными средствами семерки невозможно записать WAV файл в формате PCM 8bit. (кстати, подскажите программку попроще для преобразования звуковых файлов). Для усиления звука применяется микросхема к174ун24, звук выводится на 2 динамика 8Ом 1Вт.

Страничка проекта на SourceForge

В качестве последнего штриха пальчиковые аккумуляторы были заменены на 6В 4.7Ач свинцовую батарею. Параллельно основному двигателю были впаяны белые светодиоды в качестве фар. Машинка приобрела «пацанский» ксенон, массу и динамику настоящего джипа, просадку подвески и рев мотора.

И вот проект завершился.



Машинка умеет передвигаться по команде, снимает фотографии и глаголет нечеловеческим голосом. Этот проект был моим первым шагом в мир кустарной робототехники, который свел меня с замечательными людьми и заново научил держать в руках паяльник. Однако продолжения у этого проекта не будет, ибо начальная идея себя не очень-то оправдала.

Платформа j2me продемонстрировала всю свою врожденную убогость.

Несмотря на вроде бы унифицированное и разветвленное api, засилие багов и недоделок в реализациях не позволяет использовать все заложенные возможности. Система защиты все время запрашивает доступ к ресурсам телефона. На пульте управления с этим можно смириться, но на машинке — мешает жутко. Обработка и передача даже маленьких картинок занимает безумное время — около 5 секунд. Говорить о передаче видео или картинок в сколько-нибудь реальном времени не имеет смысла.

Железо

Микросхема L293D очень удобна в использовании, но, к сожалению, выполнена на биполярных транзисторах, и при напряжении питания 5-6В половина энергии батарей уходит на обогрев мирового пространства. Ну а недорогая машинка из супермаркета не является хорошей механической платформой.

Осознав все это, я решил прекратить развитие проекта, а за первым шагом последовал второй — вайфай, камеры и более продвинутая электроника.
Илья Моторный @Elmot
карма
30,5
рейтинг 0,0
Программист
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (22)

  • +3
    так завалена Ачх в верхих частотах, что команды не опознаются.

    Для кодирования команд можно использовать DTMF. Стандарт специально рассчитан на гнилые телефонные линии с плохой АЧХ и искажениями. Там используются двухчастотные сигналы, плюс все частоты подобраны не кратными друг другу.
    Есть куча готовых DTMF-декодеров, как аппаратных, так и программных под всевозможные платформы, включая STM32.
    • +1
      Да, была такая мысль, но в данном случае тонового одноканального управления достаточно, а в других проектах — посмотрим, может быть и DTMF. Да и линия в данном случае — полметра, так что сильно от помех защищаться нет необходимости.
      А заваленная АЧХ — это просто амплитуда сигнала на высоких частотах не доставала до порогового значения компаратора. Поставил компаратор на 0 и жизнь тут же наладилась.
  • +4
    Круто!
    Очень рад что кому-то пригодилась моя статья и очень интересно было почитать вашу!
    • +1
      Еще как пригодилась! С тех пор фанат стм. У меня дома уже 5 плат дискавери, L и F4. Чуть не купился на дуину без Вашей статьи:)
    • 0
      Напишите продолжение по F4. Отличная штука по соотношению цена/возможности.
      • 0
        А можно ссылку, что за F4 такая?
        • +1
          STM32F4-Discovery
          Вышла в ноябре. Зверский агрегат.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      А вот за это спасибо! Я такую штуку искал-искал и не нашел. Буду знать. На борту именно сонерик C702.
  • 0
    Разные штуки, которые можно использовать для шпионажа, ЕМНИП, в России запрещены для продажи. Поэтому за такими штуковинами будущее шпионажа :)
    • 0
      Story to be continued.
  • 0
    Взрослый у вас «старый осциллограф».
    • 0
      Что богтесть дал.
  • 0
    Недавно читал памятку гражданам о предотвращении террористических актов. Будьте бдительны, согласно этой памятке вы — чуть ли не террорист :D
    • +1
      Тсссс…
      Не палите малину!
  • 0
    А нельзя ли заюзать в качестве двигателя моторчик от виброзвонка? Тогда теоретически все упрощается. Прикрутить к нему колесики и ездить :)
    • 0
      А что, собственно, упростится? Схемотехника та же, а моторчик от виброзвонка хилый и высокооборотный. На нем ничего не поедет без редуктора. А мутить редуктор — будет только сложнее. Гораздо проще пользоваться готовой механикой, по крайней мере мне лично.
      • 0
        >>А что, собственно, упростится

        Не нужна никакая дополнительная схемотехника, все есть на борту машинки. Только трансмиссия. Правда неясно как рулить :)
        • 0
          >>на борту машинки
          простите, телефона
        • 0
          Нет, не пойдет. У программирования моторчика слишком много ограничений. Ну и рулить, действительно, нечем. И телефон надо распатронить. В моем случае обошлось без вивисекции.
  • 0
    > В моем случае обошлось без вивисекции.

    И это немного жаль ;-). Я думал, вы и так знали про типичные проблемы управления Bluetooth'ом через Java в телефонах и поэтому сразу перешивали или модифицировали аппаратно.
    • 0
      Не, старые телефоны перешивать — это геронтофилия электронная. Зато я себе купил китайский андроид и потираю руки. Думаю, там проблем будет куда меньше.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.