跳到主要內容

控制繼電器的4種方法

五月 24, 2018
Facebook
Twitter
圖片
繼電器那絕對的二元(非開即關)特性一直讓我很著迷。總之,我用繼電器做了幾個專題,所以想分享我的經驗,讓大家能更容易在自己的專題裡應用繼電器。我不是專家,只是個喜歡玩硬體的程式設計師。

繼電器簡介

繼電器基本上是一種開關,藉由對繼電器裝置施加或移除特定電壓來控制(打開或關閉)。多數的微控制器專題不需要繼電器,因為微控制器板(不論是Arduino或完整的電腦系統如Raspberry Pi)能夠從I/O埠直接驅動外部裝置。繼電器是用在需要開關外部電路的時候,或是當電路需要控制比系統本身更高的電壓時。
我在我的微控制器車庫開門器就用了繼電器,因為這個裝置要模擬按壓實體按鈕(牆上的車庫門按鈕),所以需要開關的功能,而不是從板子輸出電壓的能力。我在計時器專題也用了繼電器,因為需要開關家用電流(110伏特AC),這個是Raspberry Pi無法做到的。

常見的繼電器有兩種:機械式繼電器和固態繼電器。機械式繼電器採用電磁線圈和實體開關;施加電壓時,開關會啟動。固態繼電器的原理也是如此,但用的不是機械元件,而是用電子元件來達到相同的功能。
在本文的後面,我們會討論到繼電器板/模組。一般而言,繼電器的運作和前面所描述的一樣。使用量產的繼電器模組時,根據接線的方式,通常有兩種運作模式:「常開」和「常閉」。
圖1是繼電器在常開(NO)模式的示意圖。在這配置中,當控制電路沒有被施加電壓(圖中「繼電器靜止」部分),開關電路的連結中斷,電流無法通過接點。當我們在控制電路施加適當的電壓,繼電器的電磁線圈會啟動,將開關閉上,使電流通過開關電路。
圖片
圖1 – 常開繼電器運作
常閉(NC)模式則相反(圖2)。當繼電器在靜止狀態(對控制電路沒有施加電壓),開關電路是閉合的,電流通過開關電路。當我們對控制電路施加適當電壓,啟動繼電器,電磁線圈會把開關打開,中斷通過開關電路的電流。不過我並不是很確切知道這在繼電器內部的原理。
圖片
圖2 – 常閉繼電器運作
繼電器和其他開關一樣有不同的特性,分別由「軸」和「切」來決定其配置。軸代表開關所控制的個別電路數。單軸(SP)開關控制單一電路。而雙軸(DP)開關控制兩個獨立電路;這兩個獨立電路基本上有兩個相連的開關,連接到各自的電路,切換開關時,會同時影響兩個電路。
切代表開關所提供的電路路徑數。單切(ST)開關只有一個電路路徑。開關切到某一方向時,電流通過電路,而切到另一方向時,電路斷開,無電流通過。雙切(DT)開關提供兩個電路路徑。開關切到某一方向時,電流通過該電路,而切到另一方向時,電流通過其他電路。你也可以在兩個電路中間設一個「關」位置。
因此面對繼電器時,我們會看到有單軸單切(SPST)、單軸雙切(SPDT)、雙軸單切(DPST)、雙軸雙切(DPDT)等標示,而在上述說明後,你應該能看得懂了。
使用繼電器時,每個機型有些方面不同,最重要的差異在於其額定電壓及電流。這裡有兩組數值必須仔細看,否則會損壞繼電器電路,甚至把繼電器或其他元件燒掉。首先是控制電路的額定電壓和電流,通常以範圍來定義。這些數值告訴我們繼電器需要多少電壓和電流來啟動。第二組的關鍵數值告訴我們繼電器的開關部分能承受多少電壓和電流。
我們來看一個例子。圖3是從DigiKey網站隨機選出的產品特性。圖中圈出來的線圈數值是繼電器消耗的電流和可以搭配的最高電壓。這個例子是一臺3V的繼電器,所以要確定專題能提供3V來觸發繼電器,否則它無法運作。

