// Program project palang pintu kereta otomatis oleh kelompok 4
#include <Servo.h> // header untuk servo
#define PinEcho1 12 // Pin Echo sensor ultrasonik 1
#define PinTrig1 11 // Pin Trigger sensor ultrasonik 1
#define PinEcho2 10 // Pin Echo sensor ultrasonik 2
#define PinTrig2 9 // Pin Trigger sensor ultrasonik 2
#define PinBuzzer 13 // Pin Buzzer
#define PinLED1 7 // Pin LED 1
#define PinLED2 8 // Pin LED 2
#define PinLED3 4 // Pin LED 3
#define PinLED4 3 // Pin LED 4
Servo Myservo; //Servo 1
Servo Myservo2; //Servo 2
int Jarak1,Jarak2,Durasi1,Durasi2,a;
void setup() {
Serial.begin(9600);
Myservo2.attach(5); //Servo 1 terhubung pada di pin 5 arduino
Myservo.attach(6); //Servo 1 terhubung pada di pin 5 arduino
pinMode(PinEcho1, INPUT);
pinMode(PinTrig1, OUTPUT);
pinMode(PinEcho2, INPUT);
pinMode(PinTrig2, OUTPUT);
pinMode(PinBuzzer, OUTPUT);
pinMode(PinLED1, OUTPUT);
pinMode(PinLED2, OUTPUT);
pinMode(PinLED3, OUTPUT);
pinMode(PinLED4, OUTPUT);
}
void motorservotutup(){
for (a=0;a<=90;a++){ //perulangan untuk variabel a dari 0 ke 90 derajat
Myservo2.write(a); //Palang menutup
Myservo.write(a); //Palang menutup
delay(10); // waktu jeda 10 ms
}
}
void motorservobuka(){
for (a=90;a>=0;a--){ //perulangan untuk variabel a dari 90 ke 0 derajat
Myservo2.write(a); //Palang membuka
Myservo.write(a); //Palang membuka
delay(10); // waktu jeda 10 ms
}
}
void distanceA(){
// Sensor Ultrasonik A
digitalWrite(PinTrig1,LOW);
delayMicroseconds(2);
digitalWrite(PinTrig1,HIGH);
delayMicroseconds(10);
digitalWrite(PinTrig1,LOW);
Durasi1=pulseIn(PinEcho1,HIGH);
Jarak1=Durasi1/58.2;
Serial.print("Jarak terukur sensor A :");
Serial.println(Jarak1);
}
void distanceB(){
// Sensor Ultrasonik B
digitalWrite(PinTrig2,LOW);
delayMicroseconds(2);
digitalWrite(PinTrig2,HIGH);
delayMicroseconds(10);
digitalWrite(PinTrig2,LOW);
Durasi2=pulseIn(PinEcho2,HIGH);
Jarak2=(Durasi2/2)/29.1;
Serial.print("Jarak terukur sensor B :");
Serial.println(Jarak2);
}
void loop() {
distanceA (); //memanggil fungsi distanceA
distanceB (); //memanggil fungsi distanceB
if ((Jarak1<5)&&(Jarak2>6)){
motorservobuka(); // palang pintu kereta membuka kembali
}
else if ((Jarak2<5)&&(Jarak1>6)){ //jarak 2(sensor B) mendeteksi kedatangan kereta
for(a=0;a<=0;a++){
digitalWrite(PinLED1,HIGH);
digitalWrite(PinLED3,HIGH);
digitalWrite(PinLED2,LOW);
digitalWrite(PinLED4,LOW);
tone(PinBuzzer, 1000);
delay(500);
digitalWrite(PinLED1,LOW);
digitalWrite(PinLED3,LOW);
digitalWrite(PinLED2,HIGH);
digitalWrite(PinLED4,HIGH);
tone(PinBuzzer, 500);
delay(500);
}
motorservotutup(); // palang pintu kereta menutup
while(1){
digitalWrite(PinLED1,HIGH);
digitalWrite(PinLED3,HIGH);
digitalWrite(PinLED2,LOW);
digitalWrite(PinLED4,LOW);
tone(PinBuzzer, 1000);
delay(500);
digitalWrite(PinLED1,LOW);
digitalWrite(PinLED3,LOW);
digitalWrite(PinLED2,HIGH);
digitalWrite(PinLED4,HIGH);
tone(PinBuzzer, 500);
delay(500);
distanceA (); //memanggil fungsi distanceA
distanceB (); //memanggil fungsi distanceB
if ((Jarak1<5)&&(Jarak2>6)){ //jarak 1(sensor A) mendeteksi kedatangan kereta
motorservobuka(); // palang pintu kereta membuka kembali
noTone(PinBuzzer);
digitalWrite(PinLED2,HIGH);
digitalWrite(PinLED4,HIGH);
delay(500);
break;
}
}
}
}
Comments