合泰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();
}
}
火焰传感器本是检测到火焰后输出高电平,但是我在实验的时候是检测到火焰输出的是低电平,配置的模式也尝试过修改,最后还是这样。望大佬指正
githubg测试链接需要自取
加油耶