2015年9月17日 星期四

Arduino單元測試:I2C 16x2 LCD 和激光雷射、超音波感測及溫濕度感應


  • LCD介紹





使用標準 LCD 需要比較多的腳位,I2C LCD 可以減少我們腳位的使用。這個 I2C LCD 的特性如下:
  • 16x2 LCD,藍底白字,有背光
  • 走 I2C 介面,設備地址為 0x27
  • 5V 供電,相容於 Arduino


參考上圖,接線方式為:
  • SDA – 接 Arduino 的 Analog Pin 4 
  • SCL – 接 Arduino 的 Analog Pin 5
  • GND – 接 GND
  • VCC – 接 +5V

01//Compatible with the Arduino IDE 1.0
02//Library version:1.1
03#include
04#include
05
06LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
07
08void setup()
09{
10  lcd.init();                      // initialize the lcd
11  
12  // Print a message to the LCD.
13  lcd.backlight();
14  lcd.print("Hello, world!");
15}
16
17void loop()
18{
19}

  • DHT11溫溼度感測器介紹

DHT-11 是一個結合濕度計和測溫元件量測週遭空氣環境,並與一個高性能8位元單晶片相連接,將所量測到的溫、濕度資料拆解成為數位訊號,再由 data pin腳將資料送出。使用上很簡單,但是抓取資料時必須要特別注意時間的掌控,而且每筆資料的抓取時間間隔要1~2秒鐘,不能太快。

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


參考上圖,接線方式為:
  • DAT – 接 Arduino 的 Analog A0
  • GND – 接 GND
  • VCC – 接 +5V

  1. #include    
  2.   
  3. #define dht_dpin A0//定義訊號要從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. }  
  •  HC-SR04 超音波感測器介紹
HC-SR04 是一個超音波感測器,傳播速度會受溫度影響,溫度愈高,傳播速度愈快,可以探測的距離為 2cm-400cm,精度為 0.3 cm,感應角度為 15 度。
利用底下的公式算出物體距離(距離單位為公分,其中 timing 是測量得到的音波傳播時間):
timing / 29 / 2
超音速測距的原理,是透過arduino發出訊號給超音波模組,然後發射端就會發出超音波,當超音波打到東西再返回時,接收端收到訊號告訴arduino。arduino計算這兩者的時間差Δt,Δt再除以2,那個就是單程所費的時間。
音速的計算方式和溫度有關
c = 331.5 + 0.6 * [攝氏]
20°C的時候, c = 331.5 + 0.6 * 20 = 343.5 m/s

換算成每微秒(ųs)幾公分的話,那就是
c = 343.5 * 100 / 1000000 = 0.03435 cm/ųs

假設在20°C,arduino計算的時間差Δt為 250 ųs,那麼測距就是
250 * 0.03435 = 8.6 cm

超音波感測器主要應用在機器人或自走車避障、物體測距等。

HC-SR04 的接線方式很簡單,總共只有 4 支接腳。


參考上圖,接線方式為:
  • Echo– 接 Arduino 的Pin7
  • Trig – 接 Arduino 的Pin8
  • GND – 接 GND
  • VCC – 接 +5V
 
01// HCSR04Ultrasonic/examples/UltrasonicDemo/UltrasonicDemo.pde
02#include
03
04#define TRIGGER_PIN  8
05#define ECHO_PIN     7
06
07Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
08
09void setup()
10{
11  Serial.begin(9600);
12}
13
14void loop()
15{
16  float cmMsec, inMsec;
17  long microsec = ultrasonic.timing();
18
19  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); // 計算距離,單位: 公分
20  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); // 計算距離,單位: 英吋
21  Serial.print("MS: ");
22  Serial.print(microsec);
23  Serial.print(", CM: ");
24  Serial.print(cmMsec);
25  Serial.print(", IN: ");
26  Serial.println(inMsec);
27  delay(1000);
28}
這支程式每秒鐘會測量一次物體距離,並且將音波傳播時間(單位為 microseconds, MS)、物體距離(分成公分與英吋兩種單位,分別以 CM 和 IN 表示)

最後可以考慮溫度對音波的影響,可另行撰寫程式來進行轉換。


  • 雷射激光模組介紹


參考上圖,接線方式為:
  • S –--> 接 Arduino 的 pin13
  • "-" –-> 接 GND
  • 中間 –> 接 +5V






    參考資料
    http://coopermaa2nd.blogspot.tw/2012/09/i2c-16x2-lcd.html
    http://ming-shian.blogspot.tw/2014/05/arduino19dht11.html
    http://coopermaa2nd.blogspot.tw/2012/09/hc-sr04.html
    http://a-chien.blogspot.tw/2012/10/arduino_8748.html