Говорящая Машина Из Старого Сотового Телефона

Привет, Хабр.

Наверное, у каждого человека дома завалялись старые мобильные телефоны.

Аккумулятор сдох, экран поцарапался, мне это просто надоело.

В ряде случаев такой «старый» телефон представляет собой достаточно продвинутое устройство.

Например, бывший SonyEricsson Z310i моей дочери - ява, блютуз, камера, gprs. Почему бы не использовать его, чтобы воплотить в жизнь свою давнюю детскую мечту – радиоуправляемую машину с камерой на борту? И тут сошлось несколько обстоятельств: валялся телефон, откуда-то взялась сломанная машинка без пульта, вырос младший сын, попал в хакерскую ловушку.

статья , нашел в Интернете Веб-сайт .



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

  • пользователь P нажимает кнопки на мобильном телефоне T1
  • Т1 передает команды через Bluetooth
  • машина оснащена сотовым телефоном Т2, который принимает их и передает по аудиоканалу (проводной в режиме громкой связи) на микроконтроллер.

  • МК, в свою очередь, распознает команды и управляет моторами, лампочками и всем остальным.

  • Т2 снимает происходящее на камеру и передает обратно на Т1,
  • Т1 передает полученное изображение по оптической связи P
  • ????
  • П радуется


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

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

В качестве первого шага была загерметизирована сломанная подвеска автомобиля, проверены двигатели и замерен их расход. Документацию на плату, процессор и L293D нашла в интернете.

В качестве IDE был выбран IAR.

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

Естественно, все этапы программирования МК были пройдены - моргание, запись чего-то на ЖКИ, пищание.

Тестер, детский электронный конструктор и старый осциллограф очень помогли в отладке работы периферии.



Говорящая машина из старого сотового телефона

В целом написание кода в МК заключается в основном в доработке и объединении стандартных примеров.

Следующий шаг — подготовить плату, припаять драйвер мотора и попробовать настоящее управление.

По краям платы МК почти все ее ножки выложены на достаточно длинных штырях со стандартным шагом 2,5 мм как вверх, так и вниз.

Для подвесных соединений использовались соединители ПБС-6. Готовое устройство на самой машине представляет собой кусок макетной платы с такими же разъемами, т.е.

самодельную щитовую плату.

И вот драйвер моторчика подключен, и мы уже моргаем лампочкой накаливания от конструктора.

Теперь припаиваем питание к разъему под пины GND и EXT_5V. Очень повезло, что ножки блока питания и управления расположены по диагонали — платы хорошо скрепляются всего двумя разъемами.

Припаиваем к моторчикам аккумулятор и провода (забавно, что их можно перепутать — перепрограммировать контроллер проще, чем распутывать провода).

Небольшая программа — и вот слепая и глухая машинка ездит туда-сюда, и выполняет поворот за 12 шагов.



Команда

После некоторого гугления и вдумчивых взглядов на осциллограф было принято самое простое решение — команды кодируются синусоидальными сигналами разных частот. На стороне телефона частоты формируются путем воспроизведения WAV-потока 8 бит, моно, сэмплирование 8 кГц.

В качестве командных частот выбираются делители частоты дискретизации, т.е.

160, 200, 250.2000 Гц.

Таким образом, на данном этапе у нас есть 9 команд, из которых 7 используются для движения (вперед, назад, вперед-влево, назад-вправо.

стоп).

Для измерения частоты на стороне МК используются таймер, прерывание и компаратор.

Отрицательный вход компаратора переключается на внутреннее опорное напряжение 0,3 В (Vref/4), выход компаратора настроен на запуск прерывания при прохождении переднего фронта импульса.

16-битный таймер считает импульсы с частотой 8 МГц.

В момент прерывания значение счетчика таймера считывается и сравнивается с предыдущим отсчетом.

Если подряд обнаружено 5 примерно одинаковых импульсов, команда считается принятой.

Чтобы машина остановилась в случае выхода из зоны приема, телефонный пульт в перерывах между командами периодически передает нулевые байты.

Если телефон-приемник не получает никаких команд в течение примерно 200 мс, моторы отключаются.



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

Оказалось, что выбранный телефон не поддерживает блютуз от явы.

Другой полуживой телефон - SonyEricsson C702 - имеет настолько высокие АЧХ, что команды не распознаются.

Третий телефон - мой основной Samsung B2100 - имеет невероятное количество ошибок в java, что работать с ним практически невозможно.

Камера C702 умудряется делать фотографии невероятного размера, которые затем долго и утомительно передаются через Bluetooth. Помимо всего этого, при отладке схемы воспроизведения звука я неудачно ткнул щупом осциллографа в плату.

Веселый свет и струйка дыма заставили меня попрощаться с доской МК, но оказалось, что все не так уж и страшно.

У меня просто сгорел диод в цепи питания программатора и на одном из выходов МК.

Теперь для прошивки и отладки программы необходимо подключать не только USB, но и аккумулятор, а сгоревший вывод пришлось припаивать к свободному рабочему контакту.



Говорящая машина из старого сотового телефона

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



Звуковой тракт, провод и фары

Наличие на борту ЦАП-контроллера и достаточно большого объёма флеш-памяти (128кб) позволяло предположить, что машину можно научить говорить.

Для этого мы с сыном записали 2 файла WAV и добавили их в программу.

Пришлось записывать звуки на нетбук жены с Windows XP, потому что.

Стандартными средствами 7 невозможно записать WAV-файл в формате PCM 8bit. (кстати, подскажите более простую программу для конвертации звуковых файлов).

Для усиления звука использована микросхема к174ун24, звук выводится на 2 динамика 8 Ом 1 Вт. Страница проекта на SourceForge В качестве последнего штриха батарейки типа АА были заменены на свинцовые аккумуляторы напряжением 6 В и емкостью 4,7 Ач.

Белые светодиоды были припаяны параллельно основному двигателю в качестве фар.

Автомобиль обзавелся «мальчишеским» ксеноном, весом и динамикой настоящего джипа, провисающей подвеской и ревом двигателя.



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

Машина может двигаться по команде, фотографировать и говорить нечеловеческим голосом.

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

Однако продолжения этот проект не получит, поскольку первоначальная идея себя не особо оправдала.



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

Несмотря на, казалось бы, унифицированный и разветвленный API, распространенность ошибок и недостатков в реализациях не позволяет использовать все встроенные возможности.

Система безопасности постоянно запрашивает доступ к ресурсам телефона.

На панели управления с этим можно смириться, а вот на машинке это жутко раздражает. Обработка и передача даже небольших снимков занимает безумное количество времени – около 5 секунд. Говорить о передаче видео или изображений в каком-либо реальном времени нет смысла.



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

Что ж, недорогая машинка из супермаркета – это не хорошая механическая платформа.

Осознав все это, я решил прекратить разработку проекта, и за первым шагом последовал второй — Wi-Fi, камеры и более совершенная электроника.

Теги: #arm #DIY или Сделай сам #diy #Bluetooth #j2me #stm32l-discovery

Вместе с данным постом часто просматривают: