合泰HT32火焰传感器报警
今天分享的是HT32加火焰传感器和蜂鸣器实现火灾报警测试
Buzzer硬件
1.工作电压:DC 3.3V-5V
2.灵敏度可调(可调电位器)
3.工作温度:-10℃—+50℃
4.设有固定螺铨孔,方便安装
5.探测角度 60 度左右,对火焰光谱特别灵敏
6.输出形式数字开关量输出(0 和 1) 检测到火焰或光源引脚输出1,否则输出0
本例程是使用的是普通的火焰传感器。当检测到火焰的时候,火焰传感器的IO口输出一个高电平,通过检测引脚端口的电平判断是否检测到的火焰,检测到火焰之后,蜂鸣器响。
HT32F52352 + 蜂鸣器 + 火焰传感器
接线:火焰传感器VCC GND 接开发板的VCC GND
DO 接自己使用的开发板引脚 (蜂鸣器同样如此IO接自己配置的引脚)
我使用了四个火焰传感器和一个蜂鸣器 大家根据自己情况来
Buzzer.h
#ifndef _BUZZER_H_
#define _BUZZER_H_
#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"
//端口号定义
#define HT_GPIO_Buzzer_PORT HT_GPIOD
//Buzzer引脚定义
#define HT_GPIO_Buzzer_PIN GPIO_PIN_0
//Buzzer 宏定义开和关
#define Buzzer_ON() GPIO_WriteOutBits(HT_GPIO_Buzzer_PORT,HT_GPIO_Buzzer_PIN,RESET)
#define Buzzer_OFF() GPIO_WriteOutBits(HT_GPIO_Buzzer_PORT,HT_GPIO_Buzzer_PIN,SET)
void Buzzer_Init(void);
void Buzzer_Running(void);
#endif
Buzzer.c
#include "buzzer.h"
#include "delay.h"
void Buzzer_Init(void)
{
CKCU_PeripClockConfig_TypeDef BuzzerCLOCK ={{0}};
BuzzerCLOCK.Bit.PD = 1; //使用PD0
//CKCU_PeripClockConfig(CKCU_PeripClockConfig_TypeDef Clock, ControlStatus Cmd);
CKCU_PeripClockConfig(BuzzerCLOCK,ENABLE); //使能时钟
//GPIO_DirectionConfig(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP, GPIO_DIR_Enum GPIO_DIR_INorOUT);
GPIO_DirectionConfig(HT_GPIO_Buzzer_PORT,HT_GPIO_Buzzer_PIN,GPIO_DIR_OUT); //配置GPIO PC15为输出模式
//GPIO_WriteOutBits(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP, FlagStatus Status);
GPIO_WriteOutBits(HT_GPIO_Buzzer_PORT,HT_GPIO_Buzzer_PIN,SET); //将LED1 LED2 熄灭
}
//蜂鸣器响10次
void Buzzer_Running(void)
{
uint8_t i = 0;
for(i = 0;i < 10;i++)
{
Buzzer_ON();
delay_ms(500);
Buzzer_OFF();
delay_ms(500);
}
}
Fire.h
#ifndef _FIRE_H_
#define _FIRE_H_
#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"
//端口号定义
#define HT_GPIO_PORT HT_GPIOC
//火焰引脚定义
#define GPIP_PIN_FIRE1 GPIO_PIN_1
#define GPIP_PIN_FIRE2 GPIO_PIN_2
#define GPIP_PIN_FIRE3 GPIO_PIN_3
#define GPIP_PIN_FIRE4 GPIO_PIN_13
#define HT_GPIO_FIRE_PIN (GPIP_PIN_FIRE1|GPIP_PIN_FIRE2|GPIP_PIN_FIRE3 | GPIP_PIN_FIRE4)
//引脚读取
#define GPIO_Read_Stat1() GPIO_ReadInBit(HT_GPIO_PORT,GPIP_PIN_FIRE1)
#define GPIO_Read_Stat2() GPIO_ReadInBit(HT_GPIO_PORT,GPIP_PIN_FIRE2)
#define GPIO_Read_Stat3() GPIO_ReadInBit(HT_GPIO_PORT,GPIP_PIN_FIRE3)
#define GPIO_Read_Stat4() GPIO_ReadInBit(HT_GPIO_PORT,GPIP_PIN_FIRE4)
void Init_Fire(void);
#endif
fire.c
#include "fire.h"
void Init_Fire(void)
{
CKCU_PeripClockConfig_TypeDef FIRELOCK ={{0}};
FIRELOCK.Bit.PC = 1; //使用PC
CKCU_PeripClockConfig(FIRELOCK,ENABLE); //使能时钟
GPIO_DirectionConfig(HT_GPIO_PORT,HT_GPIO_FIRE_PIN,GPIO_DIR_IN); //配置PD1/2/3为输入模式
GPIO_PullResistorConfig(HT_GPIO_PORT,HT_GPIO_FIRE_PIN,GPIO_PR_DOWN); //下拉
GPIO_InputConfig(HT_GPIO_PORT,HT_GPIO_FIRE_PIN,ENABLE);
}
main.c
#include "ht32.h"
#include "ht32_board.h"
#include "led.h"
#include "delay.h"
#include "uart.h"
#include "fire.h"
#include "buzzer.h"
/**********************TH32 火焰报警**********************
Author:小殷
Date:2022-5-1
******************************************************/
uint8_t data = 0;
uint8_t sendbuf[128] = {0};
//火焰检测
void Fire_Test(void)
{
//火焰传感器1
if(GPIO_Read_Stat1() == RESET)
{
//LED1_ON();
//printf("has fire\n"); //测试提示
Buzzer_Running();
//delay_ms(1000);
}
else{
//LED1_OFF();
//printf("has no fire\n"); //测试提示
//delay_ms(1000);
Buzzer_OFF();
}
//火焰传感器2
if(GPIO_Read_Stat2() == RESET)
{
//LED2_ON();
//printf("has fire2\n");
Buzzer_Running();
//delay_ms(500);
}
else{
//LED2_OFF();
//printf("has no fire2\n"); //测试提示
Buzzer_OFF();
//delay_ms(1000);
}
//火焰传感器3
if(GPIO_Read_Stat3() == RESET)
{
//LED2_ON();
//printf("has fire3\n"); //测试提示
Buzzer_Running();
//delay_ms(500);
}
else{
//LED2_OFF();
//printf("has no fire3\n"); // 测试提示
//delay_ms(1000);
Buzzer_OFF();
}
//火焰传感器4
if(GPIO_Read_Stat4() == RESET)
{
//LED2_ON();
//printf("has fire4\n"); //测试提示
Buzzer_Running();
//delay_ms(500);
}
else{
//LED2_OFF();
//printf("has no fire4\n"); //测试提示
//delay_ms(1000);
Buzzer_OFF();
}
}
int main()
{
Led_Init(); //LED初始化
USARTx_Init(); //uart初始化
Init_Fire();
Buzzer_Init(); //Buzzer初始化
Usart_SendStr(HT_USART1,(uint8_t *)"------HT32 fire TEST-------\r\n");//循环发送字符串,测试用
while(1)
{
Fire_Test();
}
}
火焰传感器本是检测到火焰后输出高电平,但是我在实验的时候是检测到火焰输出的是低电平,配置的模式也尝试过修改,最后还是这样。望大佬指正
加油耶