Контакты

Как построить схему управления на Arduino и ESP8266 с настраиваемыми таймерами, контролируемую через Wi-Fi. ESP8266 и Arduino, подключение, распиновка Управление машинкой чере модуль wifi arduino

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

C модулем Wi-Fi и Bluetooth.

На Arduino Uno WiFi предусмотрено всё для удобной работы с микроконтроллером: 14 цифровых входов/выходов (6 из них могут использоваться в качестве ШИМ-выходов), 6 аналоговых входов, разъём USB, разъём питания, разъём для внутрисхемного программирования (ICSP) и кнопка сброса микроконтроллера.

Изюминка платы - модуль WiFi ESP8266, который позволяет Arduino обмениваться информацией с другими модулями по беспроводным сетям стандартов 802.11 b/g/n.

ESP8266 позволяет прошивать плату Arduino без использования USB-кабеля в режиме OTA (Firmware Over The Air - «микропрограммы по воздуху»).

Видеообзор платы

Подключение и настройка

Для начало работы с платой Arduino Uno WiFi в операционной системе Windows скачайте и установите на компьютер интегрированную среду разработки Arduino - Arduino IDE.

Что-то пошло не так?

Настройка модуля WiFi

Прошивка Arduino по WiFi

Arduino Uno WiFi имеет в своём запасе ещё один приятный бонус - возможность загружать скетчи без использование USB-шнура в режиме OTA (Firmware Over The Air). Рассмотрим подробнее как это сделать.


Для этого необходимо войти в меню: Инструменты Порт и выбирать нужный порт.

Так как мы прошиваем Arduino по WiFi, плата определиться как удалённое устройство с IP-адресом

Среда настроена, плата подключена. Можно переходить к загрузке скетча. Arduino IDE содержит большой список готовых примеров, в которых можно подсмотреть решение какой-либо задачи. Выберем среди примеров мигание светодиодом - скетч «Blink».
Прошейте плату нажав на иконку загрузки программы.
После загрузки светодиод начнёт мигать раз в секунду. Это значит, что всё получилось.

Теперь можно переходить к примерам использования .

Примеры использования

Web-сервер

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

web-server.ino /* Пример простого web-сервера, работающего на Arduino Uno WiFi. Сервер показывает значения на аналоговых входах и обновляет информацию каждые две секунды. Обратитесь к серверу по адресу http:///arduino/webserver/ Обратите внимание: пример работает только с Arduino Uno WiFi Developer Edition. */ #include #include void setup() { Wifi.begin () ; Wifi.println ("Web Server is up" ) ; // Выводим сообщение о старте сервера в wifi-консоль } void loop() { while (Wifi.available () ) { process(Wifi) ; } delay(50 ) ; } void process(WifiData client) { String command = client.readStringUntil ("/" ) ; if (command == "webserver" ) { WebServer(client) ; } } void WebServer(WifiData client) { client.println ("HTTP/1.1 200 OK" ) ; client.println ("Content-Type: text/html" ) ; client.println ("Connection: close" ) ; client.println ("Refresh: 2" ) ; // Заголовок, который задаёт период обновления страницы в секундах client.println () ; client.println ("" ) ; // Формируем страницу client.println (" UNO WIFI Web-server " ) ; client.print ("

Пример вывода значений с аналоговых пинов

