Arduino Lesson 16 – DHT11 සහ DHT22 Sensors Arduino සමග භවිතා කරන ආකරය

උපාංග පිලිබද දැනුම

ඔබේ ඊළඟ ආර්ඩුයිනෝ ව්‍යාපෘතියට AOSONG වෙතින් ලබා දෙන මිල අඩු DHT11 හෝ DHT22 ඩිජිටල් උෂ්ණත්වය සහ ආර්ද්‍රතා සංවේදකය සමඟ අවට ලෝකය උෂ්ණත්වය සහ ආර්ද්‍රතාවය මැන ගැනීම සිදු කර ගත හැකිය.

මෙම සංවේදක පූර්ව ක්‍රමාංකනය (pre-calibrated) කර ඇති අතර අමතර සංරචක අවශ්‍ය නොවන බැවින් ඔබට සාපේක්ෂ ආර්ද්‍රතාවය සහ උෂ්ණත්වය මැනීමට කෙලින්ම භවිතා කළ හැකිය.

ඔවුන් සපයන ඉතා වැදගත් දෙයක් වන්නේ උෂ්ණත්වය සහ ආර්ද්‍රතාවය යන දෙකම ආසන්නතම එක් දශමස්ථානයක් සහිත අගයක් දක්වා නිවැරදිව ලබා දීමයි. මෙම සංවේදකයේ ඇති අවාසිය නම් ඔබට දත්ත ලබා ගත හැක්කේ සෑම තත්පරයකට හෝ දෙකකට වරක් පමණි. එහෙත්, එහි ක්‍රියාකාරීත්වය සහ මිල සැලකිල්ලට ගෙන ඔබට භාවිතා කළ යුත්තේ කුමකටද යන්න තිරණය කළ හැකිය.

DHT11 සහ DHT22/AM2302

අපට DHTxx සංවේදක මාලාවේ වර්ග දෙකක් තිබේ. එම දෙකම සමාන පෙනුමක් ඇති අතර එකම විදියට පින් පිහිටා ඇත, නමුත් වෙනස් ලක්ෂණ ඇත. ඒ ගැන අපි සලකා බලමු.

DHT22 මිලෙන් වැඩිය. පැහැදිලිවම එයට වඩා හොඳ ක්‍රියාකාරීත්වයක් ඇත. එහි උෂ්ණත්ව මිනුම් පරාසය -40 °C සිට +125 °C දක්වා වේ. +-0.5 අංශක නිරවද්‍යතාවයකින් යුක්ත වේ. DHT11 හි උෂ්ණත්ව පරාසය 0 °C සිට 50 °C දක්වා වන අතර +-2 අංශක නිරවද්‍යතාවයකින් යුක්ත වේ. එසේම DHT22 සංවේදකයට වඩා හොඳ ආර්ද්‍රතා මිනුම් පරාසයක් ඇති අතර 0 සිට 100% දක්වා 2-5% නිරවද්‍යතාවයකින් යුක්ත වේ. DHT11 ආර්ද්‍රතා පරාසය 20 සිට 80% දක්වා 5% නිරවද්‍යතාවයකින් යුක්ත වේ.

DHT11 DHT22
මෙහෙයුම් වෝල්ටීයතාවය 3 to 5V 3 to 5V
උපරිම මෙහෙයුම් ධාරාව 2.5mA max 2.5mA max
ආර්ද්‍රතා පරාසය 20-80% / 5% 0-100% / 2-5%
උෂ්ණත්ව පරාසය 0-50°C / ± 2°C -40 to 80°C / ± 0.5°C
නියැදි අනුපාතය 1 Hz (reading every second) 0.5 Hz (reading every 2 seconds)
ප්‍රමාණය 15.5mm x 12mm x 5.5mm 15.1mm x 25mm x 7.7mm
වාසිය මිලෙන් අඩුය. වඩාත් නිවැරදි වේ

DHT22 වඩාත් නිරවද්‍ය, වඩා නිවැරදි හා විශාල පරාසයක උෂ්ණත්ව හා ආර්ද්‍රතාවයෙන් තුළ ක්‍රියා කරයි. DHT11 හි DHT22 වඩා වෙනස් වෙන කරුණු තුනක් තිබේ. එය මිලෙන් අඩුය, ප්‍රමාණයෙන් කුඩා වන අතර නියැදි අනුපාතය වැඩිය. DHT11 හි නියැදි අනුපාතය 1Hz වේ. එනම් සෑම තත්පරයකම කියවීමක්  වන අතර DHT22 හි නියැදි අනුපාතය 0.5Hz වේ, එනම් සෑම තත්පර දෙකකට වරක් කියවීමක් වේ.

