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();
}