• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Как прочитать данные с датчика напряжения?

hzuszun30

New member
Вот такой датчик: Купить датчик напряжения 0-25В
Хочу подключить его nodemcu (получить значение напряжения на цифровом входе), но нигде не нашел примера на луа, как это сделать. Насколько я понял, там используется 1-wire.
Может есть где-то готовый модуль? Или пример для чего-то аналогичного?
 

Izzm

New member
По виду, и описанию, это простой делитель напряжени. Но не указан диапазон выходных значений. Если они в пределах 0-1v(для голых модулей esp), и 0-3.3v (для NodeMCU и еже с ними)
То сигнальным выводом он подключаетеся к ADC esp. И с ADC считывается значение.
 

Юрий Ботов

Moderator
Команда форума
Да. Это обычный делитель. Там же даже код есть из которого все абсолютно понятно - подключается действительно на adc. Ищите "esp8266 lua adc" и обрящете. Если лениво, даю подсказку: "print(adc.read(0))"
 

Izzm

New member
Но скорее всего у него на выходе 0-5v. И если это так, то напрямую к ADC подключать не стоит. Потребуется ещё один делитель.
 

Юрий Ботов

Moderator
Команда форума
О, совсем проглядел. Можно просто подать напряжение и на цифровой вход, и на ADC. И этот модуль просто лишний.
Если бы моей целью было бы окончательно запутать ТС - я бы наверно ответил также.

Для ТС: модуль модулем, во первых надо решить что хочешь мерить. В каком диапазоне напряжений. Переменное или постоянное напряжение. Во вторых надо понять сколько напряжений одновременно. Учитывая, что это esp8266 (то есть wifi) надо решиться какая допустима погрешность измерений. Если нужно поточнее - надо будет выключать wifi на время измерения, если высокая точность не нужна - можно и не выключать. Если нужна очень высокая точность то нужна внешняя плата с внешним adc(ацп) и скорее всего она будет стоить как несколько nodemcu. Еще нужно понимать внутреннее сопротивление того на чем мерить напряжение. Если оно больше единиц кОм - придется дополнительно городить пересчет с учетом падения напряжения на внутреннем сопротивлении источника: по моему опыту внутреннее сопротивление по входу adc не так велико как хотелось бы: x00 кОм где x {1,2}, может мне просто не повезло... У хороших adc это сопротивление - мегаомы. И только после того как определишься с главным надо выбирать то или иное техническое решение. Кстати... wifi то точно нужен? Или "модуль все равно есть пусть будет"?
 
  • Like
Реакции: Izzm

hzuszun30

New member
Если бы моей целью было бы окончательно запутать ТС - я бы наверно ответил также.

Для ТС: модуль модулем, во первых надо решить что хочешь мерить. В каком диапазоне напряжений. Переменное или постоянное напряжение. Во вторых надо понять сколько напряжений одновременно. Учитывая, что это esp8266 (то есть wifi) надо решиться какая допустима погрешность измерений. Если нужно поточнее - надо будет выключать wifi на время измерения, если высокая точность не нужна - можно и не выключать. Если нужна очень высокая точность то нужна внешняя плата с внешним adc(ацп) и скорее всего она будет стоить как несколько nodemcu. Еще нужно понимать внутреннее сопротивление того на чем мерить напряжение. Если оно больше единиц кОм - придется дополнительно городить пересчет с учетом падения напряжения на внутреннем сопротивлении источника: по моему опыту внутреннее сопротивление по входу adc не так велико как хотелось бы: x00 кОм где x {1,2}, может мне просто не повезло... У хороших adc это сопротивление - мегаомы. И только после того как определишься с главным надо выбирать то или иное техническое решение. Кстати... wifi то точно нужен? Или "модуль все равно есть пусть будет"?
Да, вай-фай конечно нужен, полученные данные должны отправляться.
Очень большая точность не нужна. Я думал с помощью данной штуки наиболее простым способом получить несколько портов adc для аналоговых датчиков. Но видимо не правильно понял предназначение этого модуля. Теперь вообще непонятно - зачем он нужен?

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

