はじめに
ラズパイを使ってDC 12Vの水中ポンプを動かしてみた。
部品の選び方も含めて電子回路とコードを記事に残す。
動作環境
マイコン:RaspberryPi 4b
プログラミング言語:Python
水中ポンプについて
水中ポンプとは
水などの液体を移動させることができるポンプである。
使用用途は給水や汚水の排水などである。
使用時はポンプ本体を水中に沈める必要がある。
使用するポンプのスペック

品名:LEDGLE 水中ポンプ DC 12V
動作電圧:DC 12V
消費電力:3.6W
流量:240L/H
大きさ:5.5 X 4 X 3.4 cm
水槽の水換えに使うため、小型でそこそこ流量のあるポンプを選択した。
動かしてみた
水中ポンプを動かすための電子回路とコードについて説明する。
電子回路
方針
今回使用する水中ポンプを動かすには12Vの電圧が必要である。
ラズパイのGPIOは3.3V出力のため、12Vの電圧で動作する水中ポンプを直接制御することはできない。
そこで、水中ポンプを動かすための電力は外部電源から取得し、
トランジスタでラズパイのGPIOから水中ポンプを制御することにした。
回路設計
部品の選び方を中心に回路について説明する。
電子回路概要

上図は外部電源をトランジスタで制御するための電子回路である。
参考サイト
この電子回路を以下の手順で完成させる。
(1)動かしたいものを決め、動作に必要な電圧と電流を決める。
(2)動作に必要な電圧と電流から外部電源を決める。
(3)動作に必要な電圧と電流から使用するトランジスタを決める。
(4)動作に必要な電流から抵抗を決める。
(1)動かしたいものの選定
今回は水中ポンプを動作させる。
動作に必要な電圧は12V
動作に必要な電流は0.3A
である。
また水中ポンプはDCモーターのため、トランジスタ保護のためにダイオードをつけた方がよいと思われる。
参考サイト

(2)外部電源の選定
(1)で調べた動作に必要な電圧と電流から外部電源を選定した。
外部電源から12Vを供給する方法として以下の方法が考えられる。
・ACアダプタを使用してコンセントから電力を取得
・乾電池から電力を取得
乾電池を使用すると乾電池の管理を行う必要がある。
そのため、今回はACアダプタを使用することにした。

使用したACアダプタ
スペック
入力電圧:AC 100V
出力電圧:DC 12V
出力電流:DC 1A
以下の基準からACアダプタを選定した。
外部電源ACアダプタの選定基準
電圧:使用する電圧と同じもの
電流:使用する電流よりも少し余裕を持たせたもの
参考サイト

DCプラグのままでは電子工作しにくいため、DC電源ケーブルも使用した。

(3)トランジスタの選定

まず、(1)で調べた動作に必要な電圧と電流からNPNトランジスタの要求スペックを洗い出した。
次に、トランジスタ一覧サイトから必要スペックを満たすトランジスタを選定した。
今回は要求スペックに対して余裕のある2SD882を選定した。
2SD882データシート
(4)抵抗の選定

(3)でも述べたように、GPIOからトランジスタのベースに流す電流を0.003Aにするため、抵抗1を0.1kΩに、抵抗2を1kΩに設定した。
また、GPIO保護のため、抵抗値を大きくした回路でも動作テストを行った。
回路図

(1)~(4)までで使用する部品が決まった。
これを基に回路図を作成した。
電子回路の作成

回路図を基にブレッドボードに電子回路を作成した。
コード
"水中ポンプが1秒動作し、1秒停止する"動作を繰り返すコードをPythonで作成した。
import RPi.GPIO as GPIO
import time
PumpSwitchGpio = 18 #トランジスタのベースに繋がるGPIO端子番号
PumpOperationTimes = 10 #ポンプを操作する回数
WaitTime = 1 #ポンプのON/OFFを切り替える時間
#GPIOの設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(PumpSwitchGpio, GPIO.OUT)
#水中ポンプを操作する
for i in range(PumpOperationTimes):
#水中ポンプを動かす
GPIO.output(PumpSwitchGpio, True)
time.sleep(WaitTime)
#水中ポンプを停止する
GPIO.output(PumpSwitchGpio, False)
time.sleep(WaitTime)
#終了
GPIO.cleanup
動作テスト結果
コード通りに水中ポンプが動作していることが確認できた。
思っていたよりも水流が強かった。

また、抵抗値を変えて動作テストも行った。
パターン③まで動作した。
抵抗値が変わっても、目視ではあるが流量に変化は見られなかった。