IOT / Esp32 / FreeRTOS / Arduino / stm32
800 subscribers
747 photos
133 videos
29 files
199 links
Копилка материалов по работе с микроконтроллером esp32 / stm32
Download Telegram
Заказ и BOM лист
Вернёмся пока к нашим баранам на esp32 и аналоговой части. Впаял источник опорного как положено (хотя скорее "как мне кажется правильно"). Сижу меряю напряжение на выходе, получаю вот такой график.

хм. можно ли это считать успехом? 🤔
Или напряжение можно получить точнее? По крайней мере радует что заказанный модуль с stm32 разведён скорее всего правильно.
Первое что можно сделать с этими измерениями - это oversampling.
По сути мы делаем измерения много раз, а потом делим на количество измерений.

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

Идея такая: если мы сделаем количество измерений кратно степени двойки, то можно вместо деления использовать битовый сдвиг. Код в приложенной картинке (обоже, как же бесят люди которые выкладывают код картинками 😂)
Всё это затевается ради одной простой цели: получить одинаковое напряжение питания на делителях напряжения у NTC-термистора и EC-щупа при разном питании платы.

Сама плата питается от кренок на 3.3V, но оказывается что эти 3.3 слишком разные в зависимости от модуля. =) Настолько разные что не подходит для задачи.

Для того чтобы потестить как это будет работать - первым делом начнём передавать эту информацию в mqtt шину. Добавляем библиотечку в проект, компилим, и ...

Хьюстон, у нас проблемы!
27kb не влезает 🙈
У меня 4Mb флешка, а не влезает в 1Mb о.О. Ну что-же придётся лезть и разбираться как настроить партишены.
А ларчик просто открывался 🥳
Оказывается при работе через официальный плагин (а не через platformio) - всё можно настроить через гуй.

Это сильно проще чем тыкаться в консольный menuconfig:
- жмякаем настройки
- ищем настройку партишенов
- выбираем "свой csv"
- создаём файлик и указываем там нужные размеры
Результаты:
с разным питанием разбег 10mV

До этого разбег был 60mV, так что стало однозначно лучше. Можно ли ещё улучшить? 🤔 Звучит как хорошая задача для специалистов по аналоговой части =) осталось таких найти.
Чтобы проще заниматься отладкой - припаяем к плате дисплей. Для этих целей у платки выведен специальный разъём.

Для дисплея на плате tm1637 есть хорошая библиотечка
https://github.com/petrows/esp-32-tm1637

На этом-же выведенном разьеме можно и i2c дисплей завести, но видимо в следующий раз) пока хватит и такого.
А вот подоспели и приколы молодости платформы. Их обещают пофиксить, но непонятно когда. Тикет закрыт.

Оказывается в некоторых случаях если во время работы с Wi-Fi читать ADC, то еспха может улететь в ребут.
Что она иногда радостно делает.

Подробнее:
https://github.com/espressif/esp-idf/issues/6682
This media is not supported in your browser
VIEW IN TELEGRAM
Есть и подвижки:

1) После перезагрузки на индикаторе крутится красота

2) Перешёл к измерениям EC раствора: подключил щуп и смотрю на получаемые милливольты в консоли
- надеялся что сумма прямого и обратного измерения будет равна референсному значению, но получаю недоздачу 35-40mV

3) Внутри задачи во фриртос стали обмениваться данными с помощью xTaskNotify:
- в задачу "экран" отправляется инфа он референсном значении
- в задачу "экран" иногда отправляется информация счетчика секунд чтобы понимать что система ребутнулась
- задача измерения температуры работает раз в 10 секунд и оповещает о температуре задачу измерения EC

4) Начал работу над конфигурацией устройства
IOT / Esp32 / FreeRTOS / Arduino / stm32
2) Самый грустный баг из тех которые уже известны - это я неправильно использовал опорные источники напряжения) в итоге их приходится сдувать. Купил новые - буду пробовать использовать.
3) Складывается ощущение что этот заказ плат я делал в пьяном угаре 🙈 В делитель напряжения вместо 1kΩ заказал установку резиторов 4.7kΩ.

Схема подразумевает использование резисторов делителя напряжения в 1kΩ и 500Ω - нужный резистор можно выбрав джампером на перемычке. Но перемычку же нужно каждый раз впаивать, а я для этого слишком ленив. Поэтому на схеме есть ещё резистор с нулевым сопротивлением 0Ω который выбирает по умолчанию 1000 омный вариант. Который у меня ага 4700 омный =)

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

Представлю что основная цель - измерить чистоту воды после фильтра обратного осмоса. А вдруг мне мембрану уже пора менять
Пробуем померять осмос:
получается 1830mV.

- Напряжение у нас 2513mV (если верить АЦП esp-хи)
- Сопротивление резистора 4649Ω (со слов китайского мультиметра)
- Достаём из-за пазухи законо ома, и получаем сопротивление фильтрованной водички 12 456 Ω

Запомним это число) У меня как раз уже куплена новая мембрана, после смены фильров перепроверим.
Просто холодная и просто горячая вода из под крана получают по
882mV - 2514Ω хол
718mV - 1860Ω гор
В первую очередь разница из-за темпертаруры, но возможно они и загрязнены по разному. Бытует мнение что грязная вода лучше взаимодействует со стенками водопроводной системы и с бОльшей радостью несёт всякое в себе.

Проверим это позже, сравняв их температуры.
Морс!

Запехаем щуп во все имюищеся калибровочные растворы и померяем милливольты ⚡️

Получается что чувствительности АЦП вполне достаточно и для грубых измерений:
между 1-2EC у нас 124mV, а дальше конечно хуже.

Построим график! =)
А графики вполне себе ничего, можно сразу в бой.

Наспех подобрал наглаз калибровочные коэффициенты в екселе и точность получается более чем достаточная для бытового использования. 🥳

Даже с 4700Ω вместо 500
2006 год. Статья про измерение EC/TDS
https://www.octiva.net/projects/ppm/

2006 год. Схема измерения PH
https://www.octiva.net/projects/pH/

обновленные статьи:
EC/TDS https://blea.ch/wiki/index.php/PPM_Meter
PH https://blea.ch/wiki/index.php/PH_Meter

теоретические обоснования
https://www.coleparmer.com/tech-article/conductivity
EC_TDS_PPM Meter.pdf
551.5 KB
Сохраним такой раритет дополнительно в виде pdf
Бам! И теперь платы 2.

Текущего уровня развития "софта" достаточно для того чтобы начать тестирование длительного использования.
1) впаят источник опорного напряжения
2) сделал джампер для выбора EC и выбрал 500Ω
3) сделал джампер для выбора Ro NTC-термистора, выбрал 100k
4) приделал дисплей
5) добавил гребенки для esp-lolin32
заняло около 20 минут

Буду наблюдать за сопротивлением раствора 1EC при постоянной температуре 25°С