"
) ; client.print ("
    " ) ; for (int analogChannel = 0 ; analogChannel < 4 ; analogChannel++ ) { int sensorReading = analogRead(analogChannel) ; client.print ("
  • на аналоговом входе " ) ; client.print (analogChannel) ; client.print (": " ) ; client.print (sensorReading) ; client.print ("
  • " ) ; } client.println ("
" ) ; client.print (DELIMITER) ; // Не забудьте закрыть соединение! }

Элементы платы

Микроконтроллер ATmega328P

Сердцем платформы Arduino Uno WiFi является 8-битный микроконтроллер семейства AVR - ATmega328P.

Микроконтроллер ATmega16U2

Микроконтроллер ATmega16U2 обеспечивает связь микроконтроллера ATmega328P с USB-портом компьютера. При подключении к ПК Arduino Uno WiFi определяется как виртуальный COM-порт. Прошивка микросхемы 16U2 использует стандартные драйвера USB-COM, поэтому установка внешних драйверов не требуется.

Пины питания

    VIN: Напряжение от внешнего источника питания (не связано с 5 В от USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, если к устройству подключён внешний адаптер.

    5V: На вывод поступает напряжение 5 В от стабилизатора платы. Данный стабилизатор обеспечивает питание микроконтроллера ATmega328. Запитывать устройство через вывод 5V не рекомендуется - в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя.

    3.3V: 3,3 В от стабилизатора платы. Максимальный ток вывода - 1 А.

    GND: Выводы земли.

    IOREF: Вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера. В зависимости от напряжения, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5 В, так и с 3,3 В устройствами.

Порты ввода/вывода

    Цифровые входы/выходы: пины 0 – 13
    Логический уровень единицы - 5 В, нуля - 0 В. Максимальный ток выхода - 40 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.

    ШИМ: пины 3 , 5 , 6 , 9 , 10 и 11
    Позволяют выводить 8-битные аналоговые значения в виде ШИМ-сигнала.

    АЦП: пины A0 – A5
    6 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 значений). Разрядность АЦП - 10 бит.

    TWI/I²C: пины SDA и SCL
    Для общения с периферией по синхронному протоколу, через 2 провода. Для работы - используйте библиотеку Wire .

    SPI: пины 10(SS) , 11(MOSI) , 12(MISO) , 13(SCK) .
    Через эти пины осуществляется связь по интерфейсу SPI. Для работы - используйте библиотеку SPI .

    UART: пины 0(RX) и 1(TX)
    Эти выводы соединены с соответствующими выводами микроконтроллера ATmega16U2, выполняющей роль преобразователя USB-UART. Используется для коммуникации платы Arduino с компьютером или другими устройствами через класс Serial .

Светодиодная индикация

Разъём USB Type-B

Разъём USB Type-B предназначен для прошивки платформы Arduino Uno WiFi с помощью компьютера.

Разъём для внешнего питания

Разъём для подключения внешнего питания от 7 В до 12 В.

Регулятор напряжения 5 В

Когда плата подключена к внешнему источнику питания, напряжение проходит через стабилизатор MPM3610 . Выход стабилизатора соединён с пином 5V . Максимальный выходной ток составляет 1 А.

Регулятор напряжения 3,3 В

Стабилизатор MPM3810GQB-33 с выходом 3,3 вольта. Обеспечивает питание модуля WiFi ESP8266 и выведен на пин 3,3V . Максимальный выходной ток составляет 1 А.

ICSP-разъём для ATmega328P

ICSP-разъём предназначен для внутрисхемного программирования микроконтроллера ATmega328P. С использованием библиотеки SPI данные выводы могут осуществлять связь с платами расширения по интерфейсу SPI. Линии SPI выведены на 6-контактный разъём, а также продублированы на цифровых пинах 10(SS) , 11(MOSI) , 12(MISO) и 13(SCK) .

ICSP-разъём для ATmega16U2

ICSP-разъём предназначен для внутрисхемного программирования микроконтроллера ATmega16U2.

Часть 1

Последовательный WIFI модуль для Arduino

Это первая из трех инструкций, которая поможет вам использовать ESP8266 с Arduino. В этом первом руководстве вы узнаете, как установить и протестировать работу модуля, подсоединенного к Arduino.

ESP8266 – это, наверное, самый универсальный модуль с последовательным интерфейсом для соединения различных физических предметов («вещей») с интернетом, поэтому он так популярен в сфере «Интернета вещей». Это законченный модуль, который состоит из микропроцессора, доступного для программирования напрямую через ArduinoIDE (C++), или в любой другой среде программирования (обычно используется язык высокого уровня “LUA”).

Для управления «вещами» не нужна сама плата Arduino в качестве интерфейса, потому что ESP8266 уже имеет 2 GPIO (Интерфейс ввода/вывода общего назначения). Множество дополнительной важной информации вы сможете найти на форуме, посвященном ESP8266.

Характеристики:

  • 802.11 b / g / n
  • Wi-FiDirect (P2P), программная точка доступа soft-AP
  • Интегрированный стек протоколов TCP / IP
  • Интегрированный TR свитч, балун, LNA, усилитель мощности и согласующая сеть (matchingnetwork)
  • Интегрированные PLL, регуляторы, DCXO и системы управления мощностью
  • + 19.5 дБ выходная мощность в режиме 802.11b
  • Отключение при превышении утечки тока <10uA
  • 1MB флэш память
  • Интегрированный 32-битный центральный процессор с низким энергопотреблением, может быть использован как процессор приложений
  • SDIO 1.1 / 2.0, SPI, UART STBC, 1 × 1 MIMO, MIMO 2 × 1
  • A-MPDU и A-MSDU агрегирование, 0.4 мс пустой промежуток
  • Wakeup пакеты и передача <2мс
  • Потребление энергии в режиме ожидания <1.0мВт (DTIM3)

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

До сих пор я изучал только ESP8266 в соединении с Arduino, заменяя необходимость в более дорогих WiFi шилдах. (Шилд – это печатная плата, которую вы устанавливаете на Arduino для увеличения его функциональности).

Шаг 1: ESP 8266 характеристики и пины



Итак, сначала необходимо протестировать модуль AT командами, которые являются стандартными. Как правило, модуль поставляется от производителя с установленными настройками скорости передачи данных в 115200 бодов. Иногда это создает неудобства, например, в случае с ArduinoUNO, только однажды HWSerial “0” (пины 0 и 1) мог работать на такой скорости. Проблема в том, что программа SerialMonitor для PC также использует этот последовательный порт. («PC» используется здесь как усредненный термин, надеюсь, мой Macне слышит меня;) Решение для ArduinoUNO нашлось в виде использования библиотеки "SoftwareSerial", чтобы заставить два других универсальных пина (GPIO) работать в режиме последовательного порта (SW). Это хорошо работает тогда, когда скорость передачи данных не превышает 19200 бодов. Отлично! Но что делать, если ESP8266 изначально запрограммирован на работу с более высокой скоростью? Решением может быть перепрограммирование. Но не все прошивки, которые загружены в устройство на заводе, поддерживают перепрограммирование модуля. Таким образом, сначала нужно обновить прошивку. В некоторых постах в интернете описывается, как это сделать. Я не буду загружать вас перепрошивкой, скоростью и т.д., для упрощения процесса будет использована плата ArduinoMEGA, на которой есть 4 аппаратных последовательных порта (4 HWserialports) .

Порты на плате MEGA:

  • TX0 / RX0 ==> Pin 1, 0 (то же, что UNO) ==> "Serial 0"
  • TX1 / RX1 ==> Pin 18, 19 ==> "Serial1"
  • TX2 / RX2 ==> Pin 16, 17 ==> "Serial2"
  • TX3 / RX3 ==> Pin 14, 15 ==> "Serial3"

Для моих тестов я буду использовать последовательный порт 2 (Serial 2) (пины 16 и 17).

Давайте подробнее рассмотрим модуль:

  • Питание: 3.3 В. Это важно, т.к. модуль не работает с напряжением в 5 В, и может сгореть. Входные пины также не поддерживают напряжение 5 В, поэтому при получении сигнала Arduino важно использовать конвертер уровня напряжения (как раньше их называли «делитель напряжения»). Другая важная вещь – это иметь независимый источник питания на 3.3 В, т.к. не всегда Arduino выдает требуемый ток для корректной работы модуля.
  • Модуль имеет 6 пинов:
    • TX: он будет подсоединен к RX2 на плате MEGA (может быть соединен напрямую, т.к. MEGA интерпретирует 3.3 В как HIGH)
    • RX: TX2 подсоединен к MEGA через конвертер уровня напряжения
    • VCC: 3.3В
    • GND: Земля. Важно помнить, что необходимо подсоединять GND платы ESP8266 к GND на плате MEGA.
    • CH_PD (*) : подсоединен к пину 4 последовательного порта на плате MEGA, сброс для начала обмена данными
    • RST: Сброс, обычно подсоединяется к VCC
    • GPIO0: свободно (Интерфейс ввода/вывода общего назначения)
    • GPIO2: свободно (Интерфейс ввода/вывода общего назначения)

(*)На некоторых сайтах в интернете показано, что этот пин напрямую подсоединен к VCC. В моем случае без «сброса» по последовательному порту SW (устанавливает пин в значение LOW) ESP8266 не работает.

Продаются адаптеры для включения модуля в макетную плату, т.к. физически расстояние между пинами ESP8266 не совпадает с отверстиями на макетной плате. Для соединения я использовал обычный кабель «мама/папа» типа FTDI (см. ниже). Цвета совпадают с диаграммой соединений.

Шаг 2: Цепь, которая будет использована в тестах

Ничего особенного в диаграмме аппаратных последовательных соединений (HW). Красная пластина – это независимый источник питания 3.3 В, смонтированный на макетной плате. Обратите внимание, что желтый провод соединен с TX2 на Arduino, проходит через делитель напряжения (1K и 2.2K резисторы), таким образом TX2 – это HIGH (5В), ESP8266 получает примерно 3.3В (для него это HIGH).

Шаг 3: Тестирование ESP8266 с помощью AT-команд

Идея этого скетча состоит в тестировании и настройке модуля, который позволяет вводить AT-команды и видеть вывод в программе SerialMonitor.

В части «комментарии» перечислены основные AT-команды. В начале загрузки программы после имени модуля вы увидите много ненужного для нас текста в окне SerialMonitor, затем слово «ready». С этого момента вы можете вводить AT-команды.

Начните с простого «АТ», модуль должен ответить «ОК», протестируйте другие команды.

Картинка показывает, что должно появляться в окне SerialMonitor после того, как вы ввели различные команды.

  • AT для тестовых примеров:
    • AT =====> ESP8266 возвращает OK
    • AT + RST =====> ESP8266 рестарт и возврат OK
    • AT + GMR =====> ESP8266 возвращает версию AT; SDK version; id; OK
    • AT + CWMODE? => ESP8266 возвращает режим работы
    • AT + CWLAP ===> ESP8266 возвращает обнаруженные точки доступа
    • AT + CIFSR ===> ESP8266 возвращает установленный IP
    • AT + CIPMUX = 1 ==> Устанавливает плате ESP8266 режим работы с несколькими соединениями
    • AT + CIOBAUD = 9600 ==> Изменить скорость обмена данными ==> ESP8266 возвращает OK
    • AT + CIPSERVER = 1.80 ==> Устанавливает режим SERVER порт: 4040
    • AT + CWMODE = 3 ==> Работа ESP8266 в комбинированном режиме (точка доступа (2) и сервер (1))
    • AT + CWSAP = "Acc_Point_name", "password", wifi_Channel, cript # ==> j.
    • AT + CWSAP = "ESP_8266_AP," 1234 ", 3.0
    • AT + CWJAP = "SSID", "password" ==> Подключается к сети WiFi
    • * = AT + CWJAP "ROVAI TIMECAP", "-1 mjr747"

****************************************************************** /

В этой статье информация о том как собрать свой танк, оснащенный Web Камерой и управляемый посредством Wifi роутера.

Необходимые материалы:

  1. Web Camera
  2. Роутер TP-Link TL-MR3020
  3. Сервоприводы SG90 - 2шт
  4. Camera Platform Anti-Vibration
  5. Аккумулятор 7.2V 5000mah
  6. Аккумулятор 5V 2000mah
  7. Nano 3.0 Atmel ATmega328
  8. L298N motor driver
  9. Провода, термотрубки, USB хаб, диоды и другое.
  10. Платформа на ваш вкус, я выбрал DD1-1

Сборка нашего монстра
Настройка Роутера MR3020.
Первым делом начнем с роутера. Я долго думал что выбрать OR-WRT или CyberWRT. OR-WRT гибок в настройках, но все редактирование и внесения своих настроек осуществляется через терминал с помощи программы Putty. А так как Я боялся на тот момет работать через терминал, Я выбрал где есть графический интерфейс это CyberWRT, плюс возможно подключение через USB порт.
Для того что бы изменить прошивку нашего роутера, нужно скачать прошивку CyberWrt MR3020.

Как мы скачали, делаем следующее:

1) Включить роутер и подождать загрузки.
2) Зайти и залогиниться на 192.168.0.254 (по умолчанию admin\admin)
3) Найти в меню слева System Tools, там пункт System Upgrade и залить прошивку через веб-форму
4) Дождаться перезагрузки (порядка 4х минут)
Роутер готов к настройке.

