一、硬件介紹
1、產品特點
Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你開發板,雙核雙架構設計(支持 Arm Cortex-M33或Hazard3 RISC-V內核)為開發者提供靈活的性能配置。
雙核雙架構,性能自由切換
- 采用Raspberry Pi RP2350高性能微控制器,支持Arm Cortex-M33或Hazard3 RISC-V內核選擇。
- 主頻高達150MHz,配備520KB RAM和2MB Flash,可高效處理大量數據,滿足高性能計算需求。
高度集成,硬幣大小
- 尺寸僅為25mm x 20.5mm,相當于一枚硬幣大小,適合空間受限的應用場景。
- 提供 11個IO接口、BAT接口和3.3V電源接口,滿足多樣化連接需求。
鋰電池管理與監測
集成 鋰電池充電管理 和 電池電壓監測 功能,支持實時電量監控,確保設備在低電量時及時采取措施,確保持續運行。
易于編程與集成
- 支持 C/C++ 和 MicroPython 編程
2、功能引腳示意圖 / 原理圖
板載LED燈
IO25引腳控制
充電指示燈
指示充電狀態的綠色LED燈
通過三種方式指示充電狀態:
1、充滿電或未接入電源時熄滅;
2、充電時常亮;
3、USB供電,未連接鋰電池時高頻閃爍;
用戶按鍵
使用QSPI_SS引腳控制該按鈕
引腳號 | 數字口 | 模擬口 | UART | I2C | SPI | 其它 |
---|---|---|---|---|---|---|
0 | D0 | TX1 | ||||
1 | D1 | RX1 | ||||
4 | D4 | SDA | ||||
5 | D5 | SCL | ||||
8 | D8 | TX2 | ||||
9 | D9 | RX2 | ||||
16 | D16 | SPI0/MISO | ||||
18 | D18 | SPI0/SCK | ||||
19 | D19 | SPI0/MOSI | ||||
26 | D26 | A0 | ||||
27 | D27 | A1 | ||||
BAT | 鋰電池輸入接口,IO29為電池電壓檢測引腳 | |||||
GND | 接地引腳 | |||||
VCC | 該引腳接在USB電源引腳,作為輸出時電壓為USB電壓,通常為5V | |||||
3V3 | 3.3V穩壓電源輸出 |
主要原理圖:
3、外部硬件
1、雷達模塊【CEM5861G-M11】
CEM5816G-M11 是一款高靈敏度 24GHz 毫米波 FMCW 人體存在檢測雷達模塊;
本模塊主要特點是在傳統人體感應雷達的功能基礎上,同時具備檢測人體呼吸等微小幅度的運動,來判斷人體存在的功能;
模塊采用 FMCW 調制,可以同時輸出目標的距離。
模塊可選帶光敏,用戶可根據環境光大小,對光敏門限進行設置;
在光照充足時關閉雷達,光照黑暗時開啟雷達,實現照明感應的應用;
系統框架
特性:
參數 | 典型值 |
---|---|
頻率 | 24G-24.25GHz |
調制方式 | FMCW |
范圍 | 掛高安裝:掛高 3m,靜止人體檢測半徑 3m (可調), 移動檢測半徑 6m max(可調) 水平安裝:直線 7 米運動檢測,4 米存在檢測 |
供電 | 3.6 - 5.5V |
電流 | 22mA(平均值),80mA(峰值) |
輸出串口電平 | TTL(3.3V) |
檢測周期 | 實時 |
數據格式 | UART |
引腳定義
序號 | 功能 | 備注 |
---|---|---|
1 | OUT | 有人輸出高電平 3.3V,無人輸出低電平 0V |
2 | UART_TX | 串口發送 |
3 | UART_RX | 串口接收 |
4 | GND | 地 |
5 | VCC | 供電 3.6 ~ 5.5V |
數據格式說明
所有多字節參數,均采用大端格式傳輸
數據格式 | 說明 |
---|---|
幀頭(2 字節) | 上位機發送,雷達接收: 0x55 0x5A 雷達發送,上位機接收: 0x55 0xA5 |
數據長度(2 字節,高字節在前,低字節在后) | 長度 = 功能碼 + 命令碼 + 數據 + 校驗和 |
功能碼(1 字節) | 讀:0x0 寫:0x1 被動上報:0x2 主動上報:0x3 讀 / 寫命令為上位機向雷達發送指令 上報命令為雷達向上位機發送信息 |
命令碼(2 字節) | 命令碼1:為功能分類 命令碼2:表示具體功能 |
數據 | N字節 |
校驗和(1 字節) | 為校驗和之前所有數據按 uint8_t 格式相加之和的 低8位。 |
1、上位機接收到雷達發送的數據
例:55 A5 00 0E 03 81 00 00 01 00 5E 00 00 00 00 01 78 64
55 A5 00 0E 03 CMD[1] CMD[2] Data[0] ~ Data[9] SUM
幀頭(55 A5):上位機接收到雷達發送的數據;
數據長度(0x0E / 14):功能碼(1) + 命令碼(2) + 數據(10) + 校驗和(1);
功能碼(0x03):主動上報;
命令碼(81 00)
數據:檢測到運動目標,目標距離為 0.94 米,信號強度為 376
目標 ID:0x00
運動狀態:0x01(檢測到運動目標)
目標距離:0x00 0x5E(轉換成十進制為:94cm)
速度 / 方位角度 / 俯仰角度:0
目標信號強度:0x01 0x78(轉換成十進制為:376)
校驗和:0x64(轉換成十進制為:100)
2、Data 數據說明
Data[0] | 說明 |
---|---|
Data[0] | 目標ID號:8位無符號整型 |
Data[1] | 目標狀態:8位無符號整型; 0:無目標;1:表示移動;2:表示存在 |
Data[2]、Data[3] | 距離:16位無符號整型(cm) |
Data[4]、Data[5] | 速度:16位有符號整型(cm/s) |
Data[6] | 方位角度:8位有符號整型(°度) |
Data[7] | 俯仰角度:8位有符號整型(°度) |
Data[8]、Data[9] | 信號強度:16位無符號整型 |
雷達功能參數配置
16 進制收發,支持在線修改和保存參數:
波特率:115200、字寬: 8、停止位: 1、奇偶校驗: none
使用串口工具(USB-TTL)連接至模塊,并打開串口調試工具,可進行以下功能的配置;
參數功能 | 讀取指令 |
---|---|
OTA 在線升級 | 發送:55 5A 00 04 01 20 01 D5 接收:55 A5 00 04 02 20 01 21 |
恢復到默認參數 | 發送:55 5A 00 04 01 20 02 D6 接收:55 A5 00 04 02 20 02 22 |
將所有參數保存到 flash 中 | 發送:55 5A 00 04 01 20 04 D8 接收:55 A5 00 04 02 20 04 24 |
獲取軟件版本號 | 發送:55 5A 00 04 00 00 01 B4 接收:55 A5 00 11 02 00 01 DATA1~DATA13 SUM |
1米內運動檢測閾值(默認值:200) | 讀取:55 5A 00 04 00 80 03 36 設置:55 5A 00 06 01 80 03 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 03 DATA1 DATA2 SUM |
1米外運動檢測閾值(默認值:120) | 讀取:55 5A 00 04 00 80 04 37 設置:55 5A 00 06 01 80 04 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 04 DATA1 DATA2 SUM |
1米內存在檢測閾值(默認值:300) | 讀取:55 5A 00 04 00 80 09 3C 設置:55 5A 00 06 01 80 09 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 09 DATA1 DATA2 SUM |
1米外存在檢測閾值(默認值:300) | 讀取:55 5A 00 04 00 80 0A 3D 設置:55 5A 00 06 01 80 0A DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0A DATA1 DATA2 SUM |
最小檢測距離(默認值 10cm) | 讀取:55 5A 00 04 00 80 0C 3F 設置:55 5A 00 06 01 80 0C DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0C DATA1 DATA2 SUM |
運動最大檢測距離(默認值 :600cm) | 讀取:55 5A 00 04 00 80 0D 40 設置:55 5A 00 06 01 80 0D DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0D DATA1 DATA2 SUM |
存在最大檢測距離(默認值: 450cm) | 讀取:55 5A 00 04 00 80 0E 41 設置:55 5A 00 06 01 80 0E DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 0E DATA1 DATA2 SUM |
VO輸出電平維持時間(默認值: 20000ms) | 讀取:55 5A 00 04 00 80 14 47 設置:55 5A 00 06 01 80 14 DATA1 DATA2 SUM 接收:55 A5 00 06 02 80 14 DATA1 DATA2 SUM |
VO指示模式(0x00:高電平指示有人;0x01:低電平指示無人) | 讀取:55 5A 00 04 00 80 15 48 設置:55 5A 00 05 01 80 15 DATA1 SUM 接收:55 A5 00 05 02 80 15 DATA1 SUM |
停止串口發送數據 | 設置:55 5A 00 05 01 80 11 00 46 接收:55 A5 00 05 02 80 11 00 01 |
開啟串口發送數據 | 設置:55 5A 00 05 01 80 11 01 47 接收:55 A5 00 05 02 80 11 01 01 |
串口數據間隔時間(10ms / 以10倍率設置) | 讀取:55 5A 00 04 00 20 06 D9 設置:55 5A 00 06 01 20 06 DATA1 DATA2 SUM 接收:55 A5 00 06 02 20 06 DATA1 DATA2 00 |
設置雷達參數
例: 雷達的移動感應距離設置為 5 米,存在距離 4 米,感應后輸出高電平延時時間 5 秒
設置完成后,發送指令 55 5A 00 04 01 20 04 D8 進行保存,否則掉電會失效。
1、運動最大檢測距離
串口發送:55 5A 00 06 01 80 0D 01 F4 38
串口返回信息:55 A5 00 06 02 80 0D 01 F4 84,表示移動檢測距離已設置為 5 米
2、存在最大檢測距離
串口發送:55 5A 00 06 01 80 0E 01 90 D5。
串口返回信息:55 A5 00 06 02 80 0E 01 90 21,表示存在檢測距離已設置為 4 米
3、VO輸出電平維持時間
串口發送:55 5A 00 06 01 80 14 13 88 E5。
串口返回信息:55 A5 00 06 02 80 14 13 88 31,表示感應輸出高電平維持時間設置為 5 秒
上位機使用
上位機軟件下載
1、連接好模塊后,點擊串口檢測—串口選擇—打開串口,此時顯示界面會顯示距離值及狀態。
2、點擊設置界面窗口,進入參數設置界面。可對模塊的靈敏度,檢測距離,串口延時,IO 延時等做配 置,在指令框中直接輸入數值并點擊寫,即可修改模塊參數。
靈敏度設置欄中,近距離運動/存在靈 敏度對應 1 米內設置,中距離運動 / 存在靈敏度對應 1 米外設置,修改完參數后點擊保存按鈕進行保存。
3、點擊距離統計窗口,會實時顯示距離及信號強度曲線。距離統計窗口上方曲線是實時距離曲線,紅
色曲線代表靜止目標的距離,綠色曲線代表運動目標的距離。
下方窗口顯示的是實時信號強度曲線,紅色曲線代表靜止目標的能量值,綠色曲線代表運動目標的能量值
2、喇叭模塊【GSPK2307P-8R1W】
項目 | 規格 | 條件 |
---|---|---|
額定阻抗 | 8 Ohm±15% | 1kHz 1.0 V |
額定輸入功率 | 0.5W | 2.0 V |
最大輸入功率 | 1.0W | 2.0V |
最低共振頻率 | 1700±20% Hz | 1.0 V Input |
靈敏度 | 88±3dB | 0.1m 0.1W |
有效頻率范圍 | F0~20KHz | - |
諧波失真 | ≤5% at 1kHz | - |
二、硬件連接
模塊與開發板引腳之間的連接方式如下:
RP2350開發板 | VCC | GND | TX2 | RX2 | A1 | A0 |
---|---|---|---|---|---|---|
雷達模塊 | VCC | GND | RX | TX | - | - |
喇叭模塊 | - | GND | - | - | VCC | - |
LED模塊 | - | GND | - | - | - | VCC |
實物效果搭建如下:
三、項目功能實現思想
【人體運動感應警報系統】
實現效果:
實時檢測判斷人體運動 / 靜止狀態等相關信息;
處于運動時,輸出此時的距離相關信息,并在不同距離范圍內時,觸發不同的警報效果;
處于靜止時,綠色LED亮起,直到重新處于運動狀態時才熄滅;
上位機串口輸出相關數據信息;
四、功能實現主要步驟
主要相關代碼
1、LED控制部分
#define LED_Pin A0
bool ledState = false; void Led_Control(){ledState = true;Count = 0;
}...if(ledState) digitalWrite(LED_Pin, HIGH);
elsedigitalWrite(LED_Pin, LOW);
2、警報聲音控制部分
#define Sound_Pin A1
bool soundState = false;
static unsigned long Stop = 0;// 在不同范圍內 觸發不同警報聲音 1s
void Sound_Control(){if(soundState){if(dis <=200){ // 2米內tone(Sound_Pin, 1500); // 1.5 kHz}else if(dis > 200 && dis <=400){ // 2~4mtone(Sound_Pin, 1000); }else if(dis >400){ //4米外noTone(Sound_Pin);}}else{noTone(Sound_Pin);}if(millis() - Stop > 1000){Stop = millis();soundState = !soundState;}
}
3、雷達控制部分
#define COUNT 10 static byte buffer[18]; //存儲數據
static byte Count = 0;
static uint16_t dis; //距離//雷達數據處理函數
void Radar_Control(){//數據處理if(Serial2.available()){int header = Serial2.read();// 數據 18byteif(header == 0x55){int len = Serial2.readBytes(buffer,17);// 逐個字節 打印十六進制格式數據//A5 00 0E 03 81 00 00 02 00 67 00 00 00 00 25 B0 32 (17byte)for (int i = 0; i < len; i++) {if (buffer[i] < 0x10) Serial.print("0");Serial.print(buffer[i], HEX);Serial.print(" ");}Serial.println();//打印運動狀態if(buffer[7] == 0x01){Serial.print("處于運動狀態 ");if(Count>0){Count = 0;ledState = false;}}else{Serial.print("處于靜止狀態 ");Count++;//超過統計次數時 點亮LEDif(Count >= COUNT) Led_Control(); }//打印當前距離 cmdis = (buffer[8] << 8) | (buffer[9] & 0XFF);Serial.printf("當前距離為: %dcm\r\n",dis);Serial.println();Sound_Control();}}
}
完整代碼
#define LED_Pin A0
#define Sound_Pin A1
#define COUNT 10 bool ledState = false;
bool soundState = false;static unsigned long Stop = 0;
static byte buffer[18]; //存儲數據
static byte Count = 0;
static uint16_t dis; //距離void Led_Control(){ledState = true;Count = 0;
}// 在不同范圍內 觸發不同警報聲音 1s
void Sound_Control(){if(soundState){if(dis <=200){ // 2米內tone(Sound_Pin, 1500); // 1.5 kHz}else if(dis > 200 && dis <=400){ // 2~4mtone(Sound_Pin, 1000); }else if(dis >400){ //4米外noTone(Sound_Pin);}}else{noTone(Sound_Pin);}if(millis() - Stop > 1000){Stop = millis();soundState = !soundState;}
}//雷達數據處理函數
void Radar_Control(){//數據處理if(Serial2.available()){int header = Serial2.read();// 數據 18byteif(header == 0x55){int len = Serial2.readBytes(buffer,17);// 逐個字節 打印十六進制格式數據//A5 00 0E 03 81 00 00 02 00 67 00 00 00 00 25 B0 32 (17byte)for (int i = 0; i < len; i++) {if (buffer[i] < 0x10) Serial.print("0");Serial.print(buffer[i], HEX);Serial.print(" ");}Serial.println();//打印運動狀態if(buffer[7] == 0x01){Serial.print("處于運動狀態 ");if(Count>0){Count = 0;ledState = false;}}else{Serial.print("處于靜止狀態 ");Count++;//超過統計次數時 點亮LEDif(Count >= COUNT) Led_Control(); }//打印當前距離 cmdis = (buffer[8] << 8) | (buffer[9] & 0XFF);Serial.printf("當前距離為: %dcm\r\n",dis);Serial.println();Sound_Control();}}
}void setup() {//串口初始化Serial.begin(115200);Serial2.begin(115200);while (!Serial);pinMode(Sound_Pin, OUTPUT);pinMode(LED_Pin, OUTPUT);analogWrite(Sound_Pin,0);analogWrite(LED_Pin,0);}void loop() {Radar_Control();if(ledState) digitalWrite(LED_Pin, HIGH);elsedigitalWrite(LED_Pin, LOW);
}
五、實現現象
上位機串口打印距離、運動狀態等相關信息,并處于不同距離范圍內時,觸發不同的警報聲音效果;
處于靜止時,LED點亮,重新處于運動時,LED熄滅;