You are on page 1of 34

Lampiran 1 Koding Alat

#include <TimerOne.h>
// This example uses the timer interrupt to blink an LED
// and also demonstrates how to share a variable between
// the interrupt and the main program.

// The interrupt will blink the LED, and keep


// track of how many times it has blinked.
int ledState = LOW;
volatile unsigned long blinkCount = 0; // use volatile for shared variables

#include <Keypad.h>

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line
display

#include <HCSR04.h>

UltraSonicDistanceSensor distanceSensor(13, 12); // Initialize sensor that uses digital pins


13(trigeer) and 12(echo).
float tinggi=0;
float cal_tinggi=-87;
float tinggi_set,tinggi_set_pembanding;
boolean kolimator=0;

int count, tanda, mode;

int jam,menit,detik,time_waktu;
int jam_set,menit_set,detik_set;
long nilai=0;
long first = 0;
long second = 0;
double total = 0;
int input;

int nilai_A =42;


int nilai_B =44;
int nilai_C =46;
int nilai_D =48;

int button_nilai_A =0;


int button_nilai_B =0;
int button_nilai_C =0;
int button_nilai_D =0;

boolean status_baca_sensor;
float mp=0.004702;
float cp=-0.98276;
float ml=0.006173;
float cl=0;
int sensor_p=A0, sensor_l=A1, nilai_p, nilai_l;

float panjang, lebar;

int buzz = 6;//buzzer


int lampu = 5;//lampu
int m_buka_p = 7;//motor buka panjang
int m_tutup_p = 8;//motor tutup panjang
int m_buka_l = 3;//motor buka lebar
int m_tutup_l = 4;//motor tutup lebar

//inisialisasi pin pwm penggerak motor


int r1 = 9;
int pwm_motor_naik = 0; //ubah nilai pwm dari 0 sampai 255 untuk mengatur kecepatan
motor naik
int r2 = 10;
int pwm_motor_turun = 0; //ubah nilai pwm dari 0 sampai 255 untuk mengatur kecepatan
motor turun

int PWM_Value = 0;

const byte ROWS = 4; //four rows


const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {28, 26, 24, 22}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {36, 34, 32, 30}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void nada(){
digitalWrite(buzz,HIGH);
delay(500);
digitalWrite(buzz,LOW);
delay(500);
digitalWrite(buzz,HIGH);
delay(500);
digitalWrite(buzz,LOW);
delay(500);
}

void lampu_on(){digitalWrite(lampu,HIGH);}
void lampu_off(){digitalWrite(lampu,LOW);}
void buka_p(){digitalWrite(m_buka_p,HIGH);}
void tutup_p(){digitalWrite(m_tutup_p,HIGH);}
void stop_p(){digitalWrite(m_buka_p,LOW);digitalWrite(m_tutup_p,LOW);}
void buka_l(){digitalWrite(m_buka_l,HIGH);}
void tutup_l(){digitalWrite(m_tutup_l,HIGH);}
void stop_l(){digitalWrite(m_buka_l,LOW);digitalWrite(m_tutup_l,LOW);}
void m_naik(){pwm_motor_naik=200;analogWrite(r1, pwm_motor_naik);}
void m_turun(){pwm_motor_turun=200;analogWrite(r2, pwm_motor_turun);}
void m_stop(){pwm_motor_naik=0;analogWrite(r1,
pwm_motor_naik);pwm_motor_turun=0;analogWrite(r2, pwm_motor_turun);}

void idel()
{
lcd.setCursor(0,0);
lcd.print("P: |L: |M= ");
lcd.setCursor(0,1);
lcd.print("H(Cm)= | ");
lcd.setCursor(0,2);
lcd.print("Time_Set= 00:00:00 ");
lcd.setCursor(0,3);
lcd.print("Time_Act= 00:00:00 ");
delay(1000);
}

void baca_sensor_posisi()
{
nilai_p=analogRead(sensor_p);
nilai_l=analogRead(sensor_l);

panjang=(mp*nilai_p)+cp;
lebar=(ml*nilai_l)+cl;

//lcd.setCursor(2,0);lcd.print(panjang);
//lcd.setCursor(12,0);lcd.print(lebar);
lcd.setCursor(2,0);lcd.print(nilai_p);
lcd.setCursor(12,0);lcd.print(nilai_l);

delay(10);
}

