0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32模块使用 指纹识别传感器

CW32生态社区 ? 来源:CW32生态社区 ? 作者:CW32生态社区 ? 2024-09-18 15:15 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

光学指纹识别传感器采用了国内著名指纹识别芯片公司杭州晟元芯片技术有限公司(Synochip) 的 AS608 指纹识别芯片。芯片内置 DSP 运算单元,集成了指纹识别算法,能高效快速采集 图像并识别指纹特征。模块配备了串口、USB 通讯接口,用户无需研究复杂的图像处理及及指纹识别算法,只需通过简单的串口、USB 按照通讯协议便可控制模块。本模块可应用于各种考勤机、保险箱柜、指纹门禁系统、指纹锁等场合。

01模块来源

模块实物展示:

wKgZombqfg6AXiSrAAAbbFpICR882.webp



资料下载链接:https://pan.baidu.com/s/1mCDdiU5nwtooxmHiPfYTFA
资料提取码:kj8o

02 规格参数

工作电压:3.0-3.6V

工作电流:30~60mA

指纹存容量:300 枚(ID:0~299)

认假率:<0.001%

搜索时间:<0.3(S)

控制方式:串口或USB

管脚数量:8 Pin(2.54mm间距排针

以上信息见厂家资料文件

03移植过程

我们的目标是将例程移植至CW32F030C8T6开发板上【实现添加指纹、删除指纹和搜索指纹的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。

3.1查看资料

系统内设有一个72K字节的图像缓冲区与二个512bytes大小的特征文件缓冲区,名字分别称为:lmageBuffer,CharBuffer1和CharBuffer2。用户可以通过指令读写任意一个缓冲区。CharBufferl或 CharBuffer2既可以用于存放普通特征文件也可以用于存放模板特征文件。通过UART 口上传或下载图像时为了加快速度,只用到像素字节的高4位,即将两个像素合成一个字节传送。通过USB口则是整8位像素。

指纹库容量根据挂接的FLASH容量不同而改变,系统会自动判别。指纹模板按照序号存放,序号定义为:0—(N-1)(N为指纹库容量)。用户只能根据序号访问指纹库内容。

这里我们使用的是串口控制方式,USB的接口我们可以悬空不接。

wKgaombqfg-AZR-kAACFDDPdsko05.webp

1脚(红线):模块主电源,接3.3V供电(请勿接3.3V以上电源,否则烧毁模块!);

2脚(黄线):模块串口TX(发送端),接MCU或TTL串口的RX(接收端);

3脚(白线):模块串口RX(接收端),接MCU或TTL串口的TX(发送端);

4脚(黑线):模块电源地,接3.3V电源地(负极);

5脚(蓝线):模块触摸感应信号输出(高电平为检测到触摸),需接VTI到3.3V。

6脚(绿线):模块触摸感应电路电源(3.3V),可以与1脚(红线)并接。

7脚,8脚为USB信号线,使用串口控制模块时可以悬空不用。

3.2引脚选择

想要使用uart串口,需要确定使用的引脚是否有串口外设功能,可以通过用户手册进行查看。在用户手册的第146页。

这里选择使用PA2和PA3的附加串口2功能。

wKgZombqfg-AJ2XMAAChJs2IQ-k64.webp

有串口功能的引脚

wKgaombqfhGAWwoMAABt8PArfts53.webp

接线表

3.3移植至工程

移植步骤中的导入.c和.h文件与【CW32模块使用】DHT11温湿度传感器相同,只是将.c和.h文件更改为bsp_as608.c与bsp_as608.h。这里不再过多讲述,移植完成后面修改相关代码。

将bsp_uart.c修改为下面的代码:

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-12     LCKFB-LP    first version
 */
#include "bsp_uart.h"
#include "stdio.h"

uint8_t  u1_recv_buff[512]; // 接收缓冲区
uint16_t u1_recv_length;    // 接收数据长度
uint8_t  u1_recv_flag;      // 接收完成标志位

/******************************************************************
 * 函 数 名 称:uart1_init
 * 函 数 说 明:初始化USART1的串口收发功能
 * 函 数 形 参:__rate:波特率
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void uart1_init(uint32_t __rate)
{
    //配置RCC
    RCC_AHBPeriphClk_Enable(DEBUG_USART_GPIO_CLK, ENABLE); // 使能GPIO时钟
    DEBUG_USART_APBClkENx(DEBUG_USART_CLK, ENABLE);                   // 使能串口时钟

    // 配置GPIO
    GPIO_InitTypeDef GPIO_InitStructure;

    //UART TX RX 复用
    DEBUG_USART_AFTX;
    DEBUG_USART_AFRX;

    GPIO_InitStructure.Pins = DEBUG_USART_TX_GPIO_PIN;              // 引脚
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;                  // 推挽输出
    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;                     // 输出速度高
    GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);       // 初始化GPIO

    GPIO_InitStructure.Pins = DEBUG_USART_RX_GPIO_PIN;
    GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;               // 上拉输入
    GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);


    // 配置UART
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = __rate;                // 波特率
    USART_InitStructure.USART_Over = USART_Over_16;             // 配置USART的过采样率。
    USART_InitStructure.USART_Source = USART_Source_PCLK;       // 设置时钟源
    USART_InitStructure.USART_UclkFreq = DEBUG_USART_UclkFreq;  //设置USART时钟频率(和主频一致即可)
    USART_InitStructure.USART_StartBit = USART_StartBit_FE;     //RXD下降沿开始
    USART_InitStructure.USART_StopBits = USART_StopBits_1;      // 停止位1
    USART_InitStructure.USART_Parity = USART_Parity_No ;        // 不使用校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 不使用流控
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        // 收发模式
    USART_Init(DEBUG_USARTx, &USART_InitStructure);

    //优先级,无优先级分组
    NVIC_SetPriority(DEBUG_USART_IRQ, 0);
    //UARTx中断使能
    NVIC_EnableIRQ(DEBUG_USART_IRQ);

    //使能UARTx RC中断
    USART_ITConfig(DEBUG_USARTx, USART_IT_RC, ENABLE);
}


#if !defined(__MICROLIB)
//不使用微库的话就需要添加下面的函数
#if (__ARMCLIB_VERSION <= 6000000)
//如果编译器是AC5  就定义下面这个结构体
struct __FILE
{
        int handle;
};
#endif

FILE __stdout;

//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
        x = x;
}
#endif

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
        // 发送一个字节
    USART_SendData(DEBUG_USARTx, (uint8_t)ch);

        // 等待发送完成
        while( RESET == USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) ){}

    return ch;
}

void uart1_receive_clear(void)
{
        for(int i = 0; i < 512; i++)
        {
                u1_recv_buff[i] = 0;
        }

        u1_recv_length = 0;

        u1_recv_flag = 0;
}

/******************************************************************
 * 函 数 名 称:UART1_IRQHandler
 * 函 数 说 明:串口1中断服务函数
 * 函 数 形 参:无
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void UART1_IRQHandler(void)
{
    uint8_t TxRxBuffer;

    if (USART_GetITStatus(CW_UART1, USART_IT_RC) != RESET)
    {
                // 接收一个字节
        TxRxBuffer = USART_ReceiveData_8bit(CW_UART1);

        u1_recv_buff[u1_recv_length++] = TxRxBuffer;

        u1_recv_flag = 1;

//        USART_SendData_8bit(CW_UART1, TxRxBuffer); // 将数据发回用于验证

                // 清除标志位
        USART_ClearITPendingBit(CW_UART1, USART_IT_RC);
    }
}

将bsp_uart.h修改为下面的代码:

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-12     LCKFB-LP    first version
 */
#include "board.h"


//UARTx
#define  DEBUG_USARTx                   CW_UART1
#define  DEBUG_USART_CLK                RCC_APB2_PERIPH_UART1
#define  DEBUG_USART_APBClkENx          RCC_APBPeriphClk_Enable2
#define  DEBUG_USART_UclkFreq           64000000

//UARTx GPIO
#define  DEBUG_USART_GPIO_CLK           RCC_AHB_PERIPH_GPIOA
#define  DEBUG_USART_TX_GPIO_PORT       CW_GPIOA
#define  DEBUG_USART_TX_GPIO_PIN        GPIO_PIN_8
#define  DEBUG_USART_RX_GPIO_PORT       CW_GPIOA
#define  DEBUG_USART_RX_GPIO_PIN        GPIO_PIN_9

//GPIO AF
#define  DEBUG_USART_AFTX               PA08_AFx_UART1TXD()
#define  DEBUG_USART_AFRX               PA09_AFx_UART1RXD()

//中断
#define  DEBUG_USART_IRQ                UART1_IRQn

extern uint8_t  u1_recv_buff[512]; // 接收缓冲区
extern uint16_t u1_recv_length;    // 接收数据长度
extern uint8_t  u1_recv_flag;      // 接收完成标志位

void uart1_receive_clear(void);
void uart1_init(uint32_t __rate);

在文件bsp_as608.c中,编写如下代码。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-19     LCKFB-LP    first version
 */
#include "bsp_as608.h"
#include "stdio.h"
#include "string.h"
#include "bsp_uart.h"

volatile unsigned char FPM10A_RECEICE_BUFFER[32];
unsigned int finger_id = 0;

const unsigned char FPM10A_Get_Device[10] ={0x01,0x00,0x07,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};//口令验证
const unsigned char FPM10A_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //协议包头
const unsigned char FPM10A_Get_Img[6] = {0x01,0x00,0x03,0x01,0x00,0x05};    //获得指纹图像
const unsigned char FPM10A_Get_Templete_Count[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 }; //获得模版总数
const unsigned char FPM10A_Search[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x03,0xE7,0x00,0xF8}; //搜索指纹搜索范围0 - 999,使用BUFFER1中的特征码搜索
const unsigned char FPM10A_Search_0_9[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x13,0x00,0x21}; //搜索0-9号指纹
const unsigned char FPM10A_Img_To_Buffer1[7]={0x01,0x00,0x04,0x02,0x01,0x00,0x08}; //将图像放入到BUFFER1
const unsigned char FPM10A_Img_To_Buffer2[7]={0x01,0x00,0x04,0x02,0x02,0x00,0x09}; //将图像放入到BUFFER2
const unsigned char FPM10A_Reg_Model[6]={0x01,0x00,0x03,0x05,0x00,0x09}; //将BUFFER1跟BUFFER2合成特征模版
const unsigned char FPM10A_Delete_All_Model[6]={0x01,0x00,0x03,0x0d,0x00,0x11};//删除指纹模块里所有的模版
volatile unsigned char  FPM10A_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置


uint8_t  u2_recv_buff[USART2_RECEIVE_LENGTH]; // 接收缓冲区
uint16_t u2_recv_length;                      // 接收数据长度
uint8_t  u2_recv_flag;                        // 接收完成标志位


/******************************************************************
 * 函 数 名 称:as608_gpio_config
 * 函 数 说 明:初始化as608引脚
 * 函 数 形 参:设置波特率 as608的默认波特率是57600
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:as608的默认波特率是57600
******************************************************************/
void as608_gpio_config(uint32_t band_rate)
{
    GPIO_InitTypeDef        GPIO_InitStruct; // GPIO初始化结构体

    AS608_GPIO_RCC_ENABLE();        // 使能GPIO时钟
    AS608_UART_RCC_ENABLE();        // 使能UART时钟

    GPIO_InitStruct.Pins = AS608_TX_PIN;                 // GPIO引脚
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;          // 推挽输出
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;             // 输出速度高
    GPIO_Init(AS608_GPIO_PORT, &GPIO_InitStruct);        // 初始化

    GPIO_InitStruct.Pins = AS608_RX_PIN;                 // GPIO引脚
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;       // 上拉输入
    GPIO_Init(AS608_GPIO_PORT, &GPIO_InitStruct);        // 初始化

    GPIO_InitStruct.Pins = AS608_TOUCH_PIN;              // GPIO引脚
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLDOWN;// 下拉输入
    GPIO_Init(AS608_GPIO_PORT, &GPIO_InitStruct);        // 初始化

    AS608_AF_UART_TX(); // UART_TX复用
    AS608_AF_UART_RX(); // UART_RX复用

    // 配置UART
    USART_InitTypeDef USART_InitStructure;

    USART_InitStructure.USART_BaudRate = band_rate;                     // 波特率
    USART_InitStructure.USART_Over = USART_Over_16;                     // 配置USART的过采样率。
    USART_InitStructure.USART_Source = USART_Source_PCLK;               // 设置时钟源
    USART_InitStructure.USART_UclkFreq = 64000000;                      //设置USART时钟频率(和主频一致即可)
    USART_InitStructure.USART_StartBit = USART_StartBit_FE;             //RXD下降沿开始
    USART_InitStructure.USART_StopBits = USART_StopBits_1;              // 停止位1
    USART_InitStructure.USART_Parity = USART_Parity_No ;                // 不使用校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 不使用流控
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;     // 收发模式
    USART_Init(AS608_UART, &USART_InitStructure);                       // 初始化串口1

    // 优先级,无优先级分组
    NVIC_SetPriority(AS608_UART_IRQ, 0);

    // UARTx中断使能
    NVIC_EnableIRQ(AS608_UART_IRQ);

    // 使能UARTx RC中断
    USART_ITConfig(AS608_UART, USART_IT_RC, ENABLE);

}

/************************************************
函数名称 : uart2_send_byte
功    能 : 串口发送一个字节
参    数 : ucch:要发送的字节
返 回 值 :
作    者 : LC
*************************************************/
void uart2_send_byte(uint8_t ucch)
{
    // 发送一个字节
    USART_SendData_8bit(AS608_UART, (uint8_t)ucch);

    // 等待发送完成
    while( RESET == USART_GetFlagStatus(AS608_UART, USART_FLAG_TXE) ){}
}

/************************************************
函数名称 : uart2_receive_clear
功    能 : 清除串口接收的全部数据
参    数 : 无
返 回 值 : 无
作    者 : LC
*************************************************/
void  uart2_receive_clear(void)
{
    unsigned int i = 0;
    for( i = 0; i < USART2_RECEIVE_LENGTH; i++ )
    {
        u2_recv_buff[ i ] = 0;
    }
    u2_recv_length = 0;
        u2_recv_flag = 0;
}

/******************************************************************
 * 函 数 名 称:get_as608_touch
 * 函 数 说 明:获取是否有手指触摸识别区
 * 函 数 形 参:无
 * 函 数 返 回:0没有触摸    1有触摸
 * 作       者:LC
 * 备       注:无
******************************************************************/
char get_as608_touch(void)
{
        if( TOUCH_IN == 1 )//触摸为1
        {
                //printf("Touch-1rn");
                return 1;
        }
        else
        {
                //printf("Touch-0rn");
        }
        return 0;
}

/******************************************************************
 * 函 数 名 称:FPM10A_Cmd_Send_Pack_Head
 * 函 数 说 明:发送包头
 * 函 数 形 参:无
 * 函 数 返 回:wu
 * 作       者:LC
 * 备       注:无
******************************************************************/
void FPM10A_Cmd_Send_Pack_Head(void)
{
        int i;
        for(i=0;i 0 )
        {
                delay_ms(1);
                timeout--;
        }

        delay_ms(100);        // 一定要加延时!!!
        if( u2_recv_flag == 1 )
        {
                u2_recv_flag = 0;
                for (i=0;i>8;
    FPM10A_Save_Finger[6] = (storeID&0x00FF);
    for(i=0;i> 8; //存放校验数据
    FPM10A_Save_Finger[8]= temp & 0x0000FF;
    FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
    for(i=0;i

在文件bsp_as608.h中,编写如下代码。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-19     LCKFB-LP    first version
 */
#ifndef _BSP_AS608_H_
#define _BSP_AS608_H_

#include "board.h"


#define AS608_GPIO_RCC_ENABLE()    __RCC_GPIOA_CLK_ENABLE()  // GPIO时钟
#define AS608_UART_RCC_ENABLE()    __RCC_UART2_CLK_ENABLE()  // 串口2的时钟

#define AS608_AF_UART_TX()         PA02_AFx_UART2TXD()
#define AS608_AF_UART_RX()         PA03_AFx_UART2RXD()

#define AS608_GPIO_PORT            CW_GPIOA          // GPIO端口

#define AS608_TX_PIN               GPIO_PIN_2        // 串口TX的引脚
#define AS608_RX_PIN               GPIO_PIN_3        // 串口RX的引脚

#define AS608_TOUCH_PIN            GPIO_PIN_1        // TOUCH的引脚

#define AS608_UART                 CW_UART2          // 串口2
#define AS608_UART_IRQ             UART2_IRQn        // 串口2中断
#define AS608_UART_IRQHandler      UART2_IRQHandler  // 串口2中断服务函数

#define TOUCH_IN                   GPIO_ReadPin( AS608_GPIO_PORT, AS608_TOUCH_PIN )

/* 串口缓冲区的数据长度 */
#define USART2_RECEIVE_LENGTH  1024

extern uint8_t  u2_recv_buff[USART2_RECEIVE_LENGTH]; // 接收缓冲区
extern uint16_t u2_recv_length;                      // 接收数据长度
extern uint8_t  u2_recv_flag;                        // 接收完成标志位

void as608_gpio_config(uint32_t band_rate);
char get_as608_touch(void);
void uart2_receive_clear(void);

char Device_Check(void);
void FPM10A_Add_Fingerprint(void);//添加指纹
unsigned int FPM10A_Find_Fingerprint(void);//查找指纹
void FPM10A_Delete_All_Fingerprint(void);
#endif

04移植验证

在自己工程中的main主函数中,编写如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-19     LCKFB-LP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_as608.h"

int32_t main(void)
{
    board_init();        // 开发板初始化

    uart1_init(57600U);        // 串口1波特率115200

    as608_gpio_config(57600U);

    printf("AS608 demo startrn");

    Device_Check();//模块检测

    FPM10A_Delete_All_Fingerprint();  //是否删除全部指纹

    FPM10A_Add_Fingerprint();//是否添加指纹

    while(1)
    {
        FPM10A_Find_Fingerprint();//查找指纹
    }
}

上电现象:

wKgaombqfhGAdNvvAACqCOaBZh066.webp

模块移植成功案例代码:

链接:https://pan.baidu.com/s/13OYXBko_GfKrS4aRVg1VLg?pwd=LCKF

提取码:LCKF

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2567

    文章

    53145

    浏览量

    768913
  • 指纹识别传感器

    关注

    0

    文章

    19

    浏览量

    14887
  • CW32
    +关注

    关注

    1

    文章

    256

    浏览量

    1286
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    超声波指纹模组灵敏度飞升!低温纳米烧结银浆立大功

    、准确传输的基础。低温纳米烧结银浆的电阻率极低,能够为指纹传感器与电路之间提供高效的导电通路,大大减少了信号传输过程中的损耗和干扰,使得指纹识别的速度和准确性得到了显著提升 。 除了导电性能,低温纳米
    发表于 05-22 10:26

    代码+案例+生态:武汉芯源半导体CW32嵌入式开发实战正式出版

    尊敬的各位电子工程师、嵌入式开发爱好者们: 大家好!今天,我们怀着无比激动与自豪的心情,向大家宣布一个重大喜讯——武汉芯源半导体的单片机CW32正式出书啦!《基于ARM Cortex-M0+
    发表于 03-03 15:14

    CW32模块使用】MQ-4甲烷检测传感器

    转换为与该气体浓度相对应的输出信号。MQ-4气体传感器中对甲烷的灵敏度高,对丙烷,丁烷也有较好的灵敏度。这种传感器可检测多种可燃性气体,特别是天然气,是一款适合多种应用的低成本传感器。 一、
    的头像 发表于 12-30 11:36 ?1176次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】MQ-4甲烷检测<b class='flag-5'>传感器</b>

    CW32模块使用】TCS34725颜色识别传感器

    模块是基于AMS的TCS3472XFN彩色光数字转换为核心的颜色传感器传感器提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出。集成红外阻挡滤光片可最大限度地减少入射光的红外
    的头像 发表于 12-30 11:28 ?795次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】TCS34725颜色<b class='flag-5'>识别传感器</b>

    CW32模块使用】SGP30气体传感器

    SGP30是一款单一芯片上具有多个传感元件的金属氧化物气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号。另外,SGP易于集成,能够将金属氧化物气体传感器集成到移动设备
    的头像 发表于 12-30 10:58 ?3619次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】SGP30气体<b class='flag-5'>传感器</b>

    CW32模块使用 人体红外传感器

    人体红外感应模块使用的是热释电红外传感器,它是利用温度变化的特征来探测红外线的辐射,利用双灵敏元互补的方法抑制温度变化产生的干扰,提高了传感器的工作稳定性。产品应用广泛,例如:保险装置、防盗报警
    的头像 发表于 12-05 15:09 ?687次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用 人体红外<b class='flag-5'>传感器</b>

    CW32模块使用】微波多普勒无线雷达传感器

    微波运动传感器是利用多普勒雷达原理设计的微波移动物体探测。不同于一般的红外探测,微波传感器通过通过检测物体反射的微波来探测物体的运动状况,检测对象将并不会局限于人体,还有很多其他的
    的头像 发表于 11-28 17:24 ?1521次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】微波多普勒无线雷达<b class='flag-5'>传感器</b>

    CW32模块使用】雨滴传感器

    雨滴传感器主要是用来检测是否下雨及雨量的大小。主要用于汽车智能灯光(AFS)系统、汽车自动雨刷系统、智能车窗系统。 该雨滴传感器基本上是一块板,上面以线形形式涂覆镍。雨滴传感器常见的工作原理是通过
    的头像 发表于 11-28 11:23 ?3009次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】雨滴<b class='flag-5'>传感器</b>

    基于CW32模块的雨滴传感器设计

    雨滴传感器主要是用来检测是否下雨及雨量的大小。主要用于汽车智能灯光(AFS)系统、汽车自动雨刷系统、智能车窗系统。
    的头像 发表于 11-26 17:22 ?763次阅读
    基于<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>的雨滴<b class='flag-5'>传感器</b>设计

    基于CW32模块的火焰传感器设计

    我们的目标是将例程移植至CW32F030C8T6开发板上【判断当前检测范围是否有火光的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。
    的头像 发表于 11-26 17:18 ?1033次阅读
    基于<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>的火焰<b class='flag-5'>传感器</b>设计

    国产人工智能教学实验箱操作案例分享:5-27 指纹识别实验

    的设计实现:LCD显示界面以及与用户的交互; (3)编辑控制代码; (4)编译程序; (5)运行程序。 Qt程序 指纹识别的Qt程序主要包括GUI的设计实现、指纹采集模块指纹录入
    发表于 10-15 16:43

    项目分享 | 小熊派DIY一款指纹门锁

    : 门锁电路工作原理: 从搭建的电路可以清晰看到整个工作流程。 电池通过降压模块转换成适合的电压给小熊派IoT开发板供电。指纹识别感应感应到指纹后,对
    发表于 10-09 13:55

    CW32模块使用】红外测距传感器

    GP2Y0A02YKOF是夏普的一款距离测量传感器模块。它由PSD(position sensitive detector)和IRED(infrared emitting diode)以及信号处理
    的头像 发表于 09-23 09:53 ?946次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】红外测距<b class='flag-5'>传感器</b>

    英飞凌推出带指纹传感器的生物识别芯片卡模块

    英飞凌科技(Infineon Technologies)近期宣布了一项创新突破,成功推出了搭载指纹传感器的生物识别芯片卡模块——Infineon Secora Pay Bio,这一产品
    的头像 发表于 09-19 17:31 ?1161次阅读

    CW32模块使用 红外循迹传感器

    ,调节方向与固定方便易用,使用宽电压LM393比较,信号干净,波形好,驱动能力强,超过15mA。可以应用于机器人避障、机器人进行白线或者黑线的跟踪,可以检测白底中的黑线,也可以检测黑底中的白线,是寻线机器人的必备传感器。 01模块
    的头像 发表于 09-18 14:31 ?1027次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用 红外循迹<b class='flag-5'>传感器</b>