1

Перейти к содержимому


       Торент трекер от http://stalker-worlds.ru        Хранилище сайта http://stalker-worlds.ru        Онлайн Сталкер Канал Унесенные Сталкером Присоединяйся к нашему сообществу на facebook Вступай в нашу группу в контакте


Добро пожаловать к нам на сайт! Про Ваш статус и права можно прочитать в Этой теме

Для просмотра картинок и скачивания файлов с форума - пройдите регистрацию!   Проблемы с регистрацией - вам сюда


Фотография

Подключаем DHT11 Датчик температуры и влажности до Arduino


  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1
RUS_D

RUS_D

    Главный АДМИН

  • Не в сети
  • Тех. Админ
  • админ Администратор
  • Старожил сайта
<- Информация ->
  • PipPipPipPip
  • Регистрация:
    08-December 08
  • 3006 Cообщений
  • Пропуск №: 2


Репутация: 6806 Постов: 3006
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.
DHT11 Датчик температуры и влажности для Arduino
sensortemphum3.jpg
 
Характеристики:
 
Напряжение питания: +5 В.
Температурный диапазон :0-50 ° C погрешность ± 2 ° C.
Влажность :20-90% RH ± 5% RH погрешность.
 
Датчик обеспечивает калиброванный цифровой выходной сигнал.
 
Оснащен высокопроизводительным 8-разрядным микроконтроллером.
 
sensortemphum4.jpg  sensortemphum5.jpg
 

Пример программного кода:

#define DHT11_PIN 0 // define anlog port 0


byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while(!(PINC & _BV(DHT11_PIN)))
{}; // wait forever until anlog input port 0 is '1' (NOTICE: PINC reads all the analog input ports
//and _BV(X) is the macro operation which pull up positon 'X'to '1' and the rest positions to '0'. it is equivalent to 1<
delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN)) //if analog input port 0 is still '1' after 30 us
result |=(1<<(7-i)); //this position is 1
while((PINC & _BV(DHT11_PIN))); // wait '1' finish
}
return result;
}




void setup()
{
DDRC |= _BV(DHT11_PIN); //let analog port 0 be output port
PORTC |= _BV(DHT11_PIN); //let the initial value of this port be '1'
Serial.begin(9600);
Serial.println("Ready");
}


void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;// start condition


PORTC &= ~_BV(DHT11_PIN); // 1. pull-down i/o pin for 18ms
delay(18);
PORTC |= _BV(DHT11_PIN); // 2. pull-up i/o pin for 40ms
delayMicroseconds(1);
DDRC &= ~_BV(DHT11_PIN); //let analog port 0 be input port
delayMicroseconds(40);


dht11_in = PINC & _BV(DHT11_PIN); // read only the input port 0
if(dht11_in)
{
Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
delay(1000);
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN); //
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met"); //wair for second response signal:HIGH
return;
}


delayMicroseconds(80);// now ready for data reception
for (i=0; i<5; i++)
{ dht11_dat[i] = read_dht11_dat();} //recieved 40 bits data. Details are described in datasheet


DDRC |= _BV(DHT11_PIN); //let analog port 0 be output port after all the data have been received
PORTC |= _BV(DHT11_PIN); //let the value of this port be '1' after all the data have been received
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Current humdity = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(dht11_dat[2], DEC);
Serial.print(".");
Serial.print(dht11_dat[3], DEC);
Serial.println("C ");
delay(2000); //fresh time
}

 


"Бить не нужно, а не вникнут - разъяснять" © В.С. Высоцкий
я в скайпе - rus_did
Мои детство и юность прошли без Интернета. Может быть, поэтому я понимаю, что за языком надо следить, а за слова отвечать.





Количество пользователей, читающих эту тему: 0

0 members, 0 guests, 0 anonymous users

яндекс.метрика
Button automatically alert search engines 31x31 WHOIS.UANIC.NAME - Identify traffic by Google

реклама на сайте подключена