На имевшемся у меня модуле Wemos D1 mini (китайская копия китайского модуля) аналоговый вход имел перед собой делитель напряжения, так как аналоговый вход самого ESP8266 принимает максимум 1 вольт. Этот делитель позволяет подавать на аналоговый вход платы A0 до 3.3В, но напряжение нашего аккумулятора может быть и 4.2В, поэтому нужно немного поменять коэфициент делителя.
Находим по маркировке или омметром резистор R2 (он рядом со входом A0) с сопротивлением 100 кОм и меняем его на что-то в диапазоне 30-50 кОм.
Вуаля, теперь можем подавать на A0 до 5В.
Находим по маркировке или омметром резистор R2 (он рядом со входом A0) с сопротивлением 100 кОм и меняем его на что-то в диапазоне 30-50 кОм.
Вуаля, теперь можем подавать на A0 до 5В.
wifi_tank.ino
5.6 KB
Я набросал в Arduino IDE примитивный скетч, который крутит двигателями, выдаёт напряжение аккумулятора, управляется по UDP и поддерживает обновление по воздуху.
Для уменьшения акустического шума, частота ШИМ для управления двигателями установлена в 16 кГц, которые слышно только если приложить двигатель непосредственно к уху (ну или если у вас слух летучей мыши).
Для уменьшения акустического шума, частота ШИМ для управления двигателями установлена в 16 кГц, которые слышно только если приложить двигатель непосредственно к уху (ну или если у вас слух летучей мыши).
После трёх или четырёх итераций впихивания с заменой WiFi модуля на вариант ESP-WROOM-02 родился этот красавец (уродец).
Media is too big
VIEW IN TELEGRAM
Набросал приложение на electron, которое опрашивает геймпад и отправляет сигналы управления роботу. Каждый стик управляет своей гусеницей.
Proof-of-concept показал свою жизнеспособность, поэтому был разведён бутерброд из двух плат, но уже с добавлением микросхемы гироскопа+акселерометра MPU6050 для выравнивания курса танка при движении и питание сделано от buck-boost конвертера TPS63021 с выходом 3.3В для максимального использования ёмкости аккумулятора.
Пока ко мне идут новые платы и комплектация, расскажу как сделано управление с компьютера.
Сам Electron представляет собой связку из браузера Chromium и node.js
Большую часть функционала я реализовал подключением готовых модулей, как в конструкторе:
Танк вещает по mdns свой локальный домен tank1.local, доступный из моей домашней сети. Для его обнаружения компьютером используется модуль mdns-js
Отправка UDP пакетов реализована через модуль самой ноды dgram. UDP логично выбран за низкие задержки передачи, относительно TCP.
Опрос геймпада делается модулем gamepad, который легко ставится на чистую ноду, но для электрона его нужно пересобрать по инструкции.
В будущем передачей команд управления танкам и отправкой изображения игрокам будет заниматься один сервер на той же node.js
Сам Electron представляет собой связку из браузера Chromium и node.js
Большую часть функционала я реализовал подключением готовых модулей, как в конструкторе:
Танк вещает по mdns свой локальный домен tank1.local, доступный из моей домашней сети. Для его обнаружения компьютером используется модуль mdns-js
Отправка UDP пакетов реализована через модуль самой ноды dgram. UDP логично выбран за низкие задержки передачи, относительно TCP.
Опрос геймпада делается модулем gamepad, который легко ставится на чистую ноду, но для электрона его нужно пересобрать по инструкции.
В будущем передачей команд управления танкам и отправкой изображения игрокам будет заниматься один сервер на той же node.js
Китайское производство сообщает, что платы готовы к отправке и через пару недель будут у меня. Пока я немного упрощу управление ботом.
Сейчас танк крутит гусеницами с задаваемой с геймпада скоростью, и не имеет «органов чувств» для получения информации об окружающем мире. Из-за этого он не может узнать, что упёрся в какое-то препятствие и при проскальзывании или брокировке гусеницы немного сбивается с курса во время движения.
Одним из датчиков танка будет интегральный гироскоп, который при регулярном опросе выдаёт значение углов поворота относительно трёх пространственных осей с предыдущего измерения. Если короче - скорость поворота. Интегрируя эту скорость, мы получим угол поворота танка относительно начального положения. Идеально для корректировки ориентации на коротком отрезке времени.
На гифке гироскопически стабилизированный подвес для видеосъёмки смартфоном.
Сейчас танк крутит гусеницами с задаваемой с геймпада скоростью, и не имеет «органов чувств» для получения информации об окружающем мире. Из-за этого он не может узнать, что упёрся в какое-то препятствие и при проскальзывании или брокировке гусеницы немного сбивается с курса во время движения.
Одним из датчиков танка будет интегральный гироскоп, который при регулярном опросе выдаёт значение углов поворота относительно трёх пространственных осей с предыдущего измерения. Если короче - скорость поворота. Интегрируя эту скорость, мы получим угол поворота танка относительно начального положения. Идеально для корректировки ориентации на коротком отрезке времени.
На гифке гироскопически стабилизированный подвес для видеосъёмки смартфоном.
Донором гироскопа станут останки модели аппарата на воздушной подушке, где гироскоп использовался с той же целью - для стабилизации курса.
В аппарате на предыдущей фотографии для поворота вокруг вертикальной оси используется тот же принцип, что и в популярных сейчас коптерах. Считаю, что вам интересно будет узнать, как это работает без использования рулей направления.
Если объяснять просто, то винт толкает воздух, а воздух этому сопротивляется. Это сопротивление передаётся на раму коптера, которая в воздухе ни за что не закреплена, и потому начинается вращаться в обратном пропеллеру направлении для компенсации сопротивления воздуха. Это называется реактивным моментом винта.
Возьмём для примера коптер с четыремя пропеллерами. Два его пропеллера вращаются по часовой стрелке, и ещё два против часовой. Такая схема позволяет пропеллерам разного направления компенсировать реактивные моменты друг друга. Теперь, чтобы повернуть коптер против часовой стрелки, нам нужно увеличить обороты винтов, вращающихся по часовой стрелке, увеличивая их реактивный момент.
Если объяснять просто, то винт толкает воздух, а воздух этому сопротивляется. Это сопротивление передаётся на раму коптера, которая в воздухе ни за что не закреплена, и потому начинается вращаться в обратном пропеллеру направлении для компенсации сопротивления воздуха. Это называется реактивным моментом винта.
Возьмём для примера коптер с четыремя пропеллерами. Два его пропеллера вращаются по часовой стрелке, и ещё два против часовой. Такая схема позволяет пропеллерам разного направления компенсировать реактивные моменты друг друга. Теперь, чтобы повернуть коптер против часовой стрелки, нам нужно увеличить обороты винтов, вращающихся по часовой стрелке, увеличивая их реактивный момент.
И наглядная демонстрация (пропеллер крутится по часовой стрелке):
Для компенсации нудятины вот вам короткая история провала: у меня всего на пару секунд пропало изображение с камеры коптера, а сильный ветер скорректировал его курс до встречи со стеной ближайшего здания. В итоге сломаны два луча рамы и оборвана фаза одного из двигателей.
This media is not supported in your browser
VIEW IN TELEGRAM
Код для получения данных с гироскопа готов. Он калибрует датчик при включении и интегрирует получаемую угловую скорость для расчёта угла поворота вокруг вертикальной оси. Работает прекрасно.
Следующим шагом будет добавление алгоритма стабилизации курса на основе PID-регулятора.
Следующим шагом будет добавление алгоритма стабилизации курса на основе PID-регулятора.