Компьютер

Аппаратура Dension WiFi RC с FPV для управления РУ моделями через iPhone, iPod, iPad или Android. Машинка на Wifi управлении своими руками Управление машинкой через wifi

Аппаратура Dension WiFi RC с FPV для управления РУ моделями через iPhone, iPod, iPad или Android. Машинка на Wifi управлении своими руками Управление машинкой через wifi

RC машинка может быть WiFi машинкой...?

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

Я купил RC джип 4х4 с гибкой подвеской и внедорожными шинами примерно за 30 долларов. Поигравшись с машинкой я решил, что её можно улучшить при помощи Wi-Fi и Android. Потратив немного времени, я полностью удалил плату из машинки. Я замерял напряжения на этой плате и разработал систему управления двигателем при помощи Arduino. Оригинальная система управления не использует ШИМ для контроля скорости. Машинка рассчитана на переезд через препятствия на очень низкой передаче, и как следствие очень медленно. В моей же схеме используется ШИМ.

Я использую Arduino уже несколько месяцев. Я также приобрел asynclabs WiFi Sheild для Duemilanoe Arduino, чтобы экспериментировать с WiFI. Он поставляется с библиотекой, устанавливаемой в Arduino IDE. Я смог сделать программу, которая позволяет управлять двигателями и направлением движения при помощи WiFi.

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

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

Это общий список инструментов и элементов, которые использовались в этом проекте. В документации Eagle указаны точные технические характеристики используемых компонентов.

Мультиметр
Паяльник
Припой
Отвертки
Раствор для травления плат
Фольгированый стеклотекстолит
Плоскогубцы
Arduino
AsyncLabs WiFi Sheild
Разъёмы RJ45
Драйвер двигателя с H-мостом
Конденсаторы

Драйвер двигателей

Используя Eagle, я разработал эту схему и сделал печатную плату для неё. Она функционирует как драйвер двигателей и регулятор их мощности для Arduino.
Это позволяет использовать стандартный 7.2В аккумулятор для питания основных и рулевых двигателей и Arduino.

В этой схеме используется двойной интегральный драйвер с Н-мостом SN754410 для управления двигателями. Выводы управления драйвера подсоединены к кабелю RJ45, который подключается к AsyncLabs WiFi Sheild.

Arduino Shield

Используя библиотеку SparkFun в Eagle я разработал Arduino Shield, через который будут проходить контакты с WiFi Shield и подключаться к драйверу двигателя через разъем RJ45 и 2 винтовые клеммы.

Цоколевка контактов RJ45 очень важна. Ошибка в подключении может привести к непредсказуемым результатам и придётся переделывать плату.

Травление печатных плат

Эта тема была раскрыта много раз, и я не буду подробно описывать её.
Я использую , и он меня устраивает, а с опытом дает прекрасные результаты.

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

Программа

Мой код может быть не достаточно эффективен, но он работает.

Машинка

Мне удалось собрать CarServer на основе примера SocketServer, который я получил вместе с Wifi Sheild AsynLabs.
Вам необходимо будет ввести информацию о своей беспроводной сети в код Arduino. Когда машина включилась, дайте ей 15-45 секунд, чтобы установить соединение с маршрутизатором. Красный светодиод на WiFi Shield означает, что соединение установлено.

Я сделал эту программу при помощи C # и MS Visual Studio 2008. Я сделал хорошее окно, и автомобилем можно управлять стрелочками.

Почему бы не управлять машинкой с телефона?

Такая мысль появилась у меня примерно через неделю после покупки DroidX. Я начал экспериментировать и в конечном итоге использовал Android SDK. Я нашел аналогичные приложения, где для управления используется акселерометр. Смотря на эти приложения написал свое.

Вставить IP и порт, указанные в коде Arduino. Держите телефон горизонтально. Затем наклоните его от себя, чтобы ехать вперед и на себя, чтобы ехать назад. Используйте телефон как руль.
Это мое первое крупное приложение для Android. В нем до сих пор есть некоторые ошибки, но в основном оно работает нормально.

Рулите во дворе машинкой 4x4 с WiFi!

Я отлично провел время, создавая этот проект. Я получил много знаний и новых навыков, и теперь у меня есть машинка 4х4, которой можно управлять с телефона.

