Spread the love
In This Project
- We try to make prototype of Metro Trains.
- We use 8051 as CPU.
- The motion of Train is controlled by a DC Motor.
- The motion of opening and closing of door is controlled by Stepper Motor.
- LCD Display of 2*16 characters is used for displaying messages in the train.
- The stoppage time at a station is taken to be 3 seconds.
- The time taken by train between two consecutive stations is taken as 6 seconds.
Working Of Metro Train Prototype With 8051 Project:
When the power is turned on a message (“welcome “) is displayed on LCD. Then a message “Current station is New Delhi” is displayed and door is opened. After some delay the door is closed and car is started to move forward. A message “current station is New Delhi” is displayed also on LCD. After some time a message indicating the next station is displayed “next station is NOIDA SECT 15”. After some time the train stops and a message “current station is NOIDA SECT 15” is displayed. This process is continued for five stations. In the end a message “End of line” is displayed on LCD. This whole process is repeated until we turned off the power supply.
Basic Components
- Power Supply
- AT89C51 IC
- LCD (16×2)
- ULN2003
- L293D
- Stepper Motor
- DC Motor
Why we use ULN2003 and L293D ?
- ULN2003 is used to drive the Stepper Motor and L293D is used to drive the DC Motors.
- Stepper and DC motors work on 12v and controller work on 5v ,so ULN2003 and L293D convert level from 5v to 12v.
- ULN2003 and L293D also protect micro controller pin from back emf of motors.
1. Program of Metro Train Prototype with 8051
/****************************************************** www.firmcodes.com DEVELOPED BY:- FIRMWARE DEVELOPER WHAT PROGRAM DO:- Program of Metro Train Prototype on lcd ******************************************************/ #include<reg51.h> #include"delay.h" #include"motor.h" #include"lcd.h" void main() { lcd_ini(); // initilize lcd lcd_str(" WELCOME"); // display "WELCOME" on lcd delay_fv(500,500); // halt for some time while(1) { cmd(0x01); // clear lcd lcd_str(" CURRENT STATION:"); // display "CURRENT STATION" on lcd cmd(0xc0); // next line command for lcd lcd_str(" NEW DELHI"); // display "NEW DELHI" on lcd delay_fv(500,500); // hault for some time stepper_motor(); // opening and closing of door delay_fv(300,1000); // hault for some time cmd(0x01); // clear lcd lcd_str(" NEXT STATION:"); // display "NEXT STATION" on lcd cmd(0xc0); // next line command for lcd lcd_str(" NOIDA SECT.15"); // display "NOIDA SECT.15" on lcd delay_fv(500,500); // hault for some time gear_motor(1,1); // move metro train forward cmd(0x01); // clear lcd lcd_str(" CURRENT STATION:"); // display "CURRENT STATION" on lcd cmd(0xc0); // next line command for lcd lcd_str(" NOIDA SECT.15"); // display "NOIDA SECT.15" on lcd gear_motor(1,0); // stop metro train delay_fv(500,500); // hault for some time stepper_motor(); // open and close the door of metro train delay_fv(500,500); // hault for some time cmd(0x01); // clear lcd lcd_str(" NEXT STATION:"); // display "NEXT STATION" on lcd cmd(0xc0); // next line command for lcd lcd_str(" FARIDABAD"); // display "FARIDABAD" on lcd delay_fv(500,500); // hault for some time gear_motor(1,1); // move metro train forward cmd(0x01); // clear lcd lcd_str(" CURRENT STATION:"); // display "CURRENT STATION" on lcd cmd(0xc0); // next line command for lcd lcd_str(" FARIDABAD"); // display "FARIDABAD" on lcd gear_motor(1,0); // stop metro train delay_fv(500,500); // hault for some time stepper_motor(); // open and close the door of metro train delay_fv(500,500); // hault for some time cmd(0x01); lcd_str(" NEXT STATION:"); cmd(0xc0); lcd_str(" NEW TOWN"); delay_fv(500,500); gear_motor(1,1); cmd(0x01); lcd_str(" CURRENT STATION:"); cmd(0xc0); lcd_str(" NEW TOWN"); gear_motor(1,0); delay_fv(500,500); stepper_motor(); delay_fv(500,500); cmd(0x01); lcd_str(" END OF LINE"); delay_fv(500,500); } }
lcd.h
sbit rs=P1^0; sbit rw=P1^1; sbit en=P1^2; sfr lcd=0x80; void lcd_display(unsigned int x) // lcd display fuction { unsigned int i; lcd=x; rs=1; rw=0; en=1; for(i=0;i<100;i++); en=0; } void cmd(unsigned char m) // lcd command fuction { unsigned int i; lcd=m; rs=0; rw=0; en=1; for(i=0;i<10;i++); en=0; } void lcd_ini() // lcd initilize { cmd(0x38); cmd(0x0e); cmd(0x01); cmd(0x06); cmd(0x90); } void lcd_str(unsigned char *str) // display string on lcd { while(*str!='\0') { lcd_display(*str); str++; } }
motor.h
sbit a1=P2^0; sbit a2=P2^1; sbit a3=P2^2; sbit a4=P2^3; sbit m11=P2^4; sbit m12=P2^5; sbit m21=P2^6; sbit m22=P2^7; void stepper_motor() { unsigned int i; for(i=0;i<5;i++) // forward direction { a2=a3=a4=0; a1=1; delay_ff(); a1=a3=a4=0; a2=1; delay_ff(); a1=a2=a4=0; a3=1; delay_ff(); a1=a2=a3=0; a4=1; delay_ff(); } delay_fv(1000,100); for(i=0;i<5;i++) // reverse direction { a2=a3=a1=0; a4=1; delay_ff(); a1=a2=a4=0; a3=1; delay_ff(); a1=a3=a4=0; a2=1; delay_ff(); a4=a2=a3=0; a1=1; delay_ff(); } } void gear_motor( int p,int q) { if(p==1 && q==1) // forward motion of train { m11=1; m12=0; m21=1; m22=0; delay_fv(500,1000); } else if(p=0 && q==1) // train stop { m11=0; m12=0; m21=0; m22=0; delay_fv(100,1000); } else if(p=1 && q==0) // train stop { m11=0; m12=0; m21=0; m22=0; delay_fv(100,1000); } else if(p==0 && q==0) // backward motion of train { m11=0; m12=1; m21=0; m22=1; delay_fv(100,1000); } }
delay.h
void delay_ff() // full fixed delay { unsigned int i,j; for(i=0;i<110;i++) for(j=0;j<153;j++); } void delay_pf(unsigned int x) // partially variable delay { unsigned int i,j; for(i=0;i<x;i++) for(j=0;j<153;j++); } void delay_fv(unsigned int x,y) // fully variable delay { unsigned int i,j; for(i=0;i<x;i++) for(j=0;j<y;j++); }
PROTEUS File for SIMULATION(Password Of RAR file is :-firmcodes.com)
Comming Soon…