Можно выбрать один из режимов: «Точка доступа» и «Клиент Wi-Fi сети». Для настройки режима Клиента:
- выберите режим «Клиент Wi-Fi сети»
- IP адрес Вашего устройства (по этому адресу будет доступно Ваше устройство. Постарайтесь выбрать незанятый IP. Например: 192.168.1.100)
- Маска подсети (255.255.255.0)
- Шлюз (например, IP Вашего домашнего роутера или шлюза - 192.168.1.1)
- Тип шифрования (тип шифрования, используемый в Вашей домашней сети)
- Пароль (пароль, для доступа к Вашей домашней сети)

Если сделали все правильно, то у вас пойдет RSS строка в нижней части экрана.

Когда все заработала, у вас появятся раздел модули, там вы находите модуль "РОБОТ". Устанавливайте. Готово.

Подключение L298N, Arduino Nano, MR3020, Камера и другое

На картинке все наглядно показано, но на всякий случай напишу.

Вывод Arduino DIGITAL 4 - к IN1 пину модуля.
Вывод Arduino DIGITAL 5 - к IN2 пину модуля.
Вывод Arduino DIGITAL 6 - к IN3 пину модуля.
Вывод Arduino DIGITAL 7 - к IN4 пину модуля.
Вывод Arduino GND - к GND клеме модуля.
GND клема модуля - Минус аккумулятора.
7.2V клема модуля - Плюс аккумулятора.
RM клема модуля - Правый моторчик.
LM клема модуля - Левый моторчик.
USB порт Arduino - Подключаем к USB хаб
Web Камера - Подключаем к USB хаб
USB хаб - Подключаем к USB роутера

