最近开始在做一个运动会上用的电控计时,就是在摄像头前放一个计时器,然后发令枪一响就开始计时。当运动员跑过终点线时,只要看一下过线时的时间就可以了。发令端用声音传感器加红外开关加apc220无线模块。接受端用一个8位的数码管。下面是接收端的一些代码:
//电控计时时间显示端,串口接收数据,接收到's'开始计时,接收到'o'停止计时,接收到'b'数据清零。
//已经开始计时后再接收's'无用,只有接收到'b'或'o'后再接收's'才开始计时。
//使用DFRobot电子积木互动媒体SPI接口8位LED静态扫描显示器
unsigned long time;
unsigned long time1;
const int latchPin = 8;
const int clockPin = 3;
const int dataPin = 9;
int i=0;
int j=0;
char inchar;
int bitToSet=0;
byte Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
void setup(){
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
Serial.println("reset");
}
void loop(){
time = millis();
if (Serial.available() > 0) {
inchar=Serial.read();
if (inchar=='s'&&j==0)
{
time1=millis();
j=1;
}
if (inchar=='o')
{
j=0;
}
if(inchar=='b')
{
bitToSet=0;
j=0;
for(i=0;i<9;i++)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, Tab[bitToSet]);
}
digitalWrite(latchPin, HIGH);
}
}
if(j==1)
{
time-=time1;
for(i=0;i<9;i++)
{
digitalWrite(latchPin, LOW);
if(i==0)
bitToSet=time;
if(i==1)
bitToSet=(time0-time)/10;
if(i==2)
bitToSet=(time00-time0)/100;
if(i==3)
bitToSet=(time000-time00)/1000;
if(i==4)
bitToSet=(time0000-time000)/10000;
if(i==5)
bitToSet=(time00000-time0000)/100000;
if(i>5) //前三位数字始终是零
bitToSet=0;
shiftOut(dataPin, clockPin, MSBFIRST, Tab[bitToSet]);
}
digitalWrite(latchPin, HIGH);
delay(20);
}
}
用了热转印法制作了电路板,花了我2天的时间才把电路板做出来,现在说说期间的经验所得。
首先电路图原来想用Protel来画的,无奈10年没有用这个软件了,看了都晕。后来想到了用Flash画图来画电路,发现真的很好用。首先可以创建很多影片剪辑,然后将一些基本原件的针脚都按照比例一个一个画好,我是10个像素表示1mm。然后可以来绘制电路板了,直接可以使用影片剪辑里的基本原件,走线也按照等比例来绘制,即1mm用10个像素来表示。最后再电路外面绘制一个方框,记住方框的长宽。然后复制整个方框里的线路,将其粘贴到word里,然后更改图片大小,用Flash里方框的像素除以10表示mm。这样打印出来的图和真实的尺寸是一样的。最后重要提醒,千外不要把整张热转印纸放激光打印机里去打印,我就这样把单位的打印机给卡死了。要像下面这样,在中间贴一块打印。
打印完后将热转印纸倒复在覆铜板上,然后拿电熨斗压在上面,小心移动,熨斗温度要高点,不然很难整个转印上去。转印后的覆铜板忘记拍照了......如果有什么断线的用记号笔补一下,就是用那种写着防水的记号笔。然后放在三氯化铁溶液里泡着,具体浓度多少我也搞不清楚,反正就用水调了一些。等铜化掉后就成了,看看我做的:

然后拿转头转孔。
我之所以搞了两天,主要原因是电路画错了,结果导致做好的板废了,这里提醒一定要保证图的正确性后在开始做。
还有今天下午发生的,焊接的时候不小心把输出电源和接地连起来了(不小的,因为vcc与gnd走线太近了,所以提醒vcc与gnd走线要分开。在通电之前先用万用表测一下,正常的vcc与gnd之间应该有几千欧的阻值。),导致我的arduino nano直接冒烟挂掉了。害的我只能把废掉的挖出来在装上一个新的......欲哭无泪啊......
最后终于完工的电控计时电路板:
上图是发令端和计时端的电路。其实还有问题,就是用9V的电池来驱动会出现无法无线发射,只能用arduino nano连着电源来供电,那9V电池接口也是白做了,不过我在网上刚淘了两块9V的锂电,不知道行不行。