# [教學]Arduino懶人遙控電燈開關 搬到新家之後,第一次有了自己的房間 新房間什麼都好,就是沒有離床近一點的電燈開關 每晚睡前都要到門口關燈之後再摸黑爬回床上 秉持著科技來自於惰性的精神 我用Arduino做了一個低科技東東: {%youtube 2opoliKnHnE%} 製作時間: 初學且材料齊全 3~5小時 再做一次 1小時 再做第三次 15分鐘 ## 材料!  從左至右分別是: 1. Arduino UNO板一份  一個小電腦! 他會記住你要執行的程式和指令,並且接收來自紅外線接收器的訊號、傳送給伺服馬達要轉幾度的訊號。 我們等等會需要跟Arduino跟用USB Type B線電腦連接,這樣就可以把我們想要機器做的指令從電腦上傳到Adruino上。  USB Type B 本人 通常在買Arduino時就會附贈!沒附贈也沒關係,各大電子材料行都有。 2. 麵包板  一塊長得跟麵包一點都不像的板子 關於這塊板子,我們得先知道他底下是怎麼通電的。 在上面的圖片中,左右各有兩排藍色和紅色的線,代表它們旁邊的孔(也就是最左兩直排跟最右兩直排)是每直行互相通電的。 而中間標號123和abc的那30x10個孔,則是依照我用上面黃色筆跡畫的方向,橫著通電。 3. SG-90 伺服馬達  幫你按開關的酷東西 馬達上面會有買的時候附贈的轉動手臂,因此我們就可以用馬達的轉動來這樣控制開關:  4. 紅外線接收器  中間那個三隻腳的東東 他可以把接收到的紅外線訊號變成有意義的電流,然後傳給Arduino做判斷 對了 既然有接收器就需要發送器  一般家用的電視遙控器都可以,廠牌規格不一樣沒關係,只要他是紅外線發送訊號的就好。 5. 杜邦線  很像小時候吃的那種彩虹色、一條一條的糖果 就是一種電線,需要的時候可以一條一條撕下來。他上面堅硬的針頭讓我們在插麵包板跟Arduino時更容易固定 - 以上東西在可以在哪裡得到? 1. 當然,網購一定買的到。 2. 你家附近的電子材料行 (中壢有大洋電子、台南有南一電子和TNA168可以去) 3. 當你的家人朋友有電機背景.jpg ## 前提! 在你開始做之前,有一些事必須先知道: ### 1. 電燈開關附近要有插座 畢竟這整個東西還是吃電的,所以還是需要一個電源才行,如圖:  對我那時是用capo固定伺服馬達的,後來改用束帶固定 其實我最一開始的想法是用電池供電,用ATtiny85代替Arduino。這樣不僅體積小很多也不用用插座供電,但是在燒錄程式到ATtiny85的過程中,軟體的部分會無法溝通所以才放棄的。如果有做出來的話我再打一篇教學。 ### 2. 先來認識Arduino吧! 如果是第一次接觸程式語言或是Arduino的人,看到程式這個字應該都會感覺到陌生吧? 沒關係,我接觸了一年也還是很矇。 網路上的教學其實非常多,但是就得耐住性子,一步步花時間認識這個環境。正好,疫情在家的期間你可以花時間多學一個東西。 我當初就是看[佑來認真教](https://www.youtube.com/channel/UCCd23n-zY1Vfsvc9FLrZZbQ)的arduino教學系列。雖然不是最精深的arduino教學,但是是我認為最容易入門、最好懂的教學系列。 {%youtube 3mw-1Bvv0WU %} 對於初學者,建議先看到 **[實作01-基礎Blink](https://www.youtube.com/watch?v=KzjWbRozItM&t=1s)**,了解Arduino IDE是怎麼上傳程式、基本操作之後,後面的教學會更容易理解喔。 ## 開始! ### 1. 把所以有東西按照下圖連起來:  我們可以分成三個部分說明: #### 1. 電源  紅色線跟藍色線就是剛剛提到的杜邦線,如此可以讓麵包板最上面兩排作為正極及負極的電源 #### 2. 紅外線接收器  三隻腳直接插進麵包板就可以了,但是切記三支腳的順序不能錯(面對圓球時,右腳正極、中腳負極、左腳接Arduino二號腳位),否則紅外線接收器有機率壞掉 #### 3. 伺服馬達  在用Thinkercad做這張圖的時候,一直覺得這個圖示也太不像伺服馬達,後來才發現這是俯視圖:  這裡有一點需要注意!伺服馬達會有三條線,分別是橘色(接Arduino五號腳位)、紅色(接正極)、棕色(接負極),分清楚之後再用杜邦線連接起來。 ### 2. 讓電腦連上Arduino 用剛剛提到的USB type B讓電腦和Arduino連接。再把Arduino IDE打開,以下的code複製上去吧: ``` ///////////////////////////////前置作業/////////////////////////////// #include<IRremote.h> //引入紅外線和伺服馬達的函式庫 #include <Servo.h> Servo myservo; IRrecv irrecv(2); //紅外線感測器的訊號從2號腳位輸入 decode_results results; void setup() { Serial.begin(9600); //啟動序列埠 (按右上角放大鏡啟動!) myservo.attach(5); //伺服馬達的訊號從5號腳位輸出 Serial.println("啟動紅外線接收器及序列埠"); //在序列埠顯示這一行文字 irrecv.enableIRIn(); } ///////////////////////////////////////////////////////////////////// ///////////////////////////////程式開始/////////////////////////////// void loop() { if(irrecv.decode(&results)) { Serial.println(results.value); //在序列埠監控視窗顯示遙控器訊號的解碼後的數字 irrecv.stop(); //把紅外線接收器暫時關閉 if(results.value==2105361595) //在兩個等號右邊把數字刪掉,填入你想要作為開關按鈕發出的訊號值。像我的是2105361595 { myservo.write(47); //伺服馬達轉到47度 delay(500); //停止500毫秒 myservo.write(40); //伺服馬達轉到40度 } if(results.value==2105377915) //在兩個等號右邊把數字刪掉,填入你想要作為開關按鈕發出的訊號值。像我的是2105377915 { myservo.write(0); //伺服馬達轉到0度 delay(500); //停止500毫秒 myservo.write(10); //伺服馬達轉到10度 } irrecv.enableIRIn(); //再把紅外線接收器打開 } delay(100); } ``` 在這篇教學裡面,我不打算教有關程式的東西。畢竟程式的概念太多,要通通解釋太麻煩;而且有些東西我也看不懂。 想要了解這些程式碼的意義的人可以看一下用中文打的註解,我有大略說明每一行code所代表的意思。 複製上去之後應該會長這樣:  打完記得儲存! ### 3. 讓Arduino認識紅外線接受器的系統 在上傳程式之前,我們必須先讓Arduino認識紅外線的函式庫,否則Arduino是無法解讀紅外線接受器的訊號的。 而要怎麼讓他們認識呢?詳細操作方式可以見下面影片: {%youtube 5bfJTu5tekY%} 建議全部看完。若覺得自己對Arduino有一定了解的話可以直接從2:47開始,5:00結束 ## 上傳! 接著就按下左上角的上傳。上傳成功的話下方的藍色框框會顯示"Done uploading"字樣,如圖:  上傳完成之後,你的伺服馬達可能會突然轉動一下,這是正常的。 但現在去按你家的遙控器他是不會動的,因為這些程式只認得我的遙控器。必須對程式碼做一點點修改,才能讓讓程式認得你家的遙控器。 (不過如果你的遙控器跟我的型號一樣,那你可以試試看按1跟2,有機率伺服馬達就會開始轉動) 這時候要按下右上方的放大鏡:  (這張圖是GIF喔 給他一點時間動起來) 會出現一個視窗,顯示"啟動紅外線接收器及序列埠"字樣 這時候就可以拿起你家的遙控器,然後對著紅外線接收器開始按按鈕了: 這時候,你可以發現,每個按鈕都在按下去之後,在視窗上出現屬於自己的數字, {%youtube vzLlCygmvHo%} 在你決定好哪兩個按鈕作為開燈按鈕與關燈按鈕之後,將按下按鈕之後第一個跑出的數字複製起來(因為長壓按鈕的話會有其他訊號),並在程式碼中雙等號的右邊貼上: /////////程式碼///////// if(results.value== [在此貼上開燈訊號]) //在兩個等號右邊把數字刪掉,填入你想要作為開燈按鈕發出的訊號值。像我的是2105361595 { myservo.write(47); //伺服馬達轉到47度 delay(500); //停止500毫秒 myservo.write(40); //伺服馬達轉到40度 } if(results.value==[在此貼上關燈訊號]) //在兩個等號右邊把數字刪掉,填入你想要作為開關按鈕發出的訊號值。像我的是2105377915 { myservo.write(0); //伺服馬達轉到0度 delay(500); //停止500毫秒 myservo.write(10); //伺服馬達轉到10度 } /////////程式碼///////// 然後再上傳一次,就可以試試看你在按按鈕時伺服馬達會不會轉動囉! {%youtube ouGWMnYYjGQ%} ## 設置! 上傳後就可以把USB頭從電腦上拔掉了。USB頭能夠插到任何手機充電器的變壓器上為他供電。剩下的就是在電燈開關上的配置。  這是我在電燈開關上的配置:將電燈開關的殼打開,用束帶繞一圈之後固定伺服馬達。 ## 注意! 若是照著我的配置去擺放伺服馬達,則務必注意,在你把插頭拆上的那一刻,伺服馬達的轉動手臂會轉到一個非常不自然的位置。接下來要嘛你的伺服馬達沒固定好被拱起來,要嘛你的伺服馬達的轉動手臂直接被彈飛。 所以建議在Arduino通電之後先按按鈕,讓手臂維持開燈的狀態再裝。 {%youtube 2opoliKnHnE%} 這樣就成功了ヽ(*´∀`)ノ゚ ### Have Fun!
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.