虽然定下来要做这个玩具,但一下子是完成不了这么多的功能的。那我们先做一个简单的东西,接着再迭代更新。
首先,我们先做一个简单的靶。这个靶我选用的是一个红外的接收管来做,简单来,就是用一个红外发射器作为枪,用红外接收管作为靶,如果这个靶收到红外线的信号,那么就当成是打中靶了。经过我一轮的比较及在淘宝上买买买,我最后选用了 VS1838B 这种接收管子,2毛钱一只,我一次买了50个(我都觉得自己有点...,另外,大家注意不要买HS那种,那种管子不太好用)。管子的图片大家可以在网上面找找,很容易找到的。
把这个管子连在面包板上,再连到Arduino上就可以测试了。注:因为在Fritzing上找不到这种红外管的型号,所以我用一个N型三极管代替了,只是个示意图。
VS1838B这种管子的信号引脚,在未触发的状态是处于高电平的,一但收到信号就会有电平的变化,从高到低,然后其间会高频的高高低低(这是收到信号的编码)。因此,我们的程序只要检测得到信号引脚第一次从高电平转成低电平即可触发后续的事件了。
//红外接收器的测试 v1
// written by flexitime
void setup() {
pinMode(13, OUTPUT);
pinMode(7, INPUT);
}
void loop() {
int k = digitalRead(7);
digitalWrite(13, LOW);
if (k == LOW){
digitalWrite(13,HIGH);
delay(2000);
}
}
程序很简单,我就不多介绍了。上传到Arduino并运行起来后,我们可以拿一个红外的遥控器来作为“枪”来测试一下,只要对着管子一按遥控就可以把Arduino上的小灯(PIN13)点亮2秒了。
当然,我们的靶可以不止一个的,所以我们可以在此基础上增加多几个的红外管,增加更多的靶位了。当然要注意的是,这些靶位的距离要拉开一点,因为红外的接收器都是比较灵敏的。当然,也可以作一些的围蔽,把管子包起来一部分,这样的效果会更好一些。