以下作品由安信可社區用戶
WT_0213制作
在當下快節奏的現代生活中,電子 DIY 早已不單單局限于技術層面的探索,更是一種能為生活增添無限樂趣的獨特生活態度。參加了安信可社區第四期電子DIY | 實用至上,點亮便利生活,此前就一直想著給小朋友做一個小盒子,正好借這個機會忙里偷閑參與到活動當中,再體驗一下電子 DIY 的樂趣。
本次制作了一個稍微實用價值的指紋開鎖小盒子,旨在為日常生活中的物品收納提供更安全、便捷的解決方案。
1、設計思路
考慮到日常小物件收納時,常擔心隱私物品被他人隨意翻看,便決定打造一個通過指紋識別控制開合的小盒子。利用指紋識別的唯一性,實現精準的開鎖權限管理,讓只有授權指紋的使用者能夠打開盒子,極大提升了收納物品的安全性。這個小盒子不僅是收納小物件的容器,更是守護孩子隱私與專屬空間的好幫手,能有效避免小朋友的寶貝被隨意翻動。
2、設計理念
小朋友都有自己珍視的小玩意兒,像心愛的貼紙、秘密小紙條等,他們渴望有個安全的小天地存放這些寶貝。考慮到孩子對新奇事物的好奇心,傳統鎖具操作復雜,而指紋識別既有趣又便捷,憑借獨一無二的指紋特征,能精準識別孩子身份,為控制盒子開合提供絕佳方式。基于以上理由制作了這款指紋開鎖小盒子,給孩子打造專屬且安全的收納空間,讓他們享受自主管理物品的樂趣。
3、制作流程
硬件選型
選用之前購買的FPM383C 指紋模塊,它識別精度高、響應快,小朋友輕輕一按手指,就能快速準確采集指紋信息。
主控芯片選用對應型號,其主要負責處理 FPM383C 指紋模塊傳來的數據,并依據結果向電機驅動模塊以及其它硬件下達精準指令。
此次主控制器使用的是M61-32SU開發板,它在整個系統里扮演著重要角色。M61-32SU開發板能夠高效協調主控芯片與各個模塊間的信息交互,進一步優化系統運行的穩定性與流暢度,保障指紋識別、指令傳輸等環節有序進行。
選用一個9g 舵機來作為盒子鎖扣的直接執行者。9g 舵機體積小巧,動力輸出卻較為穩定,通過接收主控芯片的指令后,能精準控制鎖扣的開合動作。當接收到開鎖指令,舵機迅速轉動,打開鎖扣;鎖定指令下達時,舵機反向轉動,緊閉鎖扣,為小盒子的開合提供了可靠的機械動力支持。
原本計劃用 3D 打印技術制作盒子外殼,精心設計好了模型,滿心期待能打印出一個造型酷炫、結構精巧的外殼。但在準備打印時,卻發現耗材不夠,無奈之下決定改用紙盒來制作盒子外殼。挑選了厚實且有一定韌性的紙盒,雖然沒有 3D 打印外殼那樣精致,但紙盒可塑性強。
用剪刀、膠水等工具,按照預先設計好的尺寸,將紙盒裁剪、折疊、粘貼,為內部電子元件搭建了一個簡易卻實用的 “家”。使用的是帶彩色紙皮的紙盒【鞋盒 】,讓小盒子看起來好看點,也彌補了沒有 3D 打印外殼的遺憾。
4、功能呈現
當孩子把錄入指紋的手指放在 FPM383C 識別模塊上,系統瞬間就能完成識別,主控芯片通過控制 9g 舵機,迅速打開鎖扣,孩子可以輕松拿取自己的寶貝。要是不小心按錯指紋,系統立刻啟動鎖定程序,9g 舵機反向轉動緊閉鎖扣,防止其他人未經允許打開盒子。
由于盒子做的不是那么精密,透光有縫隙,導致盒子內部的彩燈透過縫隙擴散出來,不過這樣感覺反而增加了趣味性。FPM383C模塊當成功開鎖時,自動會閃爍燈光,指紋驗證通過綠色燈光,指紋不通過紅色燈光,反饋比較明顯減少了代碼工作量。
5、接線方式
6、資料參考
【外設移植】FPM383C指紋模塊+Ai-M61-32Sbbs.ai-thinker.com/forum.php?mod=viewthread&tid=43963
【外設移植】SG90舵機Ai-M61開發板bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44405
7、代碼
#include "FPM383C.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "bflb_mtimer.h"
#include "bflb_dma.h"
#include "bflb_uart.h"
#include "log.h"
#include "bflb_servo.h"
#include "bflb_gpio.h" //gpio頭文件
#include "bflb_mtimer.h" //mtimer定時器頭文件
#include "bflb_pwm_v2.h" //pwm_v2頭文件
#include "bflb_clock.h" //系統時鐘頭文件
//控制模塊LED燈顏色
uint8_t PS_BlueLEDBuf[16] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x07,0x3C,0x03,0x01,0x01,0x00,0x00,0x49};
uint8_t PS_RedLEDBuf[16] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x07,0x3C,0x02,0x04,0x04,0x02,0x00,0x50};
uint8_t PS_GreenLEDBuf[16] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x07,0x3C,0x02,0x02,0x02,0x02,0x00,0x4C};
//休眠指令-設置傳感器進入休眠模式
uint8_t PS_SleepBuf[12] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x33,0x00,0x37};
//清空指紋庫-刪除 flash 數據庫中所有指紋模板。
uint8_t PS_EmptyBuf[12] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x0D,0x00,0x11};
//取消指令-取消自動注冊模板和自動驗證指紋。如表 2-1 中加密等級設置為 0 或 1 情況下支持此功能
uint8_t PS_CancelBuf[12] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x30,0x00,0x34};
//自動注冊模板-一站式注冊指紋,包含采集指紋、生成特征、組合模板、存儲模板等功能。加密等級設置為 0 或 1 情況下支持此功能。
uint8_t PS_AutoEnrollBuf[17] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x08,0x31,'','',0x04,0x00,0x16,'',''};
// 驗證用獲取圖像-驗證指紋時,探測手指,探測到后錄入指紋圖像存于圖像緩沖區。返回確認碼表示:錄入成功、無手指等。
uint8_t PS_GetImageBuf[12] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x01,0x00,0x05};
//生成特征值-將圖像緩沖區中的原始圖像生成指紋特征文件存于模板緩沖區
uint8_t PS_GetCharBuf[13] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x04,0x02,0x01,0x00,0x08};
//搜索指紋-以模板緩沖區中的特征文件搜索整個或部分指紋庫。若搜索到,則返回頁碼。加密等級設置為 0 或 1 情況下支持
uint8_t PS_SearchBuf[17] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x08,0x04,0x01,0x00,0x00,0xFF,0xFF,0x02,0x0C};
//刪除模板-刪除 flash 數據庫中指定 ID 號開始的N 個指紋模板
uint8_t PS_DeleteBuf[16] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x07,0x0C,'','',0x00,0x01,'',''};
//設置名為fpm383c_uart的外設句柄,用來執行串口指令的發送
struct bflb_device_s *fpm383c_uart;
//指紋ID和驗證指紋的分數
uint16_t pageID,score;
//USART串口接收緩沖數組
uint8_t USART_ReceiveBuf[20];
//主循環狀態標志位
uint8_t ScanStatus = 0;
struct bflb_servo_attr servo;
// 鎖狀態
uint8_t lock_state = 0;
/**
* @brief 獲取狀態
*
* @param Timeout
*/
void FPM383C_ReceiveData(uint16_t Timeout)
{
uint8_t i = 0;
// 檢測緩沖區是否有數據
while(bflb_uart_rxavailable(fpm383c_uart) == 0 && (--Timeout))
{
bflb_mtimer_delay_ms(1);
}
// 輪詢fpm383c_uart接收到的字符
while(bflb_uart_rxavailable(fpm383c_uart) > 0)
{
bflb_mtimer_delay_ms(2);
// 獲取數據并放入緩沖數組
USART_ReceiveBuf[i++] = bflb_uart_getchar(fpm383c_uart);
if(i > 15) break;
}
}
/// @brief 初始化FPM383C指紋模塊
void FPM383C_Init(){
// 聲明 gpio句柄
struct bflb_device_s* gpio;
// FPM383C 模塊默認波特率為 57600
struct bflb_uart_config_s cfg = {
.baudrate = 57600,
.data_bits = UART_DATA_BITS_8,
.stop_bits = UART_STOP_BITS_1,
.parity = UART_PARITY_NONE,
.flow_ctrl = UART_FLOWCTRL_NONE,
.rx_fifo_threshold = 7,
.tx_fifo_threshold = 7
};
// 初始化FPM383C指紋模塊UART
gpio = bflb_device_get_by_name("gpio");
fpm383c_uart = bflb_device_get_by_name("uart1");
//將GPIO_23和GPIO_24設置為TX和RX
bflb_gpio_uart_init(gpio, GPIO_PIN_23, GPIO_UART_FUNC_UART1_TX);
bflb_gpio_uart_init(gpio, GPIO_PIN_24, GPIO_UART_FUNC_UART1_RX);
bflb_uart_init(fpm383c_uart, &cfg);
}
/// @brief USART串口發送數據
/// @param length 發送數組長度
/// @param FPM383C_DataBuf 需要發送的功能數組
void FPM383C_SendData(int length,uint8_t FPM383C_DataBuf[])
{
for(int i = 0;i
附件:fpm383c_lock.zip
https://bbs.ai-thinker.com/forum.php?mod=attachment&aid=32231
8、更新的外殼資料
保險箱3D圖用freeCAD做的
源文件:
附件:BOX.zip
審核編輯 黃宇
-
指紋識別
+關注
關注
43文章
1745瀏覽量
102895
發布評論請先 登錄
相關推薦
新品 | 智能觸摸解鎖ZW302x系列指紋模塊 支持存儲100枚指紋

來吧,拆個比亞迪!
中交興路榮獲2024中國保險科技100強
RK3568國產芯教學實驗箱:指紋識別實戰案例

BOM成本不到1.5元高速無刷電機驅動產品,怎么做到的?

基于RK3568國產處理器教學實驗箱操作案例分享:一元線性回歸實驗
直流負載箱的價格和性價比如何?
國產人工智能教學實驗箱操作案例分享:5-27 指紋識別實驗
項目分享 | 小熊派DIY一款指紋門鎖
CW32模塊使用 指紋識別傳感器

SiRider S1芯擎工業開發板測評+1.防止黑客入侵通信監控系統(PSA)
不到10塊錢,用Ai-M61-32S如何自制一個開機棒?

評論