国产risc-v微控制器读取火焰传感器
本帖最后由 dirtwillfly 于 2025-6-29 10:50 编辑1. 使用的软硬件
1.1 开发环境
1)RT-Thread Studio
1.2 硬件
1)四线火焰传感器模块1块
2)HPM5361EVK 1块
3)杜邦线 若干
2. 火焰传感器模块
2.1 火焰传感器模块特性
1)可以检测火焰或者波长760纳米~1100纳米范围内的光源
2)探测角度60度左右,对火焰光谱特别灵敏
3)灵敏度可调(使用蓝色电位器调节)
4)对火焰的探测距离:跟灵敏度和火焰强度有关,一般1m以内适用
5)工作电压:3.3V-5V
6)输出形式:a 模拟量电压输出,b 数字开关量输出(0 和 1)
2.2 火焰传感器模块原理图
本帖最后由 dirtwillfly 于 2025-6-29 11:01 编辑
3. hpm5361 硬件电路
3.1 ADC采集引脚选择
通过HPM Pinmux Tool工具,可以知道ADC0的各通道基本都在PB端口,其中通道3为 PB11。我们就是用它作为火焰传感器模块AO引脚的采集引脚。
3.2 在开发板上,PB11为GPIO29。把该引脚连接到火焰传感器模块的AO引脚,同时把火焰传感器模块的VIN和GND连接到开发板的3.3V和GND。
本帖最后由 dirtwillfly 于 2025-6-29 11:16 编辑
4. 软件开发
4.1 配置资源
在在RT-Thread Setting 界面的硬件标签页,使能ADC,使能ADC16,以及使能ADC0。
在组件标签页,使能ADC设备驱动程序。
然后点击”保存“,等待开发环境自动配置完毕。
4.2 代码开发
新建app_flame.c和头文件app_flame.h文件。
在app_flame.c添加包含的头文件:
#include <rtthread.h>
#include <rtdevice.h>
#include "app_flame.h"添加宏定义,adc0为使用的adc外设,采集通道为3:
#define FLAME_DEVICE_NAME"adc0"
#define FLAME_DEVICE_CHANNEL 3//ADC通道添加全局变量:
static rt_adc_device_t flame = RT_NULL;
static struct rt_thread flame_thread;//定义线程控制块
static char flame_thread_stack;//定义线程栈
rt_uint16_t adc_value = 0;编写火焰传感器的线程逻辑,整体线程循环为:读取adc,然后通过串口打印输出,然后延时1000ms。
static void flame_thread_entry(void *parameter)
{
while(1)
{
adc_value = rt_adc_read(flame, FLAME_DEVICE_CHANNEL);
rt_kprintf("flame:%d\n", adc_value);
rt_thread_mdelay(1000);
}
}编写初始化函数,主要功能为查找adc设备,使能采集通道,初始化对应的线程,最后启动线程。
int flame_init(void)
{
rt_err_t ret = 0;
flame = (rt_adc_device_t)rt_device_find(FLAME_DEVICE_NAME);
if(flame == RT_NULL)
{
rt_kprintf("rt_device_find flame failed\n\r");
return RT_ERROR;
}
ret = rt_adc_enable(flame, FLAME_DEVICE_CHANNEL);
if(ret < 0)
{
rt_kprintf("rt_adc_enable flame failed\n\r");
return ret;
}
//创建线程
rt_kprintf("flame_thread init\n\r");
ret = rt_thread_init(&flame_thread, "flame_thread", flame_thread_entry, NULL, flame_thread_stack, sizeof(flame_thread_stack), 8, 10);
if(ret != RT_EOK)
rt_kprintf("flame_thread init failed\n\r");
else
ret = rt_thread_startup(&flame_thread);
return ret;
}
然后,再把初始化函数添加到app_flame.h文件。
最后的app_flame.h文件内容为:
#ifndef APPLICATIONS_APP_FLAME_H_
#define APPLICATIONS_APP_FLAME_H_
int flame_init(void);
#endif /* APPLICATIONS_APP_FLAME_H_ */
本帖最后由 dirtwillfly 于 2025-6-29 11:15 编辑
5. 验证效果在main.c文件,添加包含文件:#include "app_flame.h"在main()函数添加火焰传感器的初始化函数:
flame_init();编译下载,使用串口调试工具观察,会有如下信息:
当传感器靠近打火机火焰,或者人体皮肤时,采集到的数据会有变化。
页:
[1]