ソリッド・ステート・リレーを使った電子回路
今回の電子回路はソリッド・ステート・リレー(SSR)を使って温度センサーで取得した値に応じて動作をする回路を製作します。
ソリッド・ステート・リレーとは?
ソリッド・ステート・リレー(SSR)とは無接点リレーで半導体素子でON/OFFをするリレーです。
inputと書いてあるVDC側に直流の電流が流れるとVAC側で電気が流れるようになっています。
これによりAC100Vの制御を行うことができます。
機械的接点は無く、半導体素子を使っているので以下のような特徴があります。
メリット
- 動作速度が速い
- 機械的接点がないので摩耗しない
- ON/OFF時のノイズやチャタリングが発生しない
- ON/OFF時に音が出ない
デメリット
- OFF時でも漏れ電流がある
- ON時でもリレー自体の抵抗で発熱してしまう。
- 高電圧、高電力の用途には向いていない。
などがあります。
用意するもの
Raspberry Pi4
3B+、3でも構いません。
SDカード
今回は32GBのものを用意しました。
ソリッド・ステート・リレー(SSR-10 DA)
温湿度センサー(AM2320)
汎用性のあるものを用意しました。
ブレッドボード(ミニ)
リード線(オスーメス)
今回は8本使用します。
電源アダプター
ラズベリーパイは消費電力が大きいので2.5A以上のものを使用してください。
マウス
キーボード
注意点
今回のラズベリーパイはOSのインストール、初期セットアップが済んだ状態での作業になります。
OSインストールや初期セットアップが終わっていない方は下記の記事を参考に進めてください。
作業工程
ラズパイとソリッドステート・リレーの接続
ラズベリーパイとソリッド・ステート・リレーの接続をします。
白い線をリレーのプラス側、黒い線をリレーのマイナス側に接続します。
ラズパイ側に白い線をGPIOの14番に接続します。
黒い線をGNDの6番に接続します。
GPIOのピンの位置は下記でお確かめください。
ラズベリーパイ公式ホームページ
https://www.raspberrypi.org/documentation/usage/gpio/
これでラズパイとリレーの接続は完了です。
リレーの動作確認
ここで一度リレーの動作確認を行います。
このリレーはINPUT側で通電するとLEDが発光する仕組みになっています。
左上にあるラズベリーパイのロゴマークをクリックします。
クリックすると、このように目次が出てきます。
この中のプログラミングをクリックし、中にあるThonny python IDEを起動します。
起動出来たら下記のプログラムを打ち込みます。
import RPi.GPIO as GPIO
import datetime
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.OUT)
def main():
for i in range(100):
now = datetime.datetime.now()
print(now)
print(i)
GPIO.output(14,GPIO.HIGH)
sleep(10)
GPIO.output(14,GPIO.LOW)
sleep(10)
try:
main()
except:
pass
GPIO.cleanup()
このプログラムはGPIOの14番のピンから10秒信号が出て、10秒間信号が出ないを100回繰り返すプログラムになります。
これでリレーのLEDが点灯したら動作確認は終了です。
電子回路の製作
温度センサーで取得した値に応じてソリッド・ステート・リレーを動作させる回路を製作します。
この回路では、一定の温度でリレーを動作させ、AC駆動のファンを動作させます。
簡単な回路の図はこんな感じです。
リレーの取り付け
ラズベリーパイとソリッド・ステート・リレーの接続をします。
白い線をリレーのプラス側、黒い線をリレーのマイナス側に接続します。
ラズパイ側は白い線をGPIOの12番に接続します。
黒い線をGNDの30番に接続します。
次に温度センサーの接続です。
接続方法については下記の記事で紹介しています。
プログラムの書き込み
左上にあるラズベリーパイのロゴマークをクリックします。
クリックすると、このように目次が出てきます。
この中のプログラミングをクリックし、中にあるThonny python IDEを起動します。
起動出来たら下記のプログラムを打ち込みます。
import sysimport time import smbus import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(12,GPIO.OUT) GPIO.setup(26,GPIO.OUT) i2c = smbus.SMBus(1) address = 0x5c if __name__ == '__main__': try: while 1: # センサsleep解除 try: i2c.write_i2c_block_data(address,0x00,[]) except: pass # 読み取り命令 time.sleep(0.003) i2c.write_i2c_block_data(address,0x03,[0x00,0x04]) # データ受取 time.sleep(0.015) block = i2c.read_i2c_block_data(address,0,6) humidity = float(block[2] << 8 | block[3])/10 temperature = float(block[4] << 8 | block[5])/10 print('温度={0:0.1f}℃ 湿度={1:0.1f}%'.format(temperature, humidity)) time.sleep(1) if(temperature>=28): GPIO.output(12,GPIO.HIGH) GPIO.output(26,GPIO.LOW) elif(temperature<28): GPIO.output(26,GPIO.HIGH) GPIO.output(12,GPIO.LOW) except KeyboardInterrupt: sys.exit(0)
上記のプログラムではif文を使い、温度センサーの値を取得し、その値でします。今回は温度を一定に保ちたいのでリレーを2つ使います。
28度以上だとGPIOの12番から信号が出力され、GPIOの26番からの信号が出力されなくなります。28未満だとGPIOの12番からの信号が出力されなくなり、GPIOの26番から信号が出力されます。
これにより、温度を上げる、下げるなどの制御が可能になります。
例で言うと、28度より温度を上げたくないのでこれにAC駆動のファンを取り付け、28度より温度を下げたくないのでここにヒーターを取り付けるなど温度を一定に保つことができます。
これでプログラムの準備は完了です。
動作確認
リレーと温度センサーをつないだ状態で上記のプログラムを走らせます。
すると取得した温度の値によって動くリレーが違ってきます。
温度センサーを手で握るなどして温度を上げてみる片方のリレーが動作し、もう片方は動作を停止します。
逆に息を吹きかけるなどして温度を下げると、さっきとは逆のリレーが動作し、片方は動作を停止します。
このi/o制御でACⅭ100Vを制御するのはとても汎用性が高くいろいろなところで使えると思います。
皆さんも自分でカスタマイズなどをして楽しい電子工作lifeを送ってみてください!