Питание так скажем логистики, осуществляется вторым аккумулятором. Емкость 2000 mA/h 5v, дабы не спалить роутер. Да и с двумя аккумуляторами робот стабильней работает. Так вот, его мы подключаем просто в разъем микро USB. Через USB хаб который подключен к роутету питанию уже получает и камера и наша ардуинка.

Скетч для Arduino Nano
Вам необходима скачать библиотеку CyberLib , она предназначена только для Atmega 328.

/* Версия 1.5 WIFI Tanka на DD1-1 Реализовано: 1) Движение камеры по X и Y 2) Гудок 3) Фары 4) Звук при включении */ #include // Подключаем библиотеку #include // Подключаем библиотеку сервоприводов Servo myservo1; Servo myservo2; long previousMillis; // Нужно для таймера int LedStep = 0; // Счетчик для LED int i; #define robot_go {D4_High; D5_Low; D6_Low; D7_High;} #define robot_back {D4_Low; D5_High; D6_High; D7_Low;} #define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} #define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;} #define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;} #define LED_ON {D13_High;} #define LED_OFF {D13_Low;} #define Headlamp_ON {D8_Low;} #define Headlamp_OFF {D8_High;} #define Buzzer {tone(11, 494, 500);} #define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D13_Out;} uint8_t inByte; void setup() { myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту D11_Out; D11_Low; // Динамик Headlamp_OFF; // Фары выкл по умолчанию for(uint8_t i=0; i<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота init; // Инициализация портов //Buzzer; // Инициализация портов динамика UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LED_ON; // Включить LedStep = 1; // Счетчик шагов } if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LED_OFF; // Выключить LedStep = 2; // Счетчик шагов } if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. LedStep = 0; // Счетчик шагов } if (UART_ReadByte(inByte)) //Еесли что то пришло { switch (inByte) // Смотрим какая команда пришла { case "x": // Остоновка робота robot_stop; break; case "W": // Движение вперед robot_go; break; case "D": // Повопорт влево robot_rotation_left; break; case "A": // Поворот вправо robot_rotation_right; break; case "S": // Движение назад robot_back; break; case "U": // Серво поднимается myservo1.write(i -= 20); break; case "J": // Серво опускается myservo1.write(i += 20); break; case "H": // Серво поворачивается влево myservo2.write(i += 20); break; case "K": // Серво поворачивается вправо myservo2.write(i -= 20); break; case "Y": // Серво поворачивается 85 myservo1.write(85); myservo2.write(85); break; case "F": // Включить фары Headlamp_ON; break; case "V": // Выключить фары Headlamp_OFF; break; case "I": // Гудок Buzzer; break; } } wdt_reset(); }

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

Итак будем управлять двумя реверсивными (вращение в обе стороны) двигателями: основным и рулевым. Питать их будем от аккумулятора 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-сети.

Понравилась статья? Поделитесь ей