2020-08-23

Велотрекер

diy, esp32, arduino

Согласно статистике каждые полторы минуты в одной только Германии воруют один велосипед. В прошлом году было украдено 332 486 велосипедов на сумму более 120 миллионов евро, и это только задокументированные случаи воровства. Во всем остальном мире ситуация обстоит не лучшим образом.

После того как моему любимому велосипеду приделали ноги, стал думать как бы этого можно было бы избежать подобного в будущем. Как правило, украденный велосипед не увозят далеко - одному моему коллеге повезло больше чем мне - тот нашел свой велосипед на соседней улице пристегнутым к забору другим замком. Свой велосипед подобным образом мне найти, увы, не удалось. Если бы на велосипеде стоял GPS трекер, то его можно было бы найти за считанные минуты.

После того как TTGO выпустили плату с ESP32 и SIM600 на борту я подумал, что это почти готовый GPS трекер, на нём уже есть контроллер LiPo аккумулятора и слот для SIM карты - нужно только добавить в связку GPS! Из недорогих на рынке оказался модуль NEO6m который удивительно прост в управлении. Трекер питается от LiPo аккумулятора емкостью 700mAh

Все компоненты достаточно компактные, их можно поместить, например, в велофонарь, раму, сиденье - в велосипеде не так много вариантов, но они есть.

Сейчас одной зарядки хватает сейчас примерно на два дня.  Моей целью является увеличение этого времени хотя бы до недели, два для это слишком мало - ведь иногда велосипед может стоять без движения достаточно долго. Устройство заряжается от велогенератора встроеного в колесо через специальный стабилизатор.

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

Готовое устройсто внешне выглядит как обычный задний велофонарь и является неразборным, для герметичности фара залита термоклеем, поэтому прошивку нужно обновлять по воздуху, это первое что я реализовал, так как снимать устройство каждый раз когода нужно залить новую прошивку мне совершенно не хочется. Сама прошивка написана на C++ в среде Ардуино.

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

Все ссылке в этой статье ведут на немецкий Амазон где я заказывал компоненты устройства. В России те же самые детали можно купить на AliExpress, в Германии из за высоких пошлин и трудностей с таможней AliExpress, увы, не так популярен. 

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

 

Оставить комментарий

 
  2020-08-10

Спят усталые игрушки

diy, arduino

Почему-то отладочная плата на TTGO T-Call ESP32 SIM800L не хочет работать столько сколько мне бы хотелось от одной зарядке.

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

Пришлось собирать отдельное устройство для опытов. Для этого использовал Arduino Pro Mini INA219 и маленький монохромный дисплей.

Оказалось что все не так уж и плохо. В спящем режиме устройство потребляет около 1.4 mA что в принципе не плохо. В активном режиме ток потребления около 20-30 mA что тоже вполне неплохо.

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

Если вдруг кому потребуется код всего этого безобразия в том числе команды для ввода NEO6m в спящий режим, то вот он.

 

 

Оставить комментарий

 
  2020-06-21

Особенности TTGO T-Call ESP32 SIM800L

diy, arduino

Продолжаю изучать отладочную плату TTGO T-Call ESP32 SIM800L. Несколько недоумеваю по поводу используемых портов. У ESP32 есть три аппаратных UART при этом нa плате для соединения ESP32 с SIM800 используются выходы 26 и 26 на которых аппаратного UART нету! То есть, заместо аппаратного нужно использовать программный UART который хуже по определению! При этом эти ноги еще выведены на гребенку платы - зачем, если использовать их уже нельзя?

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

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

 

Оставить комментарий

 
  2020-05-08

Посылаем данные в облако через мобильную сеть

diy, esp32, arduino

Пришел интересный модуль - TTGO T-Call ESP32 SIM800L.

По сути это ESP-32 Wrover соединенный с модулем SIM800L который умеет работать с 2G сетями. С 3G уже не умеет, но это и не нужно если объем передаваемых данных не велик.

Залил тестовую прошивку, найденную у RandomNerd предварительно адаптировав ее для работы https://requestbin.com/.

И ура! Теперь я могу посылать данные по GPRS!

Тестовый скетч залил на Github.

 

Оставить комментарий

 
  2020-04-22

Подсветка светодиодной лентой WS2812b - продолжение

diy, esp32, arduino

Решил спаять новое устройство на смену временной макетной плате, которая стоит на шкафу и пылиться.

Сказано сделано - спаял новое устройство. Однако, работать оно поначалу не захотело.

Сначала при включении светодиоды начинали хаотически мигать. Опытным путем было установлено, что эффет проявлялся только если напряжение питания модуля 3.33 вольта и ниже. Если повысить напряжение до 3.5 вольт все начало работать нормально. Видимо, пятивольтовая логика ленты WS2812b не совместима с 3.33 вольтовой логикой ESP32. По идее нужен преобразователь уровня.

