Робот-танк. Постановка задачи

Захотелось своего домашнего питомца — робота.

Цели:

  1. Фан
  2. Прокачать скилл в робототехнике и особенно в OpenCV
  3. Надежда на интерес со стороны подрастающего поколения.

Что робот должен уметь делать:

  1. Передвигаться по квартире и улице в хорошую погоду. Управление с помощью пульта ДУ, через приложение Android, через веб интерфейс
  2. Передвигаться самостоятельно в пределах комнаты или иного помещения
  3. Изображать ум и сообразительность: распознавать лица домашних
  4. Распознавать голоса домашних
  5. Отвечать на вопросы (некий функционал Алисы)
  6. Воспроизводить музыку
  7. Коммуницировать с УД: передавать данные телеметрии (уровень заряда батареи), фото, стримить видео. Управляться удаленно через веб интерфейс
  8. Камера  крутится в двух плоскостях
  9. Уметь самостоятельно заряжаться (нужно разработать некую док станцию для робота)
  10. Питание от батарей 18650

 

Пока заказал шасси TS100 на али

https://www.aliexpress.com/item/32827408778.html?spm=a2g0s.9042311.0.0.6cbf4c4dbfM2qZ

 

Управление светом на 433 Мгц при помощи OpenMQTTGate

Захотелось научиться управлять светом с мобильника или Telegram. Для этой цели были закуплены выключатели света с 433Мгц приемником на ali.

https://ru.aliexpress.com/item/32814191331.html?spm=a2g0s.9042311.0.0.41ca33ed1Ox8Tq

Также, были приобретены самые дешевые приемник и передатчик 433MГц

https://ru.aliexpress.com/item/32840951211.html?spm=a2g0s.9042311.0.0.735533edZFhEhL

 

Из закромов был извлечён модуль esp8266 NodeMCU

32.PNG

Идея такова: Приемник и передатчик 433 подключаются к ESP. ESP используется как WIFI шлюз 433toMQTT. MQTT брокер Mosquitto уже установлен на Raspberry и является связующим звеном между логикой умного дома в Node red и шлюзом.

В качестве прошивки для ESP использован OpenMQTTGateway

34.PNG

 

Прошивка тут

ESP8266_OpenMQTTGateway_V092_RF.zip

Описание и схема подключений тут. Данная схема у меня не заработала, почему то на пине VIN  было всего 1.8В. Я подключил передатчик на VV, а приемник на 3.3В.

https://github.com/1technophile/OpenMQTTGateway/wiki/ESP8266-RF-Send-and-Receive

 

33

 

 

Нюансы:

  1. При первичной настройке шлюз поднимает точку доступа, пароль «your_password»
  2. При первичной настройке надо указать ssid и пароль к домашней wifi сети и данные mqtt сервера. При настройке mqtt сервера надо быть аккуратным, потому что изменить их после не получится, придется стирать всю память esp и заливать прошивку по новому (возможно это не так, все поднималось на бегу).

35.PNG

3. После настройки нужно открыть консоль raspberry и подписаться на все топики mosquitto, чтобы узнать точное название топиков, которые создает шлюз. Названия могут отличаться

sudo mosquitto_sub -t +/# -v -u имя_для_авторизации -P пароль_для_авторизации

если  увидели такие статусы, то все настроено правильно

home/OpenMQTTGateway_ESP8266_RF/LWT Online
home/OpenMQTTGateway_ESP8266_RF/version Х.ХХ

После того, как убедились, что все работает, можно перейти к настройке Node Red. У разработчика шлюза уже был готовый флоу.

https://github.com/1technophile/OpenMQTTGateway/wiki/NodeRED-integration

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

 

 

Доработка до ума китайского WIFI реле на базе ESP-01S

Заказал на ALI два WIFI реле. В целях домашней автоматизации хотелось иметь устройство, управляемое через GET запросы или MQTT. Думал, что изделие заработает из коробки, но не тут то было.

Вот чудо китайской мысли

20

Не вдаваясь в тонкости, сообщу что есть две версии данного устройства (по инфо из сети): версия 1.0 и версия 4.0. Номер версии можно посмотреть на обратной стороне платки

21.png

 

Так вот, версия 1.0 имеет косяки по схемотехнике, которые не позволяют ESP даже стартовать. Вроде, версия 4.0 не имеет таких косяков. Но, на ALI я не нашел такой платы. А плат v1.0 море. Лечится это при помощи резистора 10кОМ, припаянного следующим образом (см. фото).

По умолчанию в ESP залита прошивка заточенная на Android приложение китайских коллег. Мне такой вариант не подошел и я залил простейший скетч из Arduino IDE ( из этого обзора http://robotchip.ru/obzor-modulya-rele-dlya-esp8266-01s-esp-01s/ )

#include <ESP8266WiFi.h> // Подключаем библиотеку ESP8266WiFi

const char* ssid = «Название Вашей сети»; // Название Вашей WiFi сети
const char* password = «Пароль от Вашей сети»;// Пароль от Вашей WiFi сети

#define RELAY 0 // Пин к которому подключен датчик
WiFiServer server(80); // Указываем порт Web-сервера

void setup(){
Serial.begin(115200); // Скорость передачи 115200
pinMode(RELAY,OUTPUT); // Указываем вывод RELAY как выход
digitalWrite(RELAY, LOW); // Устанавливаем RELAY в LOW (0В)
Serial.println(); // Печать пустой строки
Serial.print(«Connecting to «); // Печать «Подключение к:»
Serial.println(ssid); // Печать «Название Вашей WiFi сети»

WiFi.begin(ssid, password); // Подключение к WiFi Сети

while (WiFi.status() != WL_CONNECTED) // Проверка подключения к WiFi сети
{
delay(500); // Пауза 500 мкс
Serial.print(«.»); // Печать «.»
}
Serial.println(«»); // Печать пустой строки
Serial.println(«WiFi connected»); // Печать «WiFi connected»

server.begin(); // Запуск сервера
Serial.println(«Server started»); // Печать «Server starte»
Serial.print(«Use this URL to connect: «); // Печать «Use this URL to connect:»
Serial.print(WiFi.localIP()); // Печать выданого IP адресса
Serial.println(«/»); // Печать «/»
}

void loop(){
WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом
if (!client)
{
return;
}
Serial.println(«new client»); // Отправка «new client»
while(!client.available()) // Пока есть соединение с клиентом
{
delay(1); // пауза 1 мс
}

String request = client.readStringUntil(‘\r’);
Serial.println(request);
client.flush();

int value = LOW;
if (request.indexOf(«/RELAY=ON») != -1)
{
Serial.println(«RELAY=ON»);
digitalWrite(RELAY,LOW);
value = LOW;
}
if (request.indexOf(«/RELAY=OFF») != -1)
{
Serial.println(«RELAY=OFF»);
digitalWrite(RELAY,HIGH);
value = HIGH;
}

client.println(«HTTP/1.1 200 OK»);
client.println(«Content-Type: text/html»);
client.println(«»);
client.println(«<!DOCTYPE HTML>»);
client.println(«<html>»);
client.println(«<head><title>ESP8266 RELAY Control</title></head>»);
client.print(«Relay is now: «);

if(value == HIGH)
{
client.print(«OFF»);
}
else
{
client.print(«ON»);
}
client.println(«<br><br>»);
client.println(«Turn <a href=\»/RELAY=OFF\»>OFF</a> RELAY<br>»);
client.println(«Turn <a href=\»/RELAY=ON\»>ON</a> RELAY<br>»);
client.println(«</html>»);

delay(1);
Serial.println(«Client disonnected»);
Serial.println(«»);
}

Основные сложности были в прошивке модуля ESP-01s. На ALI можно приобрести переходник USB на TTL с разъемом, куда вставляется платка ESP. Но у меня такого переходника не было. Поэтому, пришлось в качестве переходника использовать Arduino UNO.  Пользовался мануалом: https://cordobo.com/2300-flash-esp8266-01-with-arduino-uno/

Если коротко:

  1. Схема подключения такая

Wiring scheme:
UNO — ESP8266 (wire color)
RX — RX (white)
TX — TX (green)
GND — GND (black)
GND — GPIO 0 (purple)
3.3V — VCC (red)
3.3V — CH_PD (orange)

2. На UNO обязательно надо замкнуть RESET на GND. Иначе, проц UNO запустится и прошить ESP не удастся.

3. Подключать RX TX выходы через делители (согласовывать уровни TTL 5v-3.3v) не стал — у меня все получилось без этого.

4. Существует мнение, что питать ESP от UNO не надо, слишком мал допустимый ток. У меня все получилось без дополнительных источников 3.3в

5. И, что больше всего выгрызло мне мозг: выбирайте кабель USB для подключения UNO минимальной длины. При получении ошибки при прошивке я долго пытался найти причину и искал ее в схеме подключения. Однако, всему виной был кабель. Я перепробовал три различных кабеля, пока не нашел подходящий.

Выводы: Можно брать, если знать, как вылечить плату. Цена оправдывает средства. Цена такой платки на данный момент 140 руб. Цена Sonoff Basic около 320. Правда, Sonoff — уже готовое устройство с решенной проблемой питания модуля и реле от сети 220В. Если бюджет не жмет, то лучше взять Sonoff.

Концепция умного дома

Идея метеостанции с веб интерфейсом гармонически эволюционировала: решено расширять функционал. Краткий перечень хотелок был таков:
1. Сделать приемлемую визуализацию и управление с web интерфейса, приложения на смартфоне;
2. Реализовать автоматические функции системы, т.е. внедрить среду программирования в систему управления умным домом;
3. Реализовать голосовое управление системой.

По началу мысли были реализовать логику на локальных ESP8266 и вывод информации на общую web страничку с управлением устройствами при помощи get запросов. Но концепция кардинально изменилась после покупки Raspberry Pi. По мере знакомства с Linux и изучением темы умного дома было решено применить связку:

  • MQTT брокер Mocquitto (центральный узел передачи информации);
  • Node Red (среда программирования, центральный сервер обработки логики работы), визуализация на Dashboard;
  • Domoticz (визуализация + дополнительные возможности по программированию логики работы устройств);
  • Голосовое управление реализовано при помощи навыка Яндекс Алисы, который обращается к https webhook, поднятый на Node Red;
  • Управление также реализовано через бота Telegram;
  • Оповещение о превышении уровня CO2 и низкой влажности передаются на SmartTV LG.

Что реализовано:

  • Функции контроля микроклимата (CO2, температура, влажность в двух комнатах). Автоматизировать тут нечего, т.к. нет исполнительных устройств. Откр\закр проветривание и вкл\выкл увлажнители осуществляется вручную;
  • Управление 1 светильником

Что в планах:

  • Управление светом по сценариям, в том числе в с\у;
  • Интеграция Android  телефона. Для начала оповещение о приближении к дому;
  • Настройка Telegram и Алисы на вывод всей информации;

Возникшие проблемы:

  • Периодическое падение связи ESP с MQTT брокером. В интернете есть мнение, что на ESP лучше использовать GET запросы;
  • Периодические  зависания Node-Red

Немного скринов