කෙසේ වෙතත්, සංවේදක දෙකේම මෙහෙයුම් වෝල්ටීයතාවය වෝල්ට් 3 සිට 5 දක්වා වන අතර, සක්‍රීය අවස්තාවේදී භාවිතා කරන උපරිම ධාරාව (දත්ත ඉල්ලා සිටින අතරතුර) 2.5mA වේ. හොඳම දේ නම් DHT11 සහ DHT22 සංවේදක ‘මාරු කළ හැකි’ වීමයි – එයින් අදහස් වන්නේ ඔබ ඔබේ ව්‍යාපෘතිය   යම් එක්  සංවේදකයක් සමඟ ගොඩනඟන්නේ නම් ඔබට එය ඉවත් කර තවත් එකක් භාවිතා කළ හැකිය. ඔබේ ප්‍රෝග්‍රෑම් එකේ යම් වෙනසක් සකස් කිරීමට සිදු විය හැකි නමුත් අවම වශයෙන් රැහැන් කිරීම සමාන වේ.

අපි DHT11 සහ DHT22 සංවේදක දෙකම අභ්‍යන්තරයේ ඇති දේ පිලිබදව විමසා බලමු.

ආවරණයක් කොටස් දෙකකින් යුක්ත වන අතර එය ඇතුළට බැලීමට නම් තියුණු පිහියක් ලබාගෙන එහි ආවරණයක් මැදින් වෙන් කරන්න. ආවරණයේ ඇතුළත, සංවේදක පැත්තේ, ආර්ද්‍රතා සංවේදක අංගය සහ එන්ටීසී උෂ්ණත්ව සංවේදකය (or thermistor) පිහිටා ඇත.

ආර්ද්‍රතාවය මැනීම සඳහා ආර්ද්‍රතා සංවේදක උපාංගය මෙහිදී භාවිතා කරයි. තෙතමනය රඳවා තබා ගන්නා උපස්ථරයක් සහිත ඉලෙක්ට්‍රෝඩ දෙකක් (සාමාන්‍යයෙන් ලුණු හෝ සන්නායක ප්ලාස්ටික් පොලිමර්) පවතින අතර ඒවා අතර සැන්ඩ්විච් එකක් අකාරයට සම්බන්ධ කර ඇත. ජල වාෂ්ප මගින් එය අවශෝෂණය වන බැවින් අයන උපස්ථරයෙන් මුදා හරිනු ලබන අතර එමඟින් ඉලෙක්ට්‍රෝඩ අතර සන්නායකතාව වැඩි වේ. ඉලෙක්ට්‍රෝඩ දෙක අතර ප්‍රතිරෝධයේ වෙනස සාපේක්ෂ ආර්ද්‍රතාවයට සමානුපාතික වේ. සාපේක්ෂ ආර්ද්‍රතාවය වැඩි ඉලෙක්ට්‍රෝඩ අතර ප්‍රතිරෝධය අඩු අතර සාපේක්ෂ ආර්ද්‍රතාවය අඩු ඉලෙක්ට්‍රෝඩ අතර ප්‍රතිරෝධය වැඩි වේ.

Internal Structure of Humidity Sensor

ඊට අමතරව, මෙහි උෂ්ණත්වය මැනීම සඳහා ඒවා NTC උෂ්ණත්ව සංවේදක / තාපකයකින් සමන්විත වේ. උෂ්ණත්ව සන්වේදකයක් යනු තාප ප්‍රතිරෝධකයක් – උෂ්ණත්වය සමඟ එහි ප්‍රතිරෝධය වෙනස් කරන ප්‍රතිරෝධකයකි. තාක්ෂණික වශයෙන්, සියලුම ප්‍රතිරෝධක තාප ස්ථායී වේ – ඒවායේ ප්‍රතිරෝධය උෂ්ණත්වය සමඟ තරමක් වෙනස් වේ – නමුත් වෙනස සාමාන්‍යයෙන් ඉතා කුඩා වන අතර මැනීමට අපහසු වේ. කලින් පාඩමේදී අපි ආර්ඩුයිනෝ සමග උෂ්ණත්ව සංවේදී ප්‍රතිරෝධයක් භාවිතා කරන ආකාරය විමසා බැලුවෙමු.

උෂ්ණත්වය සමඟ ප්‍රතිරෝධය විශාල ලෙස වෙනස් වන පරිදි උෂ්ණත්ව සන්වේදකයක් සාදනුයේ එය අංශකයකට 100Ω ක් හෝ ඊට වැඩි වෙනසක් විය හැකි ආකාරයටයි. “NTC” යන වචනයේ තේරුම “සෘණ උෂ්ණත්ව සංගුණකය” යන්නයි, එයින් අදහස් වන්නේ උෂ්ණත්වය ඉහළ යාමත් සමඟ ප්‍රතිරෝධය අඩු වන බවයි.

NTC Thermistor with Characteristic Curve

අනෙක් පැත්තෙන් කුඩා PCB  එකක් සමග 8-bit 8 SOIC-14 ඇසුරුම් කරන ලද IC එකක් ඇත. මෙම IC එක විසින් ගබඩා කර ඇති ක්‍රමාංකන සංගුණක සමඟ ඇනලොග් සිග්නල් මැනීම හා සැකසීම සිදුකරයි, ඇනලොග් සිග්නල් ඩිජිටල් වලට පරිවර්තනයට කිරීම සහ උෂ්ණත්වය හා ආර්ද්‍රතාවය සමඟ ඩිජිටල් සිග්නල් ලබා දීම සිදු කරයි.

DHT11 සහ DHT22 පින් පවතින ආකාරය

DHT11 සහ DHT22 සංවේදක සම්බන්ධ කිරීම තරමක් පහසුය. එහි පින් හතරක් ඇත.

 GND ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි GND සමග සම්බන්ධ කළ යුතුය.
 VCC පින් මඟින් සංවේදකයට සඳහා විදුලි බලය සපයයි. සැපයුම් වෝල්ටීයතාවය 3.3V සිට 5.5V දක්වා පරාසයක පැවතියද 5V සැපයුම නිර්දේශ කෙරේ. 5V බල සැපයුමකදී, ඔබට සංවේදකය මීටර් 20 ක් තරම් දිගු දුරක් තබා ගත හැකිය. කෙසේ වෙතත්, 3.3V සැපයුම් වෝල්ටීයතාවයකින්, කේබල් දිග මීටර 1 ට වඩා වැඩි නොවිය යුතුය. එසේ නොමැති නම්, රේඛීය වෝල්ටීයතා පහත වැටීම මිනුම්වල දෝෂ වලට තුඩු දෙනු ඇත.
Data සංවේදකය සහ ක්ෂුද්‍ර පාලකය අතර සන්නිවේදනය සඳහා දත්ත යැවීම සදහා මෙම පින් එක භාවිතා කරයි.
NC  සම්බන්ධ නොවේ.

DHT11 සහ DHT22 to Arduino සමග සම්බන්ධ කිරීම.

දැන් අපට DHT සංවේදක ක්‍රියා කරන ආකාරය පිළිබඳ පූර්ණ අවබෝධයක් ඇති බැවින්, අපට එය අපගේ ආර්ඩුයිනෝ බෝර්ඩ් එක වෙත සම්බන්ධ කිරීම ආරම්භ කළ හැකිය.

අවශ්‍යය උපාංග

වාසනාවකට මෙන්, DHT11, DHT22 සංවේදක Arduino බෝර්ඩ් එක සමඟ සම්බන්ධ කිරීම පහසුය. ඒවායේ තරමක් දිගු පින් ඇති බැවින් ඔබට ඒවා ඕනෑම breadboard එකකට පහසුවෙන් සම්බන්ධ කළ හැකිය. 5V සමඟ සංවේදකය ක්‍රියාත්මක කර අනෙක් කොනේ පින් එක GND සම්බන්ධ කරන්න. අවසාන වශයෙන්,  දත්ත පින් එක ඩිජිටල් පින් #2 ට සම්බන්ධ කරන්න.

සංවේදකය සහ MCU අතර නිසි සන්නිවේදනයක් සඳහා එය ඉහළ මට්ටමක තබා ගැනීම සඳහා VCC සහ දත්ත රේඛාව අතර 10KΩ ප්‍රතිරෝධකයක් තැබිය යුතුය. ඔබට සංවේදකය සහිත පුවරුවක් (Sensor module) තිබේ නම්, ඔබට බාහිර ප්‍රතිරෝධයක් එකතු කිරීම අවශ්‍ය නොවේ. එය ප්‍රතිරෝධකයක් සමඟ පැමිණේ.

පරිපථ සැකැස්ම

Wiring DHT11 to Arduino UNO

Wiring DHT22 to Arduino UNO

ඒ සමඟ, ඔබ දැන් යම් ප්‍රෝග්‍රෑම් එකක් නිර්මාණය කර අප්ලෝඩ් කර බැලීමට පුළුවන්.

Sketch 14.1 – Serial Monitor එකෙහි අගයන් දර්ශනය කිරීම

DHT11 සහ DHT22 සංවේදක වලට දත්ත හුවමාරු කිරීම සඳහා භාවිතා කරන තනි වයරයක්  මගින් සම්බන්ධ වන ප්‍රොටෝකෝලයක් ඇත. මෙම ප්‍රොටෝකෝලය සඳහා නිශ්චිත වේලාවක් අවශ්‍ය වේ. DHT library භාවිතා  කරන බැවින් වාසනාවකට මෙන් අපට මේ ගැන වැඩි කරදරයක් වීමට අවශ්‍ය නැත, මන්ද අපිට සෑම දෙයක්ම library එක භාවිතයෙන් පහසුවෙන් කේතනය කල හැකිය.

පළමුව library එක ඩවුන්ලෝඩ් කරගන්න, GitHub.com repo වෙත පිවිසීමෙන් හෝ, zip ෆයිල් එකක් ලෙස ඩවුන්ලෝඩ් කිරීම සඳහා පහත ලින්ක් එක භාවිතා කරන්න.

GitHub repo : https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib

Download Zip file : https://github.com/RobTillaart/Arduino/archive/master.zip

එය ඉන්ස්ටෝල් කිරීම සඳහා, ආර්ඩුයිනෝ IDE එක විවෘත කර, Sketch> Includ Library> Add .ZIP Library ක්ලික් කරන්න, ඉන්පසු ඔබ  ඩවුන්ලෝඩ් කළ DHTlib ZIP ගොනුව තෝරන්න. ඔබට library ක් ඉන්ස්ටෝල් කිරීම පිළිබඳ වැඩි විස්තර අවශ්‍ය නම්, මෙම https://www.arduino.cc/en/Guide/Libraries

ඔබ library එක ඉන්ස්ටෝල් කළ පසු, ඔබට මෙම ප්‍රෝග්‍රෑම් එක ආර්ඩුයිනෝ IDE වෙත පිටපත් කළ හැකිය. පහත දැක්වෙන ප්‍රෝග්‍රෑම් එක මඟින් serial monitor එකෙහි උෂ්ණත්වය සහ සාපේක්ෂ ආර්ද්‍රතා අගයන් බලා ගත හැකිය. ඒ සදහා දැන් ඔබ උත්සාහ කරන්න.

#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object

void setup() 
{
    Serial.begin(9600);
}
void loop() 
{
    //Uncomment whatever type you're using!
    int readData = DHT.read22(dataPin); // DHT22/AM2302
    //int readData = DHT.read11(dataPin); // DHT11

    float t = DHT.temperature; // Gets the values of the temperature
    float h = DHT.humidity; // Gets the values of the humidity

    // Printing the results on the serial monitor
    Serial.print("Temperature = ");
    Serial.print(t);
    Serial.print(" ");
    Serial.print((char)176);//shows degrees character
    Serial.print("C | ");
    Serial.print((t * 9.0) / 5.0 + 32.0);//print the temperature in Fahrenheit
    Serial.print(" ");
    Serial.print((char)176);//shows degrees character
    Serial.println("F ");
    Serial.print("Humidity = ");
    Serial.print(h);
    Serial.println(" % ");
    Serial.println("");

    delay(2000); // Delays 2 secods
}

ප්‍රෝග්‍රෑම් එක අප්ලෝඩ් කළ පසු, ආර්ඩුයිනෝ බෝර්ඩ් එක වෙතින් ප්‍රතිදානය බැලීමට Serial Monitor විවෘත කරන්න.

Output on Serial Monitor

Code එක පිලිබදව පැහැදිලි කිරීම:

ප්‍රෝග්‍රෑම් එකෙහි කේතනය ආරම්භ වන්නේ DHT library ය ඇතුළත් කිරීමෙනි. ඊළඟට, අපගේ සංවේදකයේ දත්ත පින් සම්බන්ධ කර ඇති ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි පින් අංකය නිර්වචනය කර DHT library එක සදහා වස්තුවක් (obje නිර්මාණය කළ යුතුය. එබැවින්, library ට අදාළ විශේෂ කාර්යයන් සඳහා අපට ප්‍රවේශ විය හැකිය.

#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creates a DHT object

‘setup’ ෆන්ෂන් එකේද  ප්‍රතිපල මුද්‍රණය කිරීම සඳහා අපි serial monitor එක භාවිතා කරන බැවින් අපට serial කොමුනිකේශන් භාවිතා කිරීම මගින් ආරම්භ කළ යුතුය. ඒ සදහා Serial.begin() ෆන්ෂන් එක භාවිතා කරයි.

void setup() {
  Serial.begin(9600);
}

‘loop’ ෆන්ෂන් එකේදී අපි DHT22 වෙතින් දත්ත කියවන read22() ෆන්ෂන් එක භාවිතා කරමු. එය පරාමිතියක් ලෙස සංවේදකයේ දත්ත පින් අංකය ලබා ගනී. ඔබ DHT11 සමඟ සම්බන්ධ වන්නේ නම්, ඔබට read11() ෆන්ෂන් එක භාවිතා කළ යුතුය. දෙවන පේළිය කමෙන්ට් ඉවත් කිරීමෙන් ඔබට එය කළ හැකිය.

//Uncomment whatever type you're using!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11

ආර්ද්‍රතාවය සහ උෂ්ණත්ව අගයන් ගණනය කිරීමෙන් පසු අපට ඒවාට ප්‍රවේශ විය හැක්කේ මේ ආකාරයටයි.

float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity

DHT හි වස්තුව(Object) මගින් සෙල්සියස් (° C) හි උෂ්ණත්ව අගය ලබා දෙයි. සරල සූත්‍රයක් භාවිතයෙන් එය ෆැරන්හයිට් (° F) බවට පරිවර්තනය කළ හැකිය:

T(°F) = T(°C) × 9/5 + 32

//print the temperature in Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);

DHT11 සහ DHT22 LCD දර්ශකයක් සමග භාවිතා කිරීම.

ඔබේ ව්‍යපෘති වලට සමහර විට උෂ්ණත්වය හා ආර්ද්‍රතා මට්ටම් නිරීක්ෂණය කිරීමට අවශ්‍යය වේ. serial monitor වෙනුවට ඔබේ ව්‍යපෘතියට පවතින තත්වයන් පෙන්වීමට ඔබට 16 × 2 අක්ෂර LCD දර්ශකයක් භාවිතා කළ හැකිය.. ඉතින්, මෙම උදාහරණයේ දී, අපි DHT11 සහ DHT22 සංවේදක සමඟ LCD තිරයක් ආර්ඩුයිනෝ සමග භාවිතා කරන ආකාරය විමසා බලමු.

අවශ්‍යය උපාංග

ඔබට 16 × 2 අක්ෂර LCDs දර්ශක  හුරු නැතිනම්, කලින් දක්වා ඇති 16×2 LCD දර්ශක මොඩියුලය ආර්ඩුයිනෝ සමඟ සම්බන්ධ කිරීම පාඩම බලන්න.

ඊළඟට, පහත දැක්වෙන පරිදි අපි LCD දර්ශක සමඟ සම්බන්ධ කළ යුතුය.

පරිපථ සැකැස්ම

Hardware connection

Wiring DHT11 and 16×2 Character LCD to Arduino UNO

පහත දැක්වෙන ප්‍රෝග්‍රෑම් එක මඟින් 16×2 LCD දර්ශකය මත උෂ්ණත්වය සහ සාපේක්ෂ ආර්ද්‍රතා අගයන් මුද්‍රණය කෙරේ. මෙහිදී අපි LCD දර්ශකය මත අගයන් මුද්‍රණය කරනවා හැර අනෙකුත් කේතයන් ඉහත ප්‍රෝග්‍රෑම් එක හා සමාන වේ.

Sketch 14.2

#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>
#define dataPin 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;

void setup() 
{
    lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
}

void loop() 
{
    int readData = DHT.read22(dataPin);
    float t = DHT.temperature;
    float h = DHT.humidity;
    lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
    lcd.print("Temp.: "); // Prints string "Temp." on the LCD

    //Print temperature value in Celcius and Fahrenheit every alternate cycle
    if(showcelciusorfarenheit)
    {
        lcd.print(t); // Prints the temperature value from the sensor
        lcd.print(" ");
        lcd.print((char)223);//shows degrees character
        lcd.print("C");
        showcelciusorfarenheit = false;
    }
    else
    {
        lcd.print((t * 9.0) / 5.0 + 32.0); // print the temperature in Fahrenheit
        lcd.print(" ");
        lcd.print((char)223);//shows degrees character
        lcd.print("F");
        showcelciusorfarenheit = true;
    }
    
    lcd.setCursor(0,1);
    lcd.print("Humi.: ");
    lcd.print(h);
    lcd.print(" %");
    delay(5000);
}

එවිට පහත පරිදි උෂ්ණත්වය සහ සාපේක්ෂ ආර්ද්‍රතා අගයන් LCD තිරය මත දැකගත හැකිය.

Temperature & humidity measurements on LCD

Leave a Reply

Your email address will not be published. Required fields are marked *

Index