一早開車由高速公路在國一八堵轉台二丙線(基福公路)一路開往福隆,
在熟悉的店家租了腳踏車之後就沿著就草領隧道自行車專用道前進,
一路經過草領隧道,萊萊,繞了一圈回到福隆車站,一圈下來約20公里,
本路段起起伏伏,有些地方要下車牽行比較安全。
在車站前買了有名的福隆便當帶在路上吃,連休息吃飯加拍照,
一早開車由高速公路在國一八堵轉台二丙線(基福公路)一路開往福隆,
在熟悉的店家租了腳踏車之後就沿著就草領隧道自行車專用道前進,
一路經過草領隧道,萊萊,繞了一圈回到福隆車站,一圈下來約20公里,
本路段起起伏伏,有些地方要下車牽行比較安全。
在車站前買了有名的福隆便當帶在路上吃,連休息吃飯加拍照,
自從換了紅米note5手機,試過WIFI 80.211ac的高速連線之後,
對於中華電信VDSL DLINK數據機自帶的1T1R 802.11n的速度就開始
嫌棄了起來,於是準備找一台802.11ac的WIFI AP。
需求條件是:
1. 80.211n + 802.11ac 同步雙頻,2.4GHz+5GHz同時都能通
原本的手機撐了四年之後,相機時好時壞一陣子之後終於還是壞了,
於是開始物色新手機。
過年期間買了一台紅米5給老媽使用,感覺還不錯,
五月時剛好遇到新手機上市--紅米Note5,於是就入手了。
最近幫筆電換了一顆SSD來當作系統碟,也順手加了一條4G的DRAM,這些變動明顯有加快了整個系統的速度,
不論是開機速度還是執行程式的速度都明顯快了不少,很值得的投資。
不過SSD不比傳統硬碟,SSD用的快閃記憶體(FLASH MEMORY)是有寫入次數限制的,讀取則沒有限制,
所以使用SSD最好能做一些最佳化的設定,可以有效延長SSD的使用壽命。
前文中已經可以使用Arduino的PWM 接腳來控制4pin PC風扇,
但實務上使用會遇到一些困難,首先就如同之前討論PC風扇的文章中所說,
4pin風扇較貴,且普及率遠不如另外兩種VC(電壓控制)與傳統2pin風扇,
所以可以利用Arduino的PWM輸出接腳來控制MOSFET,進而達到
控制所有種類風扇的轉速功能。
在PC散熱風扇之研究三:PWM風扇進階研究一文中介紹過用PWM控制
PC風扇轉速,而Arduino本身就提供好幾個PWM輸出腳位,可以直接
拿來控制PC上的散熱風扇。
先看Arduino UNO的介面圖:
前面兩文介紹了兩種量轉速的方法,本文介紹另一種。
用中斷(interrupt)來進行風扇轉速量測很方便,
但也有佔用中斷的問題發生,而且對UNO這類的只有
兩個中斷的低階CPU來說問題會比較大。
所以有人專門開發了量測風扇轉速用的程式庫,可以
官網後段也有改進之後的程式:
// 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;
Arduino讀取DHT sensor資料後可以輸出到com port監視畫面,
但這樣使用上很不方便,所以底下程式將讀取資料輸出到LCD上:
/*
使用1602A I2C LCD模組及函式庫
DHT11的資料在網路上很好找,這裡不多介紹細節,
詳細規格資料在上一篇中已經有提供。
原生Arduino系統沒有支援DHT系列感測器,所以必須
先載入相關的函式庫(Library)。
早期的開發工具都必須自行找尋相關函式庫,現在
溫度與濕度量測算是環境量測中的基本,
這方面Arduino也有支援不少感測器,
其中價格合宜入手方便的就是DHT家族,
網路搜尋也有很多文章。
DHT家族共有三個成員:DHT11,DHT21,DHT22,規格表如下: