Проблема с аналоговыми показаниями на Arduino atMega с датчиками влажности YL-69

Я подключил четыре датчика YL-69 к моему Arduino at-mega2560 через аналоговые контакты 0–3. Это сочетается с четырьмя датчиками DHT11, которые находятся на цифровых контактах.

DHT работает нормально, и я могу использовать один датчик влажности YL-69, который дает правильные показания. Но когда подключал остальные, показания просто 100% у всех. Я уверен, что где-то допустил ошибку в своем коде, просто не могу ее обнаружить.

Я опубликовал ниже эскиз, который использую, и результаты последовательного монитора. (Кстати, я добавил небольшую задержку в 10 мс между каждым чтением, думая, что это может быть проблемой, но это не дало никакого эффекта).

Последовательный монитор:

Последовательный монитор

Эскиз:

#include "DHT.h"
#include <SPI.h>        // Подключаем библиотеку SPI (необходима для SD-карты)
#include <SD.h>         // Подключаем SD-библиотеку

File dataFile;

#define DHTPIN0 10     // к какому выводу мы подключены
#define DHTPIN1 11     // к какому выводу мы подключены
#define DHTPIN2 12     // к какому выводу мы подключены
#define DHTPIN3 13     // к какому выводу мы подключены


// Раскомментируйте любой тип, который вы используете!

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Как подключить датчики
// Подключаем контакт 1 (слева) датчика к +5В
// Подключите контакт 2 датчика к любому вашему DHTPIN-коду
// Подключаем контакт 4 (справа) датчика к ЗАЗЕМЛЕНИЮ
// Подключите резистор 10 кОм от контакта 2 (данные) к контакту 1 (питание) датчика.

DHT dht0(DHTPIN0, DHTTYPE);
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
DHT dht3(DHTPIN3, DHTTYPE);

int output_value ;
int output_value1 ;
int output_value2 ;
int output_value3 ;
int output_value4 ;

unsigned long time;

void setup() {
 Serial.begin(9600); 
 while (!Serial)
    ; // ждем подключения последовательного порта. Требуется только для собственного порта USB
  Serial.print("Initializing SD card...");
  if (!SD.begin()) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
 Serial.println("DHTxx test!");
 dht0.begin();
 dht1.begin();
 dht2.begin();
 dht3.begin();
 delay(2000);
}

uint16_t line = 1;

void loop() {
 // Чтение температуры или влажности занимает около 250 миллисекунд!
 // Показания датчика также могут быть устаревшими до 2 секунд (это очень медленный датчик)
 float h0 = dht0.readHumidity();
 float h1 = dht1.readHumidity();
 float h2 = dht2.readHumidity();
 float h3 = dht3.readHumidity();
 float t0 = dht0.readTemperature();
 float t1 = dht1.readTemperature();
 float t2 = dht2.readTemperature();
 float t3 = dht3.readTemperature();

 dataFile = SD.open("DHT11Log.csv", FILE_WRITE);
 // если какой-либо результат ниже — NaN (а не число), значит что-то пошло не так!
 if (dataFile) {
   output_value= analogRead(A0);
   delay(10);
   output_value1= analogRead(A1);
   delay(10);
   output_value2= analogRead(A2);
   delay(10);
   output_value3= analogRead(A3);
   delay(10);
   output_value4= analogRead(A4);
   output_value = map(output_value,1024,0,0,100);
   output_value1 = map(output_value,1024,0,0,100);
   output_value2 = map(output_value,1024,0,0,100);
   output_value3 = map(output_value,1024,0,0,100);
   output_value4 = map(output_value,1024,0,0,100);
   Serial.print("Moisture : ");
   Serial.print(output_value);
   Serial.println("%");
   Serial.print(output_value1);
   Serial.println("%");
   Serial.print(output_value2);
   Serial.println("%");
   Serial.print(output_value3);
   Serial.println("%");
   Serial.print(output_value4);
   Serial.println("%");
   Serial.print("Humidity  : sensor 0, "); 
   Serial.println(h0);
   Serial.print("  sensor 1, "); 
   Serial.println(h1);
   Serial.print("  sensor 2, "); 
   Serial.println(h2);
   Serial.print("  sensor 3, "); 
   Serial.println(h3);
   Serial.println(" %\t");
   Serial.print("temperature  : sensor 0, "); 
   Serial.println(t0);
   Serial.print("  sensor 1, "); 
   Serial.println(t1);
   Serial.print("  sensor 2, "); 
   Serial.println(t2);
   Serial.print("  sensor 3, "); 
   Serial.println(t3);
   Serial.println(" %\t");
   dataFile.print(line++);
   dataFile.print(":    Temperature = ");
   dataFile.print(",");
   dataFile.print(t0);
   dataFile.print(",");
   dataFile.print(t1);
   dataFile.print(",");
   dataFile.print(t2);
   dataFile.print(",");
   dataFile.print(t3);
   dataFile.print(",");
   dataFile.print("°C,    Humidity = ");
   dataFile.print(",");
   dataFile.print(h0);
   dataFile.print(",");
   dataFile.print(h1);
   dataFile.print(",");
   dataFile.print(h2);
   dataFile.print(",");
   dataFile.print(h3);
   dataFile.print(",");
   dataFile.println("%");
   dataFile.print(",");
   dataFile.print("Moisture : ");
   dataFile.print(",");
   dataFile.print(output_value);
   dataFile.print(",");
   dataFile.print(output_value1);
   dataFile.print(",");
   dataFile.print(output_value2);
   dataFile.print(",");
   dataFile.print(output_value3);
   dataFile.print(",");
   dataFile.print(output_value4);
   dataFile.close();

  }
  // если файл не открылся, выводим ошибку:
  else
    Serial.println("error opening DHT11Log.txt");
    delay(10000);
}

, 👍0

Обсуждение

Эти «датчики» влажности YL-69 вообще ненадежны. На металлы в почве есть напряжение. Возможно, они будут работать часами, днями или неделями, а потом вам придется искать что-то получше., @Jot


1 ответ


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

2

Я думаю, что проблема здесь:

output_value = map(output_value,1024,0,0,100);
output_value1 = map(output_value,1024,0,0,100);
output_value2 = map(output_value,1024,0,0,100);
output_value3 = map(output_value,1024,0,0,100);
output_value4 = map(output_value,1024,0,0,100);

замените их на:

output_value = map(output_value,1024,0,0,100);
output_value1 = map(output_value1,1024,0,0,100);
output_value2 = map(output_value2,1024,0,0,100);
output_value3 = map(output_value3,1024,0,0,100);
output_value4 = map(output_value4,1024,0,0,100);
,

Большое спасибо! Я этого вообще не заметил, завтра обновлю свой эскиз и отпишусь здесь, если все работает нормально. еще раз спасибо, @Paddy

@Paddy Всегда пожалуйста! Пожалуйста, если я вам помог, не забудьте пометить вопрос как решенный. :), @leoc7

Проверил там, работает отлично. Теперь я отмечу это как решенное. Ваше здоровье!, @Paddy