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
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