はじめに
こちらは
Arduino と Raspberry Pi の違いのまとめの3つ目の個別記事で、Raspberry Pi で relay を制御する。
目的
Raspberry Pi3 で Relay の制御を行う。
課題
Arduinoで動作していたRelayを持ってきてGPIOを出力にして接続すると、Relayのカチッという動作音はするのだが音がArduinoのときと比べて小さい。
問題点
Relayの出力をテスターで調べるとカチッと音は鳴るが、Relayとしての動作をしてくれていない。
原因
なんかおかしいと思い、調べたところ Raspberry Pi3 の GPIO出力の電圧は3.3Vだそうで、5Vリレーの直接駆動はできないということが分かった。
下記に詳しい。
AN INTRODUCTION TO GPIO AND PHYSICAL COMPUTING ON THE RASPBERRY PI
解決策
解決策としては、少なくとも三つ考えられる。
-
5V動作のリレーから3V動作のリレーに交換する
-
Transistorを追加して、Switchとして用い、リレーへの電源供給を5Vとなるようにする
-
Raspberry Pi対応の Relay moduleを利用する
-
が簡単だが、手元に3V動作のリレーはなく、新規に買うと3V動作のリレーの2回路用は500円近くするので、#2を選択した。Transistor によるリレードライブの詳細説明はこちらを参考とした。
ちなみに市販のリレーモジュールは、見た感じでは#2の実装になっている様子である。
リレードライブの回路図
指で書くのは厳しい。。
市販のRelay module
動作の状況が分かるようにLEDがついており、Relayがoffのときには、LEDが点灯している。つまり、LEDが消えたときには、RelayがOnになっている。もちろんRelayの出力側の配線を逆にすれば、LEDの点灯と動作を合わせることもできる。
価格は大きく変動するようなのでebay.comとかいろいろ探すとよいかもしれない。
05_RELAY2_GPIO21.py
import RPi.GPIO as GPIO
from time import sleep
RELAY2_GPIO = 21 # GPIO number for relay or relay module
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY2_GPIO, GPIO.OUT)
try:
while True:
GPIO.output(RELAY2_GPIO,GPIO.HIGH)
sleep(1)
GPIO.output(RELAY2_GPIO, GPIO.LOW)
sleep(1)
except KeyboardInterrupt:
# pass
GPIO.cleanup()
まとめ
これでRaspberry Pi3でリレーが動作するようになった。