约翰·洛夫勒带你学习使用Arduino单片机实现自动配线模拟铁路布局

最近周口一大学生在自家菜园里做的铁路模型火了,刚好在浏览外网的时候发现了国外一网友的项目,感觉非常有意思。这位网友使用Arduino单片机实现自动配线模拟铁路布局,作为程序员或者电子爱好者可以参考学习一下。

文末附项目源码。首先我们看下这位网友的演示视频。

实验所需材料:

  • 1×Arduino微控制器几乎所有的都会起作用。
  • 1×L298N双H桥电机驱动器
  • 6×公母跳线
  • 7×公母跳线
  • 1ד禁闭”轨道

将下述源码烧录到Arduino开发板中。

  1. int i=0; //Integer to store the locomotive's speed at a scale from 0 to 255.
  2. int switchLimit = 80;// Integer to store the speed limit at which the train will enter the siding.
  3. void check_n_switch(){
  4.   if(digitalRead(A0)==HIGH){//Checking if the sensor detects the train passing the sensored track.
  5.   if(i<=switchLimit){//If the speed value is greater than the set value.
  6.     switch_to_pass();//Direct the train to the siding.
  7.   }
  8.   if(i>switchLimit){//If the speed value is less than the set value.
  9.     switch_to_main();//Direct the train to the mainline.
  10.   }
  11. }
  12. }
  13. void switch_to_pass(){
  14.   digitalWrite(11,LOW);
  15.   digitalWrite(12,HIGH);
  16.   delay(200);
  17.   digitalWrite(12,LOW);
  18. }
  19. void switch_to_main(){
  20.   digitalWrite(12,LOW);
  21.   digitalWrite(11,HIGH);
  22.   digitalWrite(11,HIGH);
  23.   delay(200);
  24.   digitalWrite(11,LOW);
  25. }
  26. void setup() {
  27.   pinMode(A0,INPUT);
  28.   pinMode(9,OUTPUT);
  29.   pinMode(10,OUTPUT);
  30.   pinMode(11,OUTPUT);
  31.   pinMode(12,OUTPUT);
  32. }
  33. void loop() {
  34.       switch_to_pass();//Switching turnouts to the siding since the train will start the journey fro there.
  35.       for(i=0;i<=40;i++){//Increasing the speed of the locmotive to 40, at this speed the lights turn on but the train remains at rest.
  36.         analogWrite(9,i);
  37.         delay(10);
  38.       }
  39.      delay(1000);
  40.       for(i=40;i<=90;i++){//Increasing the speed of the locomotive to 90
  41.         analogWrite(9,i);
  42.         check_n_switch();
  43.         delay(500);
  44.       }
  45.     delay(4000);
  46.       for(i=90;i<=180;i++){//Increasing the speed of the locomotive to 180.
  47.         analogWrite(9,i);
  48.         check_n_switch();
  49.         delay(250);
  50.       }
  51.     delay(5000);
  52.       for(i=200;i!=90;i--){//Decreasing the speed of the locmotive back to 90.
  53.         analogWrite(9,i);
  54.         check_n_switch();
  55.         delay(500);
  56.       }
  57.      delay(5000);
  58.      while(digitalRead(A0)==LOW){//Wait for the train to cross the sensored track.
  59.      }
  60.      switch_to_pass();//Switch the turnouts to direct the train to the siding.
  61.    delay(10000);//Wait for the train to enter the siding.
  62.      for(i=90;i!=50;i--){//Reduce the speed of the train gradually, bringing it to a halt.
  63.         analogWrite(9,i);
  64.         delay(500);
  65.       }
  66.       delay(2000);
  67.       for(i=50;i!=0;i--){
  68.         analogWrite(9,i);
  69.         delay(62);
  70.       }
  71.       delay(5000);//Wait for 5 seconds before repeating the whole process again.
  72.     }

使用Arduino单片机实现自动配线模拟铁路布局

 

感兴趣的朋友可以试试哦~~

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!