In this project we will see how the gate is opened and closed when the human passes in front of the PIR sensor. When human comes in front of PIR sensor the barrier will be opened automatically and closed after 5 seconds. This system has close loop technique.
This program is used to open the gate. When there is a human movement in front of pir sensor,the output of pir sensor goes to high and the servo motor will be activated by 90 degree speedly and the red led will be off and green led will be on. After some time (4 second), it will come back to 0 degree slowly slowly and red led will be on and green led will be off. Also the detection range from 3 meter to 7 meter.
Use dvd writer shutter mechanism as a gate. In this mechanism there a dc motor with rack and pinion assembly and limit switch assembly. The dc motor will move the mechanism up side to open the gate and down side to close the door when we apply the +5vdc to pin number 1 and ground to pin number 2. The limit switch has three pin. Pin 3 is the up side limit pin. Pin 4 is common pin and pin 5 is the down side limit pin. Pin 3 and 4 are connected with arduino shield with 10k pullup resistor as shown in diagram and pin 4 is connected with ground. In the mechanism there are 5 pins.
The motor will rotate to move the shutter up side till the pin 3 and pin 4 are open. When pin 3 and 4 are connected via limit switch assembly the motor will be stopped. And the opposite for close. This type of programming is done in this program.
This is very useful because in normal programming we have keep the delay for motor on or off. In this case the limit switch will inform the door is open or close.
Using Time Delay
/*This program is used to open the barrier. When there is a human movement * in front of pir sensor,the output of pir sensor goes to high and * the servo motor will be activated by 90 degree speedly and * the red led will be off * and green led will be on. * After some time (4 second), it will come back to 0 degree slowly slowly and * red led will be on and green led will be off. * * This project can be used at tall plaza, garage, society gate etc. * * Note: The pir high duration can be adjustable from 5 sec to 200 sec using pot. * Also the detection range from 3 meter to 7 meter. * */ /* Hardware Requirement * Arduino Uno * USB cable for Arduino board programming * Arduino Shield for dc motor, stepper and servo * +5V 1A power supply for shield * PIR sensor * Servo motor 9g * 5mm Red LED 1 * 5mm Green LED 1 * 330 ohms Resistor 2 * PVC straw * Female to Female Jumpers 10 * * 5V dc motor with rack and pinion mechanism * * Note: In this code the gate opening and closing * time is based on time delay. */ #include <Servo.h> Servo myservo; // create servo object to control a servo int pos = 0; // variable to store the servo position const int red = A3; //define red led const int grn = A2; //define green led const int pir = A0; //pir sensor is sonnected at pin A0 int val = 0; // variable to store the sensor status (value) void setup() { pinMode(pir,INPUT); //pir output pin is connected to A0 pin of an Arduino pinMode(red, OUTPUT); pinMode(grn, OUTPUT); myservo.attach(9); // attaches the servo on pin 9 to the servo object digitalWrite(red, HIGH); // turn the LED on digitalWrite(grn, LOW); // turn the LED off for (pos = 90; pos >= 0; pos -= 1)// goes from 90 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(20); // waits 20ms for the servo to reach the position } } void loop() { val = digitalRead(pir); // read sensor value if (val == HIGH) // check if the sensor is HIGH { // goes from 0 degrees to 90 degrees in steps of 1 degree for (pos = 0; pos <= 90; pos += 1) { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(5); // waits 5ms for the servo to reach the position } digitalWrite(red, LOW); // turn the LED off digitalWrite(grn, HIGH); // turn the LED on delay(4000); //wait for 4000ms digitalWrite(red, HIGH); // turn the LED on digitalWrite(grn, LOW); // turn the LED off for (pos = 90; pos >= 0; pos -= 1)// goes from 90 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(20); // waits 15ms for the servo to reach the position } } }
Using Limit Switch
/*This program is used to open the gate when * there is a human movement in front of pir sensor, * the output of pir sensor goes to high and * the servo motor will be activated by 90 degree speedly. * After some time (10 second), it will * come back to 0 degree slowly slowly. * Note: The pir high duration can be adjustable * from 5 sec to 200 sec using pot. * Also the detection range from 3 meter to 7 meter. * * Also in this project we have used DVD drive shutter mechanism * to open or close the gate. * This project is used to open or close the garage door open * automatically. * We hase used limit switch while openin or closing the door. */ #include <Servo.h> #include <AFMotor.h> AF_DCMotor motor(1); Servo myservo; // create servo object to control a servo int pos = 0; // variable to store the servo position const int pir = A0; //pir sensor is sonnected at pin A0 const int upper = A5; //upper limit switch is sonnected at pin A4 const int lower = A4; //lower limit is sonnected at pin A5 const int red = A3; //define red led const int grn = A2; //define green led int val = 0; // variable to store the sensor status (value) int up = 0; // variable to store the upper limit switch value int lo = 0; // variable to store the lower limit switch value void setup() { pinMode(pir,INPUT); //pir output pin is connected to A0 pin of an Arduino pinMode(upper,INPUT); pinMode(lower,INPUT); pinMode(red, OUTPUT); pinMode(grn, OUTPUT); myservo.attach(9); // attaches the servo on pin 9 to the servo object digitalWrite(red, HIGH); // turn the LED on digitalWrite(grn, LOW); // turn the LED off for (pos = 90; pos >= 0; pos -= 1)// goes from 90 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' //delay(20); // waits 20ms for the servo to reach the position } //Set initial speed of the motor & stop do { lo = digitalRead(lower); // read lower switch value // Turn on motor motor.run(BACKWARD); motor.setSpeed(255); }while(lo == 1); //delay(1000); //wait for 10000ms motor.run(RELEASE); //motor.setSpeed(200); //motor.run(RELEASE); } void loop() { val = digitalRead(pir); // read sensor value up = digitalRead(upper); // read upper switch value lo = digitalRead(lower); // read lower switch value if (val == HIGH) // check if the sensor is HIGH { for (pos = 0; pos <= 90; pos += 1) // goes from 0 degrees to 90 degrees in steps of 1 degree { again: myservo.write(pos); // tell servo to go to position in variable 'pos' delay(1); // waits 5ms for the servo to reach the position } do { up = digitalRead(upper); // read lower switch value // Turn on motor motor.run(FORWARD); motor.setSpeed(255); }while(up == 1); //delay(1000); //wait for 10000ms motor.run(RELEASE); digitalWrite(red, LOW); // turn the LED off digitalWrite(grn, HIGH); // turn the LED on delay(5000); //wait for 10000ms digitalWrite(red, HIGH); // turn the LED on digitalWrite(grn, LOW); // turn the LED off for (pos = 90; pos >= 0; pos -= 1)// goes from 90 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(1); // waits 15ms for the servo to reach the position } do { motor.run(BACKWARD); motor.setSpeed(255); lo = digitalRead(lower); // read upper switch value }while(lo==1); //delay(1000); //wait for 10000ms motor.run(RELEASE); } }