极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11004|回复: 4

洗手间自动化设计

[复制链接]
发表于 2014-12-15 20:02:55 | 显示全部楼层 |阅读模式
本帖最后由 glmyc 于 2014-12-15 20:34 编辑

/*洗手间自动控制程序

一、程序实现没有人进入洗手间
1.根据室外室内温度来判明天气是冬天还是夏天,根据温度开关窗户
2.如果室外温度超过26度,室内室外温度相差4度,湿度超过10%
自动打开排气扇降温,解决南方开空调后凉下来后关闭空调,过一段时间室内开始闷热。
3.室外温度低于15度时,关闭窗户
二、当有人进入洗手间时
1.打开电子马桶,对坐垫进行预热
2.自动根据室内亮度点亮灯光
3.自动关闭窗户
4.如果检测到有人坐到马桶上,自动打开排气扇
5.如果没有坐在马桶上,自动根据洗手间内有人时延时相关开关
6.人离开时,延时1分,用于马桶充水、延时照明、根据室外温度打开或关闭窗户
***********************************************
用一个MINI PRO来控制
用两个DHT11来测量室外(2脚)、室内温湿度(3脚)
用一个红外传感器感应是否有人进入(4脚)
用一个光敏传感器感应光线强度(5脚)
用一个超声波一检测是否有人坐马桶(5、6脚)
选用低电平(LOW)触发继电器
窗户推杆开关在8、9脚,风扇开关在10脚,灯开关在11脚
马桶开关在12脚、备用13脚

经使用一段时间,感觉非常方便
*/
#include <dht11.h>
dht11 DHT11;
dht11 DHT12;
#define DHT11PIN 2
#define DHT12PIN 3
#define InfraredSensor 4
#define Light 5
#define Trig 6
#define Echo 7
#define Windows1 8
#define Windows2 9
#define Lamp 11
#define ExhaustFan 10
#define Stool 12
#define Pin13 13
int outtemp, outhumi, intemp, inhumi;

float Get_SR05(int Trigpin , int Echopin) {
  digitalWrite(Trigpin, LOW);
  delayMicroseconds(2);
  digitalWrite(Trigpin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trigpin, LOW);
  float distan = pulseIn(Echopin, HIGH) / 58.00;
  return distan;
}
void setup()
{
  Serial.begin(9600);
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
  pinMode(Light, INPUT);
  pinMode(Windows1, OUTPUT);
  pinMode(Windows2, OUTPUT);
  pinMode(ExhaustFan, OUTPUT);
  pinMode(Lamp, OUTPUT);
  pinMode(Stool, OUTPUT);
  pinMode(Pin13, OUTPUT);
  //  digitalWrite(Windows1, HIGH);    //初始化各继电器模块
  //  digitalWrite(Windows2, HIGH);
  digitalWrite(ExhaustFan, HIGH);
  digitalWrite(Lamp, HIGH);
  digitalWrite(Stool, HIGH);
  digitalWrite(Pin13, HIGH);
}

void loop()
{
  float distance;    //超声波距离变量
  int RL1 = digitalRead(InfraredSensor);  //第一时间检测是否有人
  delay(3300);        //由于洗手间一般无人在里面时门是开着的,路过的人经测试需要3.3秒,不会启动自动装置
  int RL2 = digitalRead(InfraredSensor);  //第二时间检测是否有人
  if (RL1 == RL2) {   //如果第一、第二时间检测的结果相同
    int chk1 = DHT11.read(DHT11PIN);  //读取室外温湿度传感器
    int chk2 = DHT12.read(DHT12PIN);  //读取室内温湿度传感器
    int Outtemp = DHT11.temperature;  //读取室外温度
    int Outhumi = DHT11.humidity;  //读取室外湿度
    int Intemp = DHT12.temperature;  //读取室内温度
    int Inhumi = DHT12.humidity;  //读取室内湿度
    if (RL1 == 0) {  //如果洗手间内没有人
      if (Outtemp < 15) {  //如果室外温度低于17摄氏度
        digitalWrite(Windows1, LOW);  //关闭窗户
        digitalWrite(Windows2, LOW);  //关闭窗户
        Serial.println("0.1 Windows Close");
        //delay(10000);
      } else {
        if (Outtemp > 26) {  //如果室外温度高于26摄氏度
          //如果室内温度与室外温度相差超过4度或湿度相差超过10%
          if ((Intemp - Outtemp) > 4 || (Inhumi - Outhumi) > 10) {
            digitalWrite(Windows1, LOW);  //关闭窗户
            digitalWrite(Windows2, LOW);  //关闭窗户
            digitalWrite(ExhaustFan, LOW);  //打开排气扇进行排气
            delay(30000);
            digitalWrite(Windows1, HIGH);  //关闭窗户
            digitalWrite(Windows2, HIGH);  //关闭窗户
            digitalWrite(ExhaustFan, HIGH);  //打开排气扇进行排气
          } else {
            digitalWrite(Windows1, HIGH);  //打开窗户(常态)
            digitalWrite(Windows2, HIGH);  //打开窗户(常态)
            delay(30000);
          }
        } else {
          //其它情况
          digitalWrite(Windows1, HIGH);  //打开窗户(常态)
          digitalWrite(Windows2, HIGH);  //打开窗户(常态)
          digitalWrite(ExhaustFan, HIGH);  //关闭排气扇
          digitalWrite(Lamp, HIGH);  //关闭灯
          digitalWrite(Stool, HIGH);  //关闭马桶
          digitalWrite(Pin13, HIGH);//关闭13脚备用
          delay(30000);
        }
      }
    }
    if (RL1 == 1 && RL2 == 1) {    //如果洗手间有人
      digitalWrite(Stool, LOW);  //打开马桶电源预热坐垫
      digitalWrite(Windows1, LOW);  //关闭窗户
      digitalWrite(Windows2, LOW);  //关闭窗户
      digitalWrite(Pin13, LOW);  //打开13脚备用
      if (Outtemp > 15) {  //如果室外温度高于15度
        digitalWrite(ExhaustFan, LOW);  //打开排气扇进行排气
      }
      if (digitalRead(Light)) {  //如果光线较旱黒
        digitalWrite(Lamp, LOW);  //打开灯光
      }
      int time_l = 0;  //人在洗手间经过的时间
      while (time_l < 100) {
        float distance = Get_SR05(6, 7);    //测出是否有人在坐马桶
        if ((int)distance < 55) {        //距离小于55CM时,认为有人坐马桶
          digitalWrite(ExhaustFan, LOW);  //打开排气扇进行排气
          time_l = 0;    //让时间不进行计量
          delay(1000);
          continue;    //停1秒钟后返回循环
        } else {
          if (digitalRead(InfraredSensor)) {      //如果检测到继续有人在洗手间
            time_l = 0;
            continue;     //返回循环
          } else {
            time_l++;
            delay(500);    //加速循环
            digitalWrite(ExhaustFan, HIGH);  //关闭排气扇进行排气
          }
        }
      }
      digitalWrite(ExhaustFan, HIGH);    //关闭所有用电开关
      digitalWrite(Lamp, HIGH);
      digitalWrite(Stool, HIGH);
      digitalWrite(Pin13, HIGH);
    }
  }
}
回复

使用道具 举报

 楼主| 发表于 2014-12-15 20:11:28 | 显示全部楼层
本帖最后由 glmyc 于 2014-12-15 20:16 编辑

上图片为准{:soso_e100:}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-12-15 20:26:43 | 显示全部楼层
把线收拾整齐,加上装饰就更完美了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-15 20:32:53 | 显示全部楼层
谢谢,确实欠收拾{:soso_e127:}。
回复 支持 反对

使用道具 举报

发表于 2014-12-16 11:30:45 | 显示全部楼层
赞,很实用。

。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 01:54 , Processed in 0.044327 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表