Bincika Lambar

Darasi na 35-1: Yin Amfani da Na'urar Auna Zafin HTU21D

Darasi na 35-1: Yin Amfani da Na'urar Auna Zafin HTU21D

A cikin wannan koyaswar, za mu bincika yadda ake amfani da na'urar zazzabi da danshi ta HTU21D tare da Arduino. HTU21D ƙaramin na'ura ne wanda ke sadarwa ta hanyar I2C, yana sauƙaƙa haɗawa da microcontrollers. A ƙarshen wannan darasi, za ku iya karanta ƙimar zazzabi da danshi kuma ku nuna su ta hanyar serial monitor na Arduino.

HTU21D module

Don wannan aikin, za mu yi amfani da library na Adafruit wanda aka ƙera musamman don na'urar HTU21D. Library ɗin yana sauƙaƙa tsarin karanta bayanan na'urar, yana ba mu damar mayar da hankali kan haɗa na'urar cikin ayyukanmu. Kuna iya tsammanin ganin ƙimar zazzabi a Celsius, Fahrenheit, da Kelvin, da kuma yawan danshi (a cikin bidiyo a 03:15).

Bayanin Hardware

Babban ɓangaren wannan aikin shine na'urar zazzabi da danshi ta HTU21D. Wannan na'urar tana aiki da ƙarfin wutar lantarki na 1.5 zuwa 3.6 volts kuma tana amfani da ƙaramin ƙarfi sosai, yana sa ta dace da na'urorin da ke amfani da baturi. Tana sadarwa da Arduino ta amfani da tsarin I2C, tana buƙatar layukan bayanai guda biyu kawai: SDA don bayanai da SCL don agogo.

Don kunna na'urar, za mu haɗa ta zuwa tushen 3.3V ko 5V, dangane da nau'in module ɗin da kuke amfani da shi. Sigar Adafruit ta ƙunshi mai daidaita wutar lantarki, wanda ke ba ta damar aiki da kyau tare da duka matakan wutar lantarki. Wannan sassauci yana sa ta zama zaɓi mai kyau don aikace-aikace daban-daban.

Cikakkun Bayanai na Datasheet

Mai ƙeraTE Connectivity
Lambar ɓangareHTU21D-F
Ƙarfin Logic/IO1.5 - 3.6 V
Ƙarfin wutar lantarki3.3 V (na yau da kullun)
Amfani da wutar lantarki (lokacin hutawa)0.02 µA
Amfani da wutar lantarki (lokacin aunawa)450 µA (na yau da kullun)
Kewayon zazzabi-40 zuwa +125 °C
Ƙimar danshi0.04 %
Kunshin6-pin DFN

  • Tabbatar da matakan wutar lantarki da suka dace don guje wa lalata na'urar.
  • Yi amfani da resistors na pull-up akan layukan I2C idan ba a haɗa su cikin module ɗin ba.
  • Rike wayoyi gajeru don rage tsangwama tare da sadarwar I2C.
  • Yi la'akari da rage zafi idan ana amfani da shi a wurare masu zazzabi mai girma.
  • Duba yadda na'urar take tsaye don tabbatar da haɗin pin ɗin da ya dace.

Umarnin Haɗin Waya

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Don haɗa na'urar HTU21D zuwa Arduino, fara da haɗa pin ɗin VCC na na'urar zuwa pin ɗin wutar lantarki na 3.3V akan Arduino. Na gaba, haɗa pin ɗin GND akan na'urar zuwa pin ɗin ƙasa (GND) akan Arduino. Sa'an nan, haɗa pin ɗin SDA akan na'urar zuwa analog pin A4 na Arduino, wanda ke aiki azaman layin bayanai na I2C. A ƙarshe, haɗa pin ɗin SCL akan na'urar zuwa analog pin A5, wanda ke aiki azaman layin agogo na I2C. Tabbatar cewa haɗin ku yana da ƙarfi don guje wa karatun da ba a sani ba.

Don ƙarin haske, idan kuna amfani da wani board ɗin daban, tabbatar da gano pin ɗin da suka dace don SDA da SCL saboda suna iya bambanta. Wannan tsarin haɗin zai ba Arduino damar sadarwa da na'urar HTU21D yadda ya kamata (a cikin bidiyo a 05:00).

Misalan Code & Bayani

A ƙasa akwai wani ɓangare daga aikin setup wanda ke fara sadarwar serial kuma yana duba ko an samo na'urar:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Ba a sami na'urar ba!");
    while (1);
  }
}

Wannan code ɗin yana fara sadarwar serial a ƙimar baud na 9600 kuma yana ƙoƙarin fara na'urar HTU21D. Idan ba a gano na'urar ba, zai buga saƙon kuskure kuma ya dakatar da ƙarin aiwatarwa.

Babban zagayowar shirin yana ci gaba da karanta ƙimar zazzabi da danshi:

void loop() {
    Serial.print(getHTU('C'));
    Serial.println("C");
    Serial.print("Danshi:");
    Serial.print(getHTU('H'));
    Serial.println("%");
    delay(1000);
}

A cikin wannan zagayowar, muna kiran aikin getHTU tare da 'C' don samun zazzabi a Celsius da 'H' don samun danshi. Sakamakon ana buga shi zuwa serial monitor kowane daƙiƙa guda. Wannan yana ba da damar lura da ƙimar na'urar a lokaci guda.

Bugu da ƙari, muna da aikin getHTU wanda ke mayar da zazzabi ko danshi dangane da shigar harafi:

float getHTU(char type) {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    return (type == 'H') ? rel_hum : temp;
}

Wannan aikin yana karanta zazzabi da danshi daga na'urar kuma yana mayar da ƙimar da ta dace dangane da nau'in da aka ƙayyade. Wannan tsarin modular yana kiyaye code ɗin mai tsabta da sauƙin kiyayewa.

Nuni / Abin da za ku Yi Tsammani

Bayan nasarar saitin da aiwatar da code ɗin, ya kamata ku ga ƙimar zazzabi da danshi da aka buga zuwa serial monitor. Idan kun sanya zafi a kan na'urar, ƙimar zazzabi ya kamata su ƙaru daidai da haka, yayin da danshi na iya raguwa. Idan zazzabi ya wuce iyakar na'urar, yana iya nuna sakamakon da ba a zata ba, kamar sifili (a cikin bidiyo a 12:00).

Lokutan Bidiyo

  • 00:00 - Gabatarwa
  • 03:15 - Bayanin na'urar
  • 05:00 - Umarnin haɗin waya
  • 10:00 - Bayanin code
  • 12:00 - Nuni

Hotuna

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
512-Lesson 35: Using HTU21D Temperature Sensor
Harshe: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor
 

 * Updated by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada
 
  Please watch video instructions here https://youtu.be/LyA0yAKlf9E
 This code is available at http://robojax.com/course1/?vid=lecture35
 
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.
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/>. 
    
	
 */ 
/*

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

#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();

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax.com");
  Serial.println("HTU21D-F test");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
//Get the code for the course: http://robojax.com/L/?id=339  
    Serial.print(getHTU('C'));
    printDegree();
    Serial.println("C");
    
    Serial.print(getHTU('F'));
    printDegree();
    Serial.println("F");

    Serial.print(getHTU('K'));
    Serial.println("K");    
    Serial.println(" ");  

    Serial.print("Humidity:");
    Serial.print(getHTU('H'));
    Serial.println("%");

    if(getHTU('C') <81)
    {
      //digitalWrite(5, LOW);
          
    }
    delay(1000);
}

/*
 * @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;
}//

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2"); 
    Serial.print("\\xB0");  
}

Abin da zaka iya bukata

Fayiloli📁

Takardar bayanai (pdf)