<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> Arduino >> 瀏覽文章

        運動會電控計時

        作者:未知   來源:互聯網   點擊數:  更新時間:2014年07月31日   【字體:

        最近開始在做一個運動會上用的電控計時,就是在攝像頭前放一個計時器,然后發令槍一響就開始計時。當運動員跑過終點線時,只要看一下過線時的時間就可以了。發令端用聲音傳感器加紅外開關加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的鋰電,不知道行不行。
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