Пользователь
0,0
рейтинг
6 января 2012 в 22:43

Радиоуправляемая Wi-Fi машинка с камерой из песочницы

Начало


Летом появилась мысль сделать радиоуправляемую машинку, но не просто нечто похожее на творение китайской инженерной мысли, которое продается на каждом шагу, а машинку, управлять которой можно было бы с компьютера или телефона. Понято, что машинка, которой можно управлять через 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-адрес> – [не обязательно] Можно выбрать 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://<IP-адрес_роутера>/?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 порт. Соединяем его с ардуиной.
UART на роутере
Теперь смотрим, как это все работает. Подключаемся телнетом к нашему порту и проверяем:
  • n1 – щелкает реле
  • m<пробел> — колёса начинают немного вращаться
  • n0 – колеса вращаются в другую сторону
  • m0 – колеса перестают вращаться
  • r1 – поворачивают передние колеса
  • e1 – колеса поворачивают в другую сторону
  • r0 – колеса становятся прямо
  • e0 – щелкает реле

Для отладки работы с ком портом на роутере можно использовать minicom (opkg install minicom).

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


В архиве моя программка для управления машинкой (rotate и power из архива нужно скопировать в /bin/ на роутере, card – мой демон). Работает только с джойстиком. На вкладке планирование вы можете написать bash скрипт (не забудьте opkg install bash на роутере) для его выполнения с помощью демона cron. Так как этот демон нужно после изменения его настроек перезапускать, моя программа запускает скрипт по адресу http://<IP-адрес>/cron-restart. Поэтому нужно его создать (/www/cgi-bin/cron-restart) и не забыть сделать исполняемым. Код:
#!/bin/bash
/etc/init.d/cron stop; /etc/init.d/cron start

Заключение


Вроде бэ ничего не забыл. А, ну, конечно же! Вот мой шедевр:


Фотка машинки

Фотка машинки

Фотка машинки

Фотка машинки

Фотка машинки

К такому девайсу можно присоединить Bluetooth (не пробовал, но драйвера есть), 3G-модем (интернет получить у меня получилось, но похоже провайдер не выдаёт каждому клиенту собственный внешний ip-адрес, поэтому придется использовать что-то типа back-connect’а или vpn), gps приёмник (проблем возникнуть не должно – ведь он должен определиться как последовательный порт).

Примечания


Если вдруг роутер перезагружается, то стоит убрать от него подальше все провода или все их экранировать. Экспериментальным путем я понял, что роутер может перезагрузиться от наводок, поэтому пришлось обмотать хаб несколькими слоями изоляции и алюминиевой фольги.
И вот еще. Вместо роутера можно использовать Raspberry Pi, а вместо транзисторов и реле — Arduino Motor Shield.

Архив, о котором не раз я упоминал (зеркало).
Ситнов Владимир @Proger10
карма
44,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

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

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

  • 0
    Вообще ардуино можно подключить и в usb, не разбирая роутер, а потом еще и прошивать через avrdude, который есть в комплекте к openwrt, и к тому же управляться через этот же usb arduino вполне может.

    Как с задержками? Вменяемо?
    А так конечно круто, захотел себе еще один роутер!
    • 0
      Ардуино, конечно, можно к usb прицепить, но зачем что-то лишнее вешать на хаб?
      С управлением вообще нет проблем. Видео тормозит, когда машинка за железо-бетонной стенкой.
    • 0
      Опа, а камеру тогда куда подключать?
      • 0
        Ну как я понял туда уже вставлены usb-hub, флешка, на которую поставлена система, и собственно сама камера. Так почему бы и не обойтись чисто usb? Это для тех кто не хочет разбирать роутер.
        • 0
          Да, там хаб. На юсб можно сделать, это просто мой вариант реализации.
  • 0
    Безспорно отличная работа!
    Финальный вид авто мне чем-то напомнил авто Google для Darpa Urban Challenge 2007.
  • +11
    А если при этом настроить роутер на раздачу инета то получится передвижной удлинитель WiFi))
    Удобно когда есть пара комнат в которых основной WiFi не достает)
    • +20
      Очень удобно, когда есть пара комнат, да ещё и таких, в которых WiFi не достает…
      • 0
        Согласен, но удобство при этом варьируется количеством стен, и качеством маршрутизатора :)
  • 0
    Здорово, видео у Вас не притормаживает, я смотрю =)
    Сам делал что-то подобное несколько месяцев назад.
    В качестве основы брал роутер Asus WL-520GU. Собрал OpenWRT, настроил, подключил камеру. Все работало, только при достаточно быстром обновлении страницы, с кадром видео, процессор роутера уже не справлялся и отдача видео происходила с большими задержками.
    • 0
      Кстати, у меня стоит транслируемое разрешение 640x480, а в проге показывается 320x240. Так что можно еще оптимизировать.
  • 0
    А как со временем отклика, пробовали измерять?
    • 0
      Не мерял, но пока нет железобетонной стенки на глаз тормозов не заметно.
      • 0
        Так wi-fi антенну надо подключить.
        • 0
          Мелкая от роутера и так подключена, а если какую-то нормальную ставить, то серьезно об этом не думал, пака что и так нормально.
      • +1
        на видео заметно: Вы влево джойстиком, и через какую-то задержку машинка поворачивает влево.
        • 0
          Просто как оказалось джойстик довести до конца, причем так чтоб его не сдвинуть в сторону сложновато. Поэтому пришлось сделать «границу», до которой машинка не реагирует на сдвиг джойстика влево или вправо. Если и пытаться таким образом определить время отклика, то нужно смотреть на появляющуюся стрелку на экране.
  • +2
    какой запас хода?
    • +1
      По времени — примерно минут 30 песпрерывной езды. Ограничивается вторым аккумулятором (никель-кадмиевый 400mAh), его придется заменить. «Большой» аккум (свинцово-кислотный 4,5Ah) может работать часов 9 без перезарядки.
      По расстоянию — пока wi-fi ловит, ну или смотря какой способ связи.
  • +1
    Вы реализовали мою мечту:))) сколько раз у меня до такого же проекта руки не доходили…
    Отличная работа!
  • 0
    Хорошая работа)
    С удовольствием посмотрел бы запись видео с камеры, очень интересно как оно там, внутри))
  • +2
    image
    • +9
      А зря вы комментарий заминусовали. Я вот понял что сидел и читал пост с вот таким вот лицом…
      • +3
        Даа, хабр зол и беспощаден, ещё и в карму поднасрали, а казалось бы ничего такого не сделал, ну да ладно. :-/
        • +1
          Там опять 8 троллей поработало. Плюсанул, если на -8 вернется, то точно они. :)
      • +2
        Хех, эффект стада в действии.
        Когда вы написали свой комментарий, у комментария было -18, сейчас уже -5 и продолжает расти.
        Казалось бы, что изменилось…
  • +5
    Вспоминается машинка из один дома 3
  • +1
    Сделать ее потише, понавешать на нее армейских прибамбасов и можно продавать военным :)
    • +1
      Если понавешать армейских прибамбасов, то выгоднее будет продавать её совсем не военным))н
      • +5
        Ну вот сразу и не военным. Не забывайте, что военные есть не только в России. Есть например замечательные военные Афганистана, Сомали, Чада и других цивилизованных стран, которые смогут расплатиться алмазами, нефтью, героином и другими полезными вещами за эту технику.
        • 0
          Надо же, как вы всё сразу поняли)
        • 0
          А потом ждать когда тебе курьеры из штатов демократию на дом доставят
  • +2
    Очень не нравиться звук издаваемый машинкой… Это я так понял из-за реле. С такой схемой реле долго не проживет да и жрет много, рекомендую вам купить обычный драйвер двигателя… к примеру L293D
    • 0
      Реле слышно только при смене направления движения/поворота. Это из-за двигатель. Задний родной заменил на гораздо более мощный. На родном двигателе машинка ели-ели с места трогалась с аккумулятором на борту. Про драйвера смотрел, но времени мало было, делал к определенному сроку, поэтому решил сделать как побыстрее.
  • 0
    Парень молодец! Я в таком возрасте только менюшки в нортоне научился программить :)
  • 0
    Кстати если IP внешний доступен можно использовать dyndns, если нет можно использовать туннель 4to6 например miredo. Тогда получаем IPv6 и можно коннектится, но его опять же надо как то сообщать.
    • 0
      Проблема в том, что IP-адрес принадлежит не мне. Инет через шлюз. Так что только vpn или нечто backconnect-подобное.
      • 0
        Ну так miredo даже через nat работает.
  • 0
    Только диоды параллельно катушкам реле в другую сторону должны быть включены.
    • +1
      упс… Косяк. А собрал-то правильно.
  • 0
    Тестировал OpenWRT на DIR-320 с китайской веб камерой в 320p не смог выжать больше 5 fps, как у вас с этим обстоит?
  • 0
    Пробовал 3 камеры:
    1. Genius Slim USB2 — дравера есть только для winxp.
    2. Китайская камера — на компе на убунте все нормально. Драйвер gspca sonix j. На роутере на завелась. /dev/video0 появлялся, но mjpg=streamer ругался при открытии устройства.
    3. Noname камера друга (эта камера сейчас и установлна, она же на видео) — uvc-вебкамера, поэтому с драйверами проблем не было. Работает нормально везде. Сейчас трансляция идет 24fps, 640x480.
  • 0
    Для управления двигателями лучше не строить жутких схем, а поюзать L293D :)
  • 0
    Что за помещение? Школа?
    • 0
      да
  • 0
    У парнишки из «Один дома 3» все проще было :)

  • 0
    Спасибо за интересный материал!
    Взгляд упал на стоящий на столе DIR-615, оказывается, у него есть не распаяный USB порт(только в rev. C1,C2). Тут же нашелся и мануал по распайке wiki.openwrt.org/toh/d-link/dir-615/c2-usb.
    Это я к тому, что DIR-615 обладает более быстрым процессором в 400 Мгц, против 240 Мгц у DIR-320, а так же поддерживает стандарт 802.11n и у нас в магазинах стоит примерно на 150р дешевле, чем 320й. Сводная таблица с характеристиками тут — wiki.openwrt.org/toh/start#d-link.
    • 0
      Интересный вариант. Кстати DIR320 больше не подходит для таких целей. Dlink теперь выпускает DIR320NRU он сильно отличается от старого и не подходит (ну или сложнее будет, во всяком случае прошивки не совместимы) для таких целей. Еще можно посмотерь в сторону Raspberry Pi.
      • 0
        Про Raspberry Pi, так и не понял, вышла плата в тираж или нет :-) Как только будет доступна, нужно будет попробовать заказать, очень занятная железяка.
  • 0
    Для Arduino, вообще, есть готовый Motor Shield — платка с распаянным драйвером, на 2 двигателя (ЕМНИП). Реле не нужны.

    И еще вроде бы появился Arduino на ARM — может на нем можно было бы сделать все, без роутера?

    Кстати, не пробовали управлять по GSM/GPRS/3G? Задержки не сильные?
    • 0
      Насколько знаю в мотор шилде как раз реле и есть. Имхо лучше самому собрать. Но это кому как.

      Про ардуино с arm посмотрел. Насколько понял там не линь, так что камеру врядли получится подключить. Но вообще к ардуине есть и блютус шилды, и ethernet, и wi-fi (коментарий ниже).

      Управление по инету не пробовал. Сейчас постараюсь аккуратно разобрать, воткнуть модем.
      • 0
        Вообще да, там не линь.
        Я думаю, идеально будет дождаться Raspberry PI — он все же достаточно мощный, чтобы не только камеру, а и распознавание прикрутить через какой-нибудь OpenCV.

        А для управления движками взять не ардуину, а самому заЛУТить платку на простенькой Атмеге с оптопарами и мосфетами, а еще лучше взять готовый драйвер двигателей типа L293D. :) Теоретически, должно получиться меньше по размерам. Или еще как вариант arduino nano а лучше mini плюс L293D.
  • 0
    Здоровская получилась машинка.
    Кстати, под Ардуино есть не только готовые Motor-шилды, но и WiFi-шилды (например, jt5.ru/shields/wifi-shield/) работающие по принципу Serial-to-WiFi.
    • 0
      Дорого стоят, в целом относительно не нужная вещь
  • 0
    Зачем для USB-флешки поддержка MTD? Это совсем другой мир.
    • 0
      Это не для USB-флешки. Это для Flash-памяти.
  • 0
    habrastorage.org/storage2/bd9/795/47c/bd979547c372fc8bf0ddbf64f49df854.jpg
    у меня чуть проще:
    машина ребенка на радио + старый iphone с прогой вещания по wifi и немного изоленты :)
    сигнала на все кваритиру хватает
    • 0
      Айфон только для камеры?
      • 0
        угу…
        ну это на скорую руку детей повеселить
  • +2
    Алекс одобряет:
    image
  • 0
    А я просто прикручивал смартфон к обычной радиоуправляемой машинке и получал с его камеры сигнал по Wi-Fi. Дальность управления конечно не та, что у автора, но зато и возни куда меньше.
  • 0
    Блин, все так пишут, как будто это так просто накидать такие схемы, накодить да напаять. Но самое интересное, что это всё работает! Я просто в шоке, как классно вышло!

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