圖中圈出來的第二組數值告訴我們更多使用資訊。Switching Voltage(切換電壓)告訴我們這臺繼電器可以切換的電壓數值,以這個繼電器舉例,你可以把開關電路接到最高250V交流電(AC)或220V直流電(DC)的電路。最後兩個數值顯示繼電器會在被施加2.24V DC的時候啟動,啟動後在施加的電壓降至低於0.3V DC時會關閉。
圖片
圖3 – 繼電器特性
簡單介紹後,我們來討論如何把繼電器應用在專題裡。

連接繼電器

繼電器有幾種外型規格。基本上,繼電器是露出至少4個連接點的四角型方塊。
其中兩個接點供控制電路使用,而剩下兩個當然是供開關電路使用。很簡單嗎?其實不然。如果你不是電機工程師(像我就沾不上邊),可能會以為把繼電器接上電路就沒事了,但就像多數的電子元件一樣,使用方法並沒有那麼簡單。
如果照前面所述把繼電器接到電路,並且從Raspberry Pi或Arduino等裝置跨控制電路施加電壓(可以用任何電壓來源),可以觸發繼電器,但不會穩定運作,因為受鎖存的考量和其他問題影響。因此,我們要在電路加裝一些元件。我第一次使用繼電器時發現這個問題,並且在Stack Overflow(程式問答網站)找到很多不同的做法。這篇《MAKE》雜誌文章有搭配電路圖的說明。

我平常會先研究清楚然後寫在這裡給你看,但使用繼電器還有更簡單的方法,而且有好幾種。上述將在接下來的段落為你介紹,同時也會告訴你如何從專題的程式碼觸發繼電器。

繼電器模組

如果不想讓繼電器額外接上電晶體、二極體和電阻,有很多製造商提供一應俱全的繼電器模組,4就是一個例子。這些模組從單個到8路繼電器都有。5是一般的4路繼電器模組。
圖片
圖4 – 一般單路繼電器模組
圖片
圖5 – 四路繼電器模組
 註:我看到的繼電器模組多數沒有說明文件,所以要自己把手上的模組摸清楚。

繼電器接點

單一繼電器模組一般露出6個接點,3個用於控制電路;3個用於開關電路。可能還會有幾個跳線塊,像這裡的例子。對多數簡單的繼電器電路而言,只會用到五個腳位,稍後會說明原因。
圖左是控制輸入,可以看到標示為:
• VCC(電源正極)
• IN1(繼電器控制輸入)
• GND(接地)
在電路裡我們要連接繼電器需要的輸入電壓到VCC輸入(對Arduino或Raspberry Pi專題而言,一般為3或5伏特,依微控制器選擇而定)。這個電壓由繼電器決定,不是微控制器。多數現代的Arduino裝置提供3V,而Raspberry Pi能提供3V或5V,記得要挑能搭配這些電壓的繼電器。多數繼電器為搭配Arduino或Raspberry Pi設計,所以應該沒問題。我們還要把GND輸入接到微控制器的接地。
最後,把IN1腳位接到微控制器的輸出腳位之一。這個輸出電壓會觸發繼電器。使用類比輸出較佳,但因為Raspberry Pi沒有類比輸出,所以可以用數位輸出替代。
在模組的開關電路這邊,可以看到下圖所標的三個開關接點(常開NC、共接點Common和常閉NC是我加上的標示)。
圖片
圖6 – 繼電器接點標記
圖中呈現的是繼電器靜止狀態的開關連接配置。就這個模組而言,開關連接位於第一和第二個接點之間或第二和第三個接點之間。觸發繼電器時(跨越控制電路施加適當的電壓),共接點會切換到另一邊。把電路連接到NO(常開)和共接點時,電路會維持開路直到適當的電壓施加到控制電路的IN1。NO/共接點會在電壓施加到IN1時關閉。當電路連接到NC(常閉)和共接點時,它會維持閉路直到適當的電壓施加到控制電路的IN1連接點,NC/共接點會在電壓施加到IN1時打開。

對多數電路而言,只需要開關其中一組接線,所以我們要開關的是NC或NO接點。就部分的配置而言,我們需要在電路建立兩種狀態;在範例中,我們在電路上會用到NO和NC接點。你可以預設,其中一端會永遠保持連接,並在施加電壓到IN1時切換。
7是接線完成的繼電器模組,注意看那三個控制接點(圖右),在NO/共接點上有開關連接。圖左下的黃色線是用於開關連接。
圖片
圖7 – 使用中的繼電器模組
對多路繼電器模組而言,硬體方面幾乎是相同的,只要對板子上每個繼電器重複以上步驟。我們仍然要接上電壓和接地連接點,但現在每個繼電器都有一個IN1控制輸入,而不是只有單一個。從5右下可以看到VCC和GND腳位,以及這個4路繼電器模組的IN1、IN2、IN3和IN4等多個輸入腳位。每個IN腳位要分別連接到Arduino或Raspberry Pi裝置的輸出腳位。模組的開關側有和單一繼電器模組相同的NO、共接點及NC,只是這裡的4路繼電器共有4組。

觸發繼電器

記得前面提到的跳線嗎?你的繼電器模組可能會有一些跳線。如果有,其中一條可能是用來設置高電平或低電平觸發繼電器。這條跳線的位置會決定專題的程式碼中如何觸發繼電器。我們來看幾個例子。

在Arduino裝置上,繼電器的IN1接到A1類比輸出時,用一行程式碼就能觸發繼電器。如果繼電器模組設定以高電平觸動,就要用以下的程式碼開啟繼電器:
analogWrite(A1, 255);
這會把A1腳位的類比輸出設為最高電壓(對Arduino而言很可能是3V)。要關閉時,只要用以下的程式碼把輸出電壓關閉:
analogWrite(A1, 0);
這行會把A1的輸出設為0。

如果繼電器模組設定為使用低電平觸發繼電器,只要把範例程式碼反過來,改成以下這行來開啟繼電器:
analogWrite(A1, 0);
並且用以下這行程式碼關閉繼電器:
analogWrite(A1, 255);
Raspberry Pi沒有支援類比輸出,所以我們得動點手腳。利用PWM(脈衝寬度調變)能讓Raspberry Pi支援數位輸出,PWM基本上能重複輸出電壓,產生「看起來」連貫的輸出電壓給連接的裝置。用Python為Raspberry Pi寫每秒開關繼電器的程式碼會像這樣:
from gpiozero import LED
from time import sleep

# 繼電器連接到Raspberry Pi 的GPIO 18腳位
#用適合你的硬體配置的腳位來取代下方的「18」
relay = LED(18)

#以下是Python裡的無限迴圈,會不斷執行直到關閉應用程式
while True:
# 開啟繼電器
relay.on()
# 等待一秒
sleep(1)
# 關閉繼電器
relay.off()
# 再等一秒
sleep(1)
這個例子裡,程式碼採用GPIO Zero這個很好用的Raspberry Pi資料庫,讓我們輕鬆控制幾乎所有連接到Raspberry Pi的GPIO連接埠的裝置。我在這裡使用模組的LED資料庫來模擬應用程式需要的電壓輸出。在這個例子裡,繼電器連接到Pi的GPIO腳位18。GPIO Zero也含有其他可以使用的輸出類型。
這樣就完成了,輕鬆又快速地把繼電器連接到IoT專題。但是別著急,還有更簡單的方法,請看下面的段落。

微控制器外接板(擴充板、HAT等)

為了讓我們更容易把繼電器用在微控制器專題,有多家製造商針對常見的微控制器平臺推出外接板。這種板子透過GPIO連接埠(Raspberry Pi)或其他微控制器支援的排針直接堆疊到微控制器上。幾乎任何微控制器或單板電腦(SBC)都有繼電器模組可以用。

Adafruit Feather

