顯示具有 Sensor 標籤的文章。 顯示所有文章
顯示具有 Sensor 標籤的文章。 顯示所有文章

2014年5月11日 星期日

Arduino範例20:利用BMP085擷取大氣壓力 (換算成海拔高度)


今天要練習使用的東西是BMP085的大氣壓力量測晶片。

1. 首先介紹Sensor
BMP085是一種超低能耗的壓力感測器,採用的8-pin 陶瓷無引線晶片承載(LCC)超薄封裝,可以通過I2C匯流排直接與各種微處理器相連,因此我們接線時,除了供應電源&GND,再接上SDA和SCL兩個Pin腳,就可以把其數位的訊號帶進Arduino的板子裡了。其規格如下:

壓力範圍:30 ~ 110 kPa (海拔 9000 至-500公尺
電源電壓:1.8V ~ 3.6V
解析度為:6 Pa (0.5米)
含溫度輸出,同時也已做溫度補償
I²C介面

2. 特別說明一下I²C
I²C (Inter-Integrated Circuit)是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統用以連接低速週邊裝置而發展。I²C使用兩條雙向開放集極 (Open Drain),一條為資料線(SDA),另一條為時脈線(SCL)。I²C允許多主多僕系統,所以電氣上,SCL 和 SDA二線要透過高接電阻接於正電源。

I²C具有以下優點:
(1) 不需額外的解碼電路。
(2) 資料傳送的協定可以用軟體規劃,具有高度的彈性。
(3) 具有 I²C 匯流排無論從系統中移去或加入,都不會影響其他裝置的功能。
(4) 匯流排是兩線式的匯流排,除錯、維修變得很容易。

但是它速度不快,只適合當 IC 間溝通的橋樑。通常用在一些簡單的系統或者晶片組 IC 間溝通(命令傳遞,不是資料傳遞)的場合看到她的影子。

3. 實際接線
所以說明一下SDA與SCL之後,我們就是把這兩條線接到BMP085對應的SDA與SCL上,記得不同種類的Arduino板子,其SDA與SCL的Pin腳位置是不一樣的。接法如下圖:

4. Code
這個Code有點複雜,我後來還是直接找別人寫好的過來看 Base from bildr.blog (下面有參考資料的來源),我把我看懂之後的註解寫上去,也增加自己的理解。

2014年5月10日 星期六

Arduino範例19:利用DHT11抓取溫度和濕度

前一陣子買了許多Sensor,趁最近有個空檔,把其中幾個Sensor接起來玩玩。
這一篇要練習的就是溫濕度計DHT 11。
先介紹Sensor
DHT-11 是一個結合濕度計和測溫元件量測週遭空氣環境,並與一個高性能8位元單晶片相連接,將所量測到的溫、濕度資料拆解成為數位訊號,再由 data pin腳將資料送出。使用上很簡單,但是抓取資料時必須要特別注意時間的掌控,而且每筆資料的抓取時間間隔要1~2秒鐘,不能太快。與 DHT-22 比較,DHT-11 較不精密與準確且溫濕度量測範圍不大,雖然如此,但對於學習與熟悉溫、濕度感測卻是綽綽有餘,傳輸的距離又可長達20m以上,而且比 DHT-22 較小且便宜許多,是十分方便的簡易測試元件。

其規格如下:
1、濕度測量範圍:20~90%RH;
2、濕度測量精度:±5%RH;
3、溫度測量範圍:0~50℃
4、溫度測量精度:±2℃
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)

接線的方法十分簡單,"+"接5V,"-"接GND,data pin接上要輸入的Pin腳。有人說因為數位訊號要接高data電位,所以把data pin外接4.7歐姆電阻至Vcc。不過我曾嘗試不接那4.7k 歐姆,試出來的效果看起來沒有太大的差別。


Code方面,先下載 library ,丟到Arduino的libraries裡面,然後再開Arduino IDE,去叫<dht.h>
通訊鮑率一般都使用9600 baud,然後把(DHT.humidity)和(DHT.temperature)用Serial.print出來。

  1. #include <dht.h>   
  2.   
  3. #define dht_dpin 2 //定義訊號要從Pin A0 進來  
  4.   
  5. dht DHT;   
  6.   
  7. void setup(){   
  8. Serial.begin(9600);   
  9. delay(300);             //Let system settle   
  10. Serial.println("Humidity and temperature\n\n");   
  11. delay(700);             //Wait rest of 1000ms recommended delay before   
  12.                         //accessing sensor   
  13. }
  14.   
  15. void loop(){   
  16. DHT.read11(dht_dpin);   //去library裡面找DHT.read11  
  17. Serial.print("Humidity = ");   
  18. Serial.print(DHT.humidity);   
  19. Serial.print("% ");   
  20. Serial.print("temperature = ");   
  21. Serial.print(DHT.temperature);   
  22. Serial.println("C ");   
  23. delay(1000);            //每1000ms更新一次   
  24. }  

最後可以看到的樣子就像下面這個樣子了,對照氣象局的 (溼度70%,溫度28度)
看來溼度差了一些些,不知是不是房間裡比較乾…


2013年9月25日 星期三

Arduino範例14:測試超音波模組(HC-SR04)

這次要使用的超音波模組是HC-SR04,這是網拍上最常見的模組。
另外有人可能也會買到3 Pin的模組 (我查不到型號),那就是trig與echo同一個Pin。
回到HC-SR04來看,我找到它的型錄,了解一下它的用法:

Ultrasonic ranging module HC - SR04 provides 2cm - 400cm non-contact
measurement function, the ranging accuracy can reach to 3mm. The modules
includes ultrasonic transmitters, receiver and control circuit. The basic principle
of work:
  • Using IO trigger for at least 10us high level signal. 
  • The Module automatically sends eight 40 kHz and detect whether there is a pulse signal back.
  • IF the signal back, through high level , time of high output IO duration is the time from sending ultrasonic to returning.
  • Test distance = (high level time×velocity of sound (340M/S) / 2. 
  • When tested objects, the range of area is not less than 0.5 square meters and the plane requests as smooth as possible, otherwise ,it will affect the results of measuring.
  • Suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.

給trig pin一個10 us TTL pluse, 模組會發射8個40k Hz的聲波出去,然後量測訊號是否回來。如果有收到TTL的高電位訊號,那Echo會送出超音波來回的時間,使用者再自己計算音速換算距離。也就是「距離(cm) = 時間(us) / 2(來回) /29.1 (m/s轉換cm/us)」。其它要注意的是量測物體最好大於0.5公尺平方,而trigger時間最好大於60ms,以免trig與echo干擾。


註:什麼叫TTL pulse可參考以下網址
http://digital.ni.com/public.nsf/allkb/ACB4BD7550C4374C86256BFB0067A4BD

接線圖
接線的方法很簡單,就把 Trig 接上要送 10 us 的Pin腳。Echo 接到要收訊號的 Pin腳。



2013年5月4日 星期六

Arduino範例05:利用光敏電阻調整LED

這次要學習如何使用analogWrite()來取得外部類比輸入電壓, 
並且使用Serial.begin()和serial.println()直接在電腦看輸入電壓大小。

操作目的:
利用光敏電阻檢測外界光線的強弱,當外界光線不足時,要求LED燈亮起。

Video