在上一节中,我们学习了DHT11温湿度传感器的使用。在这一节,结合温湿度检测子系统的功能,我们为系统设计执行机构。
系统的执行机构利用继电器加风扇来完成。当环境的温度或湿度超过设定值时,继电器吸合,风扇工作,。
6.1 继电器的介绍
本项目以1路5V继电器模块为例,进行项目设计。其它类型继电器模块类似。1路5V继电器模块采用光耦进行隔离,性能稳定,人性化设计可选择高电平或者低电平信号触发,仅需5mA电流即可驱动控制能力为10A的继电器吸合。
产品尺寸见图1,参数见表1。
图1 5V继电器尺寸(1路)
表1 产品参数表
工作电压 |
5V |
静态电流 |
5mA |
MAX电流 |
190mA |
触发电压 |
低:0 |
高:5V | |
触发电流 |
2—4mA |
MAX负载 |
AC250V/10A DC30V/10A |
6.2 继电器接线方式
模块有触发电平选择端,中间有COM公共端,当LOW(L)端与公共端接通时,为低电平触发,当HIGH(H)端与公共端接通时,为高电平触发。
继电器的接线可以分为两种情况,一种为常开接法;另一种为常闭接法
a.常开接法
当信号触发端有电平信号时,继电器吸合,相当于开关闭合,此时电路接通,设备将接通,正常工作。
具体接法如图2所示。
图2 继电器常开接线图
b.常闭接法
当信号触发端有电平信号时,继电器吸合,相当于开关由原来接通变为断开,此时设备将断电停止工作。
图3 继电器常闭接线图
6.3 继电器的引脚定义及功能
表2 继电器引脚表
序号 |
引脚符号 |
引脚定义及功能 |
1 |
DC |
供电电源正极(按继电器工作电压选择) |
2 |
DC- |
供电电源地 |
3 |
IN或INx |
控制信号输入端 |
4 |
NO或NOx |
负载接入端,常开 |
5 |
COM或COMx |
负载接入端,公共端 |
6 |
NO或NCx |
负载接入端,常闭 |
6.4 项目说明
系统利用DHT11采取环境温度,当温度超过一定值时,继电器工作,风扇转动,而当温度低于一定值时,LED灯亮。引脚如表3所示。
表3 引脚表
STM32F103C8T6引脚 |
元件 |
功能描述 |
PB15 |
DHT11_DATA |
DHT11连线 |
VCC |
VCC | |
GND |
GND | |
VCC |
DC |
继电器连线 |
GND |
DC- | |
PB12 |
IN或INx | |
PC13 |
LED1 |
LED连线 |
VCC3.3 |
阳极 | |
GND |
阴极(接电阻) |
6.5 继电器与风扇的接法
如图4所示,继电器与风扇的接法。注意本例中,程序中
图4 继电器风扇接线图
6.6 继电器程序
Relay.h
#ifndef __RELAY_H
#define __RELAY_H
#include "sys.h"
#define Relay PBout(12) // PB12
void Relay_Init(void);
#endif
Relay.c
#include "relay.h"
void Relay_Init(void)//继电器和蜂鸣器的初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB &GPIO_InitStructure); //根据设定参数初始化GPIOB
GPIO_SetBits(GPIOB GPIO_Pin_12); //PB12 输出高
}
6.7 主程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "dht11.h"
#include "relay.h"
int main(void)
{
u16 times=0;
u8 humi_value temp_value;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
DHT11_Init(); //温湿度传感器初始化
Relay_Init();
while(1)
{
times ;
DHT11_Read_Data(&temp_value &humi_value); //读取温湿度值
if(times0==0)printf("%d " temp_value);
if(times0==0)printf("%d " humi_value);
if(temp_value > 30)
{
Relay = 0;//继电器工作、风扇转动
}
else if(temp_value < 26)
{
Relay = 1;//继电器关闭,风扇停止转动
}
if(times0==0) LED1=!LED1; //闪烁LED 提示系统正在运行.
delay_ms(10);
}
}
以上是STM32 智能家居中温湿度子系统中继电器的工作。欢迎共同讨论,纠错。期待关注、点赞、转发。粉丝朋友可直接私信索要相关资料(项目源码)。
〖特别声明〗:本文内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。如有侵犯您的原创版权或者图片、等版权权利请告知 wzz#tom.com,我们将尽快删除相关内容。