Юрий Ботов

Moderator
Команда форума
Этот модуль собственно и создан чтобы "отсылать". То что его можно немного программировать это "приятный бонус" не более того. Если несколько adc и их надо отсылать, вариантов два:
- esp8266 с внешним adc (подключенным по i2c например)
- arduino( atmega какая нибудь) или stm32f103 как основной контроллер c встроенными adc, а esp просто "чтобы отослать"
 

hzuszun30

New member
Если несколько adc и их надо отсылать, вариантов два:
- esp8266 с внешним adc (подключенным по i2c например)
А какой посоветуете? Вот такой, например, только что попробовал, даже работает. Но показания от 4-х датчиков очень уж скачут. При этом, при изменении значения на одном датчике, меняются показания на остальных. Может быть питания не хватает? Запитал все это от 3.3 самого модуля nodemcu. Т.е. и сами датчики, и adc. Вобщем-то, мне не важно значение напряжения как таковое, мне нужна лишь динамика изменений и оттарирую я потом другими средствами. Но вот стабильность бы получше - это да.

Я просто ищу с минимумом пайки. Т.е. такой вариант, как отдельная микросхема, а к ней куча всего для обвязки - не рассматриваю ввиду своего рукожопства.
- arduino( atmega какая нибудь) или stm32f103 как основной контроллер c встроенными adc, а esp просто "чтобы отослать"
Наверное сложно будет? Не могли бы привести живой рабочий пример?
 

hzuszun30

New member
Не знаю какая у вас схема подключения. Обычно ставят параллельно входу небольшое сопротивление. Все зависит от конкретики.
Да какая тут особая конкретика... Без изысков - обычный аналоговый датчик (вот такой, к примеру), AO датчика на AIN платы ADC. Питание общее.
 

hzuszun30

New member
Это один, а на остальные входы АЦП? Если другие входы не используются то их лучше замкнуть на корпус или хотя бы поставить параллельно сопротивление, например 1ком.
Они все аналогичные (ну чуть-чуть отличаются, просто купил немного разных для теста).
Висит три таких датчика, на один вход ничего не подключено (и перемычка убрана)
Насчет сопротивления - спасибо, попробую.
 

Юрий Ботов

Moderator
Команда форума
К сожалению, мне это ни о чем не говорит.
На этот вход подается напряжение относительно которого меряются все остальные. Если оно "танцует" показания всех каналов будет "танцевать" пропорционально. Что с ним делать? Стабилизировать как то... Емкостями, стабилитронами... смотря по плате. Я же разводку на плате не вижу отсюда.
 

hzuszun30

New member
Вобщем, свободный вход подвесил на штатный встроенный датчик (термистор) и все более или менее стабильно стало. В смысле поставил штатную перемычку обратно.

Память где-то утекает слегка, но это уже мелочи - просто поставил рестарт раз в час.

Еще оказалось, что питания 3.3 все-так мало. При отладке и питании от USB компа все было хорошо, но при 3.3 почему-то уходит в ребут через какое-то время. В итоге подключил питание через USB от блоки питания - все стало ОК.

В целом очень платой доволен. В минимальные сроки, без каких-либо значительных навыков как в схемотехнике, так и в программировании, решил задачу -
- подключение нескольких аналоговых и цифровых датчиков,
- передачу данных на сервер в интернете для обработки,
- встроил http-сервер с выводом показаний и управлением
- зуммер для локального оповещения

Heap держится на уровне 10500-11500, при каких-то моментах начинает утекать. Зафиксированный минимум, при котором проходила отправка на сервер - 4152. После этого варианты - либо на какое-то время все подвисало и передача не шла, либо heap сам увеличивался. Может быть какой collectgarbage срабатывал, не знаю... Иногда видно было, что помогал node.restart.

Всем спасибо за помощь.
 
Сверху Снизу