基于51单片机的智能自动感应洗手器水龙头控制proteus仿真原理图程序

功能:
0.本项目采用STC89C52作为单片机系统的控制MCU
1.检测到有人且伸手,水龙头加热并出水5s
2.若无人时,有异物遮挡红外光电传感器也不出水
3.系统采用两路继电器分别控制加热设备和出水设备,这里采用的是功率电阻和5V小水泵模拟演示,更加真实具体的体现了整个工作流程。
4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:
在这里插入图片描述

PCB :
在这里插入图片描述

主程序:


#include "reg52.h"
#include <intrins.h>
#include "delay.h"

#define uint unsigned int
#define uchar unsigned char

sbit RELAY_HEAT  = P2^2;
sbit RELAY_WATER = P2^1;

sbit BODY_PIN = P2^0;
sbit HAND_PIN   = P3^3;

void Timer0_Init(void); //定时器0初始化

bit waterFlag = 0; //出水标志

unsigned char waterDelay = 0;
unsigned char bodyDelay = 0;

/*----------------------------------------------------------------------------------
					main()_程序入口
----------------------------------------------------------------------------------*/
void main(void)
{
	Timer0_Init();
	RELAY_WATER = 1; //关闭出水
	RELAY_HEAT  = 1; //关闭加热

	while (1)
	{
		if (BODY_PIN == 0)
		{
			bodyDelay = 10; //有人
		}

		if (HAND_PIN == 0 && bodyDelay != 0) //有人且伸手
		{
			DelayMs(20); //延时再次确认
			if (HAND_PIN == 0)
			{
				waterFlag = 1; //出水
				waterDelay = 10;
			}
		}

		if (waterFlag == 1 && waterDelay != 0) //出热水
		{
			RELAY_WATER = 0; // 打开出水
			RELAY_HEAT = 0;	 // 打开加热
		}
		else
		{
			RELAY_WATER = 1; // 关闭出水
			RELAY_HEAT = 1;	 // 关闭加热
		}
	}

}

/************************* 定时器0初始化 *************************/
void Timer0_Init(void)
{
    TMOD &= 0xF0;
    TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    TH0 = (65536 - 9216) / 256; //重新赋值 10ms
    TL0 = (65536 - 9216) % 256;
    EA = 1;  //总中断打开
    ET0 = 1; //定时器中断打开
    TR0 = 1; //定时器计数打开
    // PT0 = 1; //高优先级
}

/************************* 定时器0中断处理 *************************/
void Timer0_Interrupt(void) interrupt 1
{
    static unsigned int time10ms  = 0;

    TH0 = (65536 - 9216) / 256; //重新赋值 10ms
    TL0 = (65536 - 9216) % 256;
    time10ms++;

    if (time10ms > 50)
    {
		if (bodyDelay > 0) //人体检测倒计时
		{
			bodyDelay--;
		}
        
		if (waterDelay > 0) //出水倒计时
		{
			waterDelay--;
		}
        else
        {
            waterFlag = 0;
        }
        time10ms = 0;
    }
}

仿真演示视频:
https://www.bilibili.com/video/BV1h44y1S7Hs/

实物演示视频:
https://www.bilibili.com/video/BV1zP411M7Q5/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值