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
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°С
Текущего уровня развития "софта" достаточно для того чтобы начать тестирование длительного использования.
1) впаят источник опорного напряжения
2) сделал джампер для выбора EC и выбрал 500Ω
3) сделал джампер для выбора Ro NTC-термистора, выбрал 100k
4) приделал дисплей
5) добавил гребенки для esp-lolin32
заняло около 20 минут
Буду наблюдать за сопротивлением раствора 1EC при постоянной температуре 25°С
Бывают EC-щупы со встроенным термистором (вверху).
Бывают EC-щупы без встроенных термисторов (в середине).
В таком случае термистор нужен отдельный. Они бывают двух типов на 10kΩ или 100kΩ
С помощью жёлтой изоленты совмещаем ЕС и термистор и купорим в баночку вместе с калибровочным раствором 1EC.
Вокруг щупа нужно обязательно очертить пространство где может распространяться электрический ток с помощью напечатанной на 3Д принтере юбочки. Если это не сделать - то прибор будет очень хорошо определять расстояние от электродов до стенки.
Бывают EC-щупы без встроенных термисторов (в середине).
В таком случае термистор нужен отдельный. Они бывают двух типов на 10kΩ или 100kΩ
С помощью жёлтой изоленты совмещаем ЕС и термистор и купорим в баночку вместе с калибровочным раствором 1EC.
Вокруг щупа нужно обязательно очертить пространство где может распространяться электрический ток с помощью напечатанной на 3Д принтере юбочки. Если это не сделать - то прибор будет очень хорошо определять расстояние от электродов до стенки.
This media is not supported in your browser
VIEW IN TELEGRAM
Длительное тестирование началось 26 окт.
Запомним эти цифры:
1616mV - напряжение на делителе
2517mV - опорное напряжение.
Китайский мультиметр при этом считает что 2507mV, так что есть вероятность что АЦП у esp32 плохо калиброван и привирает.
Запомним эти цифры:
1616mV - напряжение на делителе
2517mV - опорное напряжение.
Китайский мультиметр при этом считает что 2507mV, так что есть вероятность что АЦП у esp32 плохо калиброван и привирает.
Есть пара моментов которые смущают во всей этой затее.
На всех графиках выше видно что есть некие u+,u-,u.
Это как раз положительное измерение, отрицальеное и среднее.
Расшифровка:
Положительное = Uацп
Отрицательное = Вычитаем Uацп из опорного напряжения 2500mV
Среднее = среднеарифметическое между верхними двумя
Дельта (Δ) = разница менду положительным и отрицательным.
Первое что может пойти не так - это положительное != отрицательному всегда.
Чтобы всё это выглядело сильно красивее на тестовой платке одно из начений смещено на -35 mV.
В таком случае значения пляшут около нуля.
Но на графиках выше мы получаем расхождение окло 15mV и пока не могу определиться с тем какой решение правильнее: смещать или не смещать =)
Скорее всего часть неопределённости сюда вносит неоткалиброванный АЦП. У нас источник опорного 2500 mV и китайский мультиметр считает что там 2497mV). Поэтому показания АЦП 2516mV кажутся немного странными.
Хотя я тут торгуюсь вокруг пары десятков милливольт, которые скорее сильно нише возмо
На всех графиках выше видно что есть некие u+,u-,u.
Это как раз положительное измерение, отрицальеное и среднее.
Расшифровка:
Положительное = Uацп
Отрицательное = Вычитаем Uацп из опорного напряжения 2500mV
Среднее = среднеарифметическое между верхними двумя
Дельта (Δ) = разница менду положительным и отрицательным.
Первое что может пойти не так - это положительное != отрицательному всегда.
Чтобы всё это выглядело сильно красивее на тестовой платке одно из начений смещено на -35 mV.
В таком случае значения пляшут около нуля.
Но на графиках выше мы получаем расхождение окло 15mV и пока не могу определиться с тем какой решение правильнее: смещать или не смещать =)
Скорее всего часть неопределённости сюда вносит неоткалиброванный АЦП. У нас источник опорного 2500 mV и китайский мультиметр считает что там 2497mV). Поэтому показания АЦП 2516mV кажутся немного странными.
Хотя я тут торгуюсь вокруг пары десятков милливольт, которые скорее сильно нише возмо
А ещё у ESP-IDF какие-то проблемы либо с документацией либо с фриртосом. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html
Решил я архитектуру немного попеределать, и оказалось так что мне нужно посылать Notify в таску из двух разны задач. После недолгого гугленья понял что это делается с помощью xTaskNotifyIndexed(). В доке ESP-IDF даже про это написано, но вот в коде её нет и VsCode её не видит.
В итоге пришлось нашлёпать костылей с велосипедами. Во время Notify мы должны передать
Для того чтобы передать -23.88°C сделаем следующую логику, которая будет всем понятна, но за которую люди в свитерах и с красными глазами готовы убивать:
1) умножим на 1000 чтобы получить 23880 мллицельсий.
2) добавим 100*1000 чтобы значение точно было больше 0
3) добавим биты с инфой:
7) вычитаем 100 и делим на 1000 если бит гооврит о том что к нам прилетела температура
на графике сверху как раз таска жёлтым цветом отчитывается о том что получила нотифаи о температуре из ntcTask и о померяном напряжении из ecTask.
Решил я архитектуру немного попеределать, и оказалось так что мне нужно посылать Notify в таску из двух разны задач. После недолгого гугленья понял что это делается с помощью xTaskNotifyIndexed(). В доке ESP-IDF даже про это написано, но вот в коде её нет и VsCode её не видит.
В итоге пришлось нашлёпать костылей с велосипедами. Во время Notify мы должны передать
uint32_t
, а это 4 раза по 8 бит. Поэтому в первом бите будем передавать тип, а в остальных 3х значение (до 16 миллионов).Для того чтобы передать -23.88°C сделаем следующую логику, которая будет всем понятна, но за которую люди в свитерах и с красными глазами готовы убивать:
1) умножим на 1000 чтобы получить 23880 мллицельсий.
2) добавим 100*1000 чтобы значение точно было больше 0
3) добавим биты с инфой:
0b00000001 << 24
4) передаём получившееся uint32_t x
5) получаем биты с инфой x >> 24
6) поучаем значение наложив маску7) вычитаем 100 и делим на 1000 если бит гооврит о том что к нам прилетела температура
на графике сверху как раз таска жёлтым цветом отчитывается о том что получила нотифаи о температуре из ntcTask и о померяном напряжении из ecTask.
This media is not supported in your browser
VIEW IN TELEGRAM
Морс! Клюква!
Весь вечер делаю дооолгие замеры, чтобы процесс устоялся и при повторном измерении получалась та-же цифра что и первоначально.
Стабильность показаний и их повторяемость при перемещении между баночками в случайном порядке радуют - (2-3mV).
Если присмотреться - то видно что рядом с синим штекером EC щупа появился синий (СТИЛЬ!!!) джампер который воткнут в дальнюю от нас позицию. Это говорит о том что теперь на делителе напряжения сопротивление 500Ω вместо неправильных 4700Ω
Весь вечер делаю дооолгие замеры, чтобы процесс устоялся и при повторном измерении получалась та-же цифра что и первоначально.
Стабильность показаний и их повторяемость при перемещении между баночками в случайном порядке радуют - (2-3mV).
Если присмотреться - то видно что рядом с синим штекером EC щупа появился синий (СТИЛЬ!!!) джампер который воткнут в дальнюю от нас позицию. Это говорит о том что теперь на делителе напряжения сопротивление 500Ω вместо неправильных 4700Ω