Bincika Lambar

Darasi na 36: Yin amfani da na'urar zafin jiki ta HTU21D tare da LCD Arduino Kwas ɗin mataki-mataki

Darasi na 36: Yin amfani da na'urar zafin jiki ta HTU21D tare da LCD Arduino Kwas ɗin mataki-mataki

LCD1602 ko LCD2004 tare da HTU21D na'urar zafi da danshi da Arduino
LCD1602 ko LCD2004 tare da HTU21DF na'urar zafi da danshi da Arduino

Na'urar HTU21D na auna zafi da danshi sanannen zaɓi ne ga yawancin ayyukan Arduino saboda sauƙin amfani da daidaito. A cikin wannan darasi, za mu gina aiki mai sauƙi wanda ke karanta bayanan zafi da danshi daga na'urar kuma ya nuna su akan allon LCD. A ƙarshen wannan koyawa, za ku sami tsarin aiki wanda ke nuna zafi a Celsius, Fahrenheit, da Kelvin, da kuma yawan danshi. Don ƙarin bayani, kuna iya koma ga bidiyon (a cikin bidiyo a mm:ss).

HTU21D module

Bayanin Kayan Aiki

Babban ɓangaren wannan aikin shine na'urar HTU21D na auna zafi da danshi, wanda ke sadarwa ta hanyar I2C. Wannan na'urar tana aiki a cikin kewayon wutar lantarki na 1.5 zuwa 3.6 volts, wanda ya dace da tsarin 3.3V da 5V. Tana amfani da ƙaramin wuta sosai, yawanci 0.02 microamperes kawai lokacin da ba ta aiki ba da 450 microamperes yayin auna. Baya ga HTU21D, za mu kuma yi amfani da allon LCD, musamman LCD1602 tare da I2C. Wannan allon yana ba da damar fitar da bayanan rubutu cikin sauƙi kuma yana buƙatar pins guda biyu kawai don sadarwa: SDA (layin bayanai) da SCL (layin agogo). Haɗin waɗannan kayan aikin zai ba mu damar ƙirƙirar nuni mai fa'ida don kula da matakan zafi da danshi.

Na'urar HTU21D
Na'urar HTU21D

Cikakkun Bayanan Takardu

Mai Ƙirƙira TE Connectivity
Lambar ɓangare HTU21D-F
Wutar Logic/IO 1.5 - 3.6 V
Wutar samarwa 3.3 V (na yau da kullun)
Fitar wutar (na yau da kullun) 0.02 µA (lokacin hutu), 450 µA (lokacin auna)
Kewayon zafi -40 zuwa +125 °C
Kewayon danshi 0 zuwa 100 %RH
Ƙarfin gani (Zafi) 0.01 °C
Ƙarfin gani (Danshi) 0.04 %RH
Kunshin DFN-6

 

  • Yi amfani da resistor mai ɗagawa don layin SDA da SCL idan ba a haɗa su ba.
  • Tabbatar da daidaitaccen wutar lantarki don guje wa lalacewar na'urar.
  • Kiyaye ingantaccen haɗin wayoyi don hana kurakuran sadarwa.
  • Duba adireshin I2C idan na'urar ba ta amsa ba.
  • Yi amfani da jinkiri tsakanin karatu don hana nauyin na'urar.
  • Tabbatar da allon LCD ya dace da sadarwar I2C.

Umarnin Haɗin Wayoyi

Haɗin wayoyi na Arduino don na'urar HTU21DF mai haske da LCD
Haɗin wayoyi na Arduino don na'urar HTU21DF mai haske da LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

Don haɗa na'urar HTU21D da allon LCD, fara da haɗin wutar lantarki. Haɗa pin na hagu na HTU21D zuwa tushen wutar 3.3V, da pin na biyu (yawanci ja) zuwa ƙasa. Na gaba, haɗa pin SDA na HTU21D zuwa pin analog A4 na Arduino, da pin SCL zuwa pin analog A5. Don allon LCD1602, haɗa pin VCC zuwa wannan tushen wutar 3.3V, kuma haɗa pin GND zuwa ƙasa. Pin SDA akan LCD ya kamata kuma a haɗa shi zuwa A4, kuma pin SCL ya kamata a haɗa shi zuwa A5, yana ba da damar ɓangarorin biyu su raba bas ɗin I2C. Tabbatar da cewa duk haɗin suna da ƙarfi don sauƙaƙe sadarwa mai kyau tsakanin Arduino, na'urar, da nuni.

Misalan Lamba & Bayani

Lambar da ke gaba tana fara na'urar HTU21D da allon LCD. A cikin aikin saitin, an shirya LCD don amfani kuma an duba haɗin na'urar:

void setup() {
  lcd.begin();
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("sensor missing"); 
      while (1);
  } else {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("Demo"); 
  }
  delay(2000);   
}

Wannan ɓangaren yana duba idan an haɗa na'urar da kyau. Idan ba haka ba, yana nuna saƙon kuskure akan LCD kuma yana dakatar da shirin. Idan na'urar tana aiki, yana nuna saƙon nunawa na daƙiƙa biyu. Aikin madauki shine inda babban karatu da nunawa ke faruwa. Anan, muna kiran aikin `lcdDisplay` don nuna zafi a cikin raka'a daban-daban:

void loop() {
   lcd.clear(); // share abubuwan da suka gabata daga allo
   lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');  
   lcdDisplay(0, 1, "Fahrenheit: ", 10, 1, getHTU('F'), 'd');     
   delay(5000);
}

A cikin wannan madauki, an share LCD, kuma ana nuna karatun zafi a Celsius da Fahrenheit. Ana kiran aikin `getHTU` tare da harafin 'C' don Celsius da 'F' don Fahrenheit, bi da bi. A ƙarshe, an ayyana aikin `getHTU` don karanta zafi ko danshi bisa ga harafin da aka shigar:

float getHTU(char type) {
   float temp = htu.readTemperature();
   float rel_hum = htu.readHumidity();
   if(type =='F') {
       return temp * 9/5 + 32; // canza zuwa Fahrenheit 
   } else if(type =='K') {
       return temp + 273.15; // canza zuwa Kelvin
   } else if(type =='H') {
       return rel_hum; // dawo da yawan danshi
   } else {
       return temp; // dawo da Celsius
   }
}

Wannan aikin yana karanta zafin jiki da danshi daga na'urar firikwensin kuma yana canza zafin jiki zuwa naúrar da aka buƙata. Tabbatar ka duba cikakken lambar da aka ɗora a ƙarƙashin labarin don ƙarin bayani.

Nunawa / Abin da za ka Yi Tsammani

Bayan kammala haɗin wayoyi da ɗora lambar, ya kamata ka ga ƙimar zafin jiki da danshi suna nunawa akan LCD. Karatun zai sabunta kowane ƴan daƙiƙa, yana nuna yanayin da ake ciki. Idan ka sanya zafi a kan na'urar firikwensin, ya kamata ka lura da zafin jiki yana tashi daidai, yayin da danshi zai ragu kaɗan. Ka kiyaye iyakar zafin jiki mafi girma na na'urar firikwensin; ƙetare wannan na iya haifar da karatun da ba daidai ba ko gazawar na'urar (a cikin bidiyo a mm:ss).

Lokutan Bidiyo

  • 00:00 - Gabatarwa ga aikin
  • 01:15 - Umarnin haɗin wayoyi
  • 03:30 - Binciken lambar
  • 10:00 - Nunin saitin

Hotuna

LCD1602 or LCD2004 with HTU21D humidity and temperature sensor and Arduino
LCD1602 or LCD2004 with HTU21DF Humidity and Temperature Sensor with Arduino
Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
511-Lesson 36: Using the HTU21D Temperature Sensor with an LCD and Arduino: A Step-by-Step Course
Harshe: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 36: HTU21D Temperature Sensor with LCD1602 and LCD2004 Display
 


 * Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
 * Updated by Ahmad Shamshiri on July 13, 2019



  Please watch video instructions here https://youtu.be/SrFJKbmiaPM
 This code is available at http://robojax.com/course1/?vid=lecture36
 
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  

If you found this tutorial helpful, please support me so I can continue creating 
and make a donation using PayPal http://robojax.com/L/?id=64



*
  This is an example for the HTU21D-F Humidity & Temp Sensor

  Designed specifically to work with the HTU21D-F sensor from Adafruit
  ----> https://www.adafruit.com/products/1899

  These displays use I2C to communicate; 2 pins are required to
  interface

 Watch Introduction to a 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place.
Visit my course now http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 
or make a donation using PayPal http://robojax.com/L/?id=64

 * Code is available at http://robojax.com/learn/arduino

 * 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/>. 

*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"

// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

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

void setup() {
	//Get the code for the course: http://robojax.com/L/?id=339  
  lcd.begin();  
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("sensor missing"); 
    while (1);
  }else{
  // initialize the LCD

  lcd.print("Robojax HTUD1DF");
  lcd.setCursor(0,1);
  lcd.print("Demo"); 
  }
  delay(2000);   
}

void loop() {
//Get the code for the course: http://robojax.com/L/?id=339  	
   lcd.clear();// clear previous values from screen
lcdDisplay(
             // to print Celsius:
             0, // character 0 
             0, // line 0
             "Celsius: ", 

             // to print Celsius
             10, // character 10
             0, // line 0
             getHTU('C'),
             'd'
             );  

  lcdDisplay(
             // to print fahrenheit:
             0, // character 0 
             1, // line 1
             "Fahrenheit: ", 

             // to print Fahrenheit
             10, // character 9
             1, // line 0
             getHTU('F'),
             'd'
             );     
    delay(5000);
lcdDisplay(
             // to print Kelvin:
             0, // character 0 
             0, // line 0
             "Kelvin: ", 

             // to print Celsius
             9, // character 10
             0, // line 0
             getHTU('K'),
             'k'
             );      
  lcdDisplay(
             // to print humidity text
             0, // character 0 
             1, // line 1
             "Humidity: ", 

             // to print humidity
             10, // character 9
             1, // line 1
             getHTU('H'),
             '%' 
             );  
   
        delay(5000);
}

/*
 * @brief returns temperature or relative humidity
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 *     H = Humidity
 * @return returns one of the values above
 * Usage: to get Fahrenheit type: getHTU('F')
 * to print it on serial monitor Serial.println(getHTU('F'));
 * Written by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada
 * www.Robojax.com 
 */
float getHTU(char type)
{
	//Get the code for the course: http://robojax.com/L/?id=339  
  float value;
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
   if(type =='F')
   {
    value = temp *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = temp + 273.15;//convert to Kelvin
   }else if(type =='H')
   {
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//


/*
 * lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
 * displays value and title on LCD1602
 * How to use:
 * If you want to display: "Voltage: 13.56mV" starting from the first character
 * on the second row.
 * use:
 * lcdDisplay(0, 1, "Voltage: ", 13.56,'d')
 *   
 *   'd' is degree symbol
 * tc  is character number  (0)
 * tr is row in the lcd (1)
 * title is the text (Voltage:)
 * vc value for character 
 * vr value for  row or line
 * value is the value (13.56)
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
   // Robojax.com LCD1602 for HTU21D Demo
   lcd.setCursor (tc,tr); //
   lcd.print(title);
   
   lcd.setCursor (vc,vr); //
   lcd.print(value);
   if(symbol == 'd')
   {
    lcd.print((char)223);
   }else if(symbol =='%')
   {
    lcd.print("%");
   }else if(symbol =='k')
   {
    lcd.print("K");
   }
 // Robojax.com LCD1602 for HTU21D Demo
}

Abin da zaka iya bukata

Fayiloli📁

Takardar bayanai (pdf)