我在其中一個專題使用了Adafruit Feather微控制器。Feather是一系列與Arduino相容的微控制器,有一致的外型規格和輸入/輸出腳位配置。針對這個專題,我採用Adafruit Feather M0 WiFi,它是與Arduino相容的Wi-Fi微控制器,Adalogger FeatherWing,適用於Feather的實時時鐘外接板,和Adafruit Power Relay FeatherWing。Relay FeatherWing讓我的專題有了一臺容易使用的繼電器模組,只要插到微控制器上就可以用。在下圖可以看到排針和插孔完成焊接的三塊板子。
圖片
圖8 – Adafruit Feather板和配件
使用時,如下圖所示把它們堆疊起來。把開關電路連接到圖右的藍色端子。和其他繼電器一樣,我們需要兩條接線連接NC或NO,或者三個都用上來做兩種模式的切換,如前面段落所述。
圖片
圖9 – FeatherWing模組堆疊,含上面的繼電器模組
繼電器模組接上Feather的多個輸出連接埠,要使用時,得穿過板子背面的金屬板來連接輸出腳位(視其他Feather外接板使用哪些腳位而定)。
圖片
圖10 – Adafruit Feather繼電器連接埠選項
為了在Feather應用裡觸發繼電器,我們要用以下這樣的程式碼:
//繼電器連接的類比腳位
const int outputPin = SELECTED_FEATHER_PIN;
//舉例來說,如果繼電器連接到類比輸出A1,就要使用以下:
//const int outputPin = A1;

void setRelay(bool status) {
//把繼電器設為特定狀態 (on=true/off=false)
Serial.print(“Relay: “);
if (status) {
Serial.println(“ON”);
analogWrite(outputPin, MAXOUTPUT);
} else {
Serial.println(“OFF”);
analogWrite(outputPin, MINOUTPUT);
}
//儲存我們設定的狀態,讓toggleRelay之後能精確開關繼電器
relayStatus = status;
}
在這個例子裡,我呈現的是常數定義(描述繼電器連接到哪個類比輸出)和觸發繼電器的函數setRelay
常數outputPin只是讓我們方便針對特定的硬體配置來設定程式碼。為了不要辛苦找出程式碼所有觸發繼電器的地方,我們在這個常數設定繼電器輸出腳位,這樣應用程式要用到它的時候只需要參考這個常數。透過這個方法,如果之後要變更繼電器腳位,只要改一個地方,程式碼裡參照這個常數的地方也就會自動更新。
setRelay讓應用程式簡單快速地開關繼電器。這裡我們不分別寫開和關的函數,而是只用一個函數,並把要開或關的指令以布林變數傳到這個函數。讓我示範給你看。
​​
要開啟繼電器時,在應用程式的任何地方只要執行以下程式碼:
setRelay(true);
在這個例子裡,傳到函數的true參數是代表「開」的布林True值。

要關閉繼電器時,我們執行以下程式碼:
setRelay(false);
這個函數使用名為relayStatus的變數來追蹤繼電器的開關狀態,讓一個獨立的函數toggleRelay能切換繼電器的狀態(關閉時打開、打開時關閉)。這行程式碼特別簡單,它只是用繼電器當前狀態的相反狀態來呼叫setRelay
void toggleRelay() {
//把繼電器從開關閉或從關打開
setRelay(!relayStatus);
}
程式碼中的!relayStatus代表「反相(NOT)」relayStatus,因此如果relayStatustrue,則false傳到setRelay。如果relayStatusfalse,則true傳到setRelay

Tessel 2

Tessel 2有一個繼電器模組,如圖11。我用它製作一個簡單的車庫門遙控器,只需要用控制器支援的簡單網頁應用程式即可。完整的專題位於Github
圖片
圖11 – Tessel 2板和繼電器模組
Tessel板可以執行JavaScript,所以我們可以輕鬆以JavaScript為基礎寫出伺服器任務在板子上執行,並使用桌上型電腦或行動網頁瀏覽器和板子互動。針對這個專題,網頁伺服器上架設有簡單的網頁,提供打開車庫門的按鈕。在板子上,觸發車庫門的程式碼是toggleRelay函數,如下所示:
function toggleRelay(RELAY_PORT) {
//開關指定繼電器,維持開啟RELAY_DELAY的毫秒數
//首先啟動LED活動
tessel.led[ACTIVITY_LED].on();
//接著,打開繼電器
relay.turnOn(RELAY_PORT, relayResult);
//休眠500毫秒(半秒)
sleep(500).then(() => {
//接著關閉繼電器
relay.turnOff(RELAY_PORT, relayResult);
//並關閉LED活動
tessel.led[ACTIVITY_LED].off();
});
}
從圖11可以看到,繼電器模組有兩個繼電器,所以呼叫toggleRelay時,必須透過RELAY_PORT變數傳12到函數來告訴它哪個繼電器接到車庫門按鈕。這個函數會開啟指示燈、觸發繼電器、等待半秒,再把繼電器和LED指示燈關掉。

