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

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

3天内不再提示

基于RA6M5的智能烟雾感应吸除系统设计

瑞萨MCU小百科 来源:瑞萨MCU小百科 2023-11-06 12:21 次阅读

今日分享野火瑞萨创意氛围赛选手的作品——基于RA6M5的智能烟雾感应吸除系统。

该系统是基于野火启明RA6M5开发板制作的一款智能烟雾感应装置。创作背景是作者在手工焊接电子元器件或电路板时候,常常会因为长时间吸入焊接产生的烟雾而导致身体不适。因此趁着野火创意氛围赛提供的学习机会,在启明开发板上实现感应烟雾并利用风扇吸除的功能,经过初步验证,该系统能较好的达到理想控制状态。

一、项目简介

该系统使用的开发板是野火启明RA6M5,使用到的额外外设模块有一路继电器、7.4V电池模块、烟雾传感器。是基于瑞萨FSP库完成软件程序的编写,由于时间原因,所有电路连接采用杜邦线完成。

二、项目说明

该系统有两个工作模式,可通过野火启明RA6M5上板载按键2切换工作模式。其中工作模式一是通过按键手动控制风扇转动。工作模式二是通过烟雾传感器感应烟雾从而发送信号驱动风扇转动。

三、系统方案

由于该系统结构比较简单,因此无需给出系统框图。简述过程就是利用GPIO输出功能去驱动继电器打开,将风扇与7.4V模块导通转动。利用GPIO输入功能识别烟雾传感器电平信号从而驱动继电器。

四、硬件方案展示

1.风扇模块

模块介绍:该模块额定电压为12V,工作电压为7~12V由于作者手上没有12V直流电池,因此用7.4V电池模块替代。

2.继电器模块

模块介绍:由于风扇模块工作电压远高于单片机工作电压3.3V,因此利用继电器特性,可实现GPIO输出功能控制风扇转动或停止。

3.烟雾传感器 aee00b72-7c59-11ee-939d-92fbcf53809c.png

