目前日期文章:201804 (12)

瀏覽方式: 標題列表 簡短摘要

前面兩文介紹了兩種量轉速的方法,本文介紹另一種。

用中斷(interrupt)來進行風扇轉速量測很方便,

但也有佔用中斷的問題發生,而且對UNO這類的只有

兩個中斷的低階CPU來說問題會比較大。

所以有人專門開發了量測風扇轉速用的程式庫,可以

呂阿谷 發表在 痞客邦 留言(0) 人氣()

官網後段也有改進之後的程式:

  // read RPM
 int half_revolutions = 0;
 int rpm = 0;
 unsigned long lastmillis = 0;
 void setup(){
 Serial.begin(9600); 
 attachInterrupt(0, rpm_fan, FALLING);
 }
 void loop(){
 if (millis() - lastmillis == 1000){ //Uptade every one second, this will be equal to reading frecuency (Hz).
 detachInterrupt(0);//Disable interrupt when calculating
 rpm = half_revolutions * 60; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use half_revolutions * 30.
 Serial.print("RPM =\t"); //print the word "RPM" and tab.
 Serial.print(rpm); // print the rpm value.
 Serial.print("\t Hz=\t"); //print the word "Hz".
 Serial.println(half_revolutions); //print revolutions per second or Hz. And print new line or enter.
 half_revolutions = 0; // Restart the RPM counter
 lastmillis = millis(); // Uptade lasmillis
 attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
  }
 }
 // this code will be executed every time the interrupt 0 (pin2) gets low.
 void rpm_fan(){
  half_revolutions++;
 }

這個程式改進了上一個程式時基不固定的缺點,改用等待1000mS也就是一秒鐘之後統計

中斷次數並乘以60,也就是一分鐘的換算RPM值輸出到com port。

不過這樣的算法會造成RPM數值為兩倍,因為每轉一次會輸出兩個pluse,所以算式要調整除以二:

 rpm = (half_revolutions * 60)/2; 

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

利用Arduino可以偵測與控制PC風扇,

本文介紹如何讀取風扇轉速的第一種方式。

之前在PC風扇研究中有說過3pin 4pin風扇可提供

轉速偵測功能,請參考本文

現在就來實做使用Arduino來偵測風扇轉速。

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

Arduino讀取DHT sensor資料後可以輸出到com port監視畫面,

但這樣使用上很不方便,所以底下程式將讀取資料輸出到LCD上:

 

/*
使用1602A I2C LCD模組及函式庫

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

DHT11的資料在網路上很好找,這裡不多介紹細節,

詳細規格資料在上一篇中已經有提供。

原生Arduino系統沒有支援DHT系列感測器,所以必須

先載入相關的函式庫(Library)。

早期的開發工具都必須自行找尋相關函式庫,現在

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

溫度與濕度量測算是環境量測中的基本,

這方面Arduino也有支援不少感測器,

其中價格合宜入手方便的就是DHT家族,

網路搜尋也有很多文章。

DHT家族共有三個成員:DHT11,DHT21,DHT22,規格表如下:

呂阿谷 發表在 痞客邦 留言(0) 人氣()

函式庫可以提供很多功能方便使用,底下先將常用的函式庫功能與寫法放上去:

首先程式一開始需依照硬體架構include相關的函式庫,

後面才能正確驅動硬體功能。

並列式用法:

#include <LiquidCrystal.h>

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

上一篇文章提到了I2C bus好處之一就是可以多個裝置共用匯流排,

但這會產生一個問題,究竟我的I2C bus上有多少裝置?裝置的address

又在哪裡?

所以在Arduino上有人寫了一個 I2C scanner程式,可以讓你執行後

知道匯流排上有多少個裝置,然後所使用的address又是多少。

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

底下提供我自己的設備與心得,我最早玩的時候I2C bus還不算流行,

所以一開始是照著書上的範例用並聯匯流排的方式來實驗,

後來就改用I2C bus模組來節省I/O腳位。

I2C模組照片:

呂阿谷 發表在 痞客邦 留言(0) 人氣()

1602A用並聯匯流排的問題在於太耗I/O腳位了,不管是8位元還是4位元,

最起碼要用上6個IO pin腳,如果還要做其他應用的話,容易顯得捉襟見肘,

所以就有人陸續改造成串連方式使用。

我手上使用的工具書--旗標的超圖解Arduino互動設計入門就有提到使用

74LS164 shift register這顆IC來將串列資料轉成並列資料給1602來使用,

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

上一篇PART1文章中有提供了1602A的接腳圖,

1602A使用一個8位元(D0-D7)及其他控制腳位作為匯流排(bus),如下圖:

「1602A」的圖片搜尋結果

實際上使用時通常是使用4位元模式以節省I/O腳位。

底下以arduino內建的函式庫與範例作為說明,先打開範例程式hello word

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()

本篇文章要討論的是Arduino的輸出介面。

在程式開發與測試階段,我們可以使用com port作為輸出,

並在電腦視窗上顯示,如下圖可在開發軟體上叫出序列埠視窗:

 

文章標籤

呂阿谷 發表在 痞客邦 留言(0) 人氣()