Perancangan Sistem Pengontrol dan Monitor Intensitas Cahaya Ruangan Berbasis Perintah Suara pada Sistem Android

LISTING PROGRAM

1.

Program Mikrokontroller Arduino Uno A

#include



String dataCheck;
String dataCheck_2;
String prevDataCheck_2;
bool firstChar = false;
unsigned long timeser;
volatile int i=0;
// counter interup
volatile boolean zero_cross=0; // variable kondisi zero-cross
int AC_pin = 5;
// Output pwm ke triac (kanan)
int dim = 0;

// Dimming level (0-128) 0 = on,
198 = 0ff
int inc=1;
// counting up or down, 1=up, 1=down
int freqStep = 60;
// This is the delay-per-brightness step in
microseconds.
// data pembanding intensitas dimmer
int maxDim = 190;
int minDim = 10;
int dataDim;
// fungsi pengkondisian awal
void setup()
{
Serial.begin(9600);
// membuka gate komunikasi arduino ke
bluetooth dengan kecepatan transfer data 9600
pinMode(AC_pin, OUTPUT);
// Set the
Triac pin as output

attachInterrupt(0, zero_cross_detect, RISING);
// Attach an
Interupt to Pin 2 (interupt 0) for Zero Cross Detection. daftar
interup
Timer1.initialize(freqStep);
// Initialize
TimerOne library for the freq we need
Timer1.attachInterrupt(dim_check, freqStep);
//aktifkan
interup
}
void zero_cross_detect() {
zero_cross = true;
// set the boolean to true to
tell our dimming function that a zero cross has occured
i=0;
digitalWrite(AC_pin, LOW);
// turn off TRIAC (and AC)
}
// Turn on the TRIAC at the appropriate time

void dim_check() {

Universitas Sumatera Utara

2

if(zero_cross == true) {
if(i>=dim) {
digitalWrite(AC_pin, HIGH); // turn on light
i=0; // reset time step counter
zero_cross = false; //reset zero cross detection
}
else {
i++; // increment time step counter
}
}
}
//sistem looping
void loop ()
{

if(Serial.available() > 0){
char a = Serial.read();
if(a == 'A') firstChar = true;
else if(a != '$' && firstChar == true){
dataCheck += (String)a;
}
else if(a == '$'){
dataCheck_2 = dataCheck;
//datacheck _2 data akhir
berupa angka yang akan mengontrol dimmer
dataCheck = "";
firstChar = false;
//Serial.println("$|" + dataCheck_2);
}
else {
}
}
printData();
}
//update data intensitas dimmer

void printData(){
if(millis() > timeser + 500) //update tiap 500 milisecond
{
convertToDim();
// Serial.println("dataCheck >>>>>>>> " +
String(dataCheck_2));
// Serial.println("dataDim >>>>>>>> " + String(dataDim));
// Serial.println(" ");
timeser = millis(); //restart counter timer
}
}
void convertToDim(){
int dataDim1 = dataCheck_2.toInt();
float dataDim2 = (maxDim-minDim) * dataDim1/100.0;
dataDim = maxDim - dataDim2;
// convert data to dim lamp
if(dataCheck_2 != prevDataCheck_2){
//Serial.println("Dimming Now");
dim = dataDim;
prevDataCheck_2 = dataCheck_2;

}
else{}}

Universitas Sumatera Utara

3

2.

Program Mikrokontroller Arduino Uno B

#include



String dataCheck;
String dataCheck_2;
String prevDataCheck_2;
bool firstChar = false;
unsigned long timeser;


volatile int i=0;

// counter interup

volatile boolean zero_cross=0;

// variable kondisi zero-cross

int AC_pin = 5;

// Output pwm ke triac (kanan)

int dim = 0;
198 = 0ff

// Dimming level (0-128)

int inc=1;
1=down


// counting up or down, 1=up, -

int freqStep = 60;
microseconds.

0 = on,

// This is the delay-per-brightness step in

// data pembanding intensitas dimmer
int maxDim = 190;
int minDim = 10;
int dataDim;

// fungsi pengkondisian awal
void setup()
{
Serial.begin(9600);
// membuka gate komunikasi arduino ke

bluetooth dengan kecepatan transfer data 9600

pinMode(AC_pin, OUTPUT);
Triac pin as output

// Set the

attachInterrupt(0, zero_cross_detect, RISING);
// Attach an
Interupt to Pin 2 (interupt 0) for Zero Cross Detection. daftar
interup

Universitas Sumatera Utara

4

Timer1.initialize(freqStep);
TimerOne library for the freq we need

// Initialize


Timer1.attachInterrupt(dim_check, freqStep);
interup

//aktifkan

}

void zero_cross_detect() {
zero_cross = true;
// set the boolean to true to
tell our dimming function that a zero cross has occured
i=0;
digitalWrite(AC_pin, LOW);

// turn off TRIAC (and AC)

}

// Turn on the TRIAC at the appropriate time

void dim_check() {
if(zero_cross == true) {
if(i>=dim) {
digitalWrite(AC_pin, HIGH); // turn on light
i=0;

// reset time step counter

zero_cross = false; //reset zero cross detection
}
else {
i++; // increment time step counter
}
}
}

//sistem looping
void loop ()
{
if(Serial.available() > 0){
char a = Serial.read();
if(a == 'B') firstChar = true;

Universitas Sumatera Utara

5

else if(a != '#' && firstChar == true){
dataCheck += (String)a;
}
else if(a == '#'){
dataCheck_2 = dataCheck;
dataCheck = "";
firstChar = false;
//Serial.println("#|" + dataCheck_2 );
}
else {

}
}
printData();
}

void printData(){
if(millis() > timeser + 500)
{
convertToDim();
//
Serial.println("dataCheck >>>>>>>>
String(dataCheck_2));
//

Serial.println("dataDim >>>>>>>>

//

Serial.println(" ");

" +
" + String(dataDim));

timeser = millis();
}
}

void convertToDim(){
int dataDim1 = dataCheck_2.toInt();
float dataDim2 = (maxDim-minDim) * dataDim1/100.0;
dataDim = maxDim - dataDim2;

Universitas Sumatera Utara

6

// convert data to dim lamp
if(dataCheck_2 != prevDataCheck_2){
//Serial.println("Dimming Now");
dim = dataDim;
prevDataCheck_2 = dataCheck_2;
}
else{}}

3.

Pemrograman Aplikasi Android

Universitas Sumatera Utara

7

Universitas Sumatera Utara

8

Universitas Sumatera Utara

9

Universitas Sumatera Utara

10

Universitas Sumatera Utara