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

加油耶

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小殷学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值