资讯详情

【合泰HT32火焰传感器报警】

合泰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测试链接需要自取

加油耶

标签: 传感器pr9268201传感器has500

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台