void baca_tinggi()
{
Serial.println(distanceSensor.measureDistanceCm());
tinggi=distanceSensor.measureDistanceCm();
tinggi=tinggi-cal_tinggi;
lcd.setCursor(6,1);
lcd.print(tinggi,1);
delay(150);
}

void set_jam()
{
char key = keypad.getKey();
lcd.setCursor(11, 2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(11,2);

while(key!='#')
{
char key = keypad.getKey();

switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(11,2);

first = first * 10 + (key - '0');


lcd.print(first);
break;

case '#':
jam = first;
lcd.setCursor(11,2);
lcd.print(jam);
first = 0;
break;

case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(11,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(11,2);
break;
}

if(key=='#')
{
first = (total != 0 ? total : first);
jam = jam;
jam_set = jam;
lcd.setCursor(11,2);
lcd.print(jam);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}

}
}

void set_menit()
{
char key = keypad.getKey();
lcd.setCursor(14,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(14,2);

while(key!='#')
{
char key = keypad.getKey();

switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(14,2);

first = first * 10 + (key - '0');


lcd.print(first);
break;

case '#':
menit = first;
lcd.setCursor(14,2);
lcd.print(menit);
first = 0;
break;

case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(14,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(14,2);
break;
}

if(key=='#')
{
first = (total != 0 ? total : first);
menit = menit;
menit_set = menit;
lcd.setCursor(14,2);
lcd.print(menit);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}

}
}
void set_detik()
{
char key = keypad.getKey();
lcd.setCursor(17,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(17,2);

while(key!='#')
{
char key = keypad.getKey();

switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(17,2);

first = first * 10 + (key - '0');


lcd.print(first);
break;

case '#':
detik = first;
lcd.setCursor(17,2);
lcd.print(detik);
first = 0;
break;

case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(17,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(17,2);
break;
}

if(key=='#')
{
first = (total != 0 ? total : first);
detik = detik;
detik_set = detik;
lcd.setCursor(17,2);
lcd.print(detik);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}

}
}

void set_tinggi()
{
char key = keypad.getKey();
lcd.setCursor(15,1);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(15,1);

while(key!='#')
{
char key = keypad.getKey();

switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(15,1);

first = first * 10 + (key - '0');


lcd.print(first);
break;

case '#':
tinggi_set = first;
lcd.setCursor(15,1);
lcd.print(tinggi_set);
first = 0;
break;

case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(15,1);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(15,1);
break;
}

if(key=='#')
{
first = (total != 0 ? total : first);
tinggi_set=tinggi_set;
lcd.setCursor(15,1);
lcd.print(tinggi_set);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}

}
}

void koreksi_tinggi()
{
delay(100);
baca_tinggi();
tinggi_set_pembanding=tinggi-tinggi_set;
//lcd.setCursor(3,0);lcd.print(tinggi_set_pembanding);
delay(100);
if((tinggi_set_pembanding>=-3.4)&&(tinggi_set_pembanding<=3.4)){m_stop();count=0;
tanda=0;}
if((tinggi_set_pembanding<=-3.5)||(tinggi_set_pembanding>=3.5)){m_stop();count=25;
tanda=1;}
delay(500);

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==1)
{
baca_tinggi();
count=count-1;
if(count<=0){tanda=0;m_stop();break;}
//lcd.setCursor(18,1);lcd.print(count);
if(tinggi>tinggi_set){m_turun();}//motor turun
if(tinggi<tinggi_set){m_naik();}//motor naik
if((tinggi==tinggi_set+0.2)&&(tinggi==tinggi_set-0.2)){tanda=0;m_stop();break;}
}

m_stop();count=0;tanda=0;tinggi_set_pembanding=0;
tinggi=tinggi_set;
lcd.setCursor(6,1);
lcd.print(tinggi,1);
nada();
delay(200);
}

void awal()
{
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Cek Motor...........");
delay(100);
baca_sensor_posisi();
tanda=0;
count=150;

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p>0){tutup_p();}//tutup panjang
if(nilai_l>0){tutup_l();}//tutup lebar
if((nilai_p==0)&&(nilai_l==0)){tanda=1;stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;

tanda=0;
count=40;

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
count=count-1;
delay(100);
lcd.setCursor(18,1);lcd.print(count);
tutup_p();//tutup panjang
tutup_l();//tutup lebar
if(count==0){tanda=1;stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;
nada();
delay(200);
}

void proses_mode_1()//mode 1 18x24


{
delay(100);
lampu_on();
baca_sensor_posisi();
tanda=0;
count=150;

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<238){buka_p();}//buka panjang
if(nilai_l<45){buka_l();}//buka lebar
if(nilai_p>=238){stop_p();}
if(nilai_l>=45){stop_l();}
if((nilai_p>=238)&&(nilai_l>=45)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}

void proses_mode_2()//mode 1 24x30


{
delay(100);
lampu_on();
baca_sensor_posisi();
tanda=0;
count=150;

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<238){buka_p();}//buka panjang
if(nilai_l<335){buka_l();}//buka lebar
if(nilai_p>=238){stop_p();}
if(nilai_l>=335){stop_l();}
if((nilai_p>=238)&&(nilai_l>=335)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}

void proses_mode_3()//mode 1 26x36


{
delay(100);
lampu_on();
baca_sensor_posisi();
tanda=0;
count=150;

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<656){buka_p();}//buka panjang
if(nilai_l<229){buka_l();}//buka lebar
if(nilai_p>=656){stop_p();}
if(nilai_l>=229){stop_l();}
if((nilai_p>=656)&&(nilai_l>=229)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}

void proses_mode_4()//mode 1 35x43


{
delay(100);
lampu_on();
baca_sensor_posisi();
tanda=0;
count=150;

//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<685){buka_p();}//buka panjang
if(nilai_l<342){buka_l();}//buka lebar
if(nilai_p>=685){stop_p();}
if(nilai_l>=342){stop_l();}
if((nilai_p>=685)&&(nilai_l>=342)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}

void setup(){
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pwm_motor_naik=0;
analogWrite(r1, pwm_motor_naik);
analogWrite(r1, 0);
pwm_motor_turun=0;
analogWrite(r2, pwm_motor_turun);
analogWrite(r2, 0);
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
pinMode(nilai_A, INPUT);
pinMode(nilai_B, INPUT);
pinMode(nilai_C, INPUT);
pinMode(nilai_D, INPUT);

pinMode(buzz,OUTPUT);
pinMode(lampu,OUTPUT);
pinMode(m_buka_p,OUTPUT);
pinMode(m_tutup_p,OUTPUT);
pinMode(m_buka_l,OUTPUT);
pinMode(m_tutup_l,OUTPUT);
jam=1;menit=1;detik=1;//hold waktu
awal();
tampil_judul();
nada();
idel();
Timer1.initialize(1000000);// timer aktif to run every 1 seconds
//Timer1.initialize(1000000);// timer aktif to run every 1 seconds
Timer1.attachInterrupt(blinkLED);
}

void loop(){
char key = keypad.getKey();
button_nilai_A = digitalRead(nilai_A);
button_nilai_B = digitalRead(nilai_B);
button_nilai_C = digitalRead(nilai_C);
button_nilai_D = digitalRead(nilai_D);
//baca_tinggi();

//if
((button_nilai_A==1)&&(button_nilai_B==0)&&(button_nilai_C==0)&&(button_nilai_D=
=0)||(key=='1'))//posisi 1 remote angka 1
if
((button_nilai_C==1)&&(button_nilai_B==0)&&(button_nilai_A==0)&&(button_nilai_D=
=0)||(key=='1'))//posisi 1 remote angka 1
{
mode=1;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_1();
}

//if
((button_nilai_B==1)&&(button_nilai_C==0)&&(button_nilai_A==0)&&(button_nilai_D=
=0)||(key=='2'))//posisi 2 remote angka 2
if
((button_nilai_A==1)&&(button_nilai_B==0)&&(button_nilai_C==0)&&(button_nilai_D=
=0)||(key=='2'))//posisi 2 remote angka 2
{
mode=2;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_2();
}

if
((button_nilai_D==1)&&(button_nilai_A==1)&&(button_nilai_C==0)&&(button_nilai_B=
=1)||(key=='0'))//angka 0
{
mode=0;
lcd.setCursor(18,0);
lcd.print(mode);
//delay(100);
//koreksi_tinggi();
//delay(100);
//proses_mode_2();
}
if
((button_nilai_C==1)&&(button_nilai_B==0)&&(button_nilai_A==1)&&(button_nilai_D=
=0)||(key=='3'))//posisi 3 remote angka 3

{
mode=3;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_3();
}

//if
((button_nilai_D==0)&&(button_nilai_A==0)&&(button_nilai_C==0)&&(button_nilai_B=
=1)||(key=='4'))//anka 0
if
((button_nilai_D==1)&&(button_nilai_A==0)&&(button_nilai_C==0)&&(button_nilai_B=
=0)||(key=='4'))//posisi 4 remote angka 4
{
mode=4;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_4();
}

if (status_baca_sensor==1)//baca sensor terus


{
baca_tinggi();
baca_sensor_posisi();
}

if (key=='0')//hidupkan lampu
{
lampu_on();
}

if (key=='9')//baca_sensor
{
status_baca_sensor=1;
}

if (key=='5')//buka panjang
{
buka_p();
delay(500);
stop_p();
}

if (key=='6')//tutup panjang
{
tutup_p();
delay(500);
stop_p();
}

if (key=='7')//buka lebar
{
buka_l();
delay(500);
stop_l();
}

if (key=='8')//tutup lebar
{
tutup_l();
delay(500);
stop_l();
}

if (key=='*')//stop sistem
{
stop_p();
stop_l();
lampu_off();
kolimator=0;status_baca_sensor=0;
idel();
delay(200);
lcd.setCursor(18, 0);lcd.print(" ");
jam=1;menit=1;detik=1;//hold waktu
unsigned long blinkCopy; // holds a copy of the blinkCount
noInterrupts();
blinkCopy = blinkCount;
interrupts();
nada();delay(100);
}

if (key=='A')//set waktu
{
delay(200);nada();
set_jam();
set_menit();
set_detik();
delay(100);
}else

if (key=='B')//set tinggi
{
delay(200);nada();
set_tinggi();
delay(100);
}else

if (key=='C')//motor naik
{
m_naik();
delay(500);
m_stop();
delay(500);
}

if (key=='D')//motor turun
{
m_turun();
delay(500);
m_stop();
delay(500);
}

if ((jam==0)&&(menit==0)&&(detik==0))//stop sistem
{
stop_p();
stop_l();
lampu_off();
kolimator=0;
//tanda_kembali=1;
jam=1;menit=1;detik=1;//hold waktu
unsigned long blinkCopy; // holds a copy of the blinkCount
noInterrupts();
blinkCopy = blinkCount;
interrupts();
//terapi=0;tanda_naik=0;tanda_turun=0;sudut_set=0;status_baca_sensor=0;
delay(200);
nada();
awal();
idel();
jam=jam_set;menit=menit_set;detik=detik_set;//hold waktu
tinggi_set=tinggi_set;
lcd.setCursor(17,2);lcd.print(detik);
lcd.setCursor(14,2);lcd.print(menit);
lcd.setCursor(11,2);lcd.print(jam);
lcd.setCursor(15,1);
lcd.print(tinggi_set);
}

if (kolimator==1)//baca timer
{
lcd.setCursor(17,3);lcd.print(detik);
lcd.setCursor(14,3);lcd.print(menit);
lcd.setCursor(11,3);lcd.print(jam);
if(detik<=9){lcd.setCursor(18,3);lcd.print(" ");}
if(menit<=9){lcd.setCursor(15,3);lcd.print(" ");}
if(jam<=9){lcd.setCursor(12,3);lcd.print(" ");}
}

void blinkLED(void)
{
if ((ledState == LOW)&&(kolimator==1))
{
//ledState = HIGH;blinkCount = blinkCount + 1;

{
if(detik!=0){detik--;}
else if (detik==0)
{
if(menit!=0){menit--;detik=59;}
else if (menit==0)
{
if(jam!=0){jam--;menit=59;detik=59;}
}
}
}
}else
{ledState = LOW;}
//digitalWrite(led, ledState);
}

void tampil_judul()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" SIMULATOR KOLIMATOR");
lcd.setCursor(0,1);
lcd.print(" RONTGEN OTOMATIS ");
lcd.setCursor(0,2);
lcd.print("MENGIKUTI KASET FILM");
lcd.setCursor(0,3);
lcd.print(" DENGAN ELEKTRIK ");
delay(1000);
lcd.setCursor(0,3);
lcd.print(" SECARA WIRELLES ");
delay(1000);
lcd.setCursor(0,0);
lcd.print(" SINGGIH ADIYANA ");
lcd.setCursor(0,1);
lcd.print(" Nim : 1804090 ");
lcd.setCursor(0,2);
lcd.print(" UNIV. WIDYA HUSADA ");
lcd.setCursor(0,3);
lcd.print("Teknik Elektromedik ");
delay(1000);
}
Lampiran 1 Datasheet Arduino Mega 2560
Lampiran 2 Datasheet LM78XX Series
Lampiran 3 Datasheet C945
Lampiran 5 Datasheet

You might also like