Arduino 距離測量機
如果 Arduino 只是用來寫軟件那也太沒趣了,一定要用它來操作各種硬體!所以我在淘寶買了一堆不同的零件,今次就先試玩 LCM1602 IIC LCD 模塊和 US-100 超聲波距離感應器。
LCD 模塊
LCM1602是個很常見的 LCD 模塊,它可以顯示 2 行 16 個字,有背光 LCD ,還支援自定字符等操作。有了它就可以直接在 Arduino 上看見程式的輸出,不用靠電腦 console debug 了。
然而它的操作不簡單,一般來說它要 4 或 8 個 資料輸出外加 rs, rw, enable 的輸出,也就是說單是控制這個 LCD 已用上大部份 Arduino 的輸出了,不很化算。
這個 LCM1602 IIC 集成了PCF85741晶片,讓Arduino 可以透過 IIC 控制 1602 -- 這樣只要 2 個 analog IO 就可以控制 LCD 了,程式也簡化許多。
使用方法蠻簡單:安裝好相關的 library ,並在程式裡設定 LCD ,就可以跟普通 LCD 一樣操作這個 I2C LCD 了。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Setup of LCM1602 driven by PCF85741
// A4 - SDA
// A5 - SCL
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.print("Hello, World!");
}
void loop() {}
超聲波距離感應器
讀幾本 Arduino 的書也有提到 PING 超聲波距離感應器。這種感應是機械人必備的零件。US-100 是國產的類似產品,雖然價格只是 1/10 (USD30.0 vs 人仔 20) ,但 US-100 的水準不差: 2-450cm 測距、溫度補償、Serial 或 GPIO 輸出。
這個例子中我用GPIO的方法測量:
- 先發一個高電平信號到 TRIG
- 等待 ECHO 輸出高電平信號
- 高電平信號的持續時間就是超聲波發射到返回的時間,測量的距離等於 (時間 * 音速 / 2) 。
void loop() {
digitalWrite(TRIG, HIGH);
delayMicroseconds(50);
digitalWrite(TRIG, LOW);
time_echo_us = pulseIn(ECHO, HIGH);
if (time_echo_us > 1) {
len_mm = (time_echo_us * 34 / 100) / 2;
Serial.print("Dist: ");
Serial.print(len_mm, DEC);
Serial.println("mm");
}
delay(1000);
}
US-100 的文件 有詳細的資料和 Serial 輸出的用法。
Arduino 距離測量機
結合以上兩者就可做一個超聲波距離測量機,把測量結果顯示到內置的 LCD 上。看看這個超簡易的機器的實際效果:
還不錯吧?除了機械人的感應外,US-100 還可以作偵測或開關,甚至用作簡單的輸入裝置,十分好玩!
完整的代碼請移玉步到 gist。