機(jī)械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

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

用單片機(jī)做一個自行車車速表的過程描述,含一段代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2023-9-3 17:56:22 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
要制作一個自行車車速表,您可以使用單片機(jī)(微控制器)來測量自行車的速度并顯示在一個數(shù)字屏幕上。以下是一個簡單的概述,可以幫助您開始:

材料和硬件需求:

單片機(jī)(例如Arduino、Raspberry Pi等)
自行車速度傳感器(可以使用磁性傳感器、光電傳感器等)
數(shù)字顯示屏(可以使用7段數(shù)碼管、LCD顯示屏、OLED顯示屏等)
電源供應(yīng)(電池或電源適配器)
連接線和焊接設(shè)備(如果需要)
步驟:

連接傳感器:首先,將速度傳感器連接到單片機(jī)。具體的連接方式將取決于您選擇的傳感器類型。傳感器將幫助您測量自行車的速度。

編程單片機(jī):使用您選擇的單片機(jī)編寫代碼來讀取傳感器的數(shù)據(jù)并計(jì)算速度。您需要將傳感器的輸出數(shù)據(jù)與自行車輪胎的尺寸和轉(zhuǎn)動周期進(jìn)行關(guān)聯(lián)以計(jì)算速度。您可以使用編程語言(如Arduino IDE或Python)來實(shí)現(xiàn)此功能。

顯示速度:將計(jì)算出的速度數(shù)據(jù)顯示在數(shù)字屏幕上。如果使用7段數(shù)碼管,您需要編寫代碼以將速度數(shù)字轉(zhuǎn)換為適當(dāng)?shù)臄?shù)碼管段碼。如果使用LCD或OLED顯示屏,您可以使用適當(dāng)?shù)膸靵磔p松顯示文本或數(shù)字。

電源供應(yīng):確保您的電路有足夠的電源供應(yīng)以運(yùn)行單片機(jī)和顯示屏。

測試和校準(zhǔn):在您的自行車上安裝傳感器和顯示屏,然后進(jìn)行測試。確保速度測量準(zhǔn)確,并根據(jù)需要進(jìn)行校準(zhǔn)。


以下是一個使用Arduino編寫的簡單自行車速度計(jì)的示例代碼。這個代碼假定您使用磁性傳感器來檢測自行車輪胎的旋轉(zhuǎn),并且您已經(jīng)將磁性傳感器連接到Arduino的數(shù)字引腳2上。

const int sensorPin = 2; // 傳感器連接到Arduino的數(shù)字引腳2
const float wheelCircumference = 2.07; // 自行車輪胎的尺寸(單位:米)
unsigned long previousMillis = 0;
const long interval = 1000; // 更新速度的間隔(毫秒)

void setup() {
  Serial.begin(9600); // 初始化串口通信
  pinMode(sensorPin, INPUT);
}

void loop() {
  unsigned long currentMillis = millis();

  // 檢測傳感器狀態(tài)變化
  int sensorValue = digitalRead(sensorPin);

  static int previousSensorValue = LOW;
  if (sensorValue != previousSensorValue) {
    if (sensorValue == HIGH) {
      // 每次傳感器檢測到磁鐵時(shí),計(jì)數(shù)加一
      // 在這里,您可以根據(jù)需要進(jìn)行校準(zhǔn)
      count++;
    }
    previousSensorValue = sensorValue;
  }

  // 計(jì)算速度并顯示
  if (currentMillis - previousMillis >= interval) {
    float speed = (count * wheelCircumference) / (interval / 1000); // 計(jì)算速度(米/秒)
    Serial.print("Speed: ");
    Serial.print(speed);
    Serial.println(" m/s");
    count = 0; // 重置計(jì)數(shù)
    previousMillis = currentMillis;
  }
}


這段代碼使用了一個磁性傳感器來檢測自行車輪胎上的磁鐵,每次檢測到磁鐵時(shí),計(jì)數(shù)加一。然后,它每隔一秒鐘計(jì)算一次速度,并將其顯示在串口監(jiān)視器上。您可以根據(jù)需要進(jìn)行校準(zhǔn)以確保速度測量的準(zhǔn)確性。此代碼只是一個示例,具體的硬件和傳感器可能需要不同的配置和代碼。



評分

參與人數(shù) 1威望 +100 收起 理由
老鷹 + 100

查看全部評分

回復(fù)

使用道具 舉報(bào)

