首页 >> 敢来挑战自动停车场吗?
敢来挑战自动停车场吗?
来源:  时间:2015-04-13
分享到:


这个项目非常简单,只要按着教程一步步做完,你就可以建造一个有趣的停车场:Galileo开发板控制自动栅栏和计数。

适用年龄(建造停车场):15+

适用年龄(玩停车场):3+

建造时间:30 mins +

先让我们开欣赏一下完成的作品:

物料清单:


● 1块Intel Galieo 开发板(建议用二代开发板;一代板也可)

1块电路实验板

2个按钮

1个伺服电机(视频中使用的是Tower Pro SG90 9g电机)

1个七段数码管(共阴极)

跳线

电阻

总结:


第一步:连接和测试七段数码管

第二步:连接和测试伺服电机

第三步:连接数码管和电机按钮

第四步:硬件的跳线连

第五步:编译

六步:将代码载入Galileo开发板完成建造停车场

下面让我们来看一下每一步的具体细节。

第一步:连接和测试七段数码管



数码管原理很简单,由7段二极管组成,这些段分别由字母abcdefg表示。我们需要做的是让数码管显示数字。

那么将2接数码管的a脚,3接数码管的b脚,以此类推,我们用M/F跳线将七段数码管与Galileo开发板连接。

然后将数码管的共极接入开发板的GND上,接线用F/F跳线,中间接一个电阻。

现在我们要测试数码管能否正常运行。把下面这段代码载入Galileo开发板,代码控制数码管显示0-9的数字,延迟时间为500ns

void setup() {            

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(8, OUTPUT);

}

void loop() {

//number 0

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 0);

     delay(500);

//number 1

     digitalWrite(2, 0);

     digitalWrite(3, 0);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 0);

     digitalWrite(7, 0);

     digitalWrite(8, 0);

     delay(500);

//number 2

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 0);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 0);

     digitalWrite(8, 1);

     delay(500);

//number 3

     digitalWrite(2, 0);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 0);

     digitalWrite(8, 1);

     delay(500);

//number 4

     digitalWrite(2, 0);

     digitalWrite(3, 0);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 0);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     delay(500);

//number 5

     digitalWrite(2, 0);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 0);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     delay(500);

//number 6

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 0);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     delay(500);

//number 7

     digitalWrite(2, 0);

     digitalWrite(3, 0);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 0);

     digitalWrite(8, 0);

     delay(500);

//number 8

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     delay(500);

//number 9

     digitalWrite(2, 0);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     delay(500);

}

如果数码管显示一切正常,那么我们可以进行下一步了。

第二步:连接和测试伺服电机



现在我们要测试伺服电机了。已连接好的数码管不用去掉。

接下来我们要做的是:

● 红色线通常用作电源线,所以我们用红色M/M跳线连接电机和电源。

黑色线通常用作地线,所以我们用黑色M/M跳线接电机和开发板的GND。

黄色线通常用作信号线,所以我们用黄色M/M跳线接电和开发板的10号针脚。

做完上面的连线后,我们可以将下面这些代码载入Galileo开发板,来测试私服电机是否可以正常工作:电机做90度的旋转。(不用担心数码管,在这个测试中,数码管不会运行)

#include <Servo.h>  

Servo myservo;

int pos = 0;

void setup()

{

myservo.attach(10);

}  

void loop()

{

for(pos= 20; pos < 115; pos += 1)

{                                

myservo.write(pos);            

delay(5);                      

}

for(pos = 115; pos >= 20; pos-=1)    

{                              

myservo.write(pos);

delay(5);                

}

}

如果伺服电机正常工作,那么我们可以进行第三步了!

第三步:连接数码管和电机按钮



不用拔掉数码管和伺服电机的接头,我们需要用它们测试按钮。让我们先按下面的方法将按钮连接好。

  • 1个按钮插入电路实验板。

  • 加入1个电阻,用跳线连接电源线、电阻和按钮。

  • 将按钮的另一接地线。

  • 将第2步连接按钮的跳线接入开发板11针脚。

重复上面4步,将另外一个按钮连接好,此按钮接12针脚。

第四步:硬件的跳线连


很好,现在你已经成功建造了停车场。你的这个停车场工具应该像上图那样连线。(图中的开发板是Galileo 一代开发板,数码管的每段二极管和开发板中间应该有电阻,不过这些到时没什么,最关键的还是线要连对。)

第五步:编译


这个是最终代码!

#include <Servo.h>

Servo myservo;

int pos = 0;

void setup() {            

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(8, OUTPUT);

pinMode(11, INPUT);

pinMode(12, INPUT);

myservo.attach(10);

}

int counter = 0;

int last_input_value1 = LOW;

int last_input_value2 = LOW;

void loop() {

    int switch_input_value1 = digitalRead(11);

    int switch_input_value2 = digitalRead(12);

    //######## INGRESSO ###############

    if(counter < 10){

    if(last_input_value1 == LOW && switch_input_value1 == HIGH) {

               counter = counter + 1;

               for(pos = 20; pos < 115;pos += 1)

                     {                              

                       myservo.write(pos);

                       //delay(15);              

                     }

               delay(3500);

               for(pos = 115; pos>=20;pos-=1)  

                     {                              

                      myservo.write(pos);          

                       //delay(15);

                     }

    }

    last_input_value1 = switch_input_value1;

    }

    //######## USCITA ###############

    if(counter > 0){

    if(last_input_value2 == LOW && switch_input_value2 == HIGH) {

               counter = counter - 1;

               for(pos = 20; pos < 115;pos += 1)

                     {                              

                       myservo.write(pos);

                       //delay(15);              

                     }

               delay(3500);

               for(pos = 115; pos>=20;pos-=1)  

                     {                              

                      myservo.write(pos);          

                       //delay(15);

                     }

               }

    last_input_value2 = switch_input_value2;

    }      

writeNumber(counter);

}

void writeNumber(int number) {

switch(number){

   case 0:

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 0);

     break;

  case 1:

      digitalWrite(2, 0);

     digitalWrite(3, 0);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 0);

     digitalWrite(7, 0);

     digitalWrite(8, 0);

     break;

  case 2:

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 0);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 0);

     digitalWrite(8, 1);

     break;

  case 3:

     digitalWrite(2, 0);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 0);

     digitalWrite(8, 1);

     break;

  case 4:

     digitalWrite(2, 0);

     digitalWrite(3, 0);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 0);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     break;

  case 5:

     digitalWrite(2, 0);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 0);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     break;

  case 6:

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 0);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     break;

  case 7:

     digitalWrite(2, 0);

     digitalWrite(3, 0);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 0);

     digitalWrite(8, 0);

     break;

  case 8:

     digitalWrite(2, 1);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     break;

  case 9:

     digitalWrite(2, 0);

     digitalWrite(3, 1);

     digitalWrite(4, 1);

     digitalWrite(5, 1);

     digitalWrite(6, 1);

     digitalWrite(7, 1);

     digitalWrite(8, 1);

     break;

 }

}

第六步:将代码载入Galileo开发板完成建造停车场


非常棒!如果你觉得还不够,你可以想视频中那样,画好停车位等等。现在你可以尽情享受你的停车场了!

备注:Galileo 第一代开发板无法满足私服电机和数码管所需的电压,所以需要加一个外部电源。所以一开始时,笔者推荐您使用Galileo第二代开发板,因为这个开发板能提供足够的电压。