Управление машинкой через wifi. Делаем бюджетный чудо корабль с управлением по WiFi на базе ESP8266. Измерения и тесты

Всеми процессами в стиральной машине управляет центральный процессор, используя систему датчиков обратной связи и ориентируясь на введенную пользователем программу. Сам процессор работает под управлением специальной операционной системы (совершенно непохожей на привычную Windows). Информация о ходе стирки высвечивается на дисплее. Но если стиральная машина оснащена Wi-Fi модулем, данные могут передаваться в специальном радиодиапазоне на роутер или точку доступа, а через нее – в сеть интернет. И тогда пользователь сможет, имея на руках смартфон с Wi-Fi или мобильным интернетом и приложение, привязанное к конкретной стиральной машине, получить сведения и ввести команды. Например, такие:

  • задать программу стирки
  • выбрать температуру
  • начать процесс
  • если процесс завершен, открыть дверцу, чтобы белье не залеживалось
  • в случае передачи машиной сообщений об ошибке в работе – перекрыть подачу воды и отключить питание
  • изменить параметры в ходе стирки
  • В машину с Wi-Fi модулем перед уходом нужно только загрузить вручную одежду – этого машина пока не может. Даже стиральный порошок можно засыпать заранее на несколько стирок, и каждый раз агрегат сам будет отбирать нужное для конкретного режима количество.

    Преимущества и недостатки

    Преимущества очевидны: конечно, это более широкие возможности для удаленного управления. Раньше пользователь мог лишь отсрочить время старта. Сейчас он может полностью управлять устройством, будучи в любой точке планеты – нужен лишь включенный Wi-Fi роутер.

    Недостатки тоже есть, можно выделить два: более высокая стоимость и относительная сложность в обслуживании таких моделей.

    Несколько интересных примеров из нашего каталога

    У нас более 300 моделей с Wi-Fi модулем и возможностью управления с планшета или смартфона. Мы отобрали пять характерных представителей в разных ценовых классах:


    Еще одна модель из Южной Кореи. Именно Самсунг наиболее активно оснащает свои изделия Wi-Fi модулями, представляя большинство таких моделей в каталоге.

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


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

    Стильный дизайн, высокая, до 1400 об/мин, скорость отжима и полная защита от протечек удачно дополнены наличием возможности удаленного доступа. И конечно, все программы стирки тоже есть.


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

    Функция Fuzzy Logic позволит вычислить на основе статистики стирок наиболее оптимальные показатели расхода воды и электроэнергии, количества вращений и время полоскания.



    В заключение скажем, что стиральные машины с Wi-Fi модулем несомненно подойдут всем людям, ведущим активный образ жизни. Не стоит беспокоиться о безопасности во время вашего отсутствия – эти агрегаты хорошо защищены от протечек и неполадок с электросетью. Благодаря возможности контроля через смартфон стирка стала еще более мобильной.

    Это небольшой рассказ о том, как построить робота в виде игрушечного автомобильчика с видео камерой, которым можно управлять с помощью компьютера или смартфона на ОС Android через WiFi. Устройство не имеет никакой автономности в смысле своего поведения (типа распознавания чего-либо), управление - только от человека, поэтому «робот» - это не совсем подходящее слово в названии.
    Началось все с того, что идея управления игрушечными устройствами от первого лица (т.н. FPV) мне показалась чрезвычайно интересной с точки зрения собственно процесса. Ведь мы можем таким образом реализовать свое присутствие, не в виртуальном мире, а в реальном.
    Проще и быстрее всего применить эту идею на игрушечных или модельных автомобилях. Текущие технологии должны давать такую возможность промышленности и предложить массу подобных вещей. Однако это предложение оказалось достаточно дорогим по сравнению тем что можно сделать самому.
    Так как это мой первый проект, я ни программировать, ни даже паять нормально не умел, и я решил сначала поискать в интернете единомышленников и их варианты решения данной задачи.
    Начав изучение вариантов, как можно осуществить эту идею, я нашел очень подробное описание подобного проекта . A его автор с радостью помог мне разобраться в проблемах, возникших при создании робота.
    Так я впервые и узнал что такое …duino. Так как это был уже готовый вариант микроконтроллера, где не нужно было паять обвязку к нему, я выбрал именно его. Также очень понравилось присутствие бутлоадера, позволяющего прошивать микроконтроллер без программаторов.

    Для реализации данного проекта понадобится:

    • Микроконтроллер Arduino (любой: nano, uno, mega)
    • Аккумулятор 9,6вольт
    • Китайская машинка на радиоуправлении
    • Роутер dir320 (или любой другой поддерживающий OPEN-WRT прошивку)
    • Вебкамера Logitech c310 или любая другая с UVC потоком






    Программ пять: на PC, на Android, на роутере (сервер управления и видеопоток), и в микропроцессоре.
    Схема работы: соединяем настольный компьютер (ноутбук, далее - PC) с роутером по WiFi. На роутере при его включении автоматически загружаются 2е программы:
    1) сервер. Эта программа открывает сокет (соединение) на определенном порту и ждет, когда по этому порту с ней соединится клиент (любая программа, которая обратится в этот порт и также, особым образом скажет серверу, что она готова работать через открытый сокет). Далее, после установки соединения, все что придет от клиента, будет перенаправлено по определенному пути, для нас это COM-порт, на этом порту подключен микропроцессор. И наоборот, все что придет со стороны COM-порта, будет переслано клиенту.
    2) программа обработки видео, захватывает его с usb камеры и шлет на определенный порт. Для его просмотра нужно всего лишь иметь соединение с роутером на этом порту.
    После того, как между компьютером и роутером установлено WiFi-соединение, запускаем на PC программу для управления роботом (тот самый клиент), эта программа соединяется с программой-сервером на роутере. Эта же или другая программа транслирует видео с WiFi роутера.
    Далее, пользователь может управлять автомобильчиком и нажимает, например, кнопку «вперед». Программа на PC, отсылает команду «вперед» прямо на роутер, на его IP, но на определенный порт. На роутере, эта команда поступает в программу-сервер, т.к. выслана она на его порт, и в рамках открытого для этого сокета. Программа-сервер, ничего не делая с этой командой, просто отправляет её в COM-порт. Таким образом, команда «вперед» оказывается в микропроцессоре, который в ответ на нее, дает сигнал «вперед» на один из своих выводов. К таким выводам процессора подсоединена схема управления двигателями, т.к. сам микропроцессор управлять ими не может в силу своей маломощности.
    Управлять исполнительным устройством через роутер, без микропроцессора не получится, т.к. микропроцессор может формировать сигналы «1» (напряжение >2,5v) или «0» (меньше обозначенного) на любом из десятка-другого своих выводов. У роутера же выводов нет, есть только порты ввода/вывода, типа USB или COM (serial), в которых по 2-3 провода.
    Теперь часть практическая. Заранее скажу, что несмотря на кажущиеся сложности, все на самом деле просто, если речь идет о простом копировании этого проекта – ведь все уже сделано и работает. Нужно просто выполнить в точности эту инструкцию.
    Изначально микроконтроллером был freeduino maxserial у которого был com port, который был одним из немногих(как я тогда считал) для подключения к uart роутеру, для этого нужно было паять переходник с uarta на com чтобы соединить его с роутером. Его брать я не очень хотел, так как оригиналом есть все-таки Arduino, да и Freeduino в Украине нет.



    Как я выяснил потом, все было это просто излишнее нагромождение схемы. Обойтись можно всего 1 проводком который будет идти от TX роутера(на рисунке) к RX (0 пин) микроконтроллера.
    Непонятно почему но на фридуине оказалось для нормального подключения нужно tx на tx. Скорее всего просто неверно нанесено обозначение. (тут 0 пин tx) По этому лучше брать оригинальный .
    Машинку я купил хорошую, хоть и китайскую



    Машинка оказалась очень мощная, 5 кг на ровной поверхности тянула очень уверено. Также у нее в комплекте шел аккумулятор на 6 вольт. Что касается электроники, то в машинке уже есть готовый драйвер двигателей, на который можно подать управляющие слаботочные выходы с микроконтроллера (если бы с машинкой не повезло - драйвер моторов можно было взять тоже от arduino)
    Роутер требует прошивку openwrt и список пакетов указанных на рисунке.



    Роутер можно настроить как точку доступа, которой могут подключится любые устройства, имеющие WiFi. И, даже если не будет программного обеспечения для управлении машинкой – использовать ее как беспроводную камеру видеонаблюдения.
    Камера с310 просто подключается к порту usb на роутер и не требует пайки, требует небольших настроек в роутере. Проект имеет 2 цепи питания, 1 цепь питается от 9,6 вольт - роутер и микроконтроллер, 2 цепь питается от 6 вольт - привод и рулевое машинки. Можно обойтись всего 1 источником питания в 9,6 вольт, но более емкостным. Роутер потребляет 2А, микроконтроллер потребляет почти незаметно, машинка 4А.
    Программа микроконтроллера обрабатывает сообщения, которые приходят с последовательного порта роутера, обработка происходит побайтово через portb arduino, например если пришло в роутер 2, то, переведя в двоичную систему получаем 00000010 – что соответствует 2 пину на portb. Такое решение позволяет управлять одновременно несколькими пинами. Вот что получилось в итоге:




    Приложение для андроид:



    Приложение для пк:




    Данный проект еще не закончен и продолжает совершенствоваться.
    В планах использовать arduino mega, роутер mr3020, вебакамеру оставить как есть(возможно добавить сферическую линзу для большего обзора), задействовать шим для плавного и точного управления, использовать сервопривод для поворотов, добавить дальномер. Добавить видео на Android.



    - полный каталог плат

    Летом появилась мысль сделать радиоуправляемую машинку, но не просто нечто похожее на творение китайской инженерной мысли, которое продается на каждом шагу, а машинку, управлять которой можно было бы с компьютера или телефона. Понято, что машинка, которой можно управлять через 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. Так как этот демон нужно после изменения его настроек перезапускать, моя программа запускает скрипт по адресу

    Канал Science Vetal показал, как сделать машинку на управлении практически от любого андроид смартфона. При этом не будем использовать «Arduino», возьмем микроконтроллер от китайского производителя «Espressive» «esp 8266», штуковина представляет из себя «Arduino» плюс wi-fi модуль.
    Все радиодетали и модули в этом китайском магазине .

    Вы помните «Arduino uno», оно большое, а здесь маленькая такая штучка, в которой есть wi-fi, возможности «Arduino». К этому микроконтроллеру китайцы разработали такой shield. Он удобный: можно подключить 2 двигателя, или даже 4, при этом можно использовать 11 выводов. Так же возьмем 2 двигателя, 2 стандартных «Arduino» колеса.

    Когда на «aliexpress» вводишь «Arduino» в поиск, открываются не только платы, но, сопутствующие товары. Интересные элементы, обязательно что-то интересное найдете, попробуйте.

    Возьмём для питания 2 аккумулятора 18650, к ним бокс для 2-х акб, также возьмем 2 уголка, размеры около 5 дюймов, это не столь важно там плюс-минус полдюйма, дюйм. Дело в том, что конструкция может быть ваша, но представленная в ролике авторская удачна, проста.

    Берем 2 уголка, при помощи винтов их необходимо соединить, чтобы сюда спокойно помещался shield. Сверлом, диаметр которого 3 мм, делаем 4 отверстия. Берем малюсенькие винты, зажимаем, соединяем эту конструкцию. Такая штуковина получается, прочности данного соединения для такой машинки, как делаем, предостаточно.

    Сбоку для вала видео сверлим отверстие диаметром 8 мм, получается конструкция, но необходимо еще сделать 3 отверстия диаметром 3 мм: одно для этого выступа, для этих отверстий крепежных еще 2.

    Берем, подставляем таким способом, закручиваем с помощью винтов. Один из идеальных случаев, машинка нравится, сюда нечего добавить, ее незачем переделывать. Делаем отверстия для крепления платы.

    Ничего не меняем, кроме как тут, где стоит галочка, выбираем адрес к файлу, который будем заливать, затем выбираем нужный com port, нажимаем кнопочку start. Также под видео есть ссылка на программу, которую нужно установить на ваш любимый android.

    Закрепил эту плату, вставляем микроконтроллер. Подключаем провода от двигателей, смотрим, если нижний будет «A-», то с этой стороны «B-» будет верхний. Настало время прикрепить колеса. Делается это легко, так как колёса двигателей – это комплект. В этом месте сверлим отверстие диаметром 4 мм, вставляем винт. Делаем такую нехитрую операцию, регулируем высоту, даже еще ниже можно, что-то получился винт, который сильно торчит. Это лишнее. Это получается, устройство дороже на копеечки, что нам, в общем-то, не нужно, как-то оно выглядит коряво.

    Так посмотрим, как получается устройство, которое будет управляться андроидом на расстоянии через wifi. Конечно, получше штука. Отсек для аккумуляторов прикрепим термоклеем, машинка получается.

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


    Программа и скетч http://bbs.smartarduino.com/showthread.php?tid=2013
    Приложение для управления https://play.google.com/store/apps/details?id=com.doit.carset

    Подробное руководство о том как взять ESP8266, добавить немножко клея и пенопласта и подарить детям (и взрослым) массу удовольствий.

    Руководство состоит из следующих частей:







    Описание платы.

    Мозгом корабля является купленная на Алиэкспресс плата. Данная отладочная плата является удобным средством для начала работы с WiFi модулем ESP8266-12.
    На плате распаян сам модуль, а на штыревые разъёмы выведены все выводы модуля. К 6-ти выводам через токоограничительные резисторы припаяны красные светодиоды. Ещё к трём выводам припаян RGB светодиод.
    Также присутствует стабилизатор 3,3 В, распаяны резисторы обвязки модуля, на входе ADC висит фоторезистор, присутствует джампер для перевода модуля в режим программирования.
    Отдельно выведены выходы USART, причём маркировка Rx и Tx перепутаны местами.
    Ко входу питания модуля припаян батарейный отсек на 3 батарейки. А в модуль уже загружена тестовая прошивка под управлением которой, насколько я помню, создаётся новая точка доступа. Подключившись к этой точке доступа можно управлять свечением светодиодов на плате. Если как для первого раза - то это прям волшебство какое то.

    Предыстория постройки кораблика.

    В процессе вялотекущего самообразования в сторону построения умного дома, год назад был закуплена эта плата (магазин в котором была сделана покупка сейчас закрыт). Вместе с ней взял ещё два голых модуля ESP8266-12 и с помощью запустил на них два термометра/измерителя влажности, которые до сих пор успешно работают.

    Далее попытался состыковать их с MajorDoMo - открытой и бесплатной системой управления Умным Домом. Но как то не пошло это дело,- забросил до поры.
    В середине лета я наткнулся . Оказывается esp8266 можно программировать как любую ардуину!!! И ардуиновских библиотек под esp8266 портировано уже на все случаю жизни.
    Для меня настал качественно новый этап освоения esp8266…
    Вдоволь поигрался с библиотечными примерами и захотелось мне сделать нечто с практическим применением.
    Решил собрать детям для дачного водоёма самоходный кораблик, да не простой, а такой чтоб управлять им можно было с любого смартфона!


    Используемые материалы

    На строительный материал корпуса были выбраны пылящиеся в кладовке куски пенопласта.


    В качестве двигателей использованы коллекторные моторы от ДВД проигрывателя. Для управления судна было решено использовать двухмоторный привод - уменьшая обороты левого/правого двигателя заставляем совершать поворот на лево или на право.


    Гребные винты - из куска жести.
    На гребные валы замечательно подошли вязальные спицы (экспроприированные у супруги).


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


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


    Также пригодились клей Dragon и клеевой термопистолет.


    Для управления двигателями в загашнике нашлись два полевых транзистора выпаянных со старой материнской платы.
    Источником питания послужили купленные в оффлайне аккумуляторы 18650.
    Ещё понадобился маленький тумблер для подачи питания, несколько резисторов и макетная платка для соединения всего электричества между собой.




    Изготовление корабля

    Для резки пенопласта на скорую руку был собран ТермоЭлектроРезак состоящий из палки, двух длинных шурупов и куска тонкой проволоки. Проволоку лучше взять нихромовую, но у меня таковой не нашлось (а советский проволочный резистор ломать на это дело не хотелось) - поставил тоненькую стальную.
    Запитал этот импровизированный станок от через . И тот и другой были куплены благодаря здешним обзорам.
    Всего на этой фотографии пытливый взгляд может найти аж 10 товаров ранее обозреваемых на Муське.


    Регулируя напряжение на выходе DC-DC преобразователя, опытным путём необходимо установить такой нагрев проволоки ТермоЭлектроРезака, при котором пенопласт разрезается легко и непринуждённо.
    В итоге получаем более - менее ровные куски пенопласта удобные для последующей сборки.
    На корпус кораблика пошли два самых больших куска, склееные между собой клеем Дракон.


    Гребные винты изготавливаются в несколько операций:

    Нарезать из жести квадратную заготовку (у меня 20*20 мм)
    - соединив рисками диагональные углы найти центр


    - просверлить по центру отверстие (диаметр 3,5 мм)
    - затянуть подходящим винтом с гайкой (М 3*20)
    - зажав винт в патрон дрели, на малых оборотах подходящим острым предметом начертить(нацарапать) окружность
    - вырезать ровный круг


    - надрезать по имеющимся диагональным рискам круг на 2/3 радиуса и изогнуть под углом (30-45 градусов)

    Затем берём спицу. Отрезаем 25-30 мм кусок термоусадочной трубки диаметром чуть больше чем у спицы. Вращаем спицу с термоусадкой над маленьким пламенем газовой конфорки (или электрической) пока трубка не прогреется и плотно охватит спицу.
    Далее отрезаем кусок трубки ещё большего диаметра,… и т.д. пока очередную трубку можно будет одеть на шестерню двигателя. Т.К. шестерня посажена на вал двигателя достаточно плотно, то она будет хорошо передавать крутящий момент гребному валу.
    Берём последний кусок термоусадки и одеваем его одновременно на гребной вал и на двигатель.
    После прогрева термоусадки получаем хорошее соединение.




    Пора устанавливать двигатели в корпус.
    Дрелью высверливаем в корпусе два отверстия под гребные валы. Со стороны днища вставляем подшипники скольжения.


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




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

    Соединяем и спаиваем всё согласно схеме.


    Питание с аккумуляторов подаётся через тумблер и дальше идёт на двигатели и на линейный стабилизатор 3,3 В. Второй вывод каждого двигателя подключен через полевой транзистор к минусу питания. Подавая с выхода ESP8266 за затвор полевого транзистора ШИМ сигнал различной скважности импульсов мы будем регулировать скорость вращения двигателя.
    Напряжение питания также подаётся через резистивный делитель на вход ADC модуля ESP8266 для контроля состояния батареи.
    Силовые транзисторы с резисторами обвязки, выключатель питания, стабилизатор, резистивный делитель для измерения напряжения батареи - всё размещено на макетной плате. К ней же припаяны плата с модулем ESP8266, выводы аккумулятора и двигателей.
    К модулю подключен переходник USB-TTL.


    Итак, всё готово для того чтобы вдохнуть в практически готовый кораблик искру жизни…


    Программирование

    О том как установить Arduino IDE и обеспечить в ней поддержку ESP8266 достаточно хорошо расписано в вышеупомянутой .

    Для управления корабликом мы будем создавать на ESP8266 точку доступа и поднимать вэб сервер. Подключившись смартфоном к точке доступа и набрав в браузере адрес сервера (192.168.4.1) увидим страницу с элементами управления и телеметрией с борта нашего судна.


    Дабы снизить нагрузку на ESP8266, уменьшить время отклика управляющих воздействий и повысить интерактивность я решил использовать технику AJAX запросов.

    Выдержка из Википедии:

    AJAX, Ajax (ˈeɪdʒæks, от англ. Asynchronous Javascript and XML - «асинхронный JavaScript и XML») - подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся быстрее и удобнее.

    В классической модели веб-приложения:

    Браузер формирует и отправляет запрос серверу.
    В ответ сервер генерирует совершенно новую веб-страницу и отправляет её браузеру и т. д. После чего браузер полностью перезагружает всю страницу.

    При использовании AJAX:
    Пользователь заходит на веб-страницу и нажимает на какой-нибудь её элемент.
    Скрипт (на языке JavaScript) определяет, какая информация необходима для обновления страницы.
    Браузер отправляет соответствующий запрос на сервер.
    Сервер возвращает только ту часть документа, на которую пришёл запрос.
    Скрипт вносит изменения с учётом полученной информации (без полной перезагрузки страницы).


    Помучав некоторое время Гугл в поисках подходящей реализации моих хотелок, я набрёл на
    в котором позаимствовал подходящий код

    Первоначальный код

    #include #include ESP8266WebServer server(80); const char* ssid="yourSSID"; const char* password="yourPASSWORD"; String webSite,javaScript,XML; unsigned long wait000=0UL,wait001=1000UL; int LED=16;const int sliderMAX=10; // This sets the number of sliders you wantint sliderVal={60},ESPval; void buildWebsite(){ buildJavascript(); webSite="\n"; webSite+="\n"; webSite+=" This is the ESP website ... \n"; webSite+="Runtime = \n"; webSite+="Сила сигнала a= \n"; webSite+= Sila ;// Сила сигнала WiFi webSite+=" \n"; webSite+="

    \n"; for(int i=0;i \n"; // это пример слайдера webSite+="\n"; // 1 слайдер webSite+="\n"; webSite+="\n"; webSite+="\n"; webSite+="\n"; // 2 слайдер webSite+="\n"; webSite+="\n"; webSite+="\n"; webSite+="\n"; // 3 слайдер webSite+="\n"; webSite+="\n"; webSite+="\n"; webSite+="
    Обороты = \n"; webSite+="Моторов = *
    Направление = \n"; webSite+="Движения =
    Корекция = \n"; webSite+="Моторов =
    \n"; webSite+="\n"; webSite+="\n"; } String millis2time(){ // преобразование милисекунд в вид ч/м/с String Time=""; unsigned long ss; byte mm,hh; ss=millis()/1000; hh=ss/3600; mm=(ss-hh*3600)/60; ss=(ss-hh*3600)-mm*60; if(hhwait000){ buildXML(); wait000=millis()+1000UL; } if(millis()>wait001){ wait001=millis()+300; //Обновляем значения раз в 300 милисекунд Trimer = (ESPval*.0015); Serial.print(" Skorost] "); Serial.print(ESPval); Serial.print(" Povorot "); Serial.print(ESPval); Serial.print(" Trimer "); Serial.print(ESPval); Serial.print(Trimer); if (ESPval > 200){ // Если слайдер скорости > 200 if (ESPval > 600) { // Если слайдер поворота > 600 то поворачиваем на лево analogWrite(OUT1, ESPval); analogWrite(OUT2, int(ESPval * Povorot*Trimer)); Serial.print(" Le "); Serial.print(ESPval * Povorot*Trimer); } else if (400 > ESPval){ // Если слайдер поворота < 400 то поворачиваем на право analogWrite(OUT1, int(ESPval * Povorot)); analogWrite(OUT2, int(ESPval*Trimer)); Serial.print(" Pr "); Serial.print(int(ESPval * Povorot)); } else { // Если слайдер поворота > 400 и < 600то едем прямо analogWrite(OUT1, ESPval); analogWrite(OUT2, int(ESPval*Trimer)); Serial.print(" OK "); } } else { // Если слайдер скорости < 200 - выключить моторы analogWrite(OUT1, 0); analogWrite(OUT2, 0); Serial.print(" Stop "); } Serial.print(" Batareya "); Serial.println(Batareya); } }


    В коде довольно много пояснений, надеюсь всё будет понятно.
    Двигатели кораблика управляются путём изменения положения ползунков трёх слайдеров на странице.
    - Первый слайдер отвечает за скорость вращения моторов (и скорость движения кораблика соответственно). Если изменять положение ползунка этого слайдера от 20 до 100%, то будет меняться значение связанной со слайдером переменной ESPval. Значение переменной записывается в порты OUT1 и OUT2 ESP8266 (выводы которых идут на управляющие затворы полевых транзисторов) и обороты двигателей будут нарастать от 0 до максимума.
    В диапазоне положений этого ползунка от 0 до 20% в порты записываются 0 и двигатели стоят.
    - Второй слайдер отвечает за повороты (переменная ESPval). Если его ползунок находится в правом или левом положении, то значение скорости соответствующего двигателя будет снижаться на коэффициент 0,8 (константа Povorot). Двигатель будет притормаживаться, а кораблик поворачивать в нужную сторону.
    - Третий слайдер (переменные ESPval и Trimer) нужен для нивелирования разности характеристик двигателей. В зависимости от положения слайдера можно притормаживать или ускорять один из двигателей.

    К сожалению функционал измерения напряжения батареи довести до конца не удалось. В процессе наладки был сожжён вход ADC модуля (надо думать замкнул его на + батареи)…
    Измерение мощности сигнала WiFi работает, но требуется более точная калибровка.

    Для отладки использовалось подключение к домашней WiFi сети и вывод информации в последовательный порт.


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

    Скетч компилировался в IDE версии 1.6.12.

    Свободной памяти осталось более чем достаточно для воплощения в коде разных последующих хотелок.

    Если у кого будут конструктивные дополнения/исправления по коду - прошу высказываться в комментариях.


    Плавание

    Сначала были пробные запуски в акватории ванной, по результатам которых были сделаны следующие доработки:
    - 4 батарейки АА в источнике питания были безоговорочно заменены на 2 аккумулятора 18650
    - к регулировкам скорости и поворота было добавлено триммирование одного из двигателей
    - был увеличен шаг гребных винтов

    Затем в ближайший выезд на дачу судно было было торжественно отправлено в плавание на большой воде.


    Полевые испытания показали что в следующей версии необходимо:
    - усилить мощность сигнала WiFi модуля путём добавления внешней антенны
    - увеличить диаметр гребных винтов (или заказать винты на Алиэкспресс)
    - увеличить притормаживание двигателей при поворотах с 20% до 40-50%
    - доработать корпус для улучшения обтекания
    - заменить двигатели на бесколлекторные
    - сделать руль с приводом от сервомашинки
    - прикрутить FPV
    - добавить светодиодной иллюминации для ночных заплывов
    - установить на палубу фейерверк и запускать его на середине пруда
    - всё что душа пожелает…

    Но эти доработки возможно воплотятся уже в новом сезоне.

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

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

    Буду рад если этот опус вдохновит кого либо для занятий творчеством.

    Планирую купить +87 Добавить в избранное Обзор понравился +131 +257