В определенный момент всплыл другой глюк. Опять стали подмигивать отдельные светодиоды. Стал искать причину. Выяснилось следующее: из-за того, что новая плата у меня ESP 32 Wroom а не ESP 32 Cam при заливке прошивки я выбрал другой тип платы - ESP32 Dev Board с часторой 120MГц. Раньше прошивал с настройкаи для ESP32 Wroover на 80МГц и на 40МГц. Интересно, что система прошилась нормально, а вот лента стала странно подмигивать. При этом эффект уже  не зависил напряжение питания. Вернул предыдущие настройки - все стало опять хорошо.

И вот устройство стоит, лампочки мигают, казалось бы все хорошо. Однако через некоторое время устройство перестает отзываться по Wifi. При этом оне не зависает, нет - выбранный световой эффект продалажает работать - просто устройство отказывается открываться по сети. Лекарство пока не нашел, хотя есть несколько предположений, почему это происходит.  В новой прошивке есть возможность отключать энергосбережение WiFi - предполагается это может решить проблему. Так ли это - посмотрим.

Upd: с вайфаем получилось интересно. Перепробовал разное - и понижать напряжение питания, и включать специальный флаг, чтобы чип не переходил в режим энергосбережения - такое есть в последней прошивке - все равно через некоторое время устройство переставало отвечать на запросы, хотя и продолжало работать - по таймеру эффекты продолжали стабильно запускаться. И вот, вчера, попробовал на роутере переключить канал с четвертого на восьмой - домашние жаловались, что у них плохо работает интеренет. И вот уже второй день устройство нормально отзывается по сети. Что это такое я пока не понял, но корреляция определенно тут есть.

Upd2: переключил на роутере WiFi на другой канал, так как домашние жаловались не нестабильную связь - зависания устройства сразу прекратились.

 

Оставить комментарий

 
  2019-12-08

Подсветка светодиодной лентой WS2812b

diy, esp32, arduino
Давно хотел сделать какую-нибудь поделку со светодиодной лентой. Во первых это красиво, во вторых, первого пункта вполне достаточно. 
Для микороконтроллера я выбрал ESP32 - мой последний фаворит - у него есть Wifi и Bluetooth - а что еще нужно для IoT поделки? Лента - WS2812b это - RGB светодиодная лента с индивидуальной адресацией. 
Кроме этого, ESP32 позволяет заливать прошивку по воздуху. В сети полно примеров как это делается. Cамым простым вариантом для меня было создавать прошивку на C++ и Arduino. Знаю это не спортивно, но задо это быстро.
И вот все компоненты будущей системы мне были доставлены. Сама светодиодная лента WS2812b представляет собой ленту длиной 5 м с 150ми светодиодами в каждый из которых интегрирован чип управления управляемый по одному проводу. Оказалось, что лента питается напряжением 5 Вольт, в то время как я заказал блок питания на 12 вольт. Каждый светодиод на полную яркость потребляет около 50mA а значит у меня не получается запитать всю ленту целиком поэтому в тестовой прошивке я зажигаю пока лишь несколько светодиодов одновременно. Так как у меня нет правильного блока питания то и лента и микороконтроллер питаются от пяти вольт через понижающий на Step Down стабилизатор который может давать ток до 1 ампера, в то время как лента на полную мощность потребляет около 7 ампер. Значит все светодиоды пока включать не будем.
Получилось настроить и обновление прошивки по воздуху. Так как устройство расположено на шкафу и доступ к нему затруднен обновление по воздуху было для меня самым главным требованием. 
Родная прошивка модуля esp32 CAM не захотела обновлять скетч по воздуху, устройство просто перезагружалось, однако, когда я сменил в настроках Arduino тип устройства на esp32 Wrover все прекрасно заработало.
Библиотека для работы с лентой от Аdafruit у меня почему-то тоже не стала работать корректно и некоторые светодиоды остались зажженными. При этом если выбирать малое количество светодиодов библиотека работает более или менее стабильно. Возможно дело в каких-то аппаратных проблемах или же у меня имеются наводки на сигнальный провод.
Однако, когда я поставил другую библиотеку - FastLED она сработала вполне стабильно. Но пока я все еще недоволен быстродействием. 
Возможно всё дело в неэффективности кода или я что-то сделал не так, но анимация в виде бегущего огонька у меня происходит краааайне медленно. 
Поскольку ленту нужно включать дистанционно реализовал работу с лентой через веб интерфейс, таким образом включать и выключать ленту можно из со странички в локальной сети. 
Интересно что также есть возможность использования mdns - это такой легковесный DNS для локальной сети - само устройство появится в сети с именем devicename.local. C компьютера эта функция у меня сработала без проблем но с телефона через mdns почему-то работать не захотела. Возможно дело в настройках браузера.
В общем нужно заказывать хороший блок питания на 5 вольт и током не менее десяти ампер - а лучше двадцати, так как я хочу ленту еще удлинить.
 
P.S. Извиняюсь за дикий русский язык - писал это в воскресенье вечером, был уже слегка не в себе :)
 

Оставить комментарий

 
  2019-11-16

ESP-32 и INA219

