Проблема с аналоговыми показаниями на 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);
}
@Paddy, 👍0
Обсуждение1 ответ
Лучший ответ:
Я думаю, что проблема здесь:
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
- Как использовать SPI на Arduino?
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Подключение HX711 к трехпроводному датчику нагрузки
- Правильное использование * и & при передаче объектов в методах.
- ISO C++ запрещает принимать адрес неквалифицированной или заключенной в скобки нестатической функции-члена для формирования указателя на функцию-член
- Взаимодействие с датчиком SSI?
- Разница между массивом char и массивом unsigned char
- Использование YS-IRTM с Arduino Uno
Эти «датчики» влажности YL-69 вообще ненадежны. На металлы в почве есть напряжение. Возможно, они будут работать часами, днями или неделями, а потом вам придется искать что-то получше., @Jot