Датчик давления и датчик влажности непонятные показания

Serg1
Offline
Зарегистрирован: 04.12.2015

День добрый.

Прошу помощи по программе. Собрал на ардуино  НАНО +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 ");
}

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Почему не верите в температуру? Там не сверхточный термометр стоит и некоторый плюс/минус можно ему простить. К тому-же он стоит не плате с другими детальками - может и прогреваться. Если у вас есть градусник, которому вы верите и отклонения линейные - просто внесите поправку в скетч.

DHT11 - сам по себе какашка, от него вы честной влажности не добъетесь. Тем более - раз в пять секунд.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Протестируйте оба датчика при разных температурах,

если показания линейны, то просто внесите коррекцию програмно.

DHT11 сильно врет что с ним не делай будет гулять+-1градус.

GY 68-более точный, но возможно подогревается у вас или скачки питания, поставьте кондер по питанию датчика.

 

 

Serg1
Offline
Зарегистрирован: 04.12.2015

Спасибо за ответы.

Эксперименты показали, что датчики DTH11 кривоватые. Заменил датчик на другой DTH11 и показания влажности стали  21-23% в помещении. На улице показания выросли до 37%. Место проведения замеров город-герой С-Пб. У нас влажность реальная раза в 2 д.б. выше!

Заменил датчик на DTH22.  Показания влажности стали 39-42% в помещении, что намного ближе к истине.

По температуре показания идентичны с GY-68. По датчикам пока всё.

Следующий шаг-подключение шилда LCD1602 keypad.

С подключением разобрался со 2-го раза. 

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

Сейчас ищу ответ:

1. давление отображается как 753,60 мм рт. ст. Как убрать не значащий  0 в сотом разряде?

2. С датчика DTH22 температура  отображается в целых числах. Как можно сделать отображение с точностью 1 знак после запятой(напр 23,4)?

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Где отображаются данные?

Как подключен дисплей?

Не хотите, чтобы вас ... чтобы над вами пошутили - давайте всю информацию.

Serg1
Offline
Зарегистрирован: 04.12.2015

Попытался вчерась выложить фото. И не смог.

Попробую на словах: я подключил Нано к  шилду 1602 с кнопками таким же образом как он подключался бы к УНО (методом бутерброда).

Данные отображаются на LCD1602. Я так подобрал текст, чтобы он занимал обе строки полностью. 

Сейчас хотел бы облагородить выводимую информацию- убрать не значащий ноль  в показаниях температурного датчика GY-68 и убрать показания младшего разряда в показаниях барометрического датчика. 

Serg1
Offline
Зарегистрирован: 04.12.2015
#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); 
          
}
    

 

bwn
Offline
Зарегистрирован: 25.08.2014

58 - (t,1)

61 - (h,0)

Serg1
Offline
Зарегистрирован: 04.12.2015

По методу bwn не получилось. :(

Вот так заработало:

64  lcd.print(Pressure/133.3,1);// печатаем первую строку со значением  до 1 знака после зпт.

 67  lcd.print(Temperature*0.1,1);//печатаем значение температуры со значением до 1 знака после зпт.
 
Далее решил вставить символ градуса. взял кусок кода отсюда: http://arduino.ru/forum/programmirovanie/lcd-1602-i-svoi-simvoly
Напоминаю, это мой первый эксперимент с Ардуино. Спасибо всем за поддержку и подсказки.
Следующий этап- вычисление минимальных и максимальных значений температур, давления и влажности.
Вывод данных на экран по нажатии кнопки "вверх" максимальные значения, при нажатии кнопки "вниз" минимальные значения. При нажатии "сброс"  обнуление мин и макс значений.
Потом добавление датчика освещенности, и по факту сумерек включение подсветки для растений.
 
bwn
Offline
Зарегистрирован: 25.08.2014

Логично, что не получилось. На типы переменных не глянул, а про которые написал и вовсе целочисленные.(((((