光控定时电动窗帘开关项目

1、从本来已有的遥控器里引出了相关开关引线(打3个洞,焊6根线,哈哈);

2、用继电器来控制这些开关,目前只控制了开和关;

这是最初的1.0版本

 这是2.0升级版,优雅一些,消除了很多裸线,并尝试着使用了一块UNO原型板。

代码重新更新一下

/***********************************************
 *                光控窗帘2.0版本
 ***********************************************
 *主要改成了使用扩展板模式
 *继电器的激活电平改为低电平触发
 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"

LiquidCrystal_I2C lcd(0x27,16,2); 
DS1307 rtc;    
   
int pinRelayC = 7;  //CLOSE
int pinRelayO = 6;  //OPEN
int lightR    = A0; 
int val;

void setup()
{  
  pinMode(pinRelayC, OUTPUT);
  pinMode(pinRelayO, OUTPUT);  
  pinMode(lightR, INPUT);

  digitalWrite(pinRelayC, HIGH);
  digitalWrite(pinRelayO, HIGH);

  lcd.init();                  //初始化LCD
  lcd.backlight();             //设置LCD背景灯亮
  lcd.blink();
  
  Serial.begin(9600);
  Wire.begin();
  rtc.begin();
  //rtc.adjust(DateTime(__DATE__, __TIME__)); 
}

void PushButton(int pin) 
{
  digitalWrite(pin, LOW); //按下
  delay(500);
  digitalWrite(pin, HIGH);  //马上弹起  
  
  Serial.println("Waiting for 1 min...");  
  int t = 60;
  do{
    lcd.setCursor(0,1);
    lcd.print("Waiting for " + String(t) + " s...");        
    delay(1000);    
  }while(--t > 0);
  lcd.clear();
}

void loop()
{ 
  DateTime now = rtc.now();
  int h = now.hour();
  int m = now.minute();
  PrintDateTime(now);
  
  if (((h ==  7) && (m == 0))  || 
      ((h == 14) && (m == 0)))      //每天早晨7点和下午14点打开窗帘
  {    
    Serial.println("7:00|14:00, Opening the Kurtain...");
    PushButton(pinRelayO);        
  }

  if ((h == 13) && (m == 0))
  {
    Serial.println("13:00, Closing the Kurtain...");
    PushButton(pinRelayC); 
  }
  
  val = analogRead(lightR);
  Serial.println(val);
  
  lcd.setCursor(0,1); 
  lcd.print("    ");    //为了消除4个数字回到3个数字时而多余显示的那个数字
  lcd.setCursor(0,1);
  lcd.print(val);
  
  if (val >= 1010)  //光越强,数字越大,最大是1023。用我的生日就刚刚好了 :)
  { 
    Serial.println("Too bright, Closing the Kurtain...");
    PushButton(pinRelayC);                   
  }
  
  delay(1000);  //这是整个程序的延时间隔,不需要过快。
}

void Print2Digit(int digit)
{
  if (digit <= 9)
  {
    Serial.print('0');
    lcd.print('0');
  }
  Serial.print(digit, DEC);
  lcd.print(digit, DEC);
}

void PrintDateTime(DateTime dt)
{
  //Serial.println("DS1307 is alive...");
  lcd.setCursor(0,0);   
  
  Print2Digit(dt.year());
  Serial.print('/');
  lcd.print('/');
 
  Print2Digit(dt.month());
  Serial.print('/');
  lcd.print('/');
  
  Print2Digit(dt.day());
  Serial.print(' ');
  lcd.print(' ');
  
  Print2Digit(dt.hour());
  Serial.print(':');
  lcd.print(':');
  
  Print2Digit(dt.minute());
  Serial.print(':');
  lcd.print(':');
  
  Print2Digit(dt.second());
  Serial.println();  
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

safirst

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

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

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

打赏作者

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

抵扣说明:

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

余额充值