Particle Photon

National Control Devices是一家針對多種微控制器和SBC製造繼電器模組的公司。我實際使用的車庫門控制器是用Particle Photon適用Photon的單路繼電器模組打造的。在Github可以閱讀完整的專題。

在這塊板子(圖12)上,將Photon安裝於板子右邊的插孔(如圖)。對繼電器板供電時,同時會驅動這臺微控制器。
圖片
圖12 – 適用Particle Photon的1-Channel Relay Controller
Photon這個「平臺」酷的地方,在於我們可以透過免費的雲端服務來遠端執行版子的程式碼。這塊板子大致上和Arduino微控制器相容,所以我們可以用C語言來寫應用程式。

用來觸發繼電器的程式碼和前面看到的類似。在下面的Photon範例程式碼中,我定義了幾個常數來告訴應用程式繼電器連接到哪個腳位,還有指示燈接到哪個腳位(這是Photon內建的)。應用程式會呼叫pushButton函數來觸發繼電器;函數開啟指示燈、觸發繼電器、等待半秒,接著把繼電器和LED指示燈關掉。
//將繼電器連接至Digital 0
int relayPin = D0;
//將LED活動連接至Digital 1
int activityLED = D1;

//=================================================================
//這個函數按下車庫門按鈕(當然是透過繼電器)
//=================================================================
int pushButton(String param){
Serial.println(“pushButton function called.”);
//開啟LED活動,讓我們知道運作順利
digitalWrite(activityLED, HIGH);
//開啟繼電器
digitalWrite(relayPin, HIGH);
//等待半秒(或任何我們需要的時間長度)
delay(500);
//關閉繼電器
digitalWrite(relayPin, LOW);
//關閉LED活動
digitalWrite(activityLED, LOW);
//必須要有東西回傳,所以回傳0(-1代表失敗)
return 0;
}

Raspberry Pi

我甚至也找到幾個適用Raspberry Pi的繼電器模組,第一個用上的是Seeed Studio Raspberry Pi繼電器模組v1.0 。試試看這幾個在專題使用這塊板子的建議。板子搭載4個繼電器,並直接安裝在Raspberry Pi上,如圖13
圖片
圖13 – Seeed Studio Raspberry Pi繼電器模組v1.0
在專題裡應用這塊板子很簡單。Seeed Studio的團隊製做了Python程式的範例,讓你和板子互動(在終端機視窗輸入指令來開關繼電器)。我為程式碼增加了一些功能做為Python模板發布在https://github.com/johnwargo/Seeed-Studio-Relay-Board。使用此模板時,把資料庫複製到專題資料夾,接著把以下這行加入Python程式的開頭:
from relay_lib_seeed import *
完成後,就能用以下的程式碼開啟繼電器:
relay_on(int_value)
其中int_value指繼電器編號(1到4),因此要把2號繼電器開啟時就用以下:
relay_on(2)
要關閉繼電器就用:
relay_off(int_value)
也可以用這個來開關繼電器:
relay_toggle_port(int_value)
很簡單對吧!如果想要能在板子上實驗的簡單應用程式,可以看看我在Github的專題。
另一個繼電器板的選項是ModMyPi PiOT繼電器模組;在Github有說明文件。和Seeed Studio的板子一樣,將PiOT模組安裝在Raspberry Pi上,不過這個模組能讓我們堆疊好幾塊板子,為專題提供8、12個或更多的繼電器。圖14是這塊板子的範例。
圖片
圖14 – ModMyPi PiOT模組
PiOT模組有個很酷的功能,你可以按板子上的按鈕來開關指定的繼電器。這讓我們可以了解模組如何運作,甚至在寫程式碼前可用來測試專題的硬體。這些按鈕也可以用來配置模組使用的Raspberry Pi GPIO腳位,但我寧可用跳線或DIP開關來做。
模組的設計適用於一般的Raspberry Pi機型和Pi Zero,但很可惜模組上的安裝孔只能搭配Pi Zero。安裝在Pi Zero時,模組上有4個安裝孔可以用,只要有正確的柱帽和螺絲就能把PiOT模組穩穩裝在Pi Zero上面。對於較大的Raspberry Pi機型,ModMyPi的團隊莫名只提供兩個和Raspberry Pi對齊的安裝孔;這樣是可以安裝,但在實作後我發現板子移動時會造成運作不順或繼電器接點短路(很容易發生,因為安裝不穩)。

