Датчик давления и датчик влажности непонятные показания
- Войдите на сайт для отправки комментариев
Пт, 04/12/2015 - 16:11
День добрый.
Прошу помощи по программе. Собрал на ардуино НАНО +DHT11+GY 68 метеостанцию.
В результате в сериал порт идут даннные с барометра : давление 755 мм рт ст- достоверные данные, с него же темпратура 26 градусов- не верю.
с Датчика влажности идёт 7% влажность- брехня, и 23 градуса температура достоверный показатель.
Кто подскадет, что где не так ( скетч слепил из 2х кусков)
#include <stDHT.h>
#include <Wire.h>
#include <BMP085.h>
BMP085 dps = BMP085();
long Temperature = 0, Pressure = 0;
DHT sens(DHT11);// не использовать одновременно DHT11 и DHT22
void setup()
{
Serial.begin(9600);
pinMode(6, INPUT);
digitalWrite(6, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
Wire.begin();
delay(3000);
dps.init();
}
void loop()
{
int t = sens.readTemperature(6); // чтение датчика на пине 6
int h = sens.readHumidity(6); // чтение датчика на пине 6
delay(3000);
dps.getPressure(&Pressure);
dps.getTemperature(&Temperature);
Serial.print("Pressure(mm Hg):");
Serial.print(Pressure / 133.3); //Выводим давление в мм.рт ст
Serial.print("Temp:");
Serial.println(Temperature * 0.1); // Температуру в градусах Цельсия
delay(2000);
Serial.print("Hum: ");
Serial.print(h);
Serial.print(" %");
Serial.print("Temp: ");
Serial.print(t);
Serial.println(" C ");
}
Почему не верите в температуру? Там не сверхточный термометр стоит и некоторый плюс/минус можно ему простить. К тому-же он стоит не плате с другими детальками - может и прогреваться. Если у вас есть градусник, которому вы верите и отклонения линейные - просто внесите поправку в скетч.
DHT11 - сам по себе какашка, от него вы честной влажности не добъетесь. Тем более - раз в пять секунд.
Протестируйте оба датчика при разных температурах,
если показания линейны, то просто внесите коррекцию програмно.
DHT11 сильно врет что с ним не делай будет гулять+-1градус.
GY 68-более точный, но возможно подогревается у вас или скачки питания, поставьте кондер по питанию датчика.
Спасибо за ответы.
Эксперименты показали, что датчики DTH11 кривоватые. Заменил датчик на другой DTH11 и показания влажности стали 21-23% в помещении. На улице показания выросли до 37%. Место проведения замеров город-герой С-Пб. У нас влажность реальная раза в 2 д.б. выше!
Заменил датчик на DTH22. Показания влажности стали 39-42% в помещении, что намного ближе к истине.
По температуре показания идентичны с GY-68. По датчикам пока всё.
Следующий шаг-подключение шилда LCD1602 keypad.
С подключением разобрался со 2-го раза.
Обнаружилось непонятное поведение: устройство штатно выдает данные на дисплей. Но если включить монитор последовательного порта, то на дисплее отображается мусор. Отключаешь от компьютера, перегружаешь ардуино и снова все в порядке. почему?
Сейчас ищу ответ:
1. давление отображается как 753,60 мм рт. ст. Как убрать не значащий 0 в сотом разряде?
2. С датчика DTH22 температура отображается в целых числах. Как можно сделать отображение с точностью 1 знак после запятой(напр 23,4)?
Где отображаются данные?
Как подключен дисплей?
Не хотите, чтобы вас ... чтобы над вами пошутили - давайте всю информацию.
Попытался вчерась выложить фото. И не смог.
Попробую на словах: я подключил Нано к шилду 1602 с кнопками таким же образом как он подключался бы к УНО (методом бутерброда).
Данные отображаются на LCD1602. Я так подобрал текст, чтобы он занимал обе строки полностью.
Сейчас хотел бы облагородить выводимую информацию- убрать не значащий ноль в показаниях температурного датчика GY-68 и убрать показания младшего разряда в показаниях барометрического датчика.
#include <LiquidCrystal.h> // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #include <stDHT.h> #include <Wire.h> #include <BMP085.h> BMP085 dps = BMP085();В В В В long Temperature = 0, Pressure = 0; DHT sens(DHT22); void setup() { В Serial.begin(9600); В pinMode(2, INPUT); В digitalWrite(2, HIGH); В pinMode(3, INPUT); В digitalWrite(3, HIGH); В В Wire.begin(); В В delay(5000); В В dps.init();В lcd.begin(16,2); lcd.clear(); } void loop() { В int t = sens.readTemperature(2); В int h = sens.readHumidity(2); В delay(3000); В В dps.getPressure(&Pressure); В В dps.getTemperature(&Temperature); В В В Serial.print("Pressure(mm Hg):"); В В Serial.print(Pressure/133.3); В В Serial.print("Temp:"); В В Serial.println(Temperature*0.1); В В delay(4000); В Serial.print("Hum: "); В Serial.print(h); В Serial.print(" %"); В Serial.print("Temp: "); В Serial.print(t); В Serial.println(" C "); lcd.clear(); lcd.print("P:"); lcd.print(Pressure/133.3); lcd.print("T1:"); lcd.print(Temperature*0.1); lcd.setCursor(0, 1); lcd.print("Temp:"); lcd.print(t); lcd.print("c"); lcd.print("Hum: "); lcd.print(h); lcd.print("%"); delay(10000); }58 - (t,1)
61 - (h,0)
По методу bwn не получилось. :(
Вот так заработало:
64 lcd.print(Pressure/133.3,1);// печатаем первую строку со значением до 1 знака после зпт.
Логично, что не получилось. На типы переменных не глянул, а про которые написал и вовсе целочисленные.(((((