Использование датчика воды с NodeMCU делает его менее чувствительным?

Я пытаюсь digitalRead с датчика воды (тот, что на картинке) с помощью NodeMCU v3, когда я пробую датчик с платой Arduino, он работает нормально, но когда я пробую это с ESP8266 NodeMCU v3 становится менее чувствительным к воде с некоторыми контактами или вообще не работает с другими. У меня вопрос: это нормально или я что-то не так делаю?

 int pin = 14;
 char printBuffer[128];
 int ledPin = 12;
 const int buzzerPin = 13;

  void setup()
  {  
    pinMode(pin, INPUT);
    pinMode(buzzerPin, OUTPUT);
    pinMode(ledPin,OUTPUT);
    Serial.begin(115200);
  }

  void loop()
  {
    sprintf(printBuffer,"PIN %d level is %d\n",pin, digitalRead(pin));
    Serial.print(printBuffer);
    if (digitalRead(pin)==HIGH)
    {
      tone(buzzerPin, 100,1000);
      digitalWrite(ledPin, HIGH);
      delay(100);
      noTone(buzzerPin);
      digitalWrite(ledPin, LOW);
      delay(100);
      Serial.println("----------- ALARM ACTIVATED -----------"); 
    }
    else{
      noTone(buzzerPin);
      digitalWrite(ledPin, LOW);
    }
    delay(500);
   }

, 👍0

Обсуждение

Выводы GPIO ESP8266 — забавные звери в лучшие времена. Использование аналогового датчика, подобного тому, что используется на цифровом штырьке, обязательно будет отличаться на другом оборудовании., @Majenko

Так нет ли способа получить более точные результаты?, @Al Ma

Дайте определение «точному»… Во-первых, в этом датчике нет ничего точного., @Majenko

Я просто хочу, чтобы он чувствовал, что он в воде, вот и все, @Al Ma

У вас есть ссылка на техническое описание датчика, чтобы мы могли понять, что на нем изображено?, @Majenko

Я догадываюсь, как вы их подключаете. Однако, не зная, что вы используете, мы не можем вам помочь. Нам нужно знать, какие компоненты находятся на плате и как они соотносятся друг с другом., @Majenko

Вот как я их подключаю: (+) --> v3, (-) --> G и S --> D5, что за датчиком и зуммером: G --> G и (+) -- > Д7, @Al Ma

Не зная, что выходит из «S» и как это связано с «датчиком» воды в устройстве, невозможно понять, что происходит. Я нахожу эти «датчики воды» очень-очень грубыми и примитивными. На самом деле не стоит тратить на это время. Настоящие датчики воды стоят сотни долларов (я работаю с [этими](http://www.irrometer.com/sensors.html#wm))., @Majenko

Я использую его для школьного проекта на самом деле, @Al Ma

У вас есть хоть ссылка, откуда вы это взяли?, @Majenko

разве для этого не нужен аналоговый вход, а не цифровой? единственная другая разница будет 5 В против 3,3 В, поэтому подайте на него Vin (или внешнее 5 В, если у вас есть nodeMCU на базе CH340) и сдвиньте уровень сигнала до 3,3 В., @dandavis

Хорошо, я нашел несколько приличных изображений в Интернете для аналогичного и перепроектировал схему., @Majenko

Я знаю подобный датчик и помню, что подача постоянного напряжения на + приведет к коррозии из-за электролиза. Поэтому датчик будет разрушен через несколько часов работы. Ключ может заключаться в том, чтобы просто активировать его для каждого чтения, но мне лично это все равно не понравилось, и я использовал другой датчик., @Sim Son


1 ответ


1

Вы используете его неправильно.

Этот датчик (каким бы грубым он ни был) является аналоговым датчиком. Он не предназначен для подключения к цифровому контакту.

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

Подавая это напряжение на цифровой контакт, вы полагаетесь на логические пороговые значения, а также на любые другие компоненты (подтягивающие резисторы и т. д.), чтобы дать вам сигнал "мокрый" или "попытка".

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

Вам необходимо подключить датчик к аналоговому входу и сравнить считанное значение с пороговым значением по вашему выбору. Однако ESP8266 очень плохо работает с аналоговыми сигналами — у него только один аналоговый вход, и он способен измерять только от 0 до 1 вольта.

,

как вы определили, что этот датчик воды является аналоговым. Поскольку у него есть вход + и - и третья линия измерения, я ожидаю, что он будет выдавать сигнал логического уровня. Зачем ему питание, если это просто переменный резистор? (Я предполагаю, что это может быть делитель напряжения, но на картинке он выглядит так, как будто у него есть микросхема и несколько дискретных компонентов., @Duncan C

Там транзистор в качестве усилителя., @Majenko

Я хотел использовать аналоговый вход, но поскольку я использую его с датчиком влажности почвы, я решил использовать этот датчик воды в цифровом режиме, должен ли я просто использовать мультиплексор и использовать их оба в аналоговом режиме и сравнить значение читать до порогового значения, как вы сказали? в противном случае у меня есть arduino uno, могу ли я использовать его, но без изменения кода (поскольку приведенный выше код предназначен только для тестирования, фактический проект отображает значение датчиков на веб-сервере esp8266)?, @Al Ma

чтение нескольких аналоговых сигналов на ESP8266 [просто](https://www.instructables.com/id/ESP8266-with-Multiple-Analog-Sensors/), @Jaromanda X