Мне нужна камера для установки за лобовым стеклом, чтобы смотреть куда ехать. Она должна быть с низким энергопотреблением, а также передавать видео сама по себе. (Я думаю, что Arduino справится с этим).

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Драйвер двигателей
IC1 Микросхема SN754410 1 В блокнот
Линейный регулятор 5 В 1 В блокнот
Биполярный транзистор

2N3904

1 В блокнот
C1, C2 Электролитический конденсатор 2 В блокнот
Разьем 2 вывода 7 В блокнот
Разьем 8 выводов 1 В блокнот
Arduino Shield
U1 Плата Arduino 1 В блокнот
Т1 Биполярный транзистор

2N3904

1 В блокнот
R1 Резистор 1 В блокнот
U$3 Подстроечный резистор 1 В блокнот
Разьем 2 вывода 2

При создании бота ставились следующие задачи:

  • Управление ботом по беспроводной сети
  • Наличие онлайн камеры
  • Удобство программирования
Бортовой компьютер

Для бортового компьютера был выбрал двухъядерный андроидный миникомпьютер UG-802, который имелся под рукой. В качестве операционной системы - полноценный линукс дистрибутив, сборка Ubuntu от Linaro.

Для начала нужно было чтото сделать с проблемным встроенным wifi адаптером, который упорно не желал запускаться под пересобранным ядром. Кардинальным решением было выпаять его и установить второй USB хост коннектор, в который можно будет воткнуть нормальный usb wifi (или даже 3G модем). Сказано - сделано, плата встроенного wifi была отпаяна и вместо нее напаян второй хост.

Первая проверка внутреннего USB host-а:

Окончательный вид установленного USB host-а:

Колесная платформа

Когда-то я заказывал платформу Ardubot и колеса с моторами к ней, но руки до нее не доходили. Не долго думая, было решено ей воспользоваться. На нее была смонтирована плата преобразователя с 12 в 5 вольт, выдранная из специально купленной в магазине автомобильной зарядки (используемая в ней микросхема имеет более широкий диапазон входного напряжения). Литий-полимерный аккумулятор на 11.1В/1250мА уже имелся от разбитой, в прошлом, модели самолета. Плату Ardubot-а пришлось подвергнуть легкой модификации из-за особенностей платы управления (дорожка отрезана от D9 и запаяна на D7). Так же был установлен усб разъем, на который выведено только 5 вольтовое питание:

Сзади видны провода идущие от энкодеров колес:

Управление двигателями, светом

Изначально платформа Ardubot была расчитана на совместное использование с Arduino, почему бы этим не воспользоваться. Вместо Ардуино я взял OLIMEX PIC32-PINGUINO-MX220, совместимый по разъемам. Выяснилась неприятная мелочь - один из пинов управления мотором был использован для светодиода на плате PINGUINO. Все бы ничего, но этот светодиод мигал в режиме загрузки фирмвари, заодно проворачивая колесо. Поэтому пришлось перепаять дорожку, о чем было написано выше.

Для простоты отладки и универсальности, плата управления подключается через USB. Прошивка PINGUINO эмулирует CDC-ACM устройство, видимое для пользователя как последовательный порт /dev/ttyACM0. Отправляемые команды управления выглядят так:

Нумерация моторов: 0 - левый, 1 - правый.
Состояния: 0 - остановлен, 1 - вперед, -1 - назад.

Например, чтобы включить задний светодиод на платформе, достаточно из консоли отправить команды:
echo "LIGHT 1 1" > /dev/ttyACM0 echo "COMMIT" > /dev/ttyACM0

Чтобы поехать вперед:
echo "MOTOR 0 1" > /dev/ttyACM0 echo "MOTOR 1 1" > /dev/ttyACM0 echo "COMMIT" > /dev/ttyACM0

Камера и хаб

Один USB порт бортового (ботового) компьютера используется wifi адаптером, в другой плата управления платформой. Куда подключить камеру? Выход есть - использовать хаб. В одном из компьютерных магазинов была куплена одна из самых дешевых веб камер и USB хаб подозрительного вида.

Размещение электроники

В процессе поиска из чего слепить бота, была удачно найдена пластиковая коробочка-упаковка из под IPOD TOUCH, в которую идеально влазил UG802 и разобранный USB хаб. Для трех коннекторов хаба в боку был сделан вырез. В четвертый (внутренний) коннектор воткнулась камера (с предварительно укороченным кабелем). В крышке также был сделан вырез под разъем USB на UG802, который не давал ей закрыться:

Все это дело прикрутилось сверху над PINGUINO-MX220 - платой управления платформой:

Окончательная сборка и тестирование

Наступило время собрать все в одно целое:

Все проводки были воткнуты куда им положено - PINGUINO в хаб, UG802 питание в USB коннектор на Ардуботе:

Бортовой компьютер настроен для доступа по ssh, весь нужный инструментарий для работы (компилятор, библиотеки, mc) установлены из репозитория Linaro. Заходи, пиши, компилируй и отлаживай прямо на нем. Красота!

Для тестирования разработана консоль управления, которая показывает онлайн изображение с камеры бота и отправляет ему команды куда ехать, какие лампы включить-выключить. Софт бота принимает команды и отправляет онлайн видео на консоль управления. Текущий статус - глубокая бета. Однако пользоваться системой уже можно!

Видео демонстрация

Необязательно использовать спаркфановский ардубот, есть более дешевые и лучшие варианты.
UG802 можно также заменить дешевыми аналогами (MK802, CX-01), но нужно смотреть, чтобы были доступны исходники ядра, работающие на конкретном девайсе-клоне. Иначе установка полноценного линукса будет проблематична либо вообще невозможна.

Итак будем управлять двумя реверсивными (вращение в обе стороны) двигателями: основным и рулевым. Питать их будем от аккумулятора 3,7 В, но можно и до 12 В в принципе подавать, если согласовать питание контроллера или организовать его отдельным аккумулятором.

В силовой части используем простейший миниатюрный драйвер шагового двигателя l9110s или же можно использовать сборку на L293\8 или любой не менее мощный, который вы найдёте. В общем я всё нарисовал на картинке.

Приобрести комплектующие для проекта можно на алиэкспресс:

WiFi контроллер использован мой любимый NodeMCU 0.9 ESP8266 , но можно использовать и меньший размером WeMos D1 mini.

Аккумулятор можно зарядить через микро-USB, после чего он питает драйвер двигателей напрямую и WiFi-контроллер через повышающий преобразователь до 5 В .

Код программы:

#include
const char* ssid = "имя вашей сети вайфай";
const char* password = "пароль вашей сети";
int up = 2; //номера дискретных выходов
int down = 14;
int left = 4;
int right = 12;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(10);
//подготовка выходов
pinMode(up, OUTPUT);
digitalWrite(up, 0);
pinMode(down, OUTPUT);
digitalWrite(down, 0);
pinMode(left, OUTPUT);
digitalWrite(left, 0);
pinMode(right, OUTPUT);
digitalWrite(right, 0);

// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

While (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

//Запуск сервера
server.begin();
Serial.println("Server started");
//выводим IP адрес в монитор порта
Serial.println(WiFi.localIP());
}
void loop() {
//проверяем подключился ли клиент
WiFiClient client = server.available();
if (!client) {
return;
}

//Ожидаем пока клиент не пришлет какие-нибудь данные
Serial.println("new client");
while(!client.available()){
delay(1);
}

//Чтение первой строки запроса
String req = client.readStringUntil("\r");
Serial.println(req);
client.flush();

//обработка команды
if (req.indexOf("/gpio/up") != -1){
digitalWrite(up, 1);
digitalWrite(down, 0);
delay(1000);
digitalWrite(up, 0);
digitalWrite(down, 0);
}
else if (req.indexOf("/gpio/down") != -1){
digitalWrite(up, 0);
digitalWrite(down, 1);
delay(1000);
digitalWrite(up, 0);
digitalWrite(down, 0);
}
else if (req.indexOf("/gpio/left") != -1){
digitalWrite(up, 1);
digitalWrite(down, 0);
digitalWrite(left, 1);
digitalWrite(right, 0);
delay(1000);
digitalWrite(up, 0);
digitalWrite(down, 0);
digitalWrite(left, 0);
digitalWrite(right, 0);
}
else if (req.indexOf("/gpio/right") != -1){
digitalWrite(up, 1);
digitalWrite(down, 0);
digitalWrite(left, 0);
digitalWrite(right, 1);
delay(1000);
digitalWrite(up, 0);
digitalWrite(down, 0);
digitalWrite(left, 0);
digitalWrite(right, 0);
}
else {
Serial.println("invalid request");
}

Client.flush();
// подготовка к ответу
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\n ";

S += "


UP
";
s += "
LEFT     ";
s += "RIGHT
";
s += "
DOWN";
s += "
\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
} Программа написана в Arduino IDE. Как настроить Arduino IDE для работы с контроллером NodeMCU 0.9 ESP8266 посмотрите по ссылке. После загрузки программы в контроллер, монитором порта можно прочитать IP-адрес, который плата получит после соединения с вашим WiFi-роутером. В браузере компьютера необходимо в адресной строке прописать этот адрес и перейти на страницу, которую сгенерирует программа контроллера. Она будет выглядеть следующим образом:

DOWN

При нажатии на ссылку UP, машинка проедет вперед в течении 1сек и остановится. При нажатии на DOWN, машинка 1 секунду будет ехать назад. LEFT - двигатель поворота повернёт колёса влево и машинка проедет 1 сек влево. То же самое и вправо при нажатии на RIGHT.

Вся эта система будет работать только при настроенной WiFi-точке доступа (WiFi-роутере), но в будущем мне интересно поиграться с контроллером NodeMCU 0.9 ESP8266 , который сам будет организовывать точку доступа и выполнять функцию WEB-сервера, тоесть при заходе на его айпи из браузера, будем видеть web-страничку с элементами управления. Так же интересно организовать передачу данных с одного такого контроллера в другой посредством их автономной WiFi-сети.

Летом появилась мысль сделать радиоуправляемую машинку, но не просто нечто похожее на творение китайской инженерной мысли, которое продается на каждом шагу, а машинку, управлять которой можно было бы с компьютера или телефона. Понято, что машинка, которой можно управлять через Wi-Fi в чистом виде, совершенно не интересна. А вот если бы у нее была бы камера? А если еще и управление через 3G/EDGE/GPRS? Вот это – другое дело! Значит, управляющее устройство должно иметь USB и Wi-Fi (ну или только USB, можно купить USB Wi-Fi адаптер). Теперь нужно придумать, как управлять двигателями. Изначально я хотел сделать это с помощью COM-порта и регистра сдвига (74HC595), но спалив 5 таких микросхем, от такого способа отказался. Позже мой взгляд пал на Arduino, а именно на Arduino Duemilanove. Эта плата имеет 14 цифровых I/O портов, из них шесть – ШИМ (можно будет управлять напряжением на двигателе и повесить сервы для камеры), два можно использовать как Tx и Rx последовательного порта.

Роутер

Обнаружив в своем городе роутер D-Link DIR-320, у которого есть USB порт, сразу же его купил. Придя домой, узнал, что у этого роутера есть невыведенный UART-порт. Таким образом, у нас появляется канал связи между роутером и ардуиной.
Для роутера я выбрал прошивку OpenWrt. Можно скачать готовую прошивку с OpenWrt для DIR-320 это . Уже не помню почему, но я решил собрать прошивку сам (подробно описано ). Для этого понадобится Linux (я собирал на Ubuntu 11.10). Для начала, скачаем исходники прошивки и соберем все, что нужно:
svn co svn://svn.openwrt.org/openwrt/branches/backfire dir320 cd dir320 ./scripts/feeds update -a && ./scripts/feeds install –a make prereq && make tools/install && make toolchain/install
Конфигурирование прошивки
make menuconfig
Выбираем следующие пакеты:
  • Target System ---> <*> Broadcom BCM947xx/953xx – ядро 2.6
  • Image configuration ---> <*> LAN IP Address ---> – [не обязательно] Можно выбрать IP-адрес, который будет у роутера после загрузки ядра и всех модулей
  • Kernel modules ---> <*> Filesystems ---> <*> kmod-fs-ext3 - Об этом позже
  • Utilities ---> Filesystem ---> <*> e2fsprogs – И об этом
  • Utilities ---> disc ---> <*> block-extroot – И об этом тоже
  • Kernel modules ---> <*> USB Support ---> <*> kmod-usb-core – поддержка USB
  • Kernel modules ---> <*> USB Support ---> <*> kmod-usb-ohci – для USB-хаба. Зачем он? Об этом тоже позже
  • Kernel modules ---> <*> USB Support ---> <*> kmod-usb-storage – поддержка USB-флешек
  • Kernel modules ---> <*> USB Support ---> <*> kmod-usb2 – USB 2.0
  • Administration --> webif ---> <*> webif-applications – админка
  • Kernel modules ---> <*> Video Support ---> <*> kmod-usb-video-core – поддержка USB-video
  • Kernel modules ---> <*> Video Support ---> <*> kmod-usb-video-uvc – поддержка UVC-веб камер
