Как подключить два датчика DHT22
- Войдите на сайт для отправки комментариев
Сб, 11/05/2013 - 16:09
Здравствуйте.
Подскажите каким образом можно считывать информацию с двух датчиком DHT22 на Arduini UNO R3. Насколько я понял каждый датчик подключается к своему пину. Вопро в том как прописать это в коде?
Я прописываю каждый датчик на свой пин 2 и 3 и объявляю две переменных dhta и dhtb. Правильно ли будет сделать так?:
#include "DHT.h"
#define DHTPINa 2 // what pin we're connected to
#define DHTPINb 3 // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dhta(DHTPINa, DHTTYPE);
DHT dhtb(DHTPINb, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float ha = dhta.readHumidity();
float ta= dhta.readTemperature();
float hb = dhtb.readHumidity();
float tb= dhtb.readTemperature();
Оказываетс явсе раскурено до нас.
http://arduino.ru/forum/programmirovanie/6-datchikov-dht11-na-odnom-pine
подключение двух датчиков DHT22 AM2302
с выводом значений в порт.. задействованы пин 5 и пин 6 , можно брать любые , у меня мега2560
показывают температуру почти одинаковую))) разница в 0.4 градуса
#include <dht.h> dht DHT; #define DHT22a_PIN 5 #define DHT22b_PIN 6 void setup() { Serial.begin(115200); Serial.println("DHT TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT_LIB_VERSION); Serial.println(); Serial.print("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); Serial.println(" datchika"); } void loop() { // READ DATA Serial.print("DHT22, \t"); int chk = DHT.read22(DHT22a_PIN); switch (chk) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT.humidity, 1); Serial.print(",\t\t"); Serial.print(DHT.temperature, 1); Serial.println(" temp1 "); // READ DATA второй датчик!!! Serial.print("DHT22, \t"); int chk2 = DHT.read22(DHT22b_PIN); switch (chk) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // вывод в порт значений с датчика2 - "temp2" Serial.print(DHT.humidity, 1); Serial.print(",\t\t"); Serial.print(DHT.temperature, 1); Serial.println(" temp2 "); delay(3000);// задержка 3сек }Здравствуйте, столкнулся с такой проблемой делаю вычитку датчиков в основном цикле loop у меня 3 датчика DHT22 время которое затрачиваться на чтения датчиков приблизительно 500мс и того получаться что полторы секунды читается все датчики в то время задержка влияет на отображения на LCD экране (часы rtc ds1302) секунд и чтения нажатия на аналоговые кнопки. Arduino mega 2560 | LCD key shild
Здравствуйте, подскажите новичку.
нахватался везде помаленьку, получился такой скетч
Управление влажностью в гараже включением вытяжного вентилятора
Два датчика DHT22 первый в гараже, второй на улице. Не знаю какой параметр нужно вставить чтобы реле вентилятора включалось когда влажность в гараже выше чем на улице(выделил жирным в скетче), но только если влажность в гараже более 50%. И если не трудно, как добавить таймер работы вентилятора(в случае если он не может сбить влажность до нужного уровня) Температура с датчиков пока носит только информационный характер
#include <LiquidCrystal.h> // Библиотека управления экраном
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#include "DHT.h" // Библиотека датчика DHT22 температуры и влажности
#define DHTPINa 2 // Считывающий пин с датчика 1
#define DHTPINb 3 // Считывающий пин с датчика 2
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define hPIN 5 // Пин управления реле вентилятора
DHT dhta(DHTPINa, DHTTYPE); // Создаем объект dhta датчик 1
DHT dhtb(DHTPINb, DHTTYPE); // Создаем объект dhtb датчик 2
int hStatus = HIGH; // определяем переменную, отвечающую за состояние реле вентилятора HIGH=выкл, LOW=вкл
void setup() // инициализация основных данных
{
dhta.begin(); // Инициализируем датчик 1
dhtb.begin(); // Инициализируем датчик 2
pinMode(hPIN, OUTPUT);
lcd.begin(16,2); // устанавливаем размеры экрана
}
void loop() // зацикливание (код управляющей программы)
{
float ha = dhta.readHumidity(); // Считываем влажность датчика 1
float hb = dhtb.readHumidity(); // Считываем влажность датчика 2
float ta = dhta.readTemperature(); // Считываем температуру датчика 1
float tb = dhtb.readTemperature(); // Считываем температуру датчика 2
if (ha < hb ) hStatus = HIGH; else hStatus = LOW; // Если влажность датчика 1 выше влажности датчика 2 , то статус реле вентилятора=Вкл, в противном случае Выкл
digitalWrite(hPIN, hStatus);
lcd.setCursor(0,0); // устанавливаем позицию курсора на экране
lcd.print(ta, 1); lcd.print("C "); lcd.print(ha, 1); lcd.print("%");// Выводим информацию с датчика 1
lcd.setCursor(0,1);
lcd.print(tb, 1); lcd.print("C "); lcd.print(hb, 1); lcd.print("%");// Выводим информацию с датчика 2
lcd.setCursor(15,1);lcd.print((hStatus == LOW) ? "*":" "); // Выводим индикатор работы реле вентелятора
delay(500); // Задержка в пол секунды
}
засекайте время включения вентилятора, если через определенный промежуток влажность не уменьшилась или уменьшилась недостаточно - выключаете вентилятор.
millis()
Здравствуйте, столкнулся с такой проблемой делаю вычитку датчиков в основном цикле loop у меня 3 датчика DHT22 время которое затрачиваться на чтения датчиков приблизительно 500мс и того получаться что полторы секунды читается все датчики в то время задержка влияет на отображения на LCD экране (часы rtc ds1302) секунд и чтения нажатия на аналоговые кнопки. Arduino mega 2560 | LCD key shild
Я бы повесил вывод на таймер, а в цикле читал покаания с датчиков и заполнял глобальные переменные по мере возможности, например, раз в секунду.
В итоге и часы нормально "ходят", и показания читаются.
Здравствуйте, столкнулся с такой проблемой делаю вычитку датчиков в основном цикле loop у меня 3 датчика DHT22 время которое затрачиваться на чтения датчиков приблизительно 500мс и того получаться что полторы секунды читается все датчики в то время задержка влияет на отображения на LCD экране (часы rtc ds1302) секунд и чтения нажатия на аналоговые кнопки. Arduino mega 2560 | LCD key shild
Я бы повесил вывод на таймер, а в цикле читал покаания с датчиков и заполнял глобальные переменные по мере возможности, например, раз в секунду.
В итоге и часы нормально "ходят", и показания читаются.
Подскажите...как это сделать...Как повесить "вывод на таймер"??
Такая же проблема с трёх датчиков DHT22...часы на ЛДС "тормозят"...
DHT22 опрашиваются сравнительно долго.
Как повесить "вывод на таймер"??
http://alxarduino.blogspot.ru/2013/09/ComfortablyBlinkWithoutDelay.html
Так сложно вбить в гугл "arduino timer library"?
Или "новичкам" уже законодательно запрещено использовать мозги?
Radjah - ПОШЁЛ НАХУЙ, УМНИК!
Законодатель....
http://alxarduino.blogspot.ru/2013/09/ComfortablyBlinkWithoutDelay.html
ОЧЕНЬ БЛАГОДАРЮ...
Вот это бомбануло! %)
Добрый день! Я уже неделю ковыряюсь в интернете, чтобы понять, можно ли вообще подключить два датчика: но один из них DHT11, а один DHT22. И как? Желательно со скетчем. Ибо я пока чайник. Спасибо!
PS Обещаю не ругаться и не обижаться на критику в мою сторону)
Да - можно, каждый датчик на отдельный вывод.
Мне бы код, или хотя бы начало, как их прописать и какую библиотеку использовать, их несколько и в каких-то надо писать тип датчика, а в каких- то не надо
Могу вам еще раз скопировать приведенный выше код. Сам подключал два DHT11 - с кодом аналогичным первом сообщении, работали.
Библиотеку эту брал https://yadi.sk/d/rcexdmxadBxXN
Естественно она только для DHT11
У меня один 11, а другой 22
Есть вот такая еще https://github.com/adafruit/DHT-sensor-library
Тип датчика устанавливается при объявлении.
Тоесть мне надо просто раскомментировать сразу две строки?
Все здравствуйте!
Подключил таки два разных датчика...
Может пригодится кому.
#include "DHT.h" #include <PCD8544RUS2.h> // переделанная библиотека дисплея NOKIA 5110 с кирилицей //#define DHTPIN 2 //#define DHTTYPE DHT22 DHT dht1(2, DHT22); DHT dht2(8, DHT11); static PCD8544RUS2 lcd; void setup() { // Serial.begin(9600); // Serial.println("DHTxx test!"); lcd.begin(84, 48); dht1.begin(); dht2.begin(); } void loop() { float h1 = dht1.readHumidity(); float t1 = dht1.readTemperature(); float h2 = dht2.readHumidity(); float t2 = dht2.readTemperature(); if (isnan(t1) || isnan(h1)) { //lcd.clear(); lcd.setCursor(0, 0); lcd.print("Failed to read from DHT1"); // Serial.println("Failed to read from DHT"); } else if (isnan(t2) || isnan(h2)) { //lcd.clear(); lcd.setCursor(0, 2); lcd.print("Failed to read from DHT2"); // Serial.println("Failed to read from DHT"); } else { //lcd.clear(); //-----------------dht 1 lcd.setCursor(0, 0); lcd.print("Влаж1 "); lcd.print(h1); lcd.print(" %\t"); lcd.setCursor(0, 1); lcd.print("Темп1 "); lcd.print(t1); lcd.print(" *C"); //-----------------dht 2 lcd.setCursor(0, 2); lcd.print("Влаж2 "); lcd.print(h2); lcd.print(" %\t"); lcd.setCursor(0, 3); lcd.print("Темп2 "); lcd.print(t2); lcd.print(" *C"); // Serial.print("Humidity: "); // Serial.print(h); // Serial.print(" %\t"); // Serial.print("Temperature: "); // Serial.print(t); // Serial.println(" *C"); } }