Кодты іздеу

Сабақ 27: DHT11 температура сенсорын LCD экранмен қолдану | Arduino қадамдық курс

Сабақ 27: DHT11 температура сенсорын LCD экранмен қолдану | Arduino қадамдық курс

Бұл нұсқаулық сізді DHT11 сенсорын және I2C LCD экранын пайдаланып температура мен ылғалдылықты бақылау жүйесін құру арқылы өткізеді, Robojax Arduino Қадамдық Курсының 27-сабағына негізделген. Бейне транскрипті HTU21DF сенсорына сілтеме жасағанымен, мұнда ұсынылған код пен принциптер қоршаған ортаны сезу жобалары үшін кең таралған және бюджеттік DHT11 модуліне тікелей қолданылады. Бұл жоба жаңып тұрған жарықдиодтардан асып, нақты әлем деректерін оқуды бастағысы келетін жаңадан бастаушыларға өте қолайлы.

DHT11 Module

Бұл жобаның нақты әлемдегі құндылығы зор. Сіз бұл қондырғыны кең ауқымды практикалық қолданыстар үшін пайдалана аласыз, соның ішінде:

  • Үйіңіз немесе кеңсеңіз үшін қарапайым цифрлық термометр мен гигрометр құру.
  • Бауырымен жорғалаушылар террариумы немесе өсімдік жылыжайы үшін климат мониторын жасау.
  • Сериалды монитор арқылы деректерді компьютеріңізге жазатын қарапайым ауа райы станциясын әзірлеу.
  • Температураға негізделген автоматтандыруды қосу, мысалы, белгілі бір шектен асқанда желдеткішті немесе жылытқышты қосу.

Бұл оқулық сізді сымдарды қосу, қажетті кітапханалар және код арқылы бағыттайды, бұл сізге өзіңіздің қоршаған ортаны бақылау жүйеңізді құруға мүмкіндік береді.

Аппараттық құралдар мен компоненттер

Бұл жобаны құру үшін сізге келесі компоненттер қажет:

  • Arduino тақтасы (мысалы, Uno, Nano).
  • DHT11 температура мен ылғалдылық сенсор модулі.
  • I2C интерфейс модулі бар LCD1602 дисплейі.
  • Жалғағыш сымдар.
  • Макет тақтасы (міндетті емес, бірақ оңай қосылымдар үшін ұсынылады).

Сымдарды қосу нұсқаулығы

DHT11 модулі LCD1602 сымдарын қосу

Бұл жобаның сымдарын қосу LCD-дегі I2C интерфейсі мен DHT11-дің қарапайым цифрлық шығысының арқасында түсінікті. I2C LCD тек екі деректер сымын (SDA және SCL) және екі қуат сымын қажет етеді, бұл қосылымдарды айтарлықтай жеңілдетеді. DHT11 сенсорында да қарапайым үш істікшелі интерфейс бар.

Міне, жобаның қосылым диаграммасы:

Компоненттерді келесідей қосыңыз:

  • DHT11 сенсоры: VCC (немесе +) істікшесін Arduino-ның 5V істікшесіне, GND (-) істікшесін Arduino-ның GND-іне және DATA (немесе OUT) істікшесін Arduino-дағы цифрлық 2 істікшесіне қосыңыз.
  • I2C LCD (LCD1602): VCC істікшесін Arduino-ның 5V істікшесіне, GND істікшесін Arduino-ның GND-іне, SDA істікшесін Arduino-ның аналогтық A4 істікшесіне және SCL істікшесін Arduino-ның аналогтық A5 істікшесіне қосыңыз.

Бұл қосылымдар сенсор мен дисплейді қуаттандыру және компоненттер арасындағы байланысты қамтамасыз ету үшін қажет нәрсенің бәрі.

Кодты түсіндіру

Код DHT11 сенсорынан температура мен ылғалдылықты оқуға және мәндерді I2C LCD экранында көрсетуге арналған. Ол сондай-ақ компьютеріңізде оңай қарау үшін деректерді Сериалды Мониторға басып шығарады.

Өз жобаларыңыз үшін реттегіңіз келетін кодтың пайдаланушы конфигурациялайтын бөліктерін қарастырайық.


// GitHub-тағы тақырып файлы: https://github.com/adidax/dht11
#include <dht11.h>

dht11 DHT11; // DHT11 нысанын жасау
#define dhtpin 2 // DHT11-ге қосу үшін істікшені орнату

// LCD1602-I2C параметрлерінің басы
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 16 таңба және 2 жол дисплей үшін LCD мекенжайын 0x3F етіп орнату
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// LCD1602-I2C параметрлерінің соңы
  • #define dhtpin 2: Бұл DHT11 сенсорының DATA істікшесіне қосылған Arduino цифрлық істікшесін анықтайды. Егер оны басқа істікшеге қоссаңыз, бұл санды өзгертуіңіз керек.
  • LiquidCrystal_I2C lcd(0x3F, 16, 2): Бұл жол LCD-ді инициализациялайды. Бірінші параметр, 0x3F, сіздің нақты LCD модуліңіздің I2C мекенжайы. Бұл мекенжай өндірушіге байланысты кейде 0x27 болуы мүмкін. Қалған екі параметр, 16 және 2, LCD экраныңыздағы бағандар мен жолдар санын анықтайды.

loop() ішінде код температураны оқу және түрлендіру үшін getTemp() деп аталатын арнайы функцияны пайдаланады. Бұл функция кодыңызды тазарту және қайта пайдалануға болатын етудің тамаша мысалы.


float getTemp(char type) {
    float temp = (float)DHT11.temperature;//температураны алу
  if(type =='F')
  {
    return temp * 1.8 + 32;// фаренгейтке түрлендіру
  }else if(type =='K')
  {
    return temp + 274.15;// кельвинге түрлендіру
  }else{
   return temp; 
  }
  
}

Бұл функцияны пайдалану үшін оны шақырып, қажетті бірлікті көрсету үшін бір таңбаны беру керек. Мысалы, getTemp('C') температураны Цельсий бойынша, getTemp('F') Фаренгейт бойынша, ал getTemp('K') Кельвин бойынша қайтарады. Бұл бейнедегі демонстрацияда көрсетілгендей, температураны бірнеше шкалада көрсетуді өте оңай етеді.

Тірі жоба демонстрациясы

Схеманы құрастырып, кодты жүктегеннен кейін LCD экранында екі секунд бойы "DHT11 Sensor" көрсетіледі, содан кейін тірі температура мен ылғалдылық көрсеткіштері пайда болады. Экран температураны Цельсий және Фаренгейт бойынша көрсетеді. Сондай-ақ деректерді көру үшін Сериалды Мониторды (9600 бодқа орнатылған) ашуға болады, ол Кельвин бойынша температураны және салыстырмалы ылғалдылық пайызын қамтиды.

Бейнеде жүргізуші жылу пистолетінен жылу қолдану арқылы сенсордың жауабын көрсетеді. LCD экранындағы температура көрсеткішінің тез жоғарылағанын, ал ылғалдылық көрсеткішінің төмендегенін көресіз, бұл сенсордың нақты уақыттағы мүмкіндіктерін көрсетеді. Бұл қондырғыңызды тексеру және бәрінің дұрыс жұмыс істеп тұрғанын растаудың тамаша тәсілі.

Тараулар

  • [00:00] DHT11 және HTU21DF температура сенсорларына кіріспе
  • [01:38] Сенсор сипаттамалары және деректер парағына шолу
  • [02:28] Сенсор үшін егжей-тегжейлі қосылу нұсқаулығы
  • [03:03] Қажетті Arduino кітапханаларын орнату
  • [04:05] Түпнұсқа мысал кодын түсіндіру
  • [07:34] Сенсордың жұмысын көрсету
  • [08:33] Арнайы функциясы бар өзгертілген кодпен таныстыру
  • [10:22] getTemp() функциясының жұмыс істеу тәсілі
  • [12:19] Тікелей демонстрация: температураны Цельсий, Фаренгейт және Кельвин бойынша көрсету
  • [13:01] Сенсордың максималды температура шегін тексеру

Суреттер

DHT11 Module
DHT11 Module
DHT11 module LCD1602 wiring
DHT11 module LCD1602 wiring
521-Lesson 27: Using a DHT11 Temperature Sensor with an LCD Screen | Arduino Step-by-Step Course
Тіл: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Lesson 26 DHT11 with LCD1602-I2C display
 

 * This is the Arduino code for the DHT11 module to read temperature and humidity.
 * This code can display temperature in:
 * C is used to get Celsius.
 * F is used to get Fahrenheit.
 * K is used for Kelvin.

 *  * 
 * Written by Ahmad Shamshiri for Robojax
 * on January 4, 2018
 * Robojax.com

   Please watch video instructions here: https://youtu.be/0XMLnCYkvbE
 This code is available at: http://robojax.com/course1/?vid=lecture11
 
with over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339 

  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

// header file from GitHub: https://github.com/adidax/dht11
#include <dht11.h>

dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11

// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C


void setup() {
    Serial.begin(9600);// setting up serial monitor

  // initialize the LCD, 
  lcd.begin();
  // Turn on the backlight and print a message.
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0,0); //
  lcd.print("DHT11 Sensor"); 
  delay(2000);
}

void loop() {
	//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
  DHT11.read(dhtpin);// initialize the reading
  int humidity = DHT11.humidity;// get humidity

  lcd.clear();// clear previous values from screen
  lcd.setCursor (0,0); //character zero, line 1
  lcd.print("LCD1602 DHT11"); // print text 

  // print distance in degrees C
  lcd.setCursor (0,1); //character 0, line 2
  lcd.print(getTemp('C'));// print Temperature Celsius
  lcd.setCursor (4,1); //character 5, line 2 
  lcd.print((char)223);// print degree 
  lcd.setCursor (5,1); //character 6, line 2 
  lcd.print("C");// print C
  
   // print distance degrees F
  lcd.setCursor (7,1); //character 8, line 2
  lcd.print(getTemp('F'));// print distance in cm
  lcd.setCursor (13,1); //character 14, line 2 
  lcd.print((char)223);// print degree 
  lcd.setCursor (14,1); //character 16, line 2 
  lcd.print("F");// print F 
  
  
  //code for Robojax.com video
   Serial.print(getTemp('C'));
   Serial.print("C ");
   Serial.print(getTemp('F'));
   Serial.print("F ");
   Serial.print(getTemp('K'));
   Serial.print("K ");
   Serial.print(" humidity:");
   Serial.print (humidity);
   Serial.print("% ");
   Serial.println();
 delay(500);
}


/*
 * getTemp(char type)
 * type: character of upper case 
 * C is used to get Celsius.
 * F is used to get Fahrenheit.
 * K is used for Kelvin.
 */
float getTemp(char type) {
	//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338	
    float temp = (float)DHT11.temperature;//get temp
  if(type =='F')
  {
    return temp * 1.8 + 32;// convert to fahrenheit
  }else if(type =='K')
  {
    return temp + 274.15;// convert to Kelvin
  }else{
   return temp; 
  }
  
}

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Fritzing файлы

Пайдаланушының нұсқаулығы

Басқа файлдар