суббота, 2 апреля 2022 г.

Управляемый по wifi автомобиль с камерой на ESP32-CAM

 Дистанционно управляемое транспортное средство с камерой передающей изображение на экран может иметь много применений а также это весьма интересная штука. Такую штуку можно сделать на основе модуля ESP32-CAM (http://alii.pub/69872w) для чего его нужно дополнить самим транспортным средством и драйверами для его управления через данный модуль. В простейшем случае транспортным средством может быть какая либо колесная платформа поворачивающаяся по танковой схеме. Если исключить возможность заднего хода то электрическая схема всей конструкции может быть очень простой:

Рисунок 1 - Схема радиоуправляемого автомобиля с камерой

В схеме имеется гальваническая развязка силовой и логической части для защиты модуля ESP32-CAM. Используются оптроны 4N33 с током коллектора до 100мА. Это не очень большой ток поэтому моторы должны быть соответственно не очень мощными или оптроны должны быть мощнее в случае использования мощных двигателей. Модуль следует подготовить, об этом есть статья https://electe.blogspot.com/2022/03/esp32-cam.html. После того как пароль от wifi вписан нужно найти то ветвление (во вкладке app_httpd.cpp) в котором прописывалось включение светодиода но только теперь добавить строки для управления пинами 12 и 13 например так:
    else if(!strcmp(variable, "left")) 
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,HIGH);
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
    } 
    else if(!strcmp(variable, "right"))
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,LOW);
      pinMode(13,OUTPUT);
      digitalWrite(13,HIGH);
    }
    else if(!strcmp(variable, "forward"))
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,HIGH);
      pinMode(13,OUTPUT);
      digitalWrite(13,HIGH);
    }
    else if(!strcmp(variable, "stop"))
    {
      pinMode(12,OUTPUT);
      digitalWrite(12,LOW);
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
      pinMode(12,INPUT);
      pinMode(13,INPUT);
    }  
Теперь чтобы модуль заработал осталось поменять соответствующим образом фронтенд который накодится по вкладке camera_index.h. В коде на этой вкладке есть 2 массива для разных камер. Нужно выбрать массив с камерой которая используется и заменить его содержимое. Для этого можно например скопировать его содержимое в программу для разархивации из формата .gz в .html потом изменить html код, после чего сжать его программой архиватором в формат .gz и содержимое переместить в выбранный массив. html код который будет работать с кодом выше может выглядеть например так:
Это довольно минималистичный веб интерфейс без излишеств, только с изображением для вывода потокового видео и кнопками для управления автомобилем. Основная функция в данном коде -fetch() для отправки get запроса с командами управления моторами. А также тег img для отображения видео. В сжатом виде данный код будет выглядеть так:
Удивительно, но после сжатия размер занимаемой памяти увеличился. Возможно сжатие начнет работать нормально при больших html кодах поэтому тут можно не экономить и сделать большую и красивую веб страницу. Но конечно же в разумных пределах т.е. не стоит например подключать react или другой большой фреймворк. Модуль может этого не потянуть даже со сжатием. В результате после внесения данных поправок в стандартный скетч и загрузки его в автомобиль, получается интересная радиоуправляемая по wifi со смартфона или компьютера машинка, тест драйв которой можно посмотреть на видео:
КАРТА БЛОГА (содержание)