模块介绍:MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡 (SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。可以用于该系统中烟雾监测装置,传感器特设M3固定安装孔,使用宽电压LM393比较器,信号干净,波形好,驱动能力强,超过15mA,配可调精密电位器调节灵敏度。

4.杜邦线连接介绍

继电器信号引脚连接P500,烟雾传感器信号线连接P200,按键、LED灯均使用板载外设,因此不再声明。

五、软件配置(RASC)

与程序编写

1.RASC部分

(一)系统时钟配置

系统时钟使用默认设置200M

(二)LED灯配置

af05ee50-7c59-11ee-939d-92fbcf53809c.jpg

启动板载LED灯用来显示当前工作状态

(三)按键配置

af2c000e-7c59-11ee-939d-92fbcf53809c.jpg

配置按键用于切换功能

(四)烟雾传感器输入检测配置

af5351d6-7c59-11ee-939d-92fbcf53809c.jpg

和按键配置同理

(五)继电器配置

af7c307e-7c59-11ee-939d-92fbcf53809c.jpg

2.KEIL程序编写部分

(一)系统框图

afb1bdde-7c59-11ee-939d-92fbcf53809c.jpg

(二)LED部分

bsp_led.c代码

左右滑动查看更多

#include "bsp_led.h"


void Led_init(void)
{
    //调用 R_IOPORT_Open 函数来初始化 IOPORT 模块
    R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}

bsp_led.h代码

左右滑动查看更多

#ifndef _BSP_LED_H
#define _BSP_LED_H


#include "hal_data.h"


#define LED1_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_00 & 0xFF)
#define LED2_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_03 & 0xFF)
#define LED3_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_04 & 0xFF)


#define LED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_00,BSP_IO_LEVEL_LOW);
#define LED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_03,BSP_IO_LEVEL_LOW);
#define LED3_ON R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_04,BSP_IO_LEVEL_LOW);


#define LED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_00,BSP_IO_LEVEL_HIGH);
#define LED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_03,BSP_IO_LEVEL_HIGH);
#define LED3_OFF R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_04,BSP_IO_LEVEL_HIGH);


void Led_init(void);


#endif

(三)按键部分
bsp_key.c代码

左右滑动查看更多

#include "bsp_key.h"


/* 定义宏 KEY_ON 表示按键按下
定义宏 KEY_OFF 表示按键没有按下
*/


/* 按键初始化函数 */
void Key_Init(void)
{
  /* 初始化配置引脚(这里重复初始化了,可以注释掉) */
  //R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}


uint32_t Key_Scan(bsp_io_port_pin_t key)
{
    bsp_io_level_t state;
    // 读取按键引脚电平
    R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
    if (BSP_IO_LEVEL_HIGH == state)
    {
        return KEY_OFF; //按键没有被按下
    }
    else
    {
    do //等待按键释放
    {
        R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
    } while (BSP_IO_LEVEL_LOW == state);
    }
    return KEY_ON; //按键被按下了
}

bsp_key.h代码

左右滑动查看更多

#ifndef _BSP_KEY_H
#define _BSP_KEY_H


#include "hal_data.h"


#define KEY_ON 1
#define KEY_OFF 0


#define KEY1_SW2_PIN BSP_IO_PORT_00_PIN_04
#define KEY2_SW3_PIN BSP_IO_PORT_00_PIN_05


#define FAN_TOGGLE R_PORT5->PODR ^= 1<<(BSP_IO_PORT_05_PIN_00 & 0xFF)//继电器状态翻转


void Key_Init(void);
uint32_t Key_Scan(bsp_io_port_pin_t key);


#endif

(四)系统滴答定时器部分
bsp_SysTick.c代码

左右滑动查看更多

#include "bsp_SysTick.h"


static __IO uint32_t IT_nums; //延时需要触发中断的次数
static uint32_t IT_Period; //中断周期(单位为时钟节拍数)


uint32_t Mode_mstick;
uint32_t Systick_mstick;


/**
* @brief 启动系统滴答计时器 SysTick
* @param IT_frequency: 滴答计时器每秒的中断次数
* @retval 无
*/
void SysTick_Init(uint32_t IT_frequency)
{
  /* SystemFrequency在这里默认为200M
   * SystemFrequency / 1000  1ms中断一次
   * SystemFrequency / 100000 10us中断一次
   * SystemFrequency / 1000000 1us中断一次
   */
  IT_Period = SystemCoreClock / IT_frequency;//个人理解:设置分频
  uint32_t err = SysTick_Config (IT_Period);//把分频设置进系统
  assert(err==0); //capture error
}


/**
* @brief 延时程序
* @param delay: 延时的单位时间
* @param unit: 延时的单位
* @retval 无
*/
void SysTick_Delay(uint32_t delay, sys_delay_units_t unit)
{
    uint32_t SumTime = delay * unit; //计算总延时时间 (单位为时钟节拍数)
    IT_nums = SumTime/IT_Period;//计算次数,比如1ms一次中断,设置1000,就是1s
    while (IT_nums != 0);//中断进去一次-一次,直到为0跳出
}


/**
 * @brief SysTick的中断服务函数
 * @param 无
 * @retval 无
 * @attention 用e2 studio编译会出现警告,但是没有影响,不需要管
 */


void SysTick_Handler(void)
{
  Systick_mstick++;
}


/*********************************************END OF FILE**********************/

bsp_Systick.h代码

左右滑动查看更多

#ifndef _BSP_SYSTICK_H
#define _BSP_SYSTICK_H


#include "hal_data.h"


typedef enum
{
  SYS_DELAY_UNITS_SECONDS   = 200000000, ///< Requested delay amount is in seconds
    SYS_DELAY_UNITS_MILLISECONDS = 200000,    ///< Requested delay amount is in milliseconds
    SYS_DELAY_UNITS_MICROSECONDS = 200        ///< Requested delay amount is in microseconds
} sys_delay_units_t;


void SysTick_Init(uint32_t IT_frequency);
void SysTick_Delay(uint32_t delay, sys_delay_units_t unit);


#endif

(五)烟雾传感器部分
bsp_sensor.c代码

左右滑动查看更多

#include "bsp_sensor.h"
    
void Eensor_Init(void)
{
    //调用 R_IOPORT_Open 函数来初始化 IOPORT 模块
    R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}

bsp_sensor.h代码

左右滑动查看更多

#ifndef _BSP_SENSOR_H
#define _BSP_SENSOR_H


#include "hal_data.h"


#define Fan_PIN BSP_IO_PORT_02_PIN_00
#define FAN_ON R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_05_PIN_00,BSP_IO_LEVEL_HIGH);
#define FAN_OFF R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_05_PIN_00,BSP_IO_LEVEL_LOW);


extern uint32_t Mode_mstick;
extern uint32_t Systick_mstick;


void Eensor_Init(void);


#endif

(六)主函数部分

其余部分均为默认程序,在这里不进行展示。至此,硬件和软件部分均介绍完成。

左右滑动查看更多

#include "hal_data.h"
#include "led/bsp_led.h"
#include "key/bsp_key.h"
#include "SysTick/bsp_SysTick.h"
#include "sensor/bsp_sensor.h"


FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER


void Fan_Proc(void);//系统运行函数
bsp_io_level_t Fan_flag;//风扇开启变量,0-关闭,1-打开
uint8_t Work_Mode = 0;//工作模式 0-手动模式 1-烟雾传感器模式
/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)
{
  /* TODO: add your own code here */
    Led_init();//LED灯初始化
    Key_Init();//按键初始化
    Eensor_Init();//传感器初始化
    SysTick_Init(1000);//滴答定时器1ms
    
    while(1){
        Fan_Proc();
    }
    
#if BSP_TZ_SECURE_BUILD
  /* Enter non-secure code */
  R_BSP_NonSecureEnter();
#endif
}


void Fan_Proc(void)
{
    if(Systick_mstick-Mode_mstick <= 50)return;
                Mode_mstick = Systick_mstick;
        
        if( Key_Scan(KEY1_SW2_PIN) == KEY_ON && Work_Mode == 0) //扫描按键1
        {
                LED1_TOGGLE; //翻转 LED1 状态
                FAN_TOGGLE; //开启风扇
        }
        if( Key_Scan(KEY2_SW3_PIN) == KEY_ON ) //扫描按键2
        {
                LED3_TOGGLE; //翻转 LED3 状态
                Work_Mode ^= 1;//反转模式
        }
        if(Work_Mode == 1)
        {
                R_IOPORT_PinRead(&g_ioport_ctrl, Fan_PIN, &Fan_flag);
                if(Fan_flag == BSP_IO_LEVEL_LOW)
                {
                        LED2_ON; //打开
                        FAN_ON;//风扇开启
                }
                else if(Fan_flag == BSP_IO_LEVEL_HIGH)
                {
                        LED2_OFF; //关闭
                        FAN_OFF;//风扇关闭
                }
        }
}

六、总结

此次项目由于时间紧迫,整体设计较为简单,主要原因是由于本人前期一直在准备电子设计竞赛,直到14号综测结束才开始学习瑞萨启明RA6M5开发板,在学习野火瑞萨开发板中,我领略到了不同于意法半导体系列开发板的魅力。我认为瑞萨半导体是一个非常值得学习的芯片系列,其图形化配置有良好的生态,在学习野火编写的教学文档中也受益匪浅。在此,再次感谢野火举办创意氛围赛,让我有机会接触瑞萨开发板。如果有机会参与下一期创意氛围赛,我会努力创造更有特色的产品

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

    关注

    131

    文章

    5027

    浏览量

    146062
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620854
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16018

    浏览量

    343637
  • 瑞萨
    +关注

    关注

    32

    文章

    22214

    浏览量

    84915
  • 开发板
    +关注

    关注

    25

    文章

    4430

    浏览量

    94011

原文标题:【瑞萨RA MCU创意氛围赛作品赏析】项目12——智能烟雾感应吸除系统

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于瑞萨RA6M5/RA2L1和百度语音云的语音识别控制与无线通信控制系统

    整个系统由两个野火瑞萨启明开发板组成,大的RA6M5开发板接入W5500网口模块.
    的头像 发表于 02-26 13:54 1240次阅读
    基于瑞萨<b class='flag-5'>RA6M5</b>/<b class='flag-5'>RA</b>2L1和百度语音云的语音识别控制与无线通信控制<b class='flag-5'>系统</b>

    求一种基于RT-Thread+RA6M4的智能安防系统设计方案

    1、基于RT-Thread+RA6M4的智能安防系统应用背景无论是在家里还是在公司,安防都尤为的重要,与其亡羊补牢,更重要的是防患于未然。安全是目的,防范是手段。通过防范的手段达到或实现安全的目的
    发表于 06-24 15:04

    【野火启明6M5开发板体验】1 RA6M5开发环境搭建

    的 Secure Crypto Engine (SCE) 配合使用,可实现安全芯片的功能。 RA6M5采用高效的 40nm 工艺,由灵活配置软件包 (FSP) 这个开放且灵活的生态系统概念提供支持,FSP
    发表于 12-21 22:49

    【野火启明6M5开发板体验】3 RA6M5按键

    ,进入到中断服务函数中进行处理,处理完后再返回到中断之前的代码中执行。RA6M5的中断和异常Cortex-M内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(exception
    发表于 12-23 19:55

    【野火启明6M5开发板体验】4 RA6M5串口通信

    ,是串行通信技术的一种总称,包括了UART,SPI等串行通信技术。RA6M5的SCI模块是一个有6个通道的异步/同步串行接口。SCI提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备
    发表于 12-23 20:01

    【野火启明6M5开发板体验】5 RA6M5 PWM输出

    ,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。在瑞萨RA6M5系列 MCU 中有两种定时器,一种是通用 PWM 定时器 GPT,另外
    发表于 01-07 10:09

    【瑞萨RAMCU创意氛围赛】基于RA6M5的电子墨水屏微信信息站

    的SecureCryptoEngine(SCE)配合使用,可实现安全芯片的功能,适合安全信息场景的应用。RA6M5采用高效的40nm工艺,由灵活配置软件包(FSP)支持开放且灵活的生态系统。FSP基于FREERTOS构建
    发表于 08-28 04:06

    RA6M5数据手册(英)

    RA6M5数据手册(英)
    发表于 11-07 19:49 1次下载
    <b class='flag-5'>RA6M5</b>数据手册(英)

    RA6M5硬件用户手册(英)

    RA6M5硬件用户手册(英)
    发表于 11-07 19:49 2次下载
    <b class='flag-5'>RA6M5</b>硬件用户手册(英)

    RA6M5数据手册(中英)

    RA6M5数据手册(中英)
    发表于 11-07 19:49 0次下载
    <b class='flag-5'>RA6M5</b>数据手册(中英)

    RA6M5硬件用户手册(中英)

    RA6M5硬件用户手册(中英)
    发表于 11-07 19:50 1次下载
    <b class='flag-5'>RA6M5</b>硬件用户手册(中英)

    RA6M5 组 数据表

    RA6M5 组 数据表
    发表于 01-09 19:01 0次下载
    <b class='flag-5'>RA6M5</b> 组 数据表

    RA6M5 组 用户手册: 硬件

    RA6M5 组 用户手册: 硬件
    发表于 01-09 19:02 1次下载
    <b class='flag-5'>RA6M5</b> 组 用户手册: 硬件

    RA6M5 组 数据表

    RA6M5 组 数据表
    发表于 06-30 18:41 0次下载
    <b class='flag-5'>RA6M5</b> 组 数据表

    RA6M5 组 用户手册: 硬件

    RA6M5 组 用户手册: 硬件
    发表于 06-30 18:42 1次下载
    <b class='flag-5'>RA6M5</b> 组 用户手册: 硬件