**************** U P D A T E 16th january 2018 ****************
Due to a lot of demand of these boards i have to include a step for the ready ones i have made for this project.
So if you want a professional looking for your project go to last step and see the boards.
you can find more info about these boards at http://www.usbekits.com
***********************************************************************************************************************
Hi there.
Me and 2 friends created this elevator for the grandmother of one of my friends.
George knows very well the metal construction and it is his job.
Bagios is electrician and i am electronic engineer. And voila!
The main board contains the necessary i/o optoisolation and the arduino mini pcb.
3 floors-3 buttons on each floor-3 sensors on each floor-3 buttons and an alarm inside the elevator and 2 terminal safety switches are included for the main installation.
The motor is 230vac and the main board drives it via 2 relay outside the main board to avoid noises from contact relays.But before the current reach the motor it passes through 2 terminal switches in the upper and lower construction.
SIx optoisolated inputs and 2 outputs
arduino mini
a pcb mini siren
a bridge rectification stage so to operate with ac power.
To program the mini you need a usb to serial module.
/*
Elevator project with arduino pro mini 328 5v 8mhz - This is a simple elevator project using a single-phase ac motor. - There are 3 floors and a button is placed in every floor and are connected in paraller with 3 button inside the elevator. - 3 proximity switches are attached on every floor to indicate where the elevator is and to stop it. - A buzzer is connected to warn for movement or -alarm stop inside the elevator is attached directly to the reset button. code by:Fanis Katmadas site:oramasolutions.com [email protected] */
const int floor1 = 7;//proximity switch attached on floor1 const int floor2 = 6;//proximity switch attached on floor2 const int floor3 = 5;//proximity switch attached on floor3 const int callbutton1 = 4;//push button on the floor1 and in paraller the button for floor 1 in the elevator const int callbutton2 = 3;//push button on the floor2 and in paraller the button for floor 2 in the elevator const int callbutton3 = 2;//push button on the floor3 and in paraller the button for floor 3 in the elevator const int relayup = 12;//the relay that drives up the elevator const int relaydown=10;//the relay that drives down the elevator const int buzzer = 11;//a buzzer warning movement or alarm stop const int poweron=13;
// variables will change: int callelevator1 = 0; // variable for reading the pushbutton status of the floors int callelevator2 = 0; // variable for reading the pushbutton status of the floors int callelevator3 = 0; // variable for reading the pushbutton status of the floors int floor1sense = 0; // variable for reading the proximity status of the floors int floor2sense = 0; // variable for reading the proximity status of the floors int floor3sense = 0; // variable for reading the proximity status of the floors
// the setup routine runs once when you press reset: void setup()
{ // initialize the digital pins inputs. pinMode(floor1, INPUT); pinMode(floor2, INPUT); pinMode(floor3, INPUT); pinMode(callbutton1, INPUT); pinMode(callbutton2, INPUT); pinMode(callbutton3, INPUT);
// initialize the digital pins outputs. pinMode(relayup, OUTPUT); pinMode(relaydown, OUTPUT); pinMode(buzzer, OUTPUT); }
// the loop routine runs over and over again forever: void loop()
{ digitalWrite(poweron, HIGH); // read the state of the pushbuttons value: callelevator1 = digitalRead(callbutton1); callelevator2 = digitalRead(callbutton2); callelevator3 = digitalRead(callbutton3); // read the state of the proximity value: floor1sense = digitalRead(floor1); floor2sense = digitalRead(floor2); floor3sense = digitalRead(floor3);
//start by checking the 3 call buttons. //we read the input and if we have signal we wait for the release before starting. //after the release a pause of a second is added before beggining the motion of the elevator if (callelevator1 == HIGH)// if the floor 1 call button is pressed { delay(200);//software debounce of the button while(callelevator1 == HIGH) { callelevator1 = digitalRead(callbutton1);//check the value of the button again delay(10);//keep running smoothly }//wait for the relese of the button to continue delay(1000); floor1function();//go to the floor 1 fuction of the elevator } else if(callelevator2 == HIGH)// if the floor 2 call button is pressed { delay(200); //software debounce of the button while(callelevator2 == HIGH) { callelevator2 = digitalRead(callbutton2);//check the value of the button again delay(10);//keep running smoothly }//wait for the relese of the button to continue delay(1000); floor2function();//go to the floor 2 fuction of the elevator } else if(callelevator3 == HIGH)// if the floor 1 call button is pressed { delay(200); //software debounce of the button while(callelevator3 == HIGH) { callelevator3 = digitalRead(callbutton3);//check the value of the button again delay(10);//keep running smoothly }//wait for the relese of the button to continue delay(1000); floor3function();//go to the floor 3 fuction of the elevator } digitalWrite(relayup, LOW); //keep the relay for up motion inactive digitalWrite(relaydown, LOW); //keep the relay for down motion inactive digitalWrite(buzzer, LOW);//keep the buzzer quite delay(10);//a few delay just to keep running smoothly }
void floor1function() { if(floor1sense != HIGH) // check the proximity sensor of the first floor to see if the elevator is there {//if the elevator isn't there call it while( floor1sense==LOW) //check that the proximity of the first floor is low //the motor begins and stops when the appropriate floor proximity give the signal { digitalWrite(relaydown, HIGH);//drive the elevator down digitalWrite(buzzer, HIGH);//some noise in the mic floor1sense = digitalRead(floor1); delay(10);//a few delay to keep running the routine smoothly } } }
void floor2function() {
if(floor3sense == HIGH) // check the proximity sensor of the third floor to see if the elevator is there {//if the elevator is there call it while( floor2sense==LOW)//the motor begins and stops when the appropriate floor proximity give the signal { digitalWrite(relaydown, HIGH);//drive the elevator down digitalWrite(buzzer, HIGH);//some noise in the mic floor2sense = digitalRead(floor2); delay(10);//a few delay to keep running the routine smoothly } } else if(floor1sense == HIGH) // check the proximity sensor of the first floor to see if the elevator is there {//if the elevator is there call it while( floor2sense==LOW)//the motor begins and stops when the appropriate floor proximity give the signal { digitalWrite(relayup, HIGH);//drive the elevator up digitalWrite(buzzer, HIGH);//some noise in the mic floor2sense = digitalRead(floor2); delay(10);//a few delay to keep running the routine smoothly }
} }
void floor3function() { if(floor2sense == HIGH || floor1sense == HIGH) // check the proximity sensor of the first and second floor to see if the elevator is there {//if the elevator is there call it while( floor3sense==LOW) //the motor begins and stops when the appropriate floor proximity give the signal { digitalWrite(relayup, HIGH);//drive the elevator up digitalWrite(buzzer, HIGH);//some noise in the mic floor3sense = digitalRead(floor3); delay(10);//a few delay to keep running the routine smoothly }
} }
Because my English isn't good enough i don't know some words in English..
Here in Greece we call "palago" these types of motors.
They have 2 buttons for up and down operation.
I attach some images to understand THE type of motor exactly...
The buttons are now replaced by the high power relays.
These motors have build in metal wire that isn't so strong as the metal chain is...
For this we decide to replace it with the chain...
Some times if you tie very strong the connectors of the metal wire maybe one day will be cut
These motors have build in multipliers that reduces the speed of motion too.
As you notice there is an alarm switch inside the elevator.
This is to hardware reset the board and stop the elevator.
There are 2 contacts inside that switch. N.C. and N.O.
The N.O. contact is used for the hardware reset.
This contact drives a 12 volt relay near the controller board that applies the ground to the reset pin via its N.O. contact.To the reset pin a pull up resistor is attached too 5.6K.With these we prevent some noises from the motor cables to travel through the ground to the board and prevent unwanted reseting.
To prevent some noises from the motor there is a second power supply for the high power relays.
The High power relays are driven through 2 relays near the controller board.
The ground of the output relays are separated from the main controller ground to prevent noises.
The N.C. contact inside the alarm switch is applying the power of the second power supply to the high power relay's coils to direct cutting the ac power.
Due to your votes our project finished 2nd in the home automation contest!
Thanks a lot!
for any help please leave a comment and i will reply.
Hi all,
thanks a lot for you interest in my instructable.
I have decided a tear ago to build this project in a more professional and compact pcb.
With these boards i was able to help many people that were unable to build their own project.
This board have additional 2 more inputs and one more output.
You can use this board as a plc too.
You can have a look at my site for the presentation too:
http://www.usbekits.com/arduino-nano-plc-board.htm...
for any questions i am here to respond!
Best regards
Fanis Katmadas