diy, esp32, arduino

Как измерить напряжение батареи при питании вашей самоделки на базе базе ESP32?

Самым очевидным решением было бы использовать резисторный делитель и снимать напряжение батареи с него, однако, оказалось, что модуль ESP-32 Cam который я использую для опытов не содержит ни одного аналогового входа, они все используются для встроенной камеры.

Поэтому, другим вариантом было использования отдельного датчика на базе INA219. Этот чип общается с внешним миром через i2c - для этого можно использовать любые две ноги ввода-вывода - в моем случае это 13 -SDA, 15-SDL. Для того чтобы все заработало как полагается в стандартный пример от Adafruit достаточно добавить одну единственную строчку для инициализации i2c на нестандартных выводах:

 Wire.begin(13, 15);

Питание микороконтроллера осуществляется Step Down стабилизатором выходное напряжение которого устанавливается переменным резистором - на нем я выставил напряжение около 3.3 вольта.

Интересно, что если ничего не подать на ногу V+ INA219 то она показывает напряжение около 0.8 В и ток порядка 10mA - уж не знаю почему - во всех примерах которые я видел в сети на него ничего не подается и эти ноги используются только при измерении токов - у меня же, почему то так не заработало - нужно было сигнал подавать именно на +V при том что я запитал сам сенсор от 3.3 вольта от которого запитал и микроконтроллер.

Вот код прошивки.

Вот так выглядит моя схема. 

На реальной схеме было несколько больше деталей, но в данной прошивке они не используются:

Вот что выводится в терминал:

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

 

Оставить комментарий

 
  2019-05-17

ESP-32 Работает!

diy, esp32, arduino

Подключил, залил пробный скетч - оно работает! Фантастика!

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

 

Оставить комментарий

 
  2016-05-28

Удобный переходник для ESP-03

diy, arduino

Нашел на thingiverse удобный преходник для ESP-03 для макетной платы. До этого приходилось припаивать к площадкам ESP-03 проводочки которые затем вставлялись в макетную плату. Выглядело это дело не очень. Но тут совершенно случайно наткнулся в сети на удобный переходник который можно распечатать на 3D принтере - и тут же распечатал - получилось просто прекрасно:

Надо сказать, 3D принтер просто незаменимая вещь в хозяйстве, особенно если научиться моделировать в Blender. Я пока только его осваиваю, но уже понимаю, что это вызывает зависимость. Зато теперь я могу с легкостью распечатать всякую мелочь, например каркасы для индуктивностей, различные разветвители для домашней поливалки и прочую мелочь, сделать которую другими способами было бы проблематично.

 

Оставить комментарий

 
  2016-05-15

Увеличение чиcла GPIO для esp8266

diy, arduino

Давно играюсь с esp8266, для тех кто не в курсе это такая маленькая микросхема размешенная на готовом модуле. Этот модуль можно купить у китайцев за два доллара, причем модуль этот представляет собой полноценный микроконтроллер, имeющий на борту все, что нужно чтобы создавать довольно навороченные решения и умеющий общаться c внешнем миром по wifi.

Одной из проблем этого модуля является ограниченное количество портов общего назначения. У ESP-01 свободным остается только GPIO2, хотя можно еще использовать GPIO0 и два порта через которые заливают прошивку с компьютера RX и TX тоже можно использовать как GPIO.

Однако, мне для моих поделок нужно было больше GPIO выводов, гораздо больше. Сначала, хотел попробовать сдвиговые регистры, однако потом пришла в голову идея получше - 1Wire!

У фирмы Maxim есть замечательные ключи, например, ds2413 содержит два управляемых ключа, которые могут работать как для чтения так и для записи. У ds2408 их 8. При этом, можно сколько угодно вешать таких устройств на одину шину 1Wire которая в простейшем случае представляет из себя выход GPIO микроконтроллера с подтягивающим резистором 4.7 кОм. 1Wire позволяет вешать до 256 устройств на шину, что позволяет получить отличную масштабируемость.

У китайцев на aliexpess можно купить аналог ds2413 - 3A 2100H. Хотя, у большинства продавцов написано, что продают они ds2413 - у того у которого я купил, на картинке четко была видна маркировка - 3A 2100H, больше в описании об это ничего не было сказано. От оригинальных микросхем аналог отличается только семейным кодом - у оригинального он 0x3A у китайского 0x85 так что, если заходите взять поиграть, не наколитесь. Сначала, хотел написать грозный отзыв продавшему мне эти чипы китайцу, но когда скетч успешно заработал, я написал не очень грозный...

Вот пример для работы с ардуиной, который мне помог разобраться. Еще потребуется библиотека OneWire. В последних версиях есть поддержка esp8266. Чтобы пример заработал с 2100H нужно поменять в нем 0x3A на 0x85.

Теперь, можно делать на esp8266 устройства с любым количеством входов-выходов. При условии, кончено, что они будут не слишком быстро переключаться - у 1wire не сильно высокая пропускная способность.

 

Оставить комментарий