Последний пункт выбирайте сами, у меня была UVC веб камера.
Так зачем же мы выбрали те пакеты, назначение которых я не объяснил? Проблема в том, что объём флэш-памяти установленной в роутере - 4МБ, что может помешать дальнейшей нашей работе. Мы же перенесем rootfs на флешку, и роутер будет грузиться с нее.
Кстати, про флэш-память: нужно не забыть следующее:
make kernel_menuconfig
  • Device Drivers ---> <*> Memory Technology Device (MTD) support ---> RAM/ROM/Flash chip drivers ---> [*] Flash chip driver advanced configuration options --> [*] Specific CFI Flash geometry selection --> [*] Support 8-bit buswidth
  • Device Drivers ---> <*> Memory Technology Device (MTD) support ---> RAM/ROM/Flash chip drivers ---> [*] Flash chip driver advanced configuration options --> [*] Specific CFI Flash geometry selection --> [*] Support 16-bit buswidth
И еще в Kernel Hacking’е нужно исправить console=/dev/ttyS0 на console=/dev/null , чтоб роутер не использовал этот порт как отладочный.
Компилируем и прошиваем
Компиляция прошивки:
make V=99 -j2
Теперь нужно ее прошить:
Для bash’а:
#!/bin/bash echo "==================================================================" echo "This script will upload dd-wrt firmware (firmware.bin)" echo "in the current directory to 192.168.0.1 " echo "during the router"s bootup. " echo "" echo "* Set your ethernet card"s settings to: " echo " IP: 192.168.0.10 " echo " Mask: 255.255.255.0 " echo " Gateway: 192.168.0.1 " echo "* Unplug the router"s power cable. " echo "" echo "Press Ctrl+C to abort or any other key to continue... " read echo "" echo "* Re-plug the router"s power cable. " echo "" echo "==================================================================" echo "Waiting for the router... Press Ctrl+C to abort. " echo "" try(){ ping -c 1 -w 1 192.168.0.1 } try while [ "$?" != "0" ] ; do try done echo "*** Start Flashing **** " atftp --no-source-port-checking -p -l firmware.bin 192.168.0.1 echo "Firmware successfully loaded!"
Для винды:
@echo off echo ================================================================== echo This batch file will upload dd-wrt firmware in the current directory to echo 192.168.0.1 during the router"s bootup. echo. echo * Set your ethernet card"s settings to: echo IP: 192.168.0.2 echo Mask: 255.255.255.0 echo Gateway: 192.168.0.1 echo * Unplug the router"s power cable. echo. echo Press Ctrl+C to abort or any other key to continue... pause > nul echo. echo * Re-plug the router"s power cable. echo. echo ================================================================== echo Waiting for the router... Press Ctrl+C to abort. echo. set FIND=%WINDIR%\command\find.exe if exist %FIND% goto LPING set FIND=%WINDIR%\system32\find.exe if exist %FIND% goto LPING set FIND=find:LPING ping -n 1 -w 50 192.168.0.1 | %FIND% "TTL=" if errorlevel 1 goto LPING echo *** Start Flashing **** tftp -i 192.168.0.1 put firmware.bin if errorlevel 1 goto LPING set FIND= echo. echo ================================================================== echo * WAIT for about 2 minutes while the firmware is being flashed. echo * Reset your ethernet card"s settings back to DHCP. echo * The default router address will be at 192.168.1.1 echo. Pause
Настройка загрузки с флешки
После первого включения заходим на веб-интерфейс роутера и изменяем пароль. Теперь подключаемся к нему через SSH. Нужно настроить загрузку с флешки, для этого сначала нужно ее разметить. У меня было два раздела: первый – ext3-раздел для rootfs, второй – swap. Открываем /etc/config/fstab в vim’е и пишем то, что соответствует нашей фелшке. У меня так:
config global automount option from_fstab 1 option anon_mount 1 config global autoswap option from_fstab 1 option anon_swap 0 config mount option target / option device /dev/sda1 option fstype ext3 option options rw,sync option enabled 1 option enabled_fsck 1 option is_rootfs 1 config swap option device /dev/sda2 option enabled 1
Сохраняем, перезагружаемся (reboot).
Демон
Управлять двигателями будет ардуина, поэтому напишем демон, который будет перенаправлять всё, что пришло на TCP порт 5554 в /dev/ttyS0.
Мой скомпилированный вариант демона искать в архиве (card)
Компилируем с помощью gcc, который был собран в процессе подготовки к сборке прошивки:
<…>/dir320/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mipsel-openwrt-linux-uclibc-gcc-4.3.3 <имя файла с исходниками> -o <имя выходного файла>
Небольшое отступление об удобстве организации работы с роутером
  • После каждого включения мне приходилось писать opkg update , поэтому я его добавил в /etc/rc.local
  • Довольно удобно использовать FTP-сервер. Я поставил pure-ftpd. Для этого пишем:
    opkg install pure-ftpd
    Добавим его в /etc/rc.local:
    pure-ftpd -4 –B –M –l unix –U 000:000
  • Удобно будет сменить веб-интерфейс на luci, для этого пишем:
    opkg remove webif* opkg install luci
