Arduino 腳位的電流很小 (小於 40 mA),當你想要切換大電流或大電壓設備 (例如燈泡、馬達或大風扇) 的開關時,會需要一個中繼的電路 (intermediate circuit),最簡單的辦法是使用繼電器。
實驗目的
練習用繼電器控制 12V 風扇。
前提
我假設你已經知道繼電器是什麼,而且也會查 datasheet 看懂繼電器的接線圖。 如果你還不認識繼電器,建議你在做這個實驗前先看一看「繼電器簡介」一文,。
材料
- 麵包板 x 1
- Arduino 主板 x 1
- 直流 12V 風扇 x 1
- 5V 單刀雙擲 (SPDT) 繼電器 x 1
- 1N4004 整流二極體 x 1
- 2n2222 NPN 電晶體 x 1
- 按鈕 (pushbutton) x 1
- 10k 歐姆電阻 x 1
- 1k 歐姆電阻 x 1
我用的是 RAS-0515 小型繼電器,它的線圈電壓是直流 5V,開關電流與電壓為 15A/120VAC (24VDC), 10A/250VAC:
▲ RAS-0515 小型繼電器
RAS-0515 的接線圖如下 (翻過來從底部看):
▲ NC 是 Normal Closed, NO 是 Normal Open,而 COM 是 Common
如果你用比較大的繼電器 (> 12V),記得把 2n2222 換成耐壓較大的 TIP101/TIP102 之類的電晶體。
接線
底下這張圖是繼電器的一般接法,在你開始進行這個實驗的接線前,可以多看幾遍這張圖以加深記憶:
▲ 控制繼電器的電路
我用的 RAS-0515 是 5V 小型繼電器 (上圖是 12V 繼電器),所以繼電器線圈的電源只要從 Arduino +5V 拉出即可。接著開始進行接線。
1) 參考下圖連接繼電器、二極體與電晶體:
其中:
- 繼電器線圈一端接 +5V,線圈的另一端 (藍線) 接到 NPN 電晶體的集極 (Collector)
- 把整流二極體並聯到線圈上,注意整流二極體有方向性,有標示的一端要朝向電源
- NPN 電晶體射極 (Emitter) 接到 GND,然後基極 (Base) 串聯一顆 1k 電阻連接到 Arduino 的 pin 13
為了你的方便,我把 NPN 電晶體跟繼電器的端子 (接腳) 做個標示,如下圖所示:
2) 接著進行風扇的連接:
其中:
- 風扇正極 (紅線) 接到繼電器 NO 端,負極 (黑線) 接到 GND
- 從外接的 12V 電源正極拉一條線到繼電器的 COM 端
外接 12V 電源要怎麼取得呢?很簡單,只要找一下家裏電腦週邊產品的電源供應器,確認是 12V 的即可。
3) 最重要的部份都已經接好了,剩下的步驟只是接一顆按鈕。這顆按鈕的目的是當作風扇的開關,到時只要按一下就開風扇,再按一下就關風扇:
參考上圖,把按鈕的一支腳接到 +5V,另一支腳接到 pin 2 同時接一個 10K 電阻連到 GND,這樣接線的工作就完成了。
程式
底下就是這支用繼電器控制風扇的程式 (RelayAnd12VFan.pde):
程式非常簡單,應該不需要多餘的解釋。把程式上傳到 Arduino 後,當你按下按鈕時,風扇會打開,再按一下風扇就會關閉。繼電器打開的時候會發出「嗒」的一聲,代表繼電器有正常作動。
你可以打開 Serial Monitor 觀察,看看程式的執行是否順利:
用紅外線遙控器遙控風扇
接下來把電路稍微做個修改,我們來把按鈕換掉,改成用紅外線遙控器來遙控風扇。
首先,先把按鈕 (及相關的電阻) 移除,接著照下表把紅外線接收器跟 Arduino 連接起來。紅外線接收器建議使用 38 kHz 的 (如 TSOP2438,TSOP4438, PNA4602, FM-8038TM2-5DN),因為大部份遙控器用 38 kHz 的比較多。
紅外線接收器接腳 Arduino 接腳 Vcc (+ 或 V+) 接到 +5V 電源 GND (-) 接到 GND Vout (或 OUT) 接到 pin 2。你可以接到其它 Digital pin,但程式要配合修改
接線圖如下:
▲ 有些紅外線接收器 GND 和 Vcc 是相反的,接線時請查閱你的 datasheet
底下就是這支用紅外線遙控器遙控風扇的程式 (irRelayAnd12VFan.pde):
程式還是一樣簡單,相信你一定看得懂。唯一要注意的,因為紅外線接收器會把訊號反向,所以 0 代表有收到訊號,因此在檢查接收器有沒有收到紅外線訊號時,必須判斷 irStatus 是不是 0,如果是的話,就代表有收到紅外線訊號。紅外線接收器的狀態儲存在 irStatus 變數裏。
示範影片
▲ 紅外線遙控風扇,按任意鍵均可開關風扇
結語
不只可以開關 12V 風扇,用繼電器也可以控制像大燈泡、馬達、電暖爐、電風扇等家電設備,但是要提醒您,在控制大電力設備,尤其是使用交流電的時候,要特別注意每個環節,因為如果線路沒有正確接好,通電的時候,輕則把 Arduino, 繼電器和電晶體等設備毀損,重則可能會引起火災。因此,一定要非常小心。
不好意思,目前我不太懂繼電器的腳位(看完繼電器簡介還是有不太懂)
回覆刪除我的繼電器型號: OUAZ-SS-105L (5伏特)
哪裡可以查看腳位圖呢?
想用在燈泡去做控制
hi, OUAZ-SS-105L datasheet 在這裏:
回覆刪除http://www.datasheet-found.com/Datasheet.jsp?pn=OUAZ-SS-105L%2C900
你繼電器腳位哪邊看不懂呢?
作者已經移除這則留言。
回覆刪除不好意思~
回覆刪除最近2個月太忙了,沒有注意到..真抱歉
Q:繼電器接到8951的配線要如何接
8951 界接繼電器的接法應該是一樣的,請參考 "接線" 這個段落的圖:
回覆刪除那您有MAIL嗎?
回覆刪除我寄照片給您過目看看
我的 email 是: coopermaa77 gmail.com
回覆刪除不好意思,我有些問題想請教
回覆刪除我買來的繼電器上面已經有板子了,這樣的話接法是不是也不同了呢?
照片寄到您的email了 謝謝
請問:我將【接線】部分的電路接好,然後把微控端換成跳線,單獨接5V/GND。
回覆刪除接到5V時,繼電器動作,切到N.O.
但我接到GND後,卻沒切回N.C.
請問可能是何種問題呢?
--
另外我試過另一種接法:
B端改為5V→R→B端
再來將E端改為控制端,接LOGIC 1/0
這樣的接法就有繼電器的切換效果
但如果控制端是從uC送出不知何不合適
因為切到LOGIC 0時,電流應該會往LOGIC 0方向送,會不會有電流貫道uC的問題..
你把微控換成直接接 5V/GND
回覆刪除接 5V 可以順利讓繼電器銜鐵吸到 NO
接到 GND 是指什麼?
切到 NO 後,如果直接切斷 5V 的電繼電器會跳回 N.C 嗎?
你把 B 的控制端改到 E ?
好像有點不合常理...
我不知道電晶體可以這樣玩
這樣會動嗎?
實在很不想承認..我接錯了><
回覆刪除真是抱歉XDD
沒關係的
回覆刪除這種傻事我幹過無數遍了,呵~
還好,現在 uC 心臟都很強,沒被我電壞
請問版主:
回覆刪除您提供的電路,電晶體B點只有0.5V的訊號可作動嗎!零件需改規格嗎!謝謝
想DIY遙控開關,但遙控主機輸出訊號僅0.5V,無法推動電晶體!
我不是學電子的,這問題考倒我了
回覆刪除倒是 2n2222 datasheet 裏只有寫 Max voltage,而 low voltage 卻沒有提到,說不定只要有一些電壓不同還是辦得到,因為我認為電流有在流動電晶體應該會動才對
請問你遙控主機 GND 有跟電晶片的 GND 接在一起嗎?
遙控主機 GND 有跟電晶體的 GND 接在一起,但是遙控主機輸出訊號僅0.5V推不動晶體,像是有低壓作動的限制說
回覆刪除謝謝版主:
回覆刪除利用您的教學已完成囉~~
晶體有低電流限制,主機的訊號輸出僅DC0.5v(電流不會量),但串個水銀電池讓電壓上升就可推動電晶體完成繼電器作動了~~
太感謝囉
不客氣,其實我也沒幫什麼忙啊。:)
回覆刪除我是大陸高中畢業生,正在看您的blog。我想有幾個問題要問一下,那個電晶體是防止反向的電壓嗎?我可不可以不要它呢?又會有什么后果呢?
回覆刪除你是說電晶體還是二極體?
回覆刪除老長時間沒看您的博客,沒發現回復。但是訂閱了您的RSS。原來電晶體就是大陸“三極管”啊。。。三極管的作用我到知道。我是說那個而二極體"二極管"可以可以不要呢?謝謝您啦
回覆刪除保險起見 (避免燒錄電晶體 "三極管",那個二極體 "二極管" 留著會比較安全
回覆刪除你可以參考一下這裏的討論:
http://gcbbs.digitw.com/phpbb2/viewtopic.php?f=1&t=2882&hilit=
呵呵,謝謝您啦
回覆刪除歡迎常來,或是到 Openlab Taipei FB 一起交流:
回覆刪除https://www.facebook.com/groups/openlab.taipei/
不好意思請問一下
回覆刪除如果想要控制大電壓(20~30v)低電流(200~300ma)
但是想要控制轉速或亮度要怎麼辦呢?
交流電嗎?
回覆刪除也許可以用 TRIAC, see:
http://www.youtube.com/watch?v=YREOjmNQf84&feature=plcp
不好意思我的說法可能挺含糊的
回覆刪除簡單來說我想要用arduino的低電壓PWM達到控制大功率的LED調光
因為LED電壓本身需要另外使用電供
目前考慮幾種方法
1.L293D
2.固態繼電器
3.TRIAC
不知道哪種方法比較適合我呢???
Dear Cooper Maa
回覆刪除不好意思,我想請教一下,假如我想要把按鈕和紅外線控制風散的部分變成DHT11的溫度感測器,溫度高於某數起動風散,低於則關閉風散,請問也是用繼電器的方法嗎,感謝回覆。
你只是換 Sensor 把紅外線換成溫度感測器,風扇控制的部不受影響
回覆刪除我想用IR遙控來控制馬達...我已經解碼了, 可是不知道如何讓不同的ircode來控制前進,後退與左右~請救救我...謝謝~
回覆刪除2n2222 可換成C9013 NPN嗎?
回覆刪除@冐(上日下月),應該可以
回覆刪除@EagleCross Steven,
回覆刪除你已經會解碼,那很簡單啊
if (irrecv.decode(&result)) {
if (result == keyForward) {
motorForward();
else (result == keyBackward)) {
motorBackward();
} else
...
}
照這邏輯寫應該就行了
若我想要寫給12V一個PWM訊號,是用relay嗎?還是其它開關可以寫入PWM
回覆刪除作者已經移除這則留言。
回覆刪除除了relay外, MOSFET也是個選擇喔. 兩者都有可控制開關的特性.
回覆刪除另, 這裡有人熟USB的控制嗎? 我想從電腦經過USB來控制MOSFET/relay開關(沒經過微控制器), 但又希望能不用另裝USB-to-serial(RS232)轉換器. 目前整理出兩個方向. 1)找方法從電腦控制USB的5V電源(沒找到). 2)解析USB的傳輸協定來扭曲操作來控制USB裡的data+或data-的pin.
不知道有高手能給點意見嗎?
作者已經移除這則留言。
回覆刪除@Kevin Wang
回覆刪除謝謝你的分享
不經過微控制器控制 USB 的 5V 電源?
如果用 RS232 好像是可以的
但 USB 辦得到嗎?
hi Cooper Maa,
回覆刪除我想学Arduino,要从哪里开始?
hi,
回覆刪除如果不嫌棄的話,可以從我部落格上的「Arduino 入門教學」開始。
另外,這些教學影片也不可能錯過:
http://coopermaa2nd.blogspot.com/2011/12/arduino-video-workshop.html
http://coopermaa2nd.blogspot.tw/2012/11/arduino-starter-kit.html
http://www.youtube.com/watch?v=fCxzA9_kg6s
你好想請問一下,如果想讓風扇項自然風一樣,慢到快一直循環,程式中應該加入怎樣的指令呢?
回覆刪除作者已經移除這則留言。
回覆刪除@wang
回覆刪除可能要用 PWM 控制風扇轉速喔
不過,控制轉速不可以用繼電器,可以用 TIP-122 電晶體,底下有參考資料:
http://arduino-for-beginners.blogspot.tw/2011/03/controlling-12v-dc-motorfan-with.html