LiDAR測(cè)距應(yīng)用越來(lái)越普及,例如行人檢測(cè)、車(chē)輛檢測(cè)、障礙物探測(cè)等自動(dòng)駕駛應(yīng)用,以及道閘防砸、高度計(jì)等。本項(xiàng)目以北醒TFMini-S Micro LiDAR傳感器為例,演示LiDAR傳感器與Arduino的連接,以及測(cè)距結(jié)果及顯示。本項(xiàng)目BOM如下:
Arduino Nano開(kāi)發(fā)板 1
TFMini-S LiDAR傳感器 1
JHD162A 16X2 LCD顯示器 1
10K電位器 1
面包板 1
跳線 22
基于激光的精確測(cè)距能力,LiDAR是一種精確的激光探測(cè)及測(cè)距器件。LiDAR工作原理與無(wú)線電雷達(dá)沒(méi)有區(qū)別,即由雷達(dá)發(fā)射系統(tǒng)發(fā)送一個(gè)信號(hào),經(jīng)目標(biāo)反射后被接收系統(tǒng)收集,通過(guò)測(cè)量反射光的運(yùn)行時(shí)間而確定目標(biāo)的距離。至于目標(biāo)的徑向速度,可以由反射光的多普勒頻移來(lái)確定,也可以測(cè)量?jī)蓚€(gè)或多個(gè)距離,并計(jì)算其變化率而求得速度。

?
項(xiàng)目采用的TFmini-S是一款基于TFmini升級(jí)的單點(diǎn)測(cè)距雷達(dá),盲區(qū)降低為10cm,室外測(cè)距性能進(jìn)一步提升,不同反射率的測(cè)距精度得到優(yōu)化,可以實(shí)現(xiàn)穩(wěn)定、精準(zhǔn)、高靈敏和高速的距離測(cè)量。
連接TFMini-S LiDAR傳感器與Arduino
TFMini-S LiDAR可通過(guò)UART或I2C接口與Arduino連接。本項(xiàng)目采用UART。

?
將TFMini傳感器的VCC & GND引腳連接到Arduino開(kāi)發(fā)板的5V & GND引腳,Tx、RX引腳連接到Arduino開(kāi)發(fā)板的D2 & D3引腳。

當(dāng)然,也可以把Tx and Rx連接在其他引腳上,只要支持軟件串口即可。
源代碼及例程庫(kù)
北醒官網(wǎng)、Github都提供有TFMini-S LiDAR傳感器庫(kù)文件和例程,具體如下:
include
#include "TFMini.h"
TFMini tfmini;
SoftwareSerial SerialTFMini(2, 3); //The only value that matters here is the first one, 2, Rx
void getTFminiData(int* distance, int* strength)
{
static char i = 0;
char j = 0;
int checksum = 0;
static int rx[9];
if (SerialTFMini.available())
{
rx[i] = SerialTFMini.read();
if (rx[0] != 0x59)
{
i = 0;
}
else if (i == 1 && rx[1] != 0x59)
{
i = 0;
}
else if (i == 8)
{
for (j = 0; j < 8; j++)
{
checksum += rx[j];
}
if (rx[8] == (checksum % 256))
{
*distance = rx[2] + rx[3] * 256;
*strength = rx[4] + rx[5] * 256;
}
i = 0;
}
else
{
i++;
}
}
}
void setup()
{
Serial.begin(115200); //Initialize hardware serial port (serial debug port)
while (!Serial); // wait for serial port to connect. Needed for native USB port only
Serial.println ("Initializing...");
SerialTFMini.begin(TFMINI_BAUDRATE); //Initialize the data rate for the SoftwareSerial port
tfmini.begin(&SerialTFMini); //Initialize the TF Mini sensor
}
void loop()
{
int distance = 0;
int strength = 0;
getTFminiData(&distance, &strength);
while (!distance)
{
getTFminiData(&distance, &strength);
if (distance)
{
Serial.print(distance);
Serial.print("cm\t");
Serial.print("strength: ");
Serial.println(strength);
}
}
delay(100);
}

這下,Serial monitor開(kāi)始顯示距離和信號(hào)強(qiáng)度,把手在傳感器前面來(lái)回移動(dòng)可觀察到距離在變化,盲區(qū)從30cm縮減到10cm。

?
如果希望通過(guò)LCD顯示測(cè)量結(jié)果,就需要在前述電路的面包板上加一個(gè)16x2 LCD顯示器,并通過(guò)10K電位器來(lái)調(diào)節(jié)LCD的對(duì)比度。這樣,本項(xiàng)目就實(shí)現(xiàn)了便攜式涉及,可以裝起來(lái)帶去戶外體驗(yàn)了。

#include
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#include
#include "TFMini.h"
TFMini tfmini;
SoftwareSerial SerialTFMini(2, 3); //The only value that matters here is the first one, 2, Rx
void getTFminiData(int* distance, int* strength)
{
static char i = 0;
char j = 0;
int checksum = 0;
static int rx[9];
if (SerialTFMini.available())
{
rx[i] = SerialTFMini.read();
if (rx[0] != 0x59)
{
i = 0;
}
else if (i == 1 && rx[1] != 0x59)
{
i = 0;
}
else if (i == 8)
{
for (j = 0; j < 8; j++)
{
checksum += rx[j];
}
if (rx[8] == (checksum % 256))
{
*distance = rx[2] + rx[3] * 256;
*strength = rx[4] + rx[5] * 256;
}
i = 0;
}
else
{
i++;
}
}
}
void setup()
{
lcd.begin(16, 2);
Serial.begin(115200); //Initialize hardware serial port (serial debug port)
while (!Serial); // wait for serial port to connect. Needed for native USB port only
Serial.println ("Initializing...");
SerialTFMini.begin(TFMINI_BAUDRATE); //Initialize the data rate for the SoftwareSerial port
tfmini.begin(&SerialTFMini); //Initialize the TF Mini sensor
}
void loop()
{
int distance = 0;
int strength = 0;
getTFminiData(&distance, &strength);
while (!distance)
{
getTFminiData(&distance, &strength);
if (distance)
{
Serial.print(distance);
Serial.print("cm\t");
Serial.print("strength: ");
Serial.println(strength);
lcd.setCursor(0, 0);
lcd.print("Dis: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Str: ");
lcd.print(strength);
}
}
delay(500);
lcd.clear();
}
結(jié)果顯示,TFMini-S LiDAR傳感器最大測(cè)距為12m,由于戶外障礙物比室內(nèi)少很多,測(cè)距準(zhǔn)確度高達(dá)90%。
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2573文章
54316瀏覽量
785396 -
激光測(cè)距
+關(guān)注
關(guān)注
9文章
187瀏覽量
28699 -
Arduino
+關(guān)注
關(guān)注
190文章
6514瀏覽量
195855 -
LIDAR
+關(guān)注
關(guān)注
11文章
361瀏覽量
31127
發(fā)布評(píng)論請(qǐng)先 登錄
proteus中可以用什么組合來(lái)實(shí)現(xiàn)具有激光測(cè)距傳感器的功能
baumer激光測(cè)距傳感器獨(dú)特應(yīng)用
Dimetix Ag激光測(cè)距傳感器和激光傳感器DLS-A
激光測(cè)距傳感器的應(yīng)用
【北醒TFmini-S 測(cè)距/避障激光雷達(dá)傳感器免費(fèi)試用連載】基于北醒TFmini-S 測(cè)距/避障激光雷達(dá)傳感器關(guān)鍵地區(qū)人員靠近防撞提醒裝置
【北醒TFmini-S 測(cè)距/避障激光雷達(dá)傳感器免費(fèi)試用連載】傳送帶貨物監(jiān)測(cè)
【北醒TFmini-S 測(cè)距/避障激光雷達(dá)傳感器免費(fèi)試用連載】基于FPGA平臺(tái)的YOLO-Complex點(diǎn)云數(shù)據(jù)加速
【北醒TFmini-S 測(cè)距/避障激光雷達(dá)傳感器試用連載】——上位機(jī)測(cè)試
LDS激光測(cè)距傳感器
LiDAR激光雷達(dá)技術(shù)原理及Arduino示例代碼糾錯(cuò)
如何選擇激光測(cè)距傳感器?

用TFMini LiDAR傳感器和Arduino實(shí)現(xiàn)激光測(cè)距
評(píng)論