Введение
В данном проекте описано создание Wi-Fi машинки с управлением моделькой автомобиля через интернет или при помощи ноутбука с Wi-Fi на расстоянии до 500м. На машинке установлена камера, работающая в реальном времени, что позволяет управлять машинкой глядя в экран ноутбука.
Некоторое время назад я нашел маршрутизатор Linksys WRT54GL. Он очень удобен для хака и модификации, т.к. он работает под управлением Linux. Для данного маршрутизатора была написана куча альтернативных прошивок. В этом проекте используется настраиваемая прошивка Linux Open-WRT. Кроме больших возможностей модификации программного обеспечения этого маршрутизатора, есть куча возможных аппаратных модификаций и хаков. То есть в моем распоряжении был дешевый и взламываемый маршрутизатор со встроенным Linux — я знал, что делать что-то с ним хорошо и удобно. Таким образом родилась идея Wi-Fi машинки.
Целью данной статьи является предоставить общий обзор проекта и показать некоторые особенности реализации программной и электронной части. Эта статья не является руководством по сборке машинки шаг за шагом, но имеет достаточно информации для людей с хорошей мотивацией и базовыми знаниями в электронике и программировании. Все программы написаны на условиях Открытого лицензионного соглашения GNU v2, так что код можно свободно использовать и улучшать.
Аппаратная часть
Машинка
Добавление сетевой камеры, маршрутизатора, тяжелых батарей, дополнительных схем, и кучи проводов добавляют много лишнего веса, а большинство моделей для этого не предназначено. Потому из-за всех дополнений необходимо найти довольно большую радиоуправляемую машинку. В интернете можно найти б/у радиоуправляемые транспортные средства без пульта за 200-300 руб. Я купил несколько машинок для того, чтобы вытащить из них детали. Транспорт размера 1:10 или больше вполне подойдет, и вероятно вы не захотите меньше. Я купил эту машинку за 150 руб.
Я разобрал около 20 радиоуправляемых автомобилей. Почти в каждом из них используется чип Realtek RX2/TX2 или его полные аналоги с аналогичной цоколевкой. Документацию на них можно найти в интернете или по ссылкам. Это означает, что машинкой очень легко управлять при помощи штатной электроники без добавления собственных схем. Можно подключить микроконтроллер непосредственно к выводам (вперед, назад, влево, вправо) и управлять автомобилем. Возможность использования штатной электроники автомобиля экономит много сил и времени.
Маршрутизатор
Я модифицировал свой WRT54GL так, что он имеет 2 последовательных порта и SD карту на 1Гб (работает как жесткий диск на 1 Гб). В этом проекте SD карта не используется, но используется один из последовательных портов. У моего маршрутизатора есть два последовательных порта: консольный порт и TTS/1, который мы и будем использовать. Для этого проекта я использую OpenWRT White Russian v0.9. Есть и более поздние версии, но для этого проекта нам они не нужны. В руководстве по компиляции программ (смотрите ниже), используется эта версия, поэтому я выбрал её.
Ниже в этой статье будут ссылки и информация, которая поможет вам подключить последовательный порт и заставить его работать.
Выбор микроконтроллера
Я оценил три различных микроконтроллера для этого проекта. Ниже показано краткое изложение оценки.
Микроконтроллер
PIC16F628A
Arduino (ATmega168)
Freeduino MaxSerial
AVR Butterfly (ATmega169)
За
Цена.
Уровень программного управления.
Очень прост в программировании (C со множеством встроенных библиотек).
Интегрированный последовательный интерфейс.
Готовый комплект разработчика, практически нет необходимости в пайке.
Легче для программирования, чем PIC.
Интегрированный последовательный интерфейс.
Пайка необходима редко.
Против
Труден для программирования (ассемблер).
Необходимо соединять цепи вручную.
Необходимы дополнительные аппаратные средства(MAX232A).
Требуется программатор.
Цена.
Ошибки загрузчика (см. ниже).
Интегрированные периферийные устройства имеют странные выходные напряжения.
Цена.
Я выбирал PIC16F628A по нескольким причинам:
- У меня их было много.
- Я имею небольшой опыт работы с ними.
- Я хотел маленькую плату, и плата PIC оказалась самой маленькой из всех 3 вариантов.
- Я хотел иметь полный контроль над действиями программы, и это вполне возможно при программировании на ассемблере.
Arduino (Freeduino MaxSerial) стал моим вторым выбором, который мне очень понравился простотой сборки и запуска. Также есть хорошая поддержка сообщества, и простота использования.
Первоначально я использовал отладочную плату AVR Butterfly. Она работала хорошо, пока один раз не разрядились батарейки. В загрузчике AVR Butterfly существует ошибка, которая подробно описана тут. Она портит код и не позволяет перепрограммировать его другим загрузчиком. Машинка работала в один день, а на другой нет. Потребовалось некоторое время, чтобы найти проблему и совсем немного времени, чтобы исправить её, поэтому я не стал дальше использовать эту плату в качестве системы управления. Я также обнаружил, что выходное напряжение на выводах может быть непредсказуемыми, потому что кроме управления периферийными устройствами, они управляют ЖК-экраном.
Ниже приведён исходный код для PIC и Arduino. Оба были протестированы, так что используйте то, в чем вы лучше разбираетесь и чувствуете себя комфортнее. Arduino (Freeduino MaxSerial) является наиболее оптимальным вариантом для быстрого старта. Я купил его.
Управляющая схема
На самом деле в моей машинке используется две управляющие платы. Так сделано потому, что я сжег управляющие транзисторы на штатной плате машинки. К счастью, я смог отпаять их и RX2 чип (который также сгорел) и сохранить схему управления. Большинство игрушечных радиоуправляемых машинок используют около 6 проводов для управления двигателем. Это так, потому что в собранной машинке есть металлический скользящий контакт, который движется с двигателем и дополнительные провода используются для реле. Каждая радиоуправляемая машинка имеет различные параметры этого контакта, так что намного лучше использовать штатную схему.
Я сжег транзисторы, подав напряжение питания 16В, вместо штатных 9.6В. Транзисторы рассчитаны на ток 5А, но вероятно я нагрузил их слишком сильно и они живописно задымились. Я взял плату из другой радиоуправляемой машинки и использовал транзисторы оттуда. Я запустил эту схему от 12В, и это не вызвало никаких проблем, хотя транзисторы довольно сильно грелись. Использование штатных плат машинки вместо изготовления собственного Н-моста экономит много времени и денег.
Аккумуляторы
Этот проект использует мощные аккумуляторы. Я купил их для радиоуправляемых машинок высокого класса за $ 50 + доставка с eBay. Они имеют 3800 мАч и зарядное устройство 1,8А в комплекте. Их можно найти в поиске eBay. Одна батарея заряжается примерно 1.5 часа (от полного разряда). Их напряжение 7.2В, однако, когда они лишь заряженные их напряжение около 8.3В, а когда они полностью разряжены (уже не в состоянии питать машину) они дают примерно 7.1В.
Я заменил все разъемы на аккумуляторах на стандартные Molex ATX разъемы. Это сделано для того, чтобы использовать дешевые разъёмы которых у меня было много, которые позволяют легко сделать разветвитель для замера тока. Батареи соединённые последовательно дают около 16В при полной зарядке.
Питание
5В
(7805 1A)
9.2В
(из 12V от 7812)
12VВ
(7812 1A)
12В
(Регулятор LT1083 7.5A)
Микроконтроллер
Камера
Сигнал
Плата управления
Wi-Fi
Драйвер двигателя
Линия 9.6В получена путем установки 4 диодов последовательно с шиной 12В берущейся с 7812. Падение напряжения на диоде около 0.7В. Поставив 4 диода в ряд, мы теряем около 2.8В, и получаем 9В для устройств, которым необходимо меньше 12В. После того как я сжег транзисторы, я решил питать схему более низким напряжением. 7812 рассчитан на 1А, а двигатели потребляют значительно больше. Digikey продает регулятор 7.5A 12В примерно за 14$, и я купил его. Я прикрепил его к радиатору, потому что думал, что он может греться. После некоторого времени работы он даже не нагрелся, поэтому радиатор не требуется.
Я не хочу рисковать схемой управления, поэтому я питаю его напряжением максимально приближены к штатному. Камера требует 9В, сигнал работает довольно тихо при питании от 5В, поэтому все эти устройства работают от линии 9.2В.
Вся силовая электроника собрана на макетной плате и находится в корпусе.
Схемы
PIC:
Arduino:
Подключение Arduino:
Вперед — Pin 8
Назад — Pin 9
Влево — Pin 10
Вправо — Pin 11
Зеленый LED — Pin 7
Красный LED — Pin 6
Сигнал — Pin 5
Последовательный порт Freeduino MaxSerial можно связать с последовательным портом маршрутизатора при помощи стандартного последовательного кабеля.
Последовательный порт Freeduino MaxSerial можно связать с последовательным портом маршрутизатора при помощи стандартного последовательного кабеля.
Freeduino MaxSerial использует последовательный вывод 4 — DTR (Data Terminal Ready) для сброса микроконтроллера и разрешения на загрузку нового кода. При нормальной работе с компьютером на этом выводе либо +10 В либо -10В в зависимости от того, подключен ли последовательный порт. Но на последовательном порту маршрутизатора этот вывод заземлен и неактивен. Когда маршрутизатор начинает передачу данных через последовательный порт, MaxSerial сбрасывается. Это нам не подходит. Мы подтянем вывод DTR к +9В. Это простое изменение включает режим закрытой программы, то есть микроконтроллер не может быть перепрошит и сброшен по последовательному порту. Если необходимо перепрошить микроконтроллер, то достаточно просто щелкнуть выключателем.
Примечание: Если вы используете USB версию Arduino, вы можете просто подключить RX и TX контакты к MAX232A, а далее к последовательному порту маршрутизатора.
Камера
Одним из основных аспектов этого проекта является то, что машинкой можно управлять без прямой видимости при помощи сетевой камеры Panasonic BL-C1A. Это почти самая дешевая проводная сетевая камера с хорошими отзывами. Программное обеспечение есть лишь для Windows – это небольшой, но терпимый минус. Для просмотра изображения программное обеспечение не требуется. В более дорогих моделях есть панорамирование и возможность наклона, но они значительно дороже и их функциональность не нужна.
Камера имеет очень удобный веб-интерфейс, что делает её не лишь Windows устройством. Просмотреть изображение с камеры можно при помощи следующей команды:
http:///ImageViewer?Resolution=320×240?Quality=standard
Доступные разрешения 640×480, 320×120, 160×60. Доступное качество (сжатие) precision(качество), standard(стандартное), motion(движение ).
Качество видео неплохое. Тем не менее, оно часто замирает на 1 секунду даже при хорошей связи. Я предполагаю, что электроника камеры недостаточно мощна, чтобы поддерживать постоянный прямой эфир с автофокусом. В целом я доволен ей.
Глядя на внутреннюю часть камеры, видно, что она работает на ARM процессоре 250 МГц. По информации с официального сайта она также имеет 64Мб оперативной памяти. Интересно, как трудно было бы заставить Linux работать на этом…
Сигнал
Я добавил забавную возможность сигналить людям. Это довольно просто. Я купил зуммер за 3$ и подключил его к микроконтроллеру через транзистор для увеличения мощности.
Сборка
От машинки было использовано лишь шасси. Все декоративные и нефункциональные части были сняты. Камера была установлена на переднюю часть с небольшим изменением штатного крепления. Плата была установлена на переднюю часть машинки и прикручена с использованием пластиковых гаек и болтов во избежание замыкания.
Плата микроконтроллера PIC также надежно закреплена болтами на другой стороне. Все провода были умышленно взяты длиннее чем требуется, для их легкого перемещения во время сборки. После сборки лишние куски провода были собраны и связаны. Было очень много проводов, вероятно около 30, которые нужно было провести из/в переднюю и заднюю часть машинки, не считая Ethernet кабеля.
Все силовые цепи были размещены в корпусе в задней части машинки, за исключением LT1083 7.5A, который находится в нижней части автомобиля. Я не ставил его в корпус, потому что это было дополнение к проекту, и так его было проще всего добавить. Когда светодиод на задней стороне коробки светится красным, маршрутизатор загружается. Когда маршрутизатор загрузился, он посылает сигнал микроконтроллеру, загорается зеленый светодиод, и я знаю, что могу соединиться с машинкой. Этот индикатор был очень полезным при отладке.
Вся электроника была собрана на макетной плате пред пайкой и установкой машинку. Батареи прикреплены с помощью термоклея и кабельных стяжек. Маршрутизатор был слишком широкий, чтобы стать на машинку без дополнений. Я добавил два куска плексигласа, чтобы сделать машинку шире.
Программная часть
Для данного проекта необходимы 3 программы. Приложение-клиент VB6 Wifi_Robot на Windows, CarServer написанный на C и работающий на маршрутизаторе работающем под управлением OpenWRT WhiteRussian v0.9 (Linux), а также микропрограмма микроконтроллера. Я испытывал прошивки для микроконтроллера PIC16F628A и популярного Arduino (Freeduino MaxSerial). Все программное обеспечение распространяется на основе открытого лицензионного соглашения GNU v2.
Следующие инструкции предполагают, что у вас есть подключенный к интернету Linksys WRT54GL с установленный OpenWRT WhiteRussian v0.9. Руководстве по установке OpenWRT можно найти по ссылке.
Установка CarServer
Если вы хотите использовать программное обеспечение
Войдите по SSH в своем маршрутизатор, далее…
# cd /tmp
# wget http://www.jbprojects.net/projects/wifirobot/carserver_1_mipsel.ipk
# ipkg install ./carserver_1_mipsel.ipk
Компиляция и установка CarServer
Если вы хотите увидеть, как он работает или модифицировать его
Вам нужно будет скачать OpenWRT SDK (лишь для Linux) и следовать этому руководству по составлению программ: Написание и компиляция простой программы для OpenWRT от Eric Bishop (просто следуйте первой части)
Makefile находится в /OpenWrt-SDK-Linux-i686-1/package/carserver/
Makefile находится в /OpenWrt-SDK-Linux-i686-1/package/carserver/src
carserver.c находится в /OpenWrt-SDK-Linux-i686-1/package/carserver/src
Ваш скомпилированный ipkg будет отображаться в /OpenWrt-SDK-Linux-i686-1/bin/packages. Затем:
# scp carserver_1_mipsel.ipk root@:/tmp/.
для копирования в маршрутизатор. Войдите по SSH и установите
Есть бесплатная электронная книга посвящённая серии маршрутизаторов WRT54G которая называют Linksys WRT54G Максимальный взлом. Я считаю что она бесплатна. Её можно просмотреть в Google Books. Она также может быть загружена по ссылке. В этой книге рассказывается как добавить последовательный порт, настроить программное обеспечение, а также о многих других взломах и модификациях. Я связался с одним из авторов. Это не бесплатная электронная книга. Вы можете просмотреть её в Google Books, и поддержать авторов, купив её Amazon. Это отличная книга!
Получение рабочего последовательно порта
Мы используем TTS/1, так что если вы добавили один последовательный порт – убедитесь что это он. Если у вас установлен OpenWRT WhiteRussian v0.9 войдите в SSH. Инструкции в книге указанной выше немного устарела. Вот обновленная версия:
# ipkg update
# ipkg install setserial
# cd /usr/sbin
# wget http://www.jbprojects.net/projects/wifirobot/stty.tgz
# tar -zxvf stty.tgz
# chmod 755 stty
Добавьте следующие строки в /etc/init.d/custom-user-startup чтобы сделать последовательный порт рабочим при запуске и автоматического запуска CarServer.
/usr/sbin/setserial /dev/tts/1 irq 3
/usr/sbin/stty -F /dev/tts/1 raw speed 9600
/bin/carserver&
Запуск клиентского приложения Wifi_Robot
Этот файл содержит исходный код VB6 и скомпилированный EXE. Вы можете просто извлечь wifi_robot_client.exe и config.txt, если вы не хотите заниматься программированием. Вы можете открыть и компилировать VB6, если вы хотите изменить его. Эта программа — это просто слегка измененная программа проекта радиоуправляемая машинка, управляемая компьютером.
ПО микроконтроллера
PIC
Вам понадобится программатор для PIC. Я использую P16PRO40, купленный на eBay. Есть много программаторов, которые можно купить или собрать самому. Вы можете самостоятельно скомпилировать HEX с помощью Microchip MPLAB или просто скачать и прошить готовый HEX файл. PIC asm базируется на этом тесте PIC16F628 UART.
Arduino (Freeduino MaxSerial)
Программу можно загрузить в Freeduino MaxSerial без дополнительного программатора.
Если вы используете Freeduino MaxSerial, убедитесь, что вы сделали небольшую модификацию оборудования, которая предотвратит сброс Freeduino каждый раз при получении данных от маршрутизатора через последовательный порт. См. выше для получения более подробной информации.
Измерения и тесты
Максимальная скорость
Чтобы вычислить максимальную скорость я сделал две отметки на расстоянии 3м друг от друга и несколько раз снимал машинку. Камера записывает 30 кадров в секунду, так что возможная ошибка камеры +/- 3,3% и +/- 1% ошибка расстояния.
Автомобиль проезжает 3м за 0,7 секунды (21 из 30 кадров за 1 секунду).
Максимальная скорость: 4,3 м/с = 15.5 км/ч = 9.6 миль/ч
Расстояние
Я взял маршрутизатор в большое поле. Я смог подключится со своего ноутбука на расстоянии до 500 м (по 1Мбит). Дальше этого расстояния, я уже не смог подключиться. Альтернативные прошивки (OpenWRT) позволяют увеличить выходную мощность. Я пытался изменить это значение, но это не повлияло на расстояние. Возможно, мой ноутбук (Dell Inspiron 6000), который всегда имел хороший WiFi (лучше, чем 6400 моего друга), может быть ограничивающим фактором.
Скорость передачи данных
Управляющий сигнал: 3.5 Кб/с
Камера: 50-190 Кб/с
Камера использует большую/меньшую пропускную способность в зависимости от того, сколько света в изображение. Если света много, она будет использовать более высокую пропускную способность.
Если машинка заехала очень далеко, маршрутизатор будет постоянно понижать скорость, пока не достигнет 1 Мб (мегабит). На такой скорости, камера не сможет отправлять данные, но управление будет работать.
Измерение энергопотребления
Измерения энергопотребления проводились до тех пор, пока напряжение на контактах батареи не упало ниже необходимого. Измерения проводились, когда батареи использовались примерно 10 минут, и напряжение было 15.3В. Из-за измерения тока, в устройство поступает более низкое напряжение, и ток выше. Все измерения были выполнены с помощью мультиметра Fluke 187 True RMS. Последнее измерение было произведено когда устройство остановилось из-за разряда.
Камера:
Время
(сек)
Ток
(мА @ 15.3В)
Ток
(мА @ 9.2В)
Мощность
(Вт)
0
39
65
0.6
5
58
96
0.9
8
98
163
1.5
Маршрутизатор:
Время
(сек)
Ток
(мА @ 15.3В)
Ток
(мА @ 12В)
Мощность
(Вт)
0
185
235
2.8
23
263
335
4.0
30
250
319
3.8
Сигнал:
Время
(сек)
Ток
(мА @ 15.3В)
Ток
(мА @ 9.2В)
Мощность
(Вт)
0
40
66
0.6
Машинка:
Состояние
Ток
(мА @ 15.3В)
Ток
(мА @ 12В)
Мощность
(Вт)
Загрузка
0 — 23с
~400
510
6.1
PIC+LED, регуляторы напряжения, 2 платы управления
(без маршрутизатора или камеры)
102
130
1.6
После загрузки, без езды
479
611
7.3
Езда – Ускорение
5500
7012
84.1
Езда – Постоянная скорость
4000
5100
61.2
Примечание: измерения при езде не очень точные, потому что трудно смотреть за показаниями мультиметра, держа ноутбук, управляя машинкой и бежать за ней. Точность значений +/- 0,1А.
Управление потребляет очень мало энергии. После того как схема с подвижным контактом обнаруживает поворот колес, она перестает их поворачивать. Это происходит менее чем за 1 секунду.
По моему опыту батарея держит около 1.5 часа при нормальном использовании.
Температура/Перегрев
Из приведенных выше измерений мощности видно, что ток на транзисторах составляет 7A@12В во время ускорения. Они рассчитаны на 5А, таким образом, они перегружены и могут перегреваться.
Температура транзисторов после 25 минут работы в помещении (много ускорений при остановке и старте, и максимальная скорость достигается редко) была 89°C. Двигатели также ощутимо нагрелись – до 85°C. При запуске машинки на улице кажется, что к ней нельзя подойти из-за температуры. Наверное, это потому, что на улице максимальная скорость достигается чаще, чем в помещении. Транзисторы рассчитаны на температуру до 150°C, и я думаю, что всё в порядке. Но у меня нет никакой информации о двигателе.
Стоимость проекта
Предмет
Стоимость*
Машинка
6
Плата управления
(из другой машинки)
6
Маршрутизатор
73
Камера
115
Батареи
67
Сигнал
3
Микроконтроллер PIC и обвязка
6
Разное: гайки, болты, винты, корпус, провода, разъемы.
20
Всего:
296
* Цена включает налог с продаж, доставку и округляется до доллара.
Прикрепленные файлы:
- WiFi_Robot.rar (43 Кб)