每年夏天的早上都會被無情的陽光給剌醒,很不甘願的爬起來拉下窗簾,然後繼續爬回去睡,但這樣總是覺得很麻煩,於是發揮Maker的精神,自己來DIY一個自動感應日光的遮陽捲簾,也可以按下手動鍵,改成手動控制捲簾上升或下降,準備材料如下
光線感應器(其實就是光敏電阻啦)
捲簾的馬達(360度的伺服馬達)
不想要的arduino lenonardo(難用)
紅外線反射感應器(也叫循跡感應器)裝在下方當成捲簾下降的極限位置
窗子中間放光線感應器用來感應白天或晚上
上方的紅外線感應器,裝在上方當成捲簾上升的極限位置
控制器部份
5V/2A電源模組
手動控制按鍵
程式如下
#include <Servo.h>
#define DownIRsensor 6 //下降的極限位置(紅外線感應pin腳)
#define UpIRsensor 4 //上升的極限位置(紅外線感應pin腳)
#define DayNightSensor 7 //光敏電阻信號讀取腳位
#define AutoManual 8 //Auto=0, Manual=1
#define ManualUp 11 //手動上升捲簾
#define ManualDown 10 //手動下降捲簾
Servo myservo;
bool debug = 1;
bool AutoFlag = 1; //AutoFlag = 0代表手動, AutoFlag = 1代表自動
unsigned char action_times = 0xFF;
unsigned char last_action_times = action_times;
bool ManualUpPressed = 0, ManualDownPressed = 0;
void setup() {
pinMode(DownIRsensor, INPUT);
pinMode(UpIRsensor, INPUT);
pinMode(AutoManual, INPUT); //Auto=0, Manual=1
pinMode(DayNightSensor, INPUT);
digitalWrite(DayNightSensor, HIGH);
pinMode(ManualUp, INPUT);
pinMode(ManualDown, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (AutoFlag) {
if (digitalRead(AutoManual) == 0) {
action_times = 0x01;
}
else if (digitalRead(DayNightSensor) == 0) { //代表白天
action_times = 0x04;
}
else if (digitalRead(DayNightSensor) == 1) { //代表晚上
action_times = 0x05;
}
else {
action_times = 0xFF;
}
}
else {
if (digitalRead(AutoManual) == 0) {
action_times = 0x01;
}
else if (digitalRead(ManualUp) == 0 && ManualDownPressed == 0) { //捲簾上升
action_times = 0x02;
}
else if (digitalRead(ManualDown) == 0 && ManualUpPressed == 0) { //捲簾下降
action_times = 0x03;
}
else {
action_times = 0xFF;
}
}
if (action_times != last_action_times) {
last_action_times = action_times;
if (action_times == 0x01) { //手動或自動
AutoFlag = !AutoFlag;
if (AutoFlag) {
myservo.detach();
ManualUpPressed = 0;
ManualDownPressed = 0;
digitalWrite(13, LOW);
if (debug) {
Serial.println("Switch to Auto Mode");
}
}
else {
digitalWrite(13, HIGH);
if (debug) {
Serial.println("Switch to Manual Mode");
}
}
}
else if (action_times == 0x02) { //手動上升按鍵程序
ManualUpPressed = !ManualUpPressed;
if (ManualUpPressed) {
myservo.attach(9); //連接servo
myservo.write(180); //捲簾上升
if (debug) {
Serial.println("Electric Shutter is going up...");
}
}
else {
myservo.detach();
if (debug) {
Serial.println("Electric Shutter is stop");
}
}
}
else if (action_times == 0x03) { //手動下降按鍵程序
ManualDownPressed = !ManualDownPressed;
if (ManualDownPressed) {
myservo.attach(9); //連接servo
myservo.write(0); //捲簾下降
if (debug) {
Serial.println("Electric Shutter is going down...");
delay(500);
}
}
else {
myservo.detach();
if (debug) {
Serial.println("Electric Shutter is stop");
}
}
}
else if (action_times == 0x04) { //白天處理程序
if (debug) {
Serial.println("Now is day...");
}
if (digitalRead(DownIRsensor) == 1) {
myservo.attach(9); //連接servo
myservo.write(0); //捲簾下降
do {
if (debug) {
Serial.println("Electric Shutter is going down...");
}
} while (digitalRead(DownIRsensor) == 1);
}
if (debug) {
Serial.println("down Electric Shutter is stop...");
}
myservo.detach();
} // EOF- 0x04
else if (action_times == 0x05) { //晚上處理程序
if (debug) {
Serial.println("Now is night...");
}
if (digitalRead(UpIRsensor) == 0) {
myservo.attach(9);
myservo.write(180);
do {
if (debug) {
Serial.println("Electric Shutter is going up...");
}
} while (digitalRead(UpIRsensor) == 0);
}
if (debug) {
Serial.println("Up Electric Shutter is stop...");
}
myservo.detach();
} // EOF- 0x05
}
} // EOF- Loop
實際操作影片
我是新手請問可以提供 所有的套件、零件名稱嗎?
回覆刪除好想做
這需要花時間整理一下...
刪除麻煩版主有機會能整理出來,自己也好想DIY^^
刪除可以先看看程式, 程式沒問題了, 接線很快的
刪除嗨嗨
刪除是否也可以提供接線的方式
回覆刪除謝謝
這個也要花時間畫圖, 我目前是憑空想像做的...XD
刪除憑空想像就這樣厲害....佩服佩服
刪除沒用到幾根pin嘛~~~
刪除材料篇請看這裡http://nhs-tw.blogspot.tw/2016/06/arduino-electricshutter1.html
回覆刪除收到 感謝版主
刪除收到 感謝版主
刪除請問板主是如何讓伺服馬達與捲簾齒輪咬合的?
回覆刪除我也像做這類控制,但是不知道如何讓與伺服馬達結合控制
你好, 我把有齒輪的那一邊換掉, 換上我自己用3D印表機印的零件, 直接和伺服馬達結合, 不用多此一舉用原來捲簾的齒輪, 簡單好用快速, 你可以試試看
刪除感謝板主回覆~
刪除原本也是希望可以直接與捲簾齒輪結合,但是應該沒辦法直接與伺服馬達直接咬合吧?
其實我也還沒直接購買捲簾來觀察他的齒輪機構,所以想說先跟您請益看看~~
我下班回家後拍給你看,你就懂了
刪除啊...這blog不能貼照片, 你寄mail給我, 我再把照片寄給你看
刪除我也想研究如何讓齒輪與伺服馬達結合控制, 可以分享給我嗎??謝謝
刪除我已po上照片和簡單說明, 請點下列連結
刪除http://nhs-tw.blogspot.com/2018/10/arduino-diy.html
Sorry~~~前幾天剛好在忙~~一直沒回來這邊看
回覆刪除urmgand35@gmail.com
麻煩囉~~~謝謝!!
版主
回覆刪除請問如果想加入arduino藍芽模組
有程式嗎?
可以請問您的紅外線極限開關怎麼寫的嗎?
回覆刪除上面已有程式啊...而且後來覺得用紅外線不好, 太陽太大反射時, 會誤動作, 改用時間計算可能比較好...
刪除作者已經移除這則留言。
回覆刪除板主大大 這是我的gmail vincent52078@gmail.com 有些問題想請教你 希望能和我聯絡一下 謝謝~~~
回覆刪除板主大大我有幾個問題想問,已發email了,謝謝~
回覆刪除可以用esp8266ex D1的模組來做嗎
回覆刪除pin數夠就可以啊...
刪除有半開的程式,有的話怎麼改
回覆刪除可以自動感光讓窗簾開關嗎??
希望有更詳細的解說
感謝版主
有半開的程式,有的話怎麼改
回覆刪除可以自動感光讓窗簾開關嗎??
希望有更詳細的解說
感謝版主
你好我想做光感窗簾,用的是伺服馬達,但不會打程式,可以請教你程式嗎??
回覆刪除不會打程式, 那就換個題目吧
刪除能拜託版主提供電路圖嗎?因為對線路實在不太懂但又想動手做一個出來,感恩版主
回覆刪除版主請問我用的MG996R 好像是不可以控制角度的,請問你用的也是嘛,如果用不可控角度的,要怎麼定義開或關或者是轉多久 ,版主可以私訊你嗎
回覆刪除請問版主大大有接線圖嗎
回覆刪除版主有接線圖嗎謝謝
回覆刪除版主~可以給接線圖嗎~
回覆刪除