Демон [продолжение]
Заливаем на роутер наш демон, добавляем его в автозагрузку.
Теперь ставим mjpg-streamer:
opkg install mjpg-streamer
Пишем в /etc/config/mjpg-stramer следующие:
config mjpg-streamer option device “/dev/video0” option resolution “640x480” option fps “24” option port “8080” option enabled “true”
Пробуем подключить камеру. Если все нормально, то можно будет увидеть изображение тут:
http:///?action=stream .

Arduino и соединение

Для начала определимся со схемой подключения двигателей. Так как я брал корпус от уже готовой машинки, то мне с двигателями повезло – они уже там были. Передний отвечал за повороты (влево, вправо, прямо), а задний за движение (мне пришлось его поменять на двигатель кнопки блокировки дверей какого-то ВАЗа). Управлять нагрузками можно ардуиной с помощью полевых транзисторов (95N2LH5, но я использовал IRF 630, потому что и эти ели нашел в своём городе). Подключение такое: земля транзистора – к управляющему пину ардуины, source – к земле ардуины и минусу питания нагрузки, drain – к минусу нагрузки, плюс питания к плюсу нагрузки. Но таким образом мы сможем ездить только вперед и поворачивать только в одну сторону. Для того чтобы справиться с проблемой, к нам на помощь спешит реле с двумя группами контактов. У меня один двигатель (передний) питался 6 вольтами, а другой 12. При этом использовалось два 6 вольтовых аккумулятора (один из них - свинцово-кислотный от бесперебойника), учитывая, что минус роутера позже придется соединить с землей ардуины, то получить 6 вольт для роутера не получается (проверяйте сколько вольт подаёте на роутер - мне пришлось покупать еще один после того, как я подал на него 12 вольт). Поэтому пришлось использовать еще одну релюшку для подачи/неподачи питания на передний двигатель.

Схему рисовал давно. Теперь там все транзисторы полевые и нет резисторов.
Теперь о самом коде. У меня все довольно просто – есть 4 команды, у которых есть свой параметр размером 1 байт:

  • m – Отвечает за напряжение, а, следовательно, и за скорость, на двигателе значение от 0 до 255
  • r – Отвечает за повороты. “1” – поворачивать, “0” – не поворачивать
  • n – “1” – ехать назад, “0” – ехать вперед
  • e – “1” – поворачивать в другую сторону
Вот мой код программы для ардуины:
int inByte, val; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); } void loop() { if (Serial.available() > 0) { inByte = Serial.read(); if ((inByte=="n")||(inByte=="e")){ while (Serial.available()==0) {} val=Serial.read(); if (inByte=="n"){ if (val=="1"){ digitalWrite(2, HIGH); Serial.print("Writing to 2 pin\n\r"); } if (val=="0"){ digitalWrite(2, 0); Serial.print("Writing to 2 pin\n\r"); } } if (inByte=="e"){ if (val=="1"){ digitalWrite(4, HIGH); Serial.print("Writing to 4 pin\n\r"); } if (val=="0"){ digitalWrite(4, LOW); Serial.print("Writing to 4 pin\n\r"); } } } if ((inByte=="m")||(inByte=="r")){ while (Serial.available()==0) {} val=Serial.read(); if (inByte=="m"){ if (val!="0") analogWrite(3, val); else analogWrite(3, 0); Serial.print("Writing to 3 pin\n\r"); } if (inByte=="r"){ if (val=="1"){ digitalWrite(7, HIGH); Serial.print("Writing to 7 pin\n\r"); } if (val=="0"){ digitalWrite(7, LOW); Serial.print("Writing to 7 pin\n\r"); } } } } }
Как видно, задний двигатель у меня подключен к 3 пину, передний – к 7, реле заднего – к 2 пину, переднего – к 4. Так как 3 – это ШИМ-пин, то используя analogWrite(3, val);, где val от 0 до 255, мы можем управлять напряжением на двигателе.
Разбираем наш маршрутизатор. Видим UART порт. Соединяем его с ардуиной.

