機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 72743|回復(fù): 203
打印 上一主題 下一主題

DIY自行車速度里程表

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2011-8-1 19:28:57 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 1五湖四海1 于 2011-8-1 20:38 編輯

   上班以后,路程比較遠(yuǎn)就很少騎車了,最近單位發(fā)了一臺自行車。周末休息時上公園騎了幾圈。回來后想如果有個速度表就好了,看看自己能騎到多少Km/h。自己是個愛制作DIY的電子愛好者,坐著想了一個設(shè)計方案。這個要有里程表有速度顯示和行駛時間顯示。這些功能只要一個功能強大的單片機就可以完成要求。
   功能上采用6個數(shù)碼管做顯示,打開后左邊三位顯示里程數(shù)單位為Km,右邊兩位顯示速度單位為Km/h。當(dāng)按下轉(zhuǎn)換按鈕后,顯示內(nèi)容切換到顯示行駛時間,左邊兩位顯示小時,右邊兩位顯示分鐘,秒信號用中間小數(shù)點閃爍顯示。再次按下轉(zhuǎn)換按鈕時,所以數(shù)碼管關(guān)閉以節(jié)省電能,再按下轉(zhuǎn)換按鈕回到顯示里程速度。
  那天坐公交車,汽車突然啟動時,這時有個加速度到勻速行駛。這讓我想起水銀開關(guān),利用水銀開關(guān)成45度角放置在垂直平面水銀開關(guān)頭朝后。這樣就可以完成加速度檢測了。如果車停止或勻速前進時水銀開關(guān)閉合。一旦汽車啟動或加速后水銀開關(guān)斷開,等到勻速后水銀開關(guān)再次閉合。只有計算出從閉合到斷開再到閉合的時間就可以知道加速度大小了。同樣原理可以制成減速檢測。我利用這一原理將加速度檢測加到了自行車速度里程表。我還利用555制作了一個1KHz的頻率信號輸入到揚聲器做提示音,如果超速時發(fā)出提示音。
  我制作這個自行車速度里程表出于自己對DIY單片機興趣愛好,我認(rèn)為在實用性上也很方便可以測速度,里程,行駛時間和加速度而且還帶揚聲器超速時提示,用起來蠻好的。
   自行車速度里程表由硬件和軟件組成,硬件是由單片機最小系統(tǒng)加六位掃描數(shù)碼管和霍爾速度傳感器構(gòu)成。軟件用C語言編寫的下面是源程序還有單片機原理圖
///////////2010.08.09.21:00///////////////////
#include<reg52.h>
#include<absacc.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define shum P1  //數(shù)碼
#define saom P2 //數(shù)碼掃描
unsigned char code xsjs[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F ,~0x00};
char disp[4]={0,0,0,0};
uchar T0count;        //T0的計數(shù)單元中讀取計數(shù)的數(shù)值
uchar timecount;       //
bit flag;  
bit d_05s=0;
uchar set=0;  
uchar sp=30;                 //標(biāo)志位
unsigned long x;
unsigned long z;
unsigned long y;
unsigned long a;
unsigned long d;
uchar hour=0,min=0,sec=0;
uchar xPos,yPos;
uchar i;
uchar she=30;
V[7];
uint j=0;
sbit P0_1=P0^1;
sbit P2_1=P2^1;
sbit P1_7=P1^7;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_6=P3^6;
sbit P3_7=P3^7;
void delay(uint k)
{
uint i,j;
for(i=0;j<k;i++)
  {
   for(j=0;j<121;j++);
  }
}
void scan_key()
{
delay(1);
if(P3_2==0)set++;
if(set>=3)set=0;
if(set==1)flag=0x55;
F0:if(P3_2==0)goto F0;
}
void display_led()//數(shù)碼管模塊
{char e,scan;
disp[0]=hour/10;
disp[1]=hour%10;
disp[2]=min/10;
disp[3]=min%10;
P0=0xff;
scan=0xdf;
for(e=0;e<4;e++)
{
shum=0xff;
saom=scan;
  if(d_05s==1)
  {if(e==1)P1_7=0;else P1_7=1;}

P1=xsjs[disp[e]];
delay(4);
scan>>=1;
}
}
void lidisp()
{
d=a/7;

P1=xsjs[y/10000];    P2=0xdf;delay(1);
P1=xsjs[y%10000/1000];     P1_7=0;     P2=0xef;      delay(1);
P1=xsjs[y%1000/100];          P2=0xf7;delay(1);
P1=xsjs[10];            P2=0xfb;delay(1);
P1=xsjs[d/10];         P2=0xfd;delay(1);
P1=xsjs[d%10];       P2=0xfe;delay(1);
}

void main(void)
{



    TMOD=0x15;                 //T0工作為16位計數(shù)器(方式1),T1工作方式為16位定時器
    TH0=0;                     //計數(shù)為65536                     
    TL0=0;                     //
    TH1=(65536-12000)/256;     //定時器采用定時4ms.  初值為12000
    TL1=(65536-12000)%256;
    TR1=1;                    //TR1=1,控制開關(guān)閉合,計數(shù)脈沖進入T1計數(shù)器,啟動定時
    TR0=1;                    //TR0=1,控制開關(guān)閉合,計數(shù)脈沖進入T1計數(shù)器,啟動計數(shù)
    ET0=1;                    //定時器0開中斷
    ET1=1;                    //定時器1開中斷
    EA=1;                     //CPU開中斷
    y=0;
while(1)
{  
if(P3_1==1)
{

   if(P3_2==0)scan_key();
   switch(set)
   {
    case 0:   lidisp(); break;
    case 1:   display_led(); break;
    case 2:   P1=0xff;  break;
    default:break;
   }

    if(flag==1)                    //
    {
        flag=0;                        //清標(biāo)志位
        z=2*(T0count*65536+TH0*256+TL0);   //取得時間寬度參數(shù)
        x=z*36/10;
        y=z+y;

    if(j==0)

    {
     V[0]=x; V[1]=x; V[2]=x; V[3]=x; V[4]=x; V[5]=x; V[6]=x;
     j++;
    }
   if(0<j<=7)
    {
     V[j]=x;
     j++;
    }
   if(j>7)
    {
     j=0;V[j]=x;
     j++;  
    }     
    a=V[0]+V[1]+V[2]+V[3]+V[4]+V[5]+V[6];


    timecount=0;
    T0count=0;
    TH0=0;
    TL0=0;
    TR0=1;         //TR0=1,控制開關(guān)閉合,計數(shù)脈沖進入T1計數(shù)器,啟動計數(shù)
    }
  }
  else
   {if(P3_6==0)she++;if(P3_5==0)she--;
    P1=xsjs[she/10];  P2=0xfd;delay(5);
    P1=xsjs[she%10];  P2=0xfe;delay(5);
   }  
}
}
//;==================================================================================
void t0() interrupt 1 using 0      //T0中斷服務(wù)
{
    T0count++;                      //P3。4口的脈沖進行計數(shù)
}
//;==================================================================================
void t1(void) interrupt 3 using 0       //T1中斷服務(wù)
{
    TH1=(65536-12000)/256;               //計數(shù)初值重裝載
    TL1=(65536-12000)%256;
    timecount++;
    if(timecount==250)
    {   sec++;
        TR0=0;
        timecount=0;
        flag=1;                              // 置標(biāo)志
    }
     if(timecount<=125)d_05s=0;
     else d_05s=1;   
     if(sec==60){min++;sec=0;}
     if(min==60){hour++;min=0;}
     if(hour==24){hour=0;}  }

點評

還做了印刷板,這個成本有點高了吧。。。  發(fā)表于 2011-9-10 20:46

評分

參與人數(shù) 3威望 +22 收起 理由
wzx^-^ + 1 \(^o^)/~,HM
tigerguo1975 + 1 贊一個!
老鷹 + 20 NB

查看全部評分

回復(fù)

使用道具 舉報

推薦
發(fā)表于 2011-8-1 19:52:56 | 只看該作者
樓主的東西真讓我羨慕

可惜我是玩純機械的,我認(rèn)為在前車輪輻條上放上個東西,檢測車輪轉(zhuǎn)動的圈數(shù)!
回復(fù) 支持 1 反對 0

使用道具 舉報

3#
 樓主| 發(fā)表于 2011-8-1 20:09:21 | 只看該作者
tntk 發(fā)表于 2011-8-1 19:52
樓主的東西真讓我羨慕

可惜我是玩純機械的,我認(rèn)為在前車輪輻條上放上個東西,檢測車輪轉(zhuǎn)動的圈數(shù)!

tntk 網(wǎng)友你好:
       你說的對,我用的是霍爾接近開關(guān)固定在車架上,在車輪輻條上安裝一個小圓磁鋼。車輪每轉(zhuǎn)一圈輸出一個信號,根據(jù)單位時間1s檢測的脈沖數(shù)就可以測出速度了。
回復(fù) 支持 反對

使用道具 舉報

4#
發(fā)表于 2011-8-1 20:12:49 | 只看該作者
準(zhǔn)不準(zhǔn)
回復(fù) 支持 反對

使用道具 舉報

5#
發(fā)表于 2011-8-1 20:15:19 | 只看該作者
呵呵呵,有點意思啊這個~~~
回復(fù) 支持 反對

使用道具 舉報

6#
 樓主| 發(fā)表于 2011-8-1 20:21:07 | 只看該作者
wrzshud 發(fā)表于 2011-8-1 20:12
準(zhǔn)不準(zhǔn)

wrzshud網(wǎng)友你好:
            這個是拿單片機內(nèi)定時器資源制作的,精密計時精度一般,用于測速精度還是挺高的。
回復(fù) 支持 反對

使用道具 舉報

7#
發(fā)表于 2011-8-1 20:26:27 | 只看該作者
直接買個自行車的碼表就可以,樓主的動手能力很強大,佩服
回復(fù) 支持 反對

使用道具 舉報

8#
 樓主| 發(fā)表于 2011-8-1 20:33:42 | 只看該作者
245037744 發(fā)表于 2011-8-1 20:26
直接買個自行車的碼表就可以,樓主的動手能力很強大,佩服

你好:
      制作過程是個享受,會遇到想不到的困難,去解決問題帶來快樂。制作完安裝在車上體驗制作帶來的樂趣。

點評

不錯  發(fā)表于 2011-8-1 21:48
回復(fù) 支持 反對

使用道具 舉報

9#
發(fā)表于 2011-8-1 21:15:10 | 只看該作者
嫉妒死了,喜歡騎車,但是不會電!嗚嗚嗚……
回復(fù) 支持 反對

使用道具 舉報

10#
發(fā)表于 2011-8-1 21:41:58 | 只看該作者
樓主搞的東西一直是我向往的,可是一直找不到門路,自己動手搞的東西很有成就感,那種感覺想想就爽
回復(fù) 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機版|Archiver|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2024-11-2 08:30 , Processed in 0.078518 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表