敢来挑战自动停车场吗?


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

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

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

建造时间:30 mins +

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



物料清单:

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

● 1块电路实验板

● 2个按钮

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

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

● 跳线

● 电阻

总结:

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

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

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

第四步:硬件的跳线连

第五步:编译

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

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

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



数码管原理很简单,由7段二极管组成,这些段分别由字母a、b、c、d、e、f、g表示。我们需要做的是让数码管显示数字。

那么将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 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 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第二代开发板,因为这个开发板能提供足够的电压。

文章来源:英特尔quark开发俱乐部