為了讓你在專題裡順利使用這個模組,我在https://github.com/johnwargo/pi-relay-controller-modmypi/blob/master/relay_lib_modmypi.py建立了Python資料庫,使用時把資料庫複製到專題資料夾,接著在Python專題加入以下這行程式碼:
from relay_lib_modmypi import *
接下來,針對模組的配置做設定。在應用程式的初始化程式碼加入以下:
#更新以下指派給繼電器模組的連接埠的清單/元組
PORTS = (7, 8, 10, 11)
NUM_RELAY_PORTS = 4

#初始化已有系統連接埠配置的繼電器資料庫
if init_relay(PORTS):
#關閉所有繼電器,好讓我們重新開始。
relay_all_off()
else:
print(“Port configuration error”)
#退出應用程式
sys.exit(0)
我們要在PORTS變數填入以模組按鈕設定好的繼電器連接埠編號。把NUM_RELAY_PORTS變數設為4、8、12等,視堆疊幾塊板子而定。完成後,就能用以下的程式碼開啟繼電器:
relay_on(int_value)
其中int_value指的是繼電器編號(1到4),因此要開繼電器就用:
relay_on(2)
要關閉繼電器就用:
relay_off(int_value)
也可以用這個來開關繼電器:
relay_toggle_port(int_value)
很簡單吧!如果想要可以用來玩模組的簡單應用程式,可以看看我的專題

PowerSwitch Tail

在我的車庫開門器上,繼電器只是用來「按」一個按鈕,所以繼電器所開關的只是低電壓電路。就某些專題而言,我們需要微控制器來切換更高的電壓,例如驅動家裡燈光和其他家電時所需的110V(北美)或220V(其他大部分地區)。要切換這些電壓可以用前面舉出的這些方法,因為很多繼電器支援多種電壓的切換(例如圖5和圖6的繼電器最高可以切換250V AC或30V DC),但處理更高電壓的時候會有生命危險,並且需要大幅改變專題中使用的接線方法。
在切換高電壓的情況下,有一個簡單的方法可以避免高電壓所帶來許多安全性的問題。這個方法就是PowerSwitch Tail,圖15是我用它製作的範例專題。PowerSwitch Tail(PT)是圖中有電源線通過的黑色盒子。
圖片
圖15 – PowerSwitch Tail專題
PT基本上是內裝一個繼電器的盒子,繼電器的開關接點設在AC電源插頭導體的另一端。對PT的輸入連接點(圖中接有兩條紅色線)施加特定的電壓(一般在3V和5V之間)時,繼電器被觸發,而AC電流會通過電源線。PT一般以NO運作來接線,但也可以配置成NC運作。
在這個專題裡,我使用有實時時鐘(RTC)的Adafruit Feather來驅動PT繼電器,讓我能透過寫在Feather應用程式裡的邏輯來控制一組燈具的開關。專題的完整原始碼在這裡

在程式設計方面,我們已經討論過控制繼電器需要的程式碼,請見本文介紹Adafruit Feather的段落。

驗證繼電器運作

