adista28
Published

Automatic Rail Door Stop Based on Arduino

This projects shows how an ultrasonic sensor can be combined with a servo motor to control a rail door stop.

IntermediateProtip1,993
Automatic Rail Door Stop Based on Arduino

Things used in this project

Hardware components

SG90 Micro-servo motor
SG90 Micro-servo motor
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
Arduino UNO
Arduino UNO
×1
5 mm LED: Yellow
5 mm LED: Yellow
×1
Capacitor 100 µF
Capacitor 100 µF
×1
Through Hole Resistor, 470 ohm
Through Hole Resistor, 470 ohm
×1
Buzzer
Buzzer
×1
Linear Regulator (7805)
Linear Regulator (7805)
×1
Custom PCB
Custom PCB
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Scissor, Electrician
Scissor, Electrician
Solder Wire, Lead Free
Solder Wire, Lead Free
Soldering iron (generic)
Soldering iron (generic)
Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Custom parts and enclosures

palang_kereta_SCzOBw5W4z.jpg

Schematics

uas_palang_pintu_bb_lPBeMwFgZM.jpg

Code

UAS_Palang_Pintu.ino

Arduino
// 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;

   }
   
    }
   }

 }

Credits

adista28
0 projects • 2 followers

Comments