You are on page 1of 5

/* ==============================================================

Pemrogram : Kelompok EK-3c/4

1. 01-Fatma Wulandari NIM: 3.32.14.2.05

2. 09-Maydina Khairina Anggraini NIM: 3.32.14.2.11

3. 16-Roza Tita Oktafiana NIM: 3.32.14.2.16

=================================================================

Proyek ARDUINO

Kontrol Pemanas Dengan Remote Berbasis Radio Frekuensi

program untuk menyalakan dan mematikan pemanas/heater

menggunakan remote RF

-----------------------------------------------------------------

Materi :

- pengenalan arduino UNO

- inputan dengan saklar push button

- penyampaian sinyal inputan dengan transmitter dan receiver RF433Mhz

- luaran pada heater

-----------------------------------------------------------------

Komponen:

- saklar push button 2 buah

- modul RF433MHz 1 buah

- sensor arus (ACS712) 1 buah

- sensor suhu (DS18B20) 1 buah

- LED 3 buah

- Buzzer 1 buah

- Heater 1 buah

===============================================================*/

//=== Deklarasi Variabel ===//

#include <OneWire.h> //librari sensor suhu

#include <VirtualWire.h> //librari remote RF


#include <EmonLib.h> //librari sensor arus

OneWire ds(10);

EnergyMonitor sensorArus;

#define alarm 12 //pin 12 sbg output buzzer

#define led 7 //pin 7 sbg output LED

bool flag; //penanda untuk timer

char cad[100];

int pos = 0;

int data; //inisialisasi keluaran remote

double arus;

unsigned long previousMilis; //rekaman waktu terakhir

//=== Pengesetan Awal ===//

void setup(){

pinMode(12,OUTPUT); //pin 12 sbg output

pinMode(13,OUTPUT); //pin 12 sbg output

pinMode(led,OUTPUT); //led sbg output

Serial.begin(9600); //debugging serial dengan


baudrate 9600

sensorArus.current(1, 7.3);

vw_setup(2000); //kecepatan data transfer Kbps

vw_rx_start();

Serial.print("Mulai"); //menampilkan "mulai" pada serial


monitor

}
//=== Program Utama ===//

void loop(void) { //program perulangan

// ========== Baca Suhu ============

byte i;

byte present = 0;

byte data[12];

byte addr[8];

float celsius;

if(!ds.search(addr)) {

ds.reset_search();

delay(250);

return;

if(OneWire::crc8(addr, 7) != addr[7]) {

Serial.println("CRC is not valid!");

return;

ds.reset();

ds.select(addr);

ds.write(0x44,1);

present = ds.reset();

ds.select(addr);

ds.write(0xBE);

for(int i=0; i<9; i++){

data[i] = ds.read();

int16_t raw = (data[1] << 8) | data[0];

byte cfg = (data[4] & 0x60);


if(cfg == 0x00) raw = raw & ~7;

else if(cfg == 0x20) raw = raw & ~3;

else if(cfg == 0x40) raw = raw & ~1;

celsius = (float)raw / 16.0;

// =============================================

// ================ Baca Arus ==================

arus = sensorArus.calcIrms(500);

Serial.print("Suhu: "); Serial.print(celsius); //menampilkan pesan


serial "Suhu: "

Serial.print(" *C"); Serial.print("\t"); //menampilkan pesan


serial "*C"

Serial.print("Arus: "); Serial.print(arus); //menampilkan pesan


serial "Arus: "

Serial.println();

if(arus > 0.6){ //jika arus lebih


besar dari 0,6

digitalWrite(led,HIGH); //maka led indikator


merah ON

}else{ //jika arus kurang


dari 0,6

digitalWrite(led,LOW); //maka led indikator


merah OFF

// =============================================

byte buf[VW_MAX_MESSAGE_LEN];

byte buflen = VW_MAX_MESSAGE_LEN;

if(vw_get_message(buf,&buflen)){ //jika remote ON maka


remote menerima data "1"
Serial.println((char)buf[0]); //jika remote OFF
maka remote menerima data "0"

if((celsius>45) && (buf[0]=='1')){ //jika suhu melebihi


45 derajat dan data menerima data "1"

if(!flag){ //penanda

previousMilis=millis(); //rekam waktu


terakhir

flag=1;

unsigned long now=millis()-previousMilis; //waktu sekarang =


millis - waktu tersimpan

if(now>10000){ //jika waktu sekarang


lebih dari 10 detik

digitalWrite(alarm,LOW); //buzzer OFF

digitalWrite(13,LOW); //relay OFF

}else{ //atau jika waktu


sekarang kurang dari 10 detik

digitalWrite(13,HIGH); //buzzer ON

digitalWrite(alarm,HIGH); //relay ON

}else{ //atau

if(buf[0]=='1'){ //jika remote ON

digitalWrite(13,HIGH); //relay ON

}else{ //jika remote OFF

digitalWrite(13,LOW); //relay OFF

digitalWrite(alarm,LOW); //dan buzzer akan OFF

flag=0;

You might also like