Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat berfungsi untuk monitor suhu dan gas serta debu. alat ini menggunakan Arduino sebagai mikrokontrollernya dan interfacenya menggunakan LCD. alat ini dapat dikembangkan untuk monitor udara disuatu tempat sehingga bisa terdeteksi kadarnya. untuk lebih jelasnya berikut adalah daftar komponen dan programnya.
a. Arduino Uno
b. Sensor Gas MQ-7
c. Sensor DHT11
d. Sensor Debu
e. Lcd + I2C
f. Program Arduino IDE
#include <Wire.h> //library
#include <LiquidCrystal_I2C.h> //library lcd
#include "DHT.h" //library dht11
#define DHTPIN 3 // pin digital untuk dht11
#define DHTTYPE DHT11 // set dht11
DHT dht(DHTPIN, DHTTYPE); //set dht11
LiquidCrystal_I2C lcd(0x27, 16, 2); //untuk library lcd i2c
int ledx = 2; //untuk pin sensor debu
float ppm2; //variabel untuk mq7
float RS_air; // Get the value of RS via in a clear air
float R0 = 0.25; // Get the value of R0 via in H2
float sensorValue; // variabel bisa pecahan
float sensor_volt; // variabel bisa pecahan
float RS_gas; //variabel bisa pecahan
float ratio; //variabel bisa pecahan
void setup() //prosedure
{
dht.begin(); //mulai dht11
lcd.begin(); //mulai lcd
lcd.clear(); //bersihakn lcd
lcd.noCursor(); //lcd tanpa kursor
pinMode(ledx,OUTPUT); //pin sebagai output
pinMode(A3,OUTPUT); //pin sebagai output
}
void loop() //prosedure
{
float h = dht.readHumidity(); //ambil data humidity
float t = dht.readTemperature(); //ambil data suhu c
float f = dht.readTemperature(true); //ambil data suhu f
int hum = h; //deklarasi variabel
int suhu = t; //deklaras variabel
if (isnan(h) || isnan(t) || isnan(f)) { //untuk koneksi dht11
Serial.println("Failed to read from DHT sensor!"); //jika error
return; //maka kembali
}
float hif = dht.computeHeatIndex(f, h); //untuk dht11
float hic = dht.computeHeatIndex(t, h, false); //untuk dht11
//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); //pin on
delayMicroseconds(176); //delay
int dataadc = analogRead(A0); //ambil adc
delayMicroseconds(40); //delay
digitalWrite(ledx,HIGH); //pin off
delayMicroseconds(9680); //delay
float v = dataadc * (5.0 / 1023.0); //untuk dikonvert ke tegangan
//y = 0.166x - 0.129 //rumus
float Dustval = (v * 0.166) - 0.129; //rumus sensor debu
delay(80); //delay
gasmq7(); //ambil data gas mq7
lcd.setCursor(0,0); //untuk menampilkan d baris atas
lcd.print("S="); //menulis huruf
lcd.print(suhu); //menulis suhu
lcd.print(" / "); //menulis tanda /
lcd.print("P="); //menulis p
lcd.print(ppm2); //menulis nilai sensor gas
lcd.print(" "); //spasi
lcd.setCursor(0,1); //untuk menulis d lcd bawah
lcd.print("Dust= "); //menulis variabel
lcd.print(Dustval); //menulis nilai
lcd.print(" mg/m3"); //menulis variabel
}
void gasmq7(){ //prosedure
analogWrite(A3, 1023); //untuk mengeluarkan tegangan
//Heather 1.4 V 90 s
analogWrite(A3, (1023/5)*1.4 ); //untuk mengeluarkan tegangan
//for(int i = 0; i<90; i++){
sensorValue = analogRead(A1); //untuk ambil adc sensor mq7
sensor_volt = sensorValue/1024*5.0; //untuk menjadi tegangan
RS_gas = (5.0-sensor_volt)/sensor_volt; //untuk rumus
ratio = RS_gas/R0; //Replace R0 with the value found using the calibration code
float kal = 83.39 / ratio; //untuk rumus
ppm2 = pow(kal , 0.63); //untuk jadi ppm
delay(100); //delay
//}
}
g. VIDEO HASILNYA
No comments:
Post a Comment