Parallax 雷射測距儀
使用的雷射測具裝置是 Parallax 的 Laser Range Finder - 2m,偵測範圍是15CM~122CM解析度是1mm,詳細規格請參閱原廠說明。https://www.parallax.com/product/28044
外觀長這樣
顯示部分一樣是用 Nokia-5110-LCD Library在這裡下載。
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
Parallax 的這光學測距裝置簡稱 LRF ,是用雷射光束加上CMOS 影像感測器作為測距引擎,除了可直接輸出距離數據外,還可輸出相對位置的數據供使用者自行計算,也可以輸出捕捉到的完整圖像。
初步測試結果LRF在深色的場合幾乎100%可以正確測出距離,白色的表面錯誤率較高,透明表面非常困難超作.
LRF 的指令都是 ASCII 可在一般終端機(Terminal)操作, LRF 是Open Source 的在 Parallax的網站可下載Schematic PCB Firmware等..設計資料,不過CPU 是用 Parallax 的 Propeller P8X32A,開發環境是用 Parallax 自己的 可自行下載。
Arduino 程式碼
#include <SoftwareSerial.h>
#include <SPI.h>
#include <Adafruit_GFX.h> //LCM 定義程式!!這三個要擺一起!!!
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3); //LCD 的腳位定義
#define rxPin 10 // Pin10 軟體串列埠輸入(這要連接到 LRF 的 SOUT pin)
#define txPin 11 // Pin11 軟體串列埠輸出 (這要連接到 LRF 的 SOUT pin)
#define BUFSIZE 16 // 設定緩衝區為16 Byte
// 重新命名軟體串列埠
SoftwareSerial lrfSerial = SoftwareSerial(rxPin, txPin);
void setup()
{
display.begin(); //這是 Adafruit_PCD8544 Library 定義的
display.setContrast(60); //LCD 對比
delay(1000);
display.clearDisplay(); // 清除LCD內容
display.setTextSize(1); // 設定LCD自形大小
display.setTextColor(BLACK); //定義LCD顏色顏色
// 設定 Pin
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
//設定 Arduino Serial Monitor
Serial.begin(9600);
// 設定軟體串列埠
lrfSerial.begin(9600);
delay(2000); // 延遲2秒等 LRF啟動
lrfSerial.print('U'); // 送出"U"字元
while (lrfSerial.read() != ':'); // 等待 LRF回復 ':' 字元
delay(10); // 延遲10mS
lrfSerial.flush(); // 清除緩衝區
}
void loop()
{
lrfSerial.print('R'); //送出 " R" 字元
char lrfData[BUFSIZE]; // 資料數據緩衝區
char offset = 0; // 偏移緩衝區
lrfData[0] = 0; // 清除緩衝區
while(1)
{
if (lrfSerial.available() > 0) // 等待 LRF 寫資料
{
lrfData[offset] = lrfSerial.read(); // 將資料傳入緩衝區
if (lrfData[offset] == ':') // 如果收到字元 ":" 代表資料已經傳完,LRF 等待下一個命令
{
lrfData[offset] = 0;
break; // 跳出循環
}
offset++;
if (offset >= BUFSIZE) offset = 0;
}
}
display.display();
display.clearDisplay(); // 清除LCD內容
display.print(lrfData); // 顯示測到的距離
Serial.println(lrfData); // 送出距離資料到 Serial Monitor
Serial.flush();
}
沒有留言:
張貼留言