2#
發(fā)表于 2023-9-4 08:26:12 | 只看該作者
這個可以啊。
不知道汽車是怎么測的。
3#
發(fā)表于 2023-9-5 08:35:50 | 只看該作者
??你這行文風(fēng)格太像ai了
4#
發(fā)表于 2023-9-6 15:57:59 | 只看該作者
leioukupo 發(fā)表于 2023-9-5 08:35
??你這行文風(fēng)格太像ai了

我也這么覺得的。
5#
發(fā)表于 2023-9-9 08:13:50 | 只看該作者
本帖最后由 cc851 于 2023-9-9 08:16 編輯

帶藍(lán)牙的單片機(jī)放在車把上,前叉上安裝接近傳感器,車輪上均布多顆磁鐵,寫入程序連上APP搞定
方案還有很多,前輪連接編碼器、轉(zhuǎn)速計(jì)等都能實(shí)現(xiàn)這個功能。
6#
發(fā)表于 2023-9-13 09:31:07 | 只看該作者
程序可以這樣寫,用中斷計(jì)數(shù)要準(zhǔn)一點(diǎn),
/****************PCA定時(shí)器定義*********************/
code unsigned long FOSC=11059200;  //系統(tǒng)運(yùn)行頻率
#define T25Hz  FOSC / 12 / 25
  //中斷子程序  使用中斷1,寄存器組0 ,計(jì)數(shù)器模式
void count0() interrupt 1
{
   T0count++;
}
//-----------------------------------------------
//PCA定時(shí)中斷程序  接收頻率=頻率分頻/8        25HZ周期為1/25*2=0.08秒

void PCA_isr() interrupt 7
{
        static         Count1=0;          //靜態(tài)變量計(jì)數(shù)器1
        Count1++;                      //每次中斷計(jì)數(shù)器加1
    CCF0 = 0;                  //清中斷標(biāo)志
    CCAP0L = value;
    CCAP0H = value >> 8;       //更新比較值
        value += T25Hz;
        if(Count1>=2)                  //如果計(jì)數(shù)器超過25/2=12.5HZ  0.08S
        {
                ET0=0;                                   //計(jì)數(shù)器0關(guān)閉                                         
                dispcount=T0count;           //更新頻率值
                Count1=0;              //計(jì)數(shù)器清零
                T0count=0;
                ET0=1;                                    //計(jì)數(shù)器0允許
        }       
}       
void main(void)

{
        IT0 = 1;                            //設(shè)置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
        TMOD &= 0xf0;                       //設(shè)置定時(shí)器為模式0(16位自動重裝載)
        TMOD |= 0x04;                                            //定時(shí)器0工作于模式1-16位計(jì)數(shù)模式
        TH0=0Xff;
        TL0=0Xff;
        TR0=1;                                                            //計(jì)數(shù)器0開始工作
        ET0=1;                                                            //計(jì)數(shù)器0允許
    ACC = P_SW1;
    ACC &= ~(CCP_S0 | CCP_S1);          //CCP_S0=0 CCP_S1=0
    P_SW1 = ACC;                        //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
        CCON = 0;                           //初始化PCA控制寄存器
    CL = 0;                             //復(fù)位PCA寄存器
    CH = 0;
    CMOD = 0x00;                        //設(shè)置PCA時(shí)鐘源
    value = T25Hz;
    CCAP0L = value;
    CCAP0H = value >> 8;                //初始化PCA模塊0
    value += T25Hz;
    CCAPM0 = 0x49;                      //PCA模塊0為16位定時(shí)器模式
    CR = 1;                                  //PCA定時(shí)器開始工作
    EA = 1;  
}
7#
發(fā)表于 2023-9-14 17:44:51 | 只看該作者
長橋臥波 發(fā)表于 2023-9-13 09:31
程序可以這樣寫,用中斷計(jì)數(shù)要準(zhǔn)一點(diǎn),
/****************PCA定時(shí)器定義*********************/
code uns ...

都是機(jī)電雙修的牛人啊,,,,
8#
發(fā)表于 2023-9-14 17:46:06 | 只看該作者
cc851 發(fā)表于 2023-9-9 08:13
帶藍(lán)牙的單片機(jī)放在車把上,前叉上安裝接近傳感器,車輪上均布多顆磁鐵,寫入程序連上APP搞定
方案還有 ...

事實(shí)上好像的確是,手機(jī)干掉了碼表行業(yè)
9#
發(fā)表于 2023-9-15 11:44:11 | 只看該作者
已學(xué)
回復(fù)

使用道具 舉報(bào)

10#
發(fā)表于 2023-10-13 10:32:54 | 只看該作者
厲害
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

GMT+8, 2024-11-2 10:20 , Processed in 0.050574 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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