痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 7979|回復: 31

野人獻曝:GPS 超速警報器

  [複製鏈接]
發表於 2013-11-11 22:25:06 | 顯示全部樓層 |閱讀模式
本帖最後由 antlu 於 2013-11-11 10:27 PM 編輯

最近想要把機車的超速作一個警報以避免"超速罰單",老婆建議說用一個感應器裝在面板上,檢測指針位置,我又不想動到車子!!
於是想到 GPS 速度參數的地方,查了一下 $GPRMC 有一個參數有提到速度,就把他拿來用,沒想到這參數是 船的速度"節" 1節=1852公尺/小時,機車超速的限制 50公里約 27節,就將就的用吧!!

把原先的 GPS時鐘拿來改寫程式,慢慢的把想要用的功能寫出來,期間遇到了一些問題如 速度(節) 7.21 這樣三位數 17.21 這樣四位數,位數不定要抓出來作數值比較就要作調整... 我的GPS收訊又不佳,定位要老半天,而且要等到 三顆星(衛星)才能顯示速度,光是驗證功能就要等半死,還有"超速"實地驗證,更是危險!! 終於把 "實驗版"給搞出來(搞是大陸用語),接下來要"移植"到簡易電路,這樣才好用!!  於是改成 LED 7段顯示版,突發奇想,可否使用 串口大師 取代GPS送信號給玩具,結果可行ㄟ!! 好棒!! 這樣就不用 在外面等 衛星,改程式驗證也方便多了!(這期間還發現許多小問題,感謝 LEGION大師提供的軟體),除了顯示速度(節)之外,順便顯示時間,之所以沒有使用"公里/時"是因為小數點的運算怕會出問題,所以就將就的用吧!! 這程式希望可以用在 89C2051上面,因為這樣一來可以省下更多的空間....


DSC07599.JPG

DSC07590.JPG

DSC07592.JPG

DSC07593.JPG

DSC07591.JPG

時間 20:59
DSC07595.JPG

速度15.00 節
DSC07594.JPG

DSC07597.JPG

DSC07596.JPG

DSC07600.JPG

DSC07602.JPG


程式還沒有完備,有許多過去的包袱,大家參考就好!! 線路圖等成品出來再 PO

//20131111  完成 GPS顯示時間 與速度節 超速50公里(27節)ALARM

#include<reg52.h>
#define DataPort P1 // display LED segment
//#define DrivePort P3 //display LED digit
//sbit Gok_LED =P1^2;// 收到"$GPRMC,"送出LED
bit disp_flag;
bit dispt_flag;//切換顯示
bit rec;  // receive rs232 OK_flag

void DelayUs2x(unsigned char t);//us级延时函数声明
void DelayMs(unsigned char t); //ms级延时
void Display(unsigned char Num);// 把七段顯示出去

unsigned char code  segment[10]={ 0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//bit 7(a)~bit1(g) bit0 沒接
unsigned char code grid[4]={ 0xfb,0xf7,0xef,0xdf };
// 10H H 10m m, 位碼3>>分, 位碼2>>10分,位碼1>>時, 位碼0>>10時, bit3^2(10時),bit3^3(時),bit3^4(10分), bit3^5
unsigned char TempData[4];
//,把段碼的資料存到要顯示的緩衝器上面,利用類似查表的對應方式,送出至顯示器. TempData[ ] 是放置要顯示的7段資料
unsigned char CLCK[6];
unsigned char count;
//--------------------------------
unsigned char GPS_AV;//GPS 信號 A強  V弱
unsigned char CLCK[6];//GPS hr min sec store
unsigned char SPED[6];//速度 000.00
unsigned char RSPED[4];//實際速度 00.xx 節---20131106
unsigned char ALRMSPEED;//實際數度---節
unsigned char disp_tcount;//切換時間計數器
sbit BOT2=P3^2;
sbit BOT3=P3^3;
sbit BOT4=P3^4;
sbit BOT5=P3^5;
bit alrm_flag;

sbit BZ=P3^7;
//---------------------------------

void Display_Data_Operation(void)//以時間分秒為共同語言, 數字轉換成7段顯示
{
TempData[0]= segment[RSPED[0]-'0'];//10節
TempData[1]= segment[RSPED[1]-'0'];//1節
TempData[2]= segment[RSPED[2]-'0']; //.1節
TempData[3]= segment[RSPED[3]-'0'];//.01節

}       

void Display_tData_Operation(void)//以時間分秒為共同語言, 數字轉換成7段顯示
{
TempData[0]= segment[CLCK[0]];//时segment[CLCK[1]];
TempData[1]= segment[CLCK[1]];//
TempData[2]= segment[CLCK[2]]; //分
TempData[3]= segment[CLCK[3]];//

}       
//--------------------------------------------------------------------------------------------
/*void Display(unsigned char Num)// 把七段顯示出去
{
      unsigned char i;     
          for(i=0;i<Num;i++)
           {
           DataPort= TempData; // segment;//
  //      DrivePort= DrivePort & grid;      
    DrivePort= grid;
                         DelayMs(5); //0908 update 因閃爍把20改成10 >>5>>2
       }
}*/

void Display(unsigned char Num)// 把七段顯示出去
{
              unsigned char i;  
  for(i=0;i<Num;i++)
         {
                 
         }
           DataPort= TempData[0]; // segment;
     BOT2=0;
                 DelayMs(5);
           BOT2=1;
           DataPort= TempData[1]; // segment;
     BOT3=0;
                 DelayMs(5);
           BOT3=1;         
           DataPort= TempData[2]; // segment;
     BOT4=0;
                 DelayMs(5);
           BOT4=1;         
           DataPort= TempData[3]; // segment;
     BOT5=0;
                 DelayMs(5);
           BOT5=1;         
   
}

void DelayUs2x(unsigned char t)
{   
while(--t);
}

void DelayMs(unsigned char t)
{
while(t--)
{
     //大致延时1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}




//  ///////////////FROM GPS ///////////////////////////////////////////////////
unsigned char Gok;// "$GPRMC," 確認完成
unsigned char REV_DATA;//儲存RS232緩衝區的暫存變數
void Init_Timer0(void);//定时器初始化

//----- FROM GPS PROG -----

void Init_Timer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1
{
// static unsigned int count;
TH0=(65536-2010)/256;                  //重新赋值 2ms
TL0=(65536-2010)%256;

count++;
if (count==10)
  {
   count=0;
   disp_flag=1;
   disp_tcount++;
                if(disp_tcount>100)
                {
                        disp_tcount=0;
                        dispt_flag=(~dispt_flag);
                }
   }
}

void UART_Init(void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFA;               // TH1:  重装值 4800 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

void UART_SER (void) interrupt 4 //來自串口時鐘 1602 程式
{
     if(RI)                        //判断是接收中断产生
     {
          RI=0;                      //标志位清零
          REV_DATA =SBUF;                 //读入缓冲区的值
      rec=1;
//          rec_led=1;
         }
   if(TI)  //如果是发送标志位,清零
     TI=0;
}

//--20131110--------------------------------
//-------------檢查出小數點 以前的位數-------------2013 11106
unsigned char NUMSPED(void)
{
  unsigned char yt=0;

   while(SPED[yt]!='.')//內容不得為"," 一但是逗號就跳出
   {
          yt++;
          }
    return yt;
        }

//------ 把顯示質變成計算值---- 2013 11106
   void TRNUM(void)
        {
                unsigned char aa;
                aa=NUMSPED();
                switch(aa)
                {
                        case 1:
      RSPED[0]='0';
                        RSPED[1]=SPED[0];
                        RSPED[2]=SPED[2];
                        RSPED[3]=SPED[3];
                        ALRMSPEED=(RSPED[1]-'0');
      break;                       
                        case 2:
      RSPED[0]=SPED[0];
                        RSPED[1]=SPED[1];
                        RSPED[2]=SPED[3];
                        RSPED[3]=SPED[4];
                        ALRMSPEED=(RSPED[0]-'0')*10+(RSPED[1]-'0');
      break;                       

                }
        }

void CLCKFL(unsigned char CLCKCT)//填入6個時 分 秒資料
{
  unsigned char ct=0;
  rec=0;//必要的
   while(CLCKCT>ct)//儲存數量
   {
    while(rec==0);
        if(rec==1)
         {
          CLCK[ct]=REV_DATA-0x30;
      rec=0;
          ct++;
          }
        }
}



//填入6個速度資料
void SPEDFL(unsigned char SPEDCT)
{
  unsigned char yt=0;
  rec=0;//必要的
   while(SPEDCT >yt)//儲存數量
   {
    while(rec==0);
        if(rec==1)
         {
        //  SPED[yt]=REV_DATA-0x30;
                 SPED[yt]=REV_DATA;
      rec=0;
          yt++;
          }
        }
}


//0819 跳過幾個逗號

void JPDM(unsigned char DM)
{
  rec=0;
  while(DM)//>dmt
   {
    while(rec==0);
//        if (rec==1)
         {
     if(REV_DATA == ',')
         {
         rec=0;
         DM--;//dmt++
         }
         }
   }
}





unsigned char  Get_Gps(void)//改寫 gps 讀取程式 把 Gok=GPRMC_K() 取消
{
unsigned char TT;
  if(rec==1)
    {
    if(REV_DATA == '$')
     {
      rec=0;
     }
         }
         else
         {
         return 0;
         }
         while(rec==0);
     if(REV_DATA == 'G')
                  {
          rec=0;
          }
         while(rec==0);      
     if(REV_DATA == 'P')           
                {
        rec=0;
        }
         while(rec==0);        
     if(REV_DATA == 'R')//一路比較下去全部要相同 "GPVTG,"           
                  {
          rec=0;
          }
                   else
          {
                 return 0;     
           }
                     while(rec==0);        
          if(REV_DATA == 'M')//一路比較下去全部要相同 "GPRMC,"   
           {      
                        rec=0;     
           }
                     while(rec==0);      
          if(REV_DATA == 'C')//一路比較下去全部要相同 "GPRMC,"           
                   {
                 rec=0;
            }
          while(rec==0);     
          if(REV_DATA == ',')//一路比較下去全部要相同 "GPRMC,"
                   {
             rec=0;
             }
                  else
                    {
              return 0;
            }

  CLCKFL(6);//取 時分秒

    JPDM(1);
        while(rec==0);
        {
    GPS_AV = REV_DATA;
        }
   

  JPDM(5);//跳過5個逗號取速度000.00km
        SPEDFL(6);//取 速度000.00km
  TRNUM();

  TT=CLCK[0]*10+CLCK[1]+8;//時間補差格林威治對中原標準
  if(TT>23)
     TT-=24;
         CLCK[0]=TT/10;
         CLCK[1]=TT%10;

  return 1;
  
  }




//--------------------------------------------------------
// ---------  GPS MAIN PROGRAM -------------

void main(void)
{
        unsigned char STR_DIS=5;
Init_Timer0();
UART_Init();
  CLCK[0]=1;
        CLCK[1]=2;
        CLCK[2]=0;
        CLCK[3]=0;

while(1)
{
Get_Gps();
Gok=1;//----------------------------test
  if(Gok==1)
      {
                                if(dispt_flag)
                                {
                                        Display_tData_Operation ();       
                                }
                                else
                                {
       Display_Data_Operation ();//轉換相關值到顯示
           }
         }
                if(ALRMSPEED>26)
                {
                        alrm_flag=0;//-
                        BZ=0;
                }
                else
                {
                        alrm_flag=1;//*
            BZ=1;
                }               

if(disp_flag==1)
   {
     disp_flag=0;
     Display(4);
    }
   Display(4);
  }
}
//$GPRMC,115900.000,A,,N,,E,00.38,,    test pattern

評分

12

查看全部評分

發表於 2013-11-11 23:59:44 | 顯示全部樓層
這...這...這...這...這...這...真的是太強了吧!!!
n_121|
發表於 2013-11-12 00:00:23 | 顯示全部樓層
最近想要把機車的超速作一個警報以避免"超速罰單",老婆建議說用....

機車超速比較便宜啦....汽車在高速公路每次都3000元在算的...


你的製作玩具產量好快喔!!
 樓主| 發表於 2013-11-12 00:26:56 | 顯示全部樓層
imcrazy 發表於 2013-11-12 12:00 AM static/image/common/back.gif
機車超速比較便宜啦....汽車在高速公路每次都3000元在算的...

imcrazy大;
   小修改啦!!所以比較快!!
發表於 2013-11-13 21:55:15 | 顯示全部樓層
antlu大 實在太強了
 樓主| 發表於 2013-11-16 01:04:31 | 顯示全部樓層
若不顯示只要1GPS輸入 1ALARM輸出即可

DSC07610.JPG

gps速度警報.png
發表於 2013-11-21 09:41:54 | 顯示全部樓層
本帖最後由 oldhan 於 2013-11-21 09:50 AM 編輯

蜂鳴器如果是電磁式的要注意反彈電壓(與驅動繼電器類似),
相關保護電路必須納入, 否則在某些有的時候會導致當機,
蜂鳴器聲音不夠大的話可以採用兩個 port 的推挽式接法.
如果有 GPS 不就可以把各地有測速地點與速度限制加入座標裏面,
根據不同地點來做速度警報 n_006|
再加一個偵測電瓶電壓與時鐘上去就更完美了 .
 樓主| 發表於 2013-11-21 18:52:44 | 顯示全部樓層
oldhan 發表於 2013-11-21 09:41 AM static/image/common/back.gif
蜂鳴器如果是電磁式的要注意反彈電壓(與驅動繼電器類似),
相關保護電路必須納入, 否則在某些有的時候會導致 ...

OLDHAN大:
   我的東西很簡單,純粹因為兒子對於機車超速有"無形壓力"(要看心理醫師)所以做來讓他安心的,目前有時間顯示與速度顯示,電瓶電壓檢出上次經驗電壓變動得很嚴重(還無解!)要使用stc15f204EA 才有a/d 功能!!所以一切從簡,這些功能要 legion大才做的出來!!
發表於 2013-11-21 22:04:37 | 顯示全部樓層
2051 上面有 op 比較器,
只要買一個定電流二極體對電容充放電就接到比較器輸入端,
可簡易的做出 A/D.
 樓主| 發表於 2013-11-21 22:57:29 | 顯示全部樓層
oldhan 發表於 2013-11-21 10:04 PM static/image/common/back.gif
2051 上面有 op 比較器,
只要買一個定電流二極體對電容充放電就接到比較器輸入端,
可簡易的做出 A/D. ...

記得有人這樣做!! 只是我的功力還不行!! 還有 腳位不太夠用!! 定電流二極體沒用過ㄟ!! 提示一下吧!!感謝!!
發表於 2013-11-21 23:09:25 | 顯示全部樓層
antlu 發表於 2013-11-21 10:57 PM static/image/common/back.gif
記得有人這樣做!! 只是我的功力還不行!! 還有 腳位不太夠用!! 定電流二極體沒用過ㄟ!! 提示一下吧!!感謝! ...

電路我再找找看, 原理就是:
定電流對未知電容充電, 充電時間與電容量成正比,
定電流對已知電容充電, 充電電壓與充電時間成正比.
 樓主| 發表於 2013-11-21 23:15:25 | 顯示全部樓層
oldhan 發表於 2013-11-21 11:09 PM static/image/common/back.gif
電路我再找找看, 原理就是:
定電流對未知電容充電, 充電時間與電容量成正比,
定電流對已知電容充電, 充電 ...

感謝!! 剛剛查了一下 CRD 聽說網路上才有賣 價格是一般二極體的 20倍!!
發表於 2013-11-23 11:55:49 | 顯示全部樓層
antlu 發表於 2013-11-21 10:57 PM static/image/common/back.gif
記得有人這樣做!! 只是我的功力還不行!! 還有 腳位不太夠用!! 定電流二極體沒用過ㄟ!! 提示一下吧!!感謝! ...

One bit adc.jpg
這電路簡潔便宜, 但是有溫飄的問題,
想更精密可用 OP 恆流源來做.
 樓主| 發表於 2013-11-23 21:38:39 | 顯示全部樓層
oldhan 發表於 2013-11-23 11:55 AM static/image/common/back.gif
這電路簡潔便宜, 但是有溫飄的問題,
想更精密可用 OP 恆流源來做.

OLDHAN大:
  感謝!! 這充電電路經過比較之後反態達成A/D 計數 並且還要用P0^2 把電放光,是吧!!  以後有機會再試試看!!
發表於 2013-12-3 11:54:01 | 顯示全部樓層
antlu 發表於 2013-11-21 06:52 PM static/image/common/back.gif
OLDHAN大:
   我的東西很簡單,純粹因為兒子對於機車超速有"無形壓力"(要看心理醫師)所以做來讓他安心的, ...

antlu大
看了一下,即然是使用15f204ea的話,應該都能作到才是
用2051確實少了ADC的功能,
以20pin的15f204ea來說實際能用的有18個i/o
不過要加上相當多的資訊顯示的話,恐怕還是要用LCM作顯示才夠
不過15F204EA沒有實際的UART PORT,要用軟體模擬的方式會比較麻煩一點
LCM用4BIT用掉7PORT,ADC用掉1PORT,GPS用1PORT,有了GPS要不要用1302都可以,頂多又吃掉3PORT
如果要把測速地點和速限加入,那麼應該要加棵24系列的再用個3PORT,還夠用的
蜂鳴器用1個PORT,怎麼算都有剩的,
麻煩的是如果用C寫,不知道會不會超過4K這個問題比較大一點

 樓主| 發表於 2013-12-3 22:49:13 | 顯示全部樓層
legion 發表於 2013-12-3 11:54 AM static/image/common/back.gif
antlu大
看了一下,即然是使用15f204ea的話,應該都能作到才是
用2051確實少了ADC的功能,

legion大:
    感謝提供相關經驗談,這一陣子實測發現一個比較大的問題是,GPS定位時間過長,騎車外出買麵包,回到家都還沒定位完成,只顯示時間而已,聽說抓三顆星才可以定到位置,可能一個衛星就可以顯示時間了,現在要探討一下冷開機 暖開機 的定義,機車一熄火就沒電問題也要想一想,GPS耗電150mA短時間的供電維持收信應該沒問題,內外電源就會增加複雜性,持續思考中,電壓表的功能就算了,超複雜沒有老闆的壓力應該是做不出來的.
發表於 2013-12-4 00:01:10 | 顯示全部樓層
antlu 發表於 2013-12-3 10:49 PM static/image/common/back.gif
legion大:
    感謝提供相關經驗談,這一陣子實測發現一個比較大的問題是,GPS定位時間過長,騎車外出買麵包 ...

antlu大
基本上GPS要有3棵衛星信號時才能作定位,就3角定位
而每棵衛星內的信號本身都帶有時間,所以1棵就能跑出時間
如果在意冷暖開機問題,就變成要內置充電電池來作待機電源
至於如果想要即時就跑出速度值的話,又沒辦法從移動物本身取得
想了一下有簡單與複雜的,複雜的是用3軸加速計和3軸陀螺儀去作計算
便能取得目前物體的移動速度及角度,而且是即時的和衛星就無關了
至於簡單的倒是想過用紅外線作對地面反射取得計算,但這個僅為想像倒是沒較實際推論
最簡單的便是由衛星取得,但跑出位置的時間就是一個問題了
用3軸加速計和3軸陀螺儀去作計算這是可行的,但難度上就高了一點,都是運算問題了
之前買了20幾棵的15F204EA和15F104EA都還沒用,找個時間也來玩玩看
 樓主| 發表於 2013-12-5 02:20:52 | 顯示全部樓層
legion 發表於 2013-12-4 12:01 AM static/image/common/back.gif
antlu大
基本上GPS要有3棵衛星信號時才能作定位,就3角定位
而每棵衛星內的信號本身都帶有時間,所以1棵就 ...

legion大:
   期待您的大作!!  我是望塵莫及!!
發表於 2013-12-5 09:58:20 | 顯示全部樓層
本帖最後由 fatzeros 於 2013-12-5 09:59 AM 編輯
antlu 發表於 2013-12-5 02:20 AM static/image/common/back.gif
legion大:
   期待您的大作!!  我是望塵莫及!!


阿乾兄,
要不要從另一個方向來思考,
從機車上的車速線下手,
這方面較大的應用在汽車上的hud(head up display)抬頭顯示器,
由車輛的車速線產生的訊號,可能為方波或是其他的,
再解析成一般我們所知的車速,
一般來說,先行找出,車輛的車速線,汽車的難找,機車的一般都在前輪輪軸上,
碟盤的另一邊,有一個套環有接線出來的那個,這條線會接入至機車的車速表上,
找出車速表的上的訊號處,使用示波器或是頻率計來測試,(這裡比較困難,看其他痞兄有沒有其他作法)
將所得的數據轉換成我們所熟知的車速,再顯示出來就行了。
對了,阿乾兄,公子的車種廠牌型號是什麼?
要不然,大條的花下去,換台有液晶面板的機車就行了!

可以google以下:
https://www.google.com.tw/search ... iw=1131&bih=928
https://www.google.com.tw/search ... ..6.0.0._rQtOEIlqnA

第二個鍵結,有逢甲大學的論文:www.fcu.edu.tw/wSite/public/Attachment/f1254446655529.pdf
可攜式速度感測系統設計與製作計 - 逢甲大學
發表於 2013-12-5 10:00:44 | 顯示全部樓層
另一個方向,使用手機來達成:
https://www.google.com.tw/search ... 2.9.872.CrBzIZcJgg0
發表於 2013-12-5 13:39:09 | 顯示全部樓層
因為現在的汽車的儀表上里程都應是數位顯示了
所以一般抬頭顯示都是由車上的數位信號作擷取顯示
至於機車也是有數位和傳統機械軸兩種,但不論那一種都會去動到那個儀表面板
逢甲那個論文是用3軸加速計去作的,但如果不配合3軸陀螺儀去作運算的話
車輛在有傾斜角度上下坡時都會不同的答案,不過論文就不必用到這種地步了
可以參考的是一般外面有賣一種單車用碼表,有分為有線和無線兩種,
利用輪軸計算便能取得時速,將他的訊息資料取出也許會更方便一些
至少成不成都不會破壞或改變原車的完整
但信號取出會比較麻煩一點吧

 樓主| 發表於 2013-12-5 20:33:18 | 顯示全部樓層
fatzeros 發表於 2013-12-5 09:58 AM static/image/common/back.gif
阿乾兄,
要不要從另一個方向來思考,
從機車上的車速線下手,

F大:
   感謝提供寶貴經驗,我做這個只是GPS的應用啦!! 其實車速最準確的應該是有線直接檢出方式,如同LEGION大所提不去動到車子的相關儀表為原則, 把車子前方加一個"風扇"也可以檢出他的轉速來,只是風扇的位置會影響到準確性,還有溫差也可以檢出速度(飛機)... 因為機車上沒有"時鐘"用GPS還可以抓出時間一間兩顧,若是像LEGION做得有座標那麼帶一張地圖就可以"雲遊四海"不迷路了!!
 樓主| 發表於 2013-12-5 20:35:09 | 顯示全部樓層
legion 發表於 2013-12-5 01:39 PM static/image/common/back.gif
因為現在的汽車的儀表上里程都應是數位顯示了
所以一般抬頭顯示都是由車上的數位信號作擷取顯示
至於機車也 ...

LEGION大:
   我就是不想動到我的光羊V2 125的儀表板...
發表於 2013-12-5 22:37:29 | 顯示全部樓層
antlu 發表於 2013-12-5 08:33 PM static/image/common/back.gif
F大:
   感謝提供寶貴經驗,我做這個只是GPS的應用啦!! 其實車速最準確的應該是有線直接檢出方式,如同LEGI ...

用風扇是神奇了一點,外部干擾的因素過大了一點
簡易又不破壞的情形下,想了下可以採用在輪框上固定磁鐵類
然後在支架上使用開關型霍爾感應元件就能取得輪軸轉一圈的週期
有了輪軸一圈的長度加上每一圈產生的週期時間值
就能計算出距離和時速,算客難的方式參考看看
但好處是完全不會動到車子本身的結構
發表於 2013-12-6 18:12:54 | 顯示全部樓層
antlu 發表於 2013-12-5 08:35 PM static/image/common/back.gif
LEGION大:
   我就是不想動到我的光羊V2 125的儀表板...

阿乾兄,我又挖到了一些資料,
這次是專門玩機車的網站,
一樣,要帳密,請line我!

自製LED數字型轉速表
http://forum.jorsindo.com/forum. ... &fromuid=281859

自製數字型LED時速表,非囀速表
http://forum.jorsindo.com/forum. ... &fromuid=281859

自製LCD 16x2文字型液晶顯示轉速表
http://forum.jorsindo.com/forum. ... &fromuid=281859

其中,第二個就是使用磁簧開關和強磁鐵作成的時速表,
雖然,是組語寫的,但是可以自行編譯。

以下是說明:
;時速表(輪胎轉一圈的長度)/(幾個磁鐵)*3600s/100000cm))/幾us感應一次=幾km/h)
;輪胎轉一圈的長度請坐上車腳離地實際往前移動一圈,要注意胎壓有到常用的值
;兩個感應顯示一次,但只取一個計算

感謝原作者!
發表於 2013-12-7 01:24:18 | 顯示全部樓層
速度越快,風速也快,壓力也越大
 樓主| 發表於 2013-12-7 01:56:45 | 顯示全部樓層
fatzeros 發表於 2013-12-6 06:12 PM static/image/common/back.gif
阿乾兄,我又挖到了一些資料,
這次是專門玩機車的網站,
一樣,要帳密,請line我!

F大:
   我不考慮入侵機車內部電路!! 以免騎車到半路等待救援!!
 樓主| 發表於 2013-12-7 01:59:05 | 顯示全部樓層
太平天狗 發表於 2013-12-7 01:24 AM static/image/common/back.gif
速度越快,風速也快,壓力也越大

風速~車速!! 有困難!!
發表於 2013-12-9 10:36:27 | 顯示全部樓層
antlu 發表於 2013-12-7 01:56 AM static/image/common/back.gif
F大:
   我不考慮入侵機車內部電路!! 以免騎車到半路等待救援!!

阿乾兄:
根據我粗淺的電路分析,
自製數字型LED時速表,非囀速表,
這個電路的原理是使用裝在車輪框上的強磁鐵,(原作者是騎檔車,所以裝在齒盤上)
於車輪轉動時對於磁簧開關進磁力開關的動作,
當車速愈高,開關的時間間隔愈低,
然後將開關的訊號輸出至一個pc817的光隅隔離訊號後,
再輸入至mcu內進行車速的計算,
其計算的公式:
時速表(輪胎轉一圈的長度)/(幾個磁鐵)*3600s/100000cm))/幾us感應一次=幾km/h)
然後再把得出的值輸出至七段顯示器上,
並沒有對車子的電路進行任何的改裝喔!
如果要說有的話,應該只是接出dc 12v正電及接地線,
輸出供應整個電路的運作吧!
假如你使用電池供應整個電路運作的話,就什麼都沒動到了。
 樓主| 發表於 2013-12-9 11:07:16 | 顯示全部樓層
fatzeros 發表於 2013-12-9 10:36 AM static/image/common/back.gif
阿乾兄:
根據我粗淺的電路分析,
自製數字型LED時速表,非囀速表,

F大:
   這個原理大致上我清楚,但是在於機械的安裝上面比較困難些!!機車的感應器固定也是一大挑戰!! 可以考慮看看,GPS 有GPS的缺點以及價格昂貴等問題,起始收訊不佳的現象,好處是攜帶方便!! 時間 方向 方位 高度都可以利用的上...
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-4-28 05:30 PM , Processed in 0.112530 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.