最近開始在做一個運動會上用的電控計時,就是在攝像頭前放一個計時器,然后發令槍一響就開始計時。當運動員跑過終點線時,只要看一下過線時的時間就可以了。發令端用聲音傳感器加紅外開關加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。這樣打印出來的圖和真實的尺寸是一樣的。最后重要提醒,千外不要把整張熱轉印紙放激光打印機里去打印,我就這樣把單位的打印機給卡死了。要像下面這樣,在中間貼一塊打印。
打印完后將熱轉印紙倒復在覆銅板上,然后拿電熨斗壓在上面,小心移動,熨斗溫度要高點,不然很難整個轉印上去。轉印后的覆銅板忘記拍照了......如果有什么斷線的用記號筆補一下,就是用那種寫著防水的記號筆。然后放在三氯化鐵溶液里泡著,具體濃度多少我也搞不清楚,反正就用水調了一些。等銅化掉后就成了,看看我做的:
![](http://www.userform1.com/UpFiles/up/0/47301941731974.jpg)
然后拿轉頭轉孔。
我之所以搞了兩天,主要原因是電路畫錯了,結果導致做好的板廢了,這里提醒一定要保證圖的正確性后在開始做。
還有今天下午發生的,焊接的時候不小心把輸出電源和接地連起來了(不小的,因為vcc與gnd走線太近了,所以提醒vcc與gnd走線要分開。在通電之前先用萬用表測一下,正常的vcc與gnd之間應該有幾千歐的阻值。),導致我的arduino nano直接冒煙掛掉了。害的我只能把廢掉的挖出來在裝上一個新的......欲哭無淚啊......
最后終于完工的電控計時電路板:
上圖是發令端和計時端的電路。其實還有問題,就是用9V的電池來驅動會出現無法無線發射,只能用arduino nano連著電源來供電,那9V電池接口也是白做了,不過我在網上剛淘了兩塊9V的鋰電,不知道行不行。