Выход YL-38 на аналоговый вход NodeMCU v1.0

Использование YL-38 и NodeMCU v1.0. Я пытаюсь Достигните того, что делает первая ссылка, измерьте влажность почвы. Я сделал это на Arduino, но преобразование Arduino Nano в Nodemcu оказалось трудным.

Насколько я понимаю, вывод Nodemcu A0 работает в диапазоне 0–3,3 В, а аналоговый выход YL-38 — в диапазоне 0–4,1 В. Итак, во-первых, правильно ли я понимаю?

У меня проблемы с оборудованием, поэтому, осмотревшись, я нашел следующие ресурсы:

Как настроить простой переключатель уровня: эта настройка очень похожа на то, что я хотел, но вход 5 В был отключен

Эта тема дословно описала то, что я хотел, но я плохо разбираюсь в математике схем, поэтому я не смог решить или понять предоставленные формулы.

Попытка 0: изначально аналоговый выход датчика был подключен к a0 на nodemcu. Насыщенный или сухой микроконтроллер прочитал 1023. Я подумал, что это должно быть потому, что выходной сигнал находится выше диапазона отображения A0.

Попытка 1. Я решил попробовать переключатель уровней. Подключил все как указано. Теперь мои показания были 760 насыщенных и 765 сухих.

runHygrometer(index);
delay(2000); //позволяем гигрометру проснуться
reading = (DEBUG) ? analogRead(HYGROMETER_READ_PIN) : 1023 - analogRead(HYGROMETER_READ_PIN);

Как показано, мой код не масштабируется, это прямое чтение (здесь работает DEBUG). Так что же дает? При использовании Arduino диапазон показаний обычно составлял от 20 сухих до 180 насыщенных (DEBUG false, поэтому необработанные 1003 сухих и 843 насыщенных)

, 👍1


1 ответ


Лучший ответ:

3

Насколько я понимаю, вывод NodeMCU A0 работает от 0 до 3,3 В

Неверно. АЦП ESP8266 может измерять напряжение только в диапазоне от 0 до 1 В.

Вам необходимо снизить выходное напряжение до этого диапазона. То, как вы это сделаете, во многом зависит от выходного сопротивления YL-38.

Максимальный выходной ток LM393, на базе которого создан YL-38, составляет 16 мА. Этого должно быть достаточно, чтобы успешно управлять простым делителем напряжения. Делитель 4,7 кОм и 1 кОм обеспечит выходное напряжение от 0 до 0,877 В при входном напряжении 0–5 В.

schematic

Альтернативой может быть подключение внешнего АЦП, работающего при напряжении 5 В, к NodeMCU. Это даст вам несколько каналов аналогового входа в диапазоне 0–5 В. Я использую MCP3208, работающий через SPI (на самом деле я использую его на ESP8266, а не использую SPI, поскольку у меня еще нет SPI для правильной работы с ним). В идеале вам нужен подходящий преобразователь логического уровня для сигналов SCK и MOSI, чтобы повысить их до 5 В. Однако все это становится немного сложнее.


Выяснилось, что NodeMCU уже включает в себя делитель напряжения. По какой-то причине они решили использовать массивные резисторы, которые дают слишком высокий импеданс для точной работы любого разумного входа АЦП. Я бы предложил, если можете, удалить эти резисторы с платы и заменить их резисторами 4,7 кОм и 1 кОм, чтобы сформировать собственный делитель напряжения. В противном случае вам придется использовать пару операционных усилителей в режиме инвертирования, один с дробным коэффициентом усиления, а другой с единичным коэффициентом усиления (второй — «отменить» инвертирование первого), чтобы уменьшить сигнал до 0–3,3 В.

Я бы в любом случае был склонен использовать для этого внешний АЦП.

,

Мне показалось, что я прочитал, что A0 имеет делитель напряжения и подает этот сигнал в АЦП ESP8266? Я имею в виду предпоследнюю страницу документа NodeMCU, указанную выше. https://randomnerdtutorials.com/esp8266-adc-reading-analog-values-with-nodemcu/ «В настоящее время TOUT (Pin6) имеет точность 10 бит, а диапазон входного напряжения составляет от 0 до 3,3 В, когда TOUT подключен к внешней цепи»., @Doug Clark

Фу. Так и есть. Это противно. Вы хотите удалить эти резисторы и заменить их 4,7К и 1К. Используемые резисторы как минимум в 10 раз больше, чем для любого нормального входа АЦП. Слишком высокий импеданс. Вы не можете использовать рядом с ним еще один делитель напряжения, он просто не будет работать. Либо так, либо вам придется использовать операционный усилитель с коэффициентом усиления ниже единицы (на самом деле вам понадобится пара инвертирующих операционных усилителей, один с дробным коэффициентом усиления и один с единичным коэффициентом усиления), чтобы буферизировать ваш сигнал с помощью выход с низким импедансом. Или использовать внешний АЦП..., @Majenko

Итак, мне следует рассмотреть возможность использования внешнего АЦП для преобразования сигналов 5 В в сигналы 3,3 В? Это было бы самое простое решение?, @Doug Clark

Да, я бы, наверное, выбрал этот путь. Фактически, прямо передо мной стоит D1 Mini Pro с подключенным к нему MCP3208 для измерения тока и напряжения..., @Majenko

У меня очень мало контактов ввода-вывода, поэтому я не уверен, подойдет ли мне MCP3002. Но могу ли я пропустить ADC EX и его делитель напряжения и использовать внешний АЦП 4,7 кОм/1 кОм прямо к контакту Tout ESP8266 (который, я думаю, в документе помечен просто как АЦП)?, @Doug Clark

@DougClark Конечно. Однако вы можете удалить существующий делитель, поскольку нижний резистор немного исказит ваши показания., @Majenko

Давайте [продолжим обсуждение в чате](https://chat.stackexchange.com/rooms/80934/discussion-between-doug-clark-and-majko)., @Doug Clark