大家好,我是Cyuan
今天跟大家分享一個我最近做的Arduino實作主題 — 紅外線遙控電燈開關
人家都說科技始終來自於人性 這句話用在很懶的我身上真是太適合不過了~
相信很多人跟我一樣都喜歡在睡前用手機吧!
但是用完手機要睡覺時卻要爬起身來關電燈
實在是非常不方便
於是我就用Arduino做了一個小機關來讓我可以躺在床上也能關燈~
在這邊簡單說明一下這個小機關的原理
由紅外線遙控器發出訊號後
在KY-022(紅外線接收器)讀取後 交給Arduino的程式碼判斷程式的下一步動作
如果讀取到的資料沒有在我們設定的資料庫內的話 預設程式會一直重複跑
直到讀取到資料庫內的數值 並執行相對應的動作後 繼續重複讀取
以上是這個機關的原理說明~
那就讓我們進入主題吧!
首先 我們先在電腦上完成程式的編輯然後上傳到Arduino板子上
程式碼參考以下程式碼:
程式碼的邏輯在上面的流程圖中已經提過了這邊就不再贅述了
有些比較特別的東西我在這邊簡單說明一下
在void setup()裡面有一行提到
Serial.begin(9600);
後面備註:傳輸速率設為9600 這個9600稱為鮑率(Baud Rate)
這個是Arduino內建的一個通訊視窗 他跟你的Arduino板子連線著 9600代表的是他的鮑率(Baud Rate)
鮑率可以理解為單位時間內傳輸符號的個數 鮑率越高在單位時間下所能傳輸之符號個數也會越多
類似一種傳輸的頻率
在這邊我們設定為9600
這時我們打開Arduino編輯器右上方有一個放大鏡圖案的按鈕 滑鼠移動到上面顯示"序列埠監控視窗"
點下去後打開了序列埠監控視窗 在右下角可以設定鮑率
由於剛才我們設定了Baud Rate=9600 所以這邊也設定為9600就可以接收到板子上傳來的資訊了~
在倒數第二行程式碼提到 Serial.println(results.value, HEX);
這代表在"序列埠監控視窗"中print(寫) results.value(接收到的數值) 用HEX(16進位 Hexadecimal)表示
到這邊程式碼的介紹就完成了
在來進入接先的步驟囉~
首先我們要先準備:
- Arduino UNO R3(使用其他型號的板子也可以 只要在Arduino設定修改一下就可以了)
- 麵包版
- 紅外線發射器
- KY-022(紅外線接收器)
- 伺服馬達
- 杜邦線
東西都準備好了那就開始吧~
首先 先參考一下接線圖
紅外線遙控器的話 除了傳統的紅外線遙控器之外 其實還有很多東西可以使用
傳統的紅外線遙控器可以直接去電子材料行或網購可以買到很基本的紅外線發射器 一個大約50元
也可以直接找家中現成的遙控器來使用
只要寫另外一個程式來判讀他的編碼之後
修改上面的資料庫就可以使用了~
此外 有很多手機有內建紅外線遙控器功能
比如說我手邊有一隻已經退役的手機:三星的Galaxy S6 Edge
他就有內建這個功能 只要安裝了對應的程式就可以發射紅外線了
一樣寫個程式判讀一下然後宿該程式就可以用了
現在新的手機為了追求輕薄通常會拿掉這個功能算是有點可惜
不過我想也是因為現在比較流行IoT(物聯網) 要操縱這些機關都透過網路了
紅外線算是比較傳統的方式 已經漸漸的要被淘汰了呢!
不過在家中可以以低成本實現遙控功能 玩玩還是不錯
畢竟用紅外線來實現這些功能 還是比透過藍牙或Wi-Fi來的簡單些~
現在來提提當時自己實作時遇到的困難好了
在一開始做的時候我的設計是開關都是各一個動作
也就是說馬達做出開或關這個動作的時候就只會動一次
但是這個用久了會很有問題 也考驗基座的穩定性
在經過一天的使用之後 我才想到幫他加上一個歸零的步驟
在開或關的動作完成之後 馬達會恢復原位 這樣就不會卡到了~
在這邊跟大家分享一下我的馬達的安裝方式
還算是挺原始的~
好啦 以上就是這次的Arduino經驗分享
有任何問題都可以在下面提問 我會盡快回覆的~