在很多以繼電器相關專題裡,我常常會接上一個簡單的LED電路,來輕鬆快速檢查專題的程式碼運作是否正確。多數的繼電器在觸發時會發出喀聲,而多數的繼電器模組在每個繼電器電路接有一顆LED來顯示繼電器的開關狀態。雖然如此,有時候不容易聽見喀聲或看清楚指示燈。此外在4路繼電器模組上,整個模組的LED指示燈有時是集合在一起的,所以很難看出哪顆LED代表哪個繼電器。
我在工作室裡做很多木工,而隨著經驗的累積,我發現成功的Maker會使用治具來協助重複一致的工作,甚至用來精確完成單一的複雜工作。為了繼電器的使用,我打造了一組測試治具,用來在製做過程中連接專題,讓我更容易判斷繼電器的狀態。這組治具基本上是連接到電源(兩個AA電池提供的3V DC)的一組LED,每顆LED透過兩條開放導線來露出。要測試繼電器電路時,我把一條LED導線接到其中一個繼電器的NC接點(使用幾個繼電器就接幾次)、在電池座裝入兩顆電池,就可以開始測試程式碼了。繼電器觸發時,LED會依照繼電器的狀態點亮或熄滅。

下圖是治具的接線圖。
圖片
圖16 – 繼電器測試治具電路
治具的實作上我採用Adafruit Perma-Proto半尺寸麵包板,因為這個尺寸剛好讓我輕鬆組裝電路。連接到治具右下角的黑色和紅色線路是為了專題的其他方面需要用到3V電源(兩個AA電池)時做準備。

結論

希望以上已經充分介紹繼電器和應用的方法(透過繼電器模組、外接板和少不了的程式碼),讓你能夠成功運用在專題裡。使用繼電器時,務必確定額定的電壓和電流符合專題的需求,不要不小心讓繼電器冒煙。說到不小心,使用AC電路或高壓DC電路時,要特別留意,因為出錯可能致命,否則也會很痛。

(譯:屠建明)
【原文】

留言

這個網誌中的熱門文章

2017通訊大賽「聯發科技物聯網開發競賽」決賽團隊29強出爐!作品都在11月24日頒獎典禮進行展示

2017通訊大賽「聯發科技物聯網開發競賽」決賽團隊29強出爐!作品都在11月24日頒獎典禮進行展示 LIS   發表於 2017年11月16日 10:31   收藏此文 2017通訊大賽「聯發科技物聯網開發競賽」決賽於11月4日在台北文創大樓舉行,共有29個隊伍進入決賽,角逐最後的大獎,並於11月24日進行頒獎,現場會有全部進入決賽團隊的展示攤位,總計約為100個,各種創意作品琳琅滿目,非常值得一看,這次錯過就要等一年。 「聯發科技物聯網開發競賽」決賽持續一整天,每個團隊都有15分鐘面對評審團做簡報與展示,並接受評審們的詢問。在所有團隊完成簡報與展示後,主辦單位便統計所有評審的分數,並由評審們進行審慎的討論,決定冠亞季軍及其他各獎項得主,結果將於11月24日的「2017通訊大賽頒獎典禮暨成果展」現場公佈並頒獎。 在「2017通訊大賽頒獎典禮暨成果展」現場,所有入圍決賽的團隊會設置攤位,總計約為100個,展示他們辛苦研發並實作的作品,無論是想觀摩別人的成品、了解物聯網應用有那些新的創意、尋找投資標的、尋找人才、尋求合作機會或是單純有興趣,都很適合花點時間到現場看看。 頒獎典禮暨成果展資訊如下: 日期:2017年11月24日(星期五) 地點:中油大樓國光廳(台北市信義區松仁路3號) 我要報名參加「2017通訊大賽頒獎典禮暨成果展」>>> 在參加「2017通訊大賽頒獎典禮暨成果展」之前,可以先在本文觀看各團隊的作品介紹。 決賽29強團隊如下: 長者安全救星 可隨意描繪或書寫之電子筆記系統 微觀天下 體適能訓練管理裝置 肌少症之行走速率檢測系統 Sugar Robot 賽亞人的飛機維修輔助器 iTemp你的溫度個人化管家 語音行動冰箱 MR模擬飛行 智慧防盜自行車 跨平台X-Y視覺馬達控制 Ironmet 菸消雲散 無人小艇 (Mini-USV) 救OK-緊急救援小幫手 穿戴式長照輔助系統 應用於教育之模組機器人教具 這味兒很台味 Aquarium Hub 發展遲緩兒童之擴增實境學習系統 蚊房四寶 車輛相控陣列聲納環境偵測系統 戶外團隊運動管理裝置 懷舊治療數位桌曆 SeeM智能眼罩 觸...
opencv4nodejs Asynchronous OpenCV 3.x Binding for node.js   122     2715     414   0   0 Author Contributors Repository https://github.com/justadudewhohacks/opencv4nodejs Wiki Page https://github.com/justadudewhohacks/opencv4nodejs/wiki Last Commit Mar. 8, 2019 Created Aug. 20, 2017 opencv4nodejs           By its nature, JavaScript lacks the performance to implement Computer Vision tasks efficiently. Therefore this package brings the performance of the native OpenCV library to your Node.js application. This project targets OpenCV 3 and provides an asynchronous as well as an synchronous API. The ultimate goal of this project is to provide a comprehensive collection of Node.js bindings to the API of OpenCV and the OpenCV-contrib modules. An overview of available bindings can be found in the  API Documentation . Furthermore, contribution is highly appreciated....