Теперь смотрим, как это все работает. Подключаемся телнетом к нашему порту и проверяем:
  • n1 – щелкает реле
  • m<пробел> - колёса начинают немного вращаться
  • n0 – колеса вращаются в другую сторону
  • m0 – колеса перестают вращаться
  • r1 – поворачивают передние колеса
  • e1 – колеса поворачивают в другую сторону
  • r0 – колеса становятся прямо
  • e0 – щелкает реле
Для отладки работы с ком портом на роутере можно использовать minicom (opkg install minicom).

Программная часть

В архиве моя программка для управления машинкой (rotate и power из архива нужно скопировать в /bin/ на роутере, card – мой демон). Работает только с джойстиком. На вкладке планирование вы можете написать bash скрипт (не забудьте opkg install bash на роутере) для его выполнения с помощью демона cron. Так как этот демон нужно после изменения его настроек перезапускать, моя программа запускает скрипт по адресу

Тут я расскажу про переделку аппаратуры радиоуправления моделями в диапазон 2,4 ГГц.

До недавнего времени пользовался аппаратурой Hitec Eclipse 7 совместно с модулем Corona 2,4 . Проблем со связью никогда не возникало. Проблемой стали стандартные антенны WI-FI, точнее их механическая надёжность. Отломалась уже вторая антенна в области поворотной части, две детали антенны просто запрессованы и при их разделении отрывается впаянная центральная жилка антенны.

После этого передающая антенна 2,4ГГц ремонту не подлежит! Цена её копеечная, но не везде их продают и дальнейшее пользование данной конструкцией вызвало у меня недоверие.После неудачных попыток найти отдельно такую антенну купил вот такую, с названием TP-LINK.

Она в два раза больше по длине и по данным из краткой инструкции полностью совместима со всеми системами 2,4ГГц, но обладает большим усилением, а точнее 5дБ по сравнению со стандартной Короновской 2-3дБ и соответственно дальностью связи. При эксперименте с модулем Corona 2,4 не было замечено ни каких отклонений в поведении подопытного пенолёта. Далее решено было перенести данную антенну на место штатной 40МГц и модуль Корона разместить внутри аппаратуры, а не как сменный блок.

В результате получился улучшенный пульт 2,4 :

  • Антенна доступна визуально
  • Отсутствие разъёмных контактов при подключении модуля
  • Ну и внешний вид конечно

Далее по порядку о переделке "40МГц" в пульт RC 2,4ГГц

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

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

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

К плате подходит всего 3 провода:

  • плюс питания
  • общий
  • сигнал управления

Для доступа к кнопке модуля и контроля светодиода при привязке приёмников в пазу для стандартного модуля вырезаем небольшое отверстие и закрываем его пустым!!! модулем.

Данная антенна 2,4 чуть толще штатной 40МГц, её толщина примерно 12мм, пришлось немного высверлить отверстие. Антенна зафиксирована холодной сваркой только за нижнюю, крутящуюся часть, чтобы была возможность вращать её вокруг оси и сделать пульт rc максимально удобным.

Сборка передатчика 2,4

При сборке передатчика нужно сблизить две половины корпуса и закрутить в антенну антенный штекер от модуля, предварительно сделав им несколько оборотов против часовой стрелки. Всё, скручиваем передатчик 2,4. Проверяем его работоспособность и пользуемся.

Аппаратура 2,4 проверена в полевых условиях, всё в норме!

Таким способом можно переделать практически любую систему радиоуправления моделями. Как переделать пульт RC в 2,4 - я написал, в дальнейшем планируются ещё публикации о переделке аппаратуры и сборке нужных моделисту электронных устройств.

Внимание!

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