这个项目非常简单,只要按着教程一步步做完,你就可以建造一个有趣的停车场: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.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第二代开发板,因为这个开发板能提供足够的电压。