完形心理學!?讓我們了解“介面設計師”為什麼這樣設計

完形心理學!?讓我們了解“介面設計師”為什麼這樣設計 — 說服客戶與老闆、跟工程師溝通、強化設計概念的有感心理學 — 情況 1 : 為何要留那麼多空白? 害我還要滾動滑鼠(掀桌) 情況 2 : 為什麼不能直接用一頁展現? 把客戶的需求塞滿不就完工啦! (無言) 情況 3: 這種設計好像不錯,但是為什麼要這樣做? (直覺大神告訴我這樣設計,但我說不出來為什麼..) 雖然世界上有許多 GUI 已經走得又長又遠又厲害,但別以為這種古代人對話不會出現,一直以來我們只是習慣這些 GUI 被如此呈現,但為何要這樣設計我們卻不一定知道。 由於 完形心理學 歸納出人類大腦認知之普遍性的規則,因此無論是不是 UI/UX 設計師都很適合閱讀本篇文章。但還是想特別強調,若任職於傳統科技公司,需要對上說服老闆,需要平行說服(資深)工程師,那請把它收進最愛;而習慣套用設計好的 UI 套件,但不知道為何這樣設計的 IT 工程師,也可以透過本文來強化自己的產品說服力。 那就開始吧~(擊掌) 完形心理學,又稱作格式塔(Gestalt)心理學,於二十世紀初由德國心理學家提出 — 用以說明人類大腦如何解釋肉眼所觀察到的事物,並轉化為我們所認知的物件。它可說是現代認知心理學的基礎,其貫徹的概念就是「整體大於個體的總合 “The whole is other than the sum of the parts.” —  Kurt Koffka」。 若深究完整的理論將會使本文變得非常的艱澀,因此筆者直接抽取個人認為與 UI 設計較為相關的 7 個原則(如下),並搭配實際案例做說明。有興趣了解全部理論的話可以另外 Google。 1. 相似性 (Similarity)  — 我們的大腦會把相似的事物看成一體 如果數個元素具有類似的尺寸、體積、顏色,使用者會自動為它們建立起關聯。這是因為我們的眼睛和大腦較容易將相似的事物組織在一起。如下圖所示,當一連串方塊和一連串的圓形並排時,我們會看成(a)一列方塊和兩列圓形(b)一排圓形和兩排三角形。 對應用到介面設計上,FB 每則文章下方的按鈕圖標(按讚 Like / 留言Comment / 分享 Share)雖然功能各不相同,但由於它們在視覺上顏色、大小、排列上的相似性,用戶會將它們視認為...