Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk memonitor suhu dan debu yang berada pada suatu ruangan atau suatu benda, alat ini menggunakan Arduino sebagai processornya kemudian untuk sensor dipakai DHT11 dan GP2Y1010A dari sharp, untuk kalibrasi sensor dan cara akses sensor bisa dilihat pada link dibawah ini. alat ini dilengkapi relay yang mana jika suhu telah mencapai batas maka relay akan ON namun jika suhu masih belum mencapai batas maka relay akan OFF. untuk akurasi suhu dari DHT11 sangatlah bagus dan sesuai dengan standart industri. untuk lebih jelasnya berikut skema dan programnya.
a. Arduino UNO
b. LCD 16x2 + I2C Shield
c. Sensor DEBU / DUST
d. Sensor Suhu DHT11
e. Relay 1 channel
f. Program Arduino IDE
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int ledx = 3;
int relay = 4;
void setup()
{
dht.begin();
lcd.begin();
lcd.clear();
lcd.noCursor();
pinMode(ledx,OUTPUT);
pinMode(relay,OUTPUT);
digitalWrite(relay,LOW);
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
int hum = h;
int suhu = t;
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(t, h, false);
//aktif low
//GP2Y1010AU0F_SAMPLEDELAY should be 280us to perform the correct reading
//this delay should consider that ADC conversion takes 13 ADC clock cycles
//ADCtime(s) = (1/ADCclock)*13 = (1/FCPU/ADCprescaler)*13
// es (1/(8000000/64))*13 = 0.000104s = 104us
//so to perform reading at correct time
//280 - (1/FCPU/ADCprescaler)*13*1000000 , 1000000 is the conversion factor from s to us
// es. 280 - 104 = 176
digitalWrite(ledx,LOW); //on
delayMicroseconds(176);
int dataadc = analogRead(A0);
delayMicroseconds(40);
digitalWrite(ledx,HIGH); //off
delayMicroseconds(9680);
float v = dataadc * (5.0 / 1023.0);
//y = 0.166x - 0.129
float Dustval = (v * 0.166) - 0.129;
lcd.setCursor(0,0);
lcd.print("Suhu= ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Dust= ");
lcd.print(Dustval);
lcd.print(" mg/m3");
if(suhu > 35){
digitalWrite(relay,LOW);
}
if(suhu <= 35){
digitalWrite(relay,HIGH);
}
delay(80);
}
g. VIDEO HASILNYA
No comments:
Post a Comment