使用繼電器可以實現使用小電壓控制大電壓設備的目的,若是再配合網路通訊便可實現遠端控制,家電自動化的目的。
利用繼電器實現遠端家電控制 |
以下,我們將使用 Raspberry Pi (樹莓派) 來控制繼電器開關。電源輸入使用數莓派 5V 的電源接腳,而控制兩顆繼電器的控制訊號分別為
- GPIO #24 --> IN1 --> RELAY-1
- GPIO #24 --> IN2 --> RELAY-2
二通道光耦合隔離繼電器模組的電路圖如下,
二通道光耦合隔離繼電器模組電路圖 |
材料列表:
- Raspberry Pi (樹莓派) Model B Revision 2.0 (512 MB) - 纖小如信用卡的嵌入式電腦
- 二通道光耦合隔離繼電器模組 (附四條杜邦線) (四條杜邦線 ( 母對母 ))
賣場的樹莓派配件 - 二通道光耦合隔離繼電器 |
線路連接:
請照著下面四個顏色的杜邦線,連接數莓派與繼電器模組
繼電器模組與樹莓派連接線路圖 |
打開樹莓派電源,等待開機完成後,下載測試程式碼
cd mkdir Relay cd Relay wget -O - http://goo.gl/bTVV8 | tar xvf -
解開 tar 檔案後,目錄下會增加兩個檔案。一個是執行檔,一個是 C 語言原始檔。
-rwxr-xr-x 1 pi pi 29445 1月 26 13:17 relay-2way -rwxr-xr-x 1 pi pi 2927 1月 26 13:17 relay-2way.c
若線路已經裝設好,直接輸入
sudo ./relay-2way
就會出現等待輸入的提示,此時輸入
3 1
3 與 1 的中間要空一格。輸入完成後,就會看到繼電器模組的兩顆 LED 亮起與 "噠" 的聲音,表示正常動作。
pi@raspberrypi ~/Relay $ sudo ./relay-2way Usage: relay(1 or 2) on/off(1 or 0), ex. 1 0 (relay 1 off) 3 0 all off, 3 1 all on, 0 0 to exit relay turn on/off: (0 0): 3 1
relay turn on/off: (3 1): Usage: relay(1 or 2) on/off(1 or 0), ex. 1 0 (relay 1 off) 3 0 all off, 3 1 all on, 0 0 to exit relay turn on/off: (3 0):
輸入:3 1,開啟兩顆繼電器 |
輸入:3 0,關閉兩顆繼電器 |
輸入:1 1,開啟上方繼電器 (RELAY-1) |
輸入:0 0,關閉兩顆繼電器 |
輸入:2 1,開啟下方繼電器 (RELAY-2) |
最後輸入
0 0
離開程式
下面是使用 Android APP ConnectBot 使用 SSH 連線到樹莓派做繼電器模組的控制,指令與操作方式跟終端機一樣,當然控制方式也一樣,建議大家先這樣玩玩看,分常有趣!
Android 手機程式使用 SSH 連線控制繼電器模組 |
另外,因為只是單純的 IO 控制,建議上由樹莓派視窗的 PiStore 下載 WebIOPi 玩玩使用網頁控制繼電器模組,實現遠端控制的樂趣!!!
WebIOPi 官方網頁
source: https://code.google.com/p/webiopi/ |
二通道光耦合隔離繼電器模組展示程式碼
/*- relay-2way.c compile: gcc relay-2way.c -l rt -l bcm2835 -std=gnu99 -o relay-2way 測試兩路繼電器 線路說明: 使用數莓派的GPIO控制兩路繼電器 (active low) 未初始化前,繼電器保持之前狀態,但開機之後未操作GPIO前繼電器為 OFF。 初始化後 (bcm2835_init()),繼電器保持之前狀態,但開機之後未操作GPIO前繼電器為 OFF。 初始化後設定接腳為輸出 (bcm2835_gpio_fsel(#, BCM2835_GPIO_FSEL_OUTP), 繼電器保持之前狀態,但開機之後未操作GPIO前繼電器為 ON 2 路繼電器接腳: GND, INP1, INP2, VCC 樹莓派接腳: GND, #24, #25, 5V0 Vcc使用3V3 亦可,但要注意是否會電壓不足無法驅動; 建議使用 5V0 -*/ #include <stdio.h> // printf, scanf #include <bcm2835.h> #define RELAY_INP1 24 // GPIO #24 #define RELAY_INP2 25 // GPIO #25 int prog_exit(void); int main(int argc, char **argv) { int relay = 0; int onoff = 0; // GPIO 初始化 if(!bcm2835_init()) return 1; // 設定接腳狀態 bcm2835_gpio_fsel(RELAY_INP1, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(RELAY_INP2, BCM2835_GPIO_FSEL_OUTP); // 初始輸出狀態 bcm2835_gpio_write(RELAY_INP1, HIGH); bcm2835_gpio_write(RELAY_INP2, HIGH); while(1) { printf("\nUsage: relay(1 or 2) on/off(1 or 0), ex. 1 0 (relay 1 off) \n"); printf("3 0 all off, 3 1 all on, 0 0 to exit\n"); printf("relay turn on/off: (%d %d): ", relay, onoff); scanf("%d %d", &relay, &onoff); printf("relay turn on/off: (%d %d): ", relay, onoff); fflush(stdin); if(onoff == 0) onoff = HIGH; else if(onoff == 1) onoff = LOW; else { printf("keyin the worng relay status!\n"); if(!prog_exit) return 3; } if(relay == 0) { return prog_exit(); } else if(relay == 1) bcm2835_gpio_write(RELAY_INP1, onoff); else if(relay == 2) bcm2835_gpio_write(RELAY_INP2, onoff); else if(relay == 3) { bcm2835_gpio_write(RELAY_INP1, onoff); bcm2835_gpio_write(RELAY_INP2, onoff); } else { printf("Keyin the wrong relay number!\n"); if(!prog_exit()) return 3; } } return 0; } int prog_exit() { bcm2835_gpio_write(RELAY_INP1, HIGH); // turn off relay bcm2835_gpio_write(RELAY_INP2, HIGH); // 關閉 bcm2835 函式庫 if (!bcm2835_close()) { printf("Failed to close the library, deallocating any allocated memory and closing /dev/mem\n"); printf("\nPress any key to exit..."); return 2; } return 0; }
<<樹莓派編輯環境設置系列文章>>
- 在 Windows 設置 Raspberry Pi (樹莓派) 遠端編輯環境 [第一發] 工欲善其事,必先利其器
- 把 Windows 桌面當作是 Raspberry Pi (樹莓派) 的螢幕 [第二發] 工欲善其事,必先利其器
- 遠端桌面 - VNC [第三發] 工欲善其事,必先利其器
Sublime Text 2 與遠端 (樹莓派) 資料夾連線畫面 |
MobaXterm: Windows 作業系統下開啟樹莓派作業系統的 LXDE 桌面 |
VNC |
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !