Assalamualaikum, jumpa lagi di triyonos.com dengan tutorial-tutorial pemrograman menarik lainnya. Kali ini triyonos.com akan membahas penggunaan sensor pengukur suhu dan kelembaban udara yang cukup sering digunakan dalam project Arduino yaitu sensor DHT22.
Umumnya jika menggunakan Arduino IDE, hasil pembacaan nilai suhu dan kelembaban dari sensor DHT22 dapat dimonitor melalui Serial Monitor. Dengan merangkai Arduino dan DHT22 seperti wiring diagram di bawah ini:
Kemudian kita install library DHT22 melalui Library Manager di Arduino IDE, kemudian kita buka dan upload sketch Example-nya, akan didapat nilai Humidity dan Temperature ruangan yang terbaca oleh sensor DHT22 seperti gambar di bawah ini.
Di tutorial kali ini, saya akan menggunakan package Johnny-five yang merupakan salah satu package node.js yang sering saya gunakan untuk mengontrol papan microcontroller Arduino menggunakan bahasa pemrograman Javascript.
Dengan Johnny-five saya akan menampilkan pembacaan nilai kelembaban atau humidity dari sensor DHT22 (hanya nilai kelembaban saja) ke dalam Windows command prompt, seperti pada gambar di bawah ini.
Mengacu ke example Hygrometer - DHT22_I2C_NANO_BACKPACK dari laman resmi Johnny-Five. Komponen elektornika yang dibutuhkan adalah sebagai berikut:
# | Item | Qty | UoM |
---|---|---|---|
1 | Arduino Uno | 1 | EA |
2 | Arduino Nano | 1 | EA |
3 | Breadboard | 1 | EA |
4 | Sensor DHT22 | 1 | EA |
5 | Resistor 330 Ohm | 1 | pcs |
6 | Kabel jumper | 9 | pcs |
7 | Kabel power | 1 | EA |
Untuk dirangkai seperti pada wiring diagram berikut:
Langkah-langkah Praktikum
1. Upload Sketch dht_i2c_nano_backpack.ino ke Arduino Nano
Klik link https://johnny-five.io/examples/hygrometer-DHT22_I2C_NANO_BACKPACK/
Pada bagian Learn More, klik link I2C Backback Firmare
Untuk menampilkan sketch dht_i2c_nano_backpack.ino dari halaman github
https://github.com/rwaldron/johnny-five/blob/main/firmwares/dht_i2c_nano_backpack.ino
Yang perlu dirubah dari sketch tersebut adalah pada baris 24 dan 25
Ubah menjadi
int dhtPin = 2;
int dhtPin = 22;
Untuk selengkapnya copy sketch dht_i2c_nano_backpack.ino berikut:
#include <Wire.h>
#include "DHT.h"
#define DEBUG_MODE 0
// Address Pins
#define AD0 11
#define AD1 12
// I2C Defaults
#define I2C_DEFAULT_ADDRESS 0x0A
#define I2C_BUFFER_SIZE 4
//
// 0 H LSB
// 1 H MSB
// 2 T LSB
// 3 T MSB
//
byte buffer[I2C_BUFFER_SIZE];
int addressPins[] = { AD0, AD1 };
int address = I2C_DEFAULT_ADDRESS;
int dhtPin = 2;
int dhtType = 22;
void resetState() {
digitalWrite(dhtPin, LOW);
pinMode(dhtPin, INPUT);
}
void setup() {
int offset = 0;
for (int i = 0; i < 2; i++) {
pinMode(addressPins[i], INPUT);
if (digitalRead(addressPins[i])) {
offset |= 1 << i;
}
}
address += offset;
#if DEBUG_MODE
Serial.begin(9600);
#endif
resetState();
Wire.begin(address);
Wire.onRequest(onRequest);
Wire.onReceive(onReceive);
}
void loop() {
if (dhtPin != -1 && dhtType != -1) {
DHT dht(dhtPin, dhtType);
dht.begin();
int h = (int)((float)dht.readHumidity() * 100);
int c = (int)((float)dht.readTemperature() * 100);
buffer[0] = h >> 8;
buffer[1] = h & 0xFF;
buffer[2] = c >> 8;
buffer[3] = c & 0xFF;
#if DEBUG_MODE
Serial.print("h: ");
Serial.println(h);
Serial.print("c: ");
Serial.println(c);
#endif
delay(250);
#if DEBUG_MODE
Serial.print("free ram: ");
Serial.println(freeRam());
#endif
}
}
#if DEBUG_MODE
int freeRam() {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
#endif
void onRequest() {
Wire.write(buffer, I2C_BUFFER_SIZE);
}
void onReceive(int howMany) {
// Order: [ pin, type ]
// Default: [ 2, 11 ]
dhtPin = (byte)Wire.read();
dhtType = (byte)Wire.read();
#if DEBUG_MODE
Serial.print("dhtPin: ");
Serial.println(dhtPin);
Serial.print("dhtType: ");
Serial.println(dhtType);
#endif
}
Hubungkan Arduino Nano ke PC, pastikan port COM untuk Arduino Nano terbaca di device manager. Buka sketch baru di Arduino IDE, kemudian paste sketch .ino di atas.
Klik tombol Upload & tunggu sampai Done Uploading
2. Upload Example Sketch StandardFirmata.ino ke Arduino Uno
Hubungkan Arduino Uno ke PC, pastikan port COM untuk Arduino Uno terbaca di device manager. Kembali ke Arduino IDE, kemudian Klik File Examples Firmata StandardFirmata di Arduino IDE
Akan tampil sketch StandardFirmata.ino pada jendela baru Arduino IDE. Pilih Board Arduino Uno yang sudah terhubung ke PC, kemudian klik tombol Upload dan tunggu sampai Done Uploading.
3. Koding di Node.js
Buat folder baru sebagai project folder node.js di directory yang anda inginkan. Di tutorial ini saya akan buat folder baru dengan nama j5_dht22 di dalam directory E:\triyonos
Buka Windows command prompt, arahkan ke directory E:\triyonos\j5dht22
Ketikkan npm init
, kemudian Enter, kemudian isikan informasi yang dibutuhkan mengenai project ini.
Setelah itu kita install package johnny five melalui npm dengan mengetikkan perintah npm install johnny-five
kemudian Enter.
Tunggu sampai selesai.
Create file .js baru dengan nama dht22.js
Buka file dht22.js melalui text editor Notepad++, kemudian copy paste sketch di bawah ini:
var five = require("johnny-five");
var board = new five.Board({ port: "COM20" });
board.on("ready", function() {
var hygrometer = new five.Hygrometer({
controller: "DHT22_I2C_NANO_BACKPACK"
});
hygrometer.on("change", function() {
if (parseFloat(this.relativeHumidity) > 0) {
console.log("Hygrometer");
console.log(" relative humidity : ", this.relativeHumidity);
console.log("--------------------------------------");
}
});
});
Kemudian Save
4. Assembling Komponen Elektrikal dan Running App
Rangkai Arduino Uno, Arduino Nano dan sensor DHT22 seperti pada wiring diagram di atas. Berikut hasil rangkaiannya:
Buka Windows command prompt, arahkan ke directory root folder node.js