轉(zhuǎn)速計(jì)是一種測(cè)量旋轉(zhuǎn)物體的 RPM 或角速度的裝置。它與車速表和里程表不同,因?yàn)檫@些設(shè)備處理身體的線性或切向速度,而轉(zhuǎn)速表又名“tach”處理更基本的RPM。
轉(zhuǎn)速計(jì)由一個(gè)計(jì)數(shù)器和一個(gè)計(jì)時(shí)器組成,兩者協(xié)同工作為我們的項(xiàng)目提供了 RPM.In,我們將使用我們的 Arduino和一些傳感器,我們將設(shè)置計(jì)數(shù)器和計(jì)時(shí)器,并開(kāi)發(fā)我們方便易用的轉(zhuǎn)速表。
先決條件
計(jì)數(shù)器只不過(guò)是一種設(shè)備或設(shè)置,可以計(jì)算任何某些常規(guī)發(fā)生的事件,例如在旋轉(zhuǎn)時(shí)在光盤(pán)中傳遞一個(gè)點(diǎn)。最初,計(jì)數(shù)器是使用機(jī)械布置和連桿(如齒輪,棘輪,彈簧等)建造的。
但是現(xiàn)在我們使用的計(jì)數(shù)器具有更復(fù)雜和高精度的傳感器和電子設(shè)備。定時(shí)器是一種電子元件,能夠測(cè)量事件之間的時(shí)間間隔或測(cè)量時(shí)間。
在我們的Arduino Uno中,有一些計(jì)時(shí)器不僅可以跟蹤時(shí)間,還可以保持Arduino的一些重要功能。在 Uno 中,我們有 3 個(gè)計(jì)時(shí)器,分別名為Timer0、Timer1 和 Timer2。這些計(jì)時(shí)器具有以下函數(shù)-? Timer0- 用于 Uno 函數(shù),如delay()、millis()、micros() 或 delaymicros()。
? 定時(shí)器1- 用于伺服庫(kù)的工作。
? Timer2- 用于 tone()、notone() 等函數(shù)。
除了這些功能外,這 3 個(gè)定時(shí)器還負(fù)責(zé)在 PMW 指定引腳中使用 analogWrite() 命令時(shí)生成 PWM 輸出。
中斷的概念
在Arduino
Uno中,存在一個(gè)隱藏的工具,它可以為我們?cè)L問(wèn)許多稱為計(jì)時(shí)器中斷的功能。中斷是一組事件或指令,在調(diào)用中斷設(shè)備的當(dāng)前功能時(shí)執(zhí)行,即無(wú)論您的Uno之前執(zhí)行什么代碼,但是一旦中斷稱為Arduino,就會(huì)執(zhí)行中斷中提到的指令。
現(xiàn)在,可以在用戶使用內(nèi)置的Arduino語(yǔ)法定義的特定條件下調(diào)用中斷。我們將在我們的項(xiàng)目中使用此中斷,這使我們的轉(zhuǎn)速表比網(wǎng)絡(luò)上的其他轉(zhuǎn)速表項(xiàng)目更堅(jiān)決,更精確。
電路設(shè)置
? 創(chuàng)建設(shè)置如下-
? 在要測(cè)量轉(zhuǎn)速的軸上裝有使用膠槍或電工膠帶的小磁鐵。
? 霍爾效應(yīng)傳感器前面有一個(gè)探測(cè)器,3個(gè)用于連接的引腳。
? Vcc 和 Gnd 引腳分別連接到 Arduino 的 5V 和 Gnd 引腳。傳感器的輸出引腳連接到Uno的數(shù)字引腳2以提供輸入信號(hào)。
? 所有組件都固定在安裝板上,霍爾檢測(cè)器從板上指出。
int sensor = 2; // Hall sensor at pin 2
volatile byte counts;
unsigned int rpm; //unsigned gives only positive values
unsigned long previoustime;
void count_function()
{ /*The ISR function
Called on Interrupt
Update counts*/
counts++;
}
void setup() {
Serial.begin(9600);
//Intiates Serial communications
attachInterrupt(0, count_function, RISING); //Interrupts are called on Rise
of Input
pinMode(sensor, INPUT); //Sets sensor as input
counts= 0;
rpm = 0;
previoustime = 0; //Initialise the values
}
void loop()
{
delay(1000);//Update RPM every second
detachInterrupt(0); //Interrupts are disabled
rpm = 60*1000/(millis() - previoustime)*counts;
previoustime = millis(); //Resets the clock
counts= 0; //Resets the counter
Serial.print(“RPM=”);
Serial.println(rpm); //Calculated values are displayed
attachInterrupt(0, count_function, RISING); //Counter restarted
}
了解代碼
我們的轉(zhuǎn)速表使用霍爾效應(yīng)傳感器;霍爾效應(yīng)傳感器基于霍爾效應(yīng),以其發(fā)現(xiàn)者埃德溫·霍爾命名。
霍爾效應(yīng)是當(dāng)垂直于電流引入磁場(chǎng)時(shí),在載流導(dǎo)體上產(chǎn)生電壓的現(xiàn)象。由于這種現(xiàn)象而產(chǎn)生的電壓有助于輸入信號(hào)的產(chǎn)生。如前所述,中斷將在本項(xiàng)目中使用,要調(diào)用中斷,我們必須設(shè)置一些條件。Arduino
Uno 有 2 個(gè)調(diào)用中斷的條件-
上升- 使用時(shí),每次輸入信號(hào)從低電平變?yōu)楦唠娖綍r(shí)都會(huì)調(diào)用中斷。
FALING-當(dāng)使用它時(shí),當(dāng)信號(hào)從高電平變?yōu)榈碗娖綍r(shí),將調(diào)用中斷。
我們使用了 RISING,發(fā)生的情況是,當(dāng)放置在軸或旋轉(zhuǎn)物體中的磁鐵靠近霍爾檢測(cè)器時(shí),產(chǎn)生輸入信號(hào)并調(diào)用中斷,中斷啟動(dòng)中斷服務(wù)例程 (ISR)
功能,其中包括計(jì)數(shù)值的增量,從而發(fā)生計(jì)數(shù)。
我們使用了 Arduino 的 millis() 函數(shù)和 previoustime(變量)來(lái)設(shè)置計(jì)時(shí)器。
因此,RPM 最終使用數(shù)學(xué)關(guān)系計(jì)算 -
RPM= 計(jì)數(shù)/所用時(shí)間 將毫秒轉(zhuǎn)換為分鐘并重新排列,我們得到公式= 60*1000/(millis() - 上一個(gè)時(shí)間)*計(jì)數(shù)。
延遲(1000)決定了RPM值將在屏幕上更新的時(shí)間間隔,您可以根據(jù)需要調(diào)整此延遲。
獲得的RPM值可以進(jìn)一步用于使用關(guān)系-v=(3.14DN)/60 m/s計(jì)算旋轉(zhuǎn)物體的切向速度。
RPM 的值也可用于計(jì)算旋轉(zhuǎn)輪或圓盤(pán)行進(jìn)的距離。
通過(guò)連接LCD顯示器(16 * 2)和電池,可以更好地使用該設(shè)備,而不是將值打印到串行監(jiān)視器。
-
電路圖
+關(guān)注
關(guān)注
10306文章
10715瀏覽量
526100 -
Arduino
+關(guān)注
關(guān)注
187文章
6455瀏覽量
186365 -
轉(zhuǎn)速計(jì)
+關(guān)注
關(guān)注
0文章
8瀏覽量
6844
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論