【ITニュース解説】How to attach Arduino to 12v button?
2025年09月12日に「Dev.to」が公開したITニュース「How to attach Arduino to 12v button?」について初心者にもわかりやすく解説しています。
ITニュース概要
Arduinoと12Vボタンを接続する際は、直接繋ぐと破損の危険がある。最も安全な方法は、電気的に分離するオプトカプラを使うことだ。オプトカプラは12Vからの電圧スパイクやノイズからArduinoを保護し、安定動作に貢献する。電圧分圧器とNPNトランジスタを使う方法もあるが、こちらは絶縁性はない。
ITニュース解説
Arduinoというマイクロコントローラは、プログラミングによって様々な電子部品を制御できる小さなコンピュータだ。しかし、Arduinoの内部回路は通常5V(または3.3V)という低い電圧で動作する設計になっているため、自動車や産業機器などでよく使われる12Vのような高い電圧の部品を直接接続すると、壊れてしまう危険性がある。特に、12Vのボタン(スイッチ)をArduinoに接続して、そのボタンが押されたかどうかをArduinoで読み取りたい場合、安全な方法で回路を繋ぐことが不可欠となる。
12Vの電源は、Arduinoにとって非常に危険な電圧だ。もし誤って12Vの信号をArduinoの入力ピンに直接繋いでしまうと、内部の繊細な部品が過剰な電流や電圧で焼損し、Arduinoが永久的に故障してしまう。そのため、12Vの信号をArduinoが安全に受け取れる5V(または3.3V)の信号に変換し、かつArduino本体に悪影響を与えないように保護する仕組みが必要となる。ここでは、そのような安全な接続方法を二つ紹介するが、中でもオプトカプラを使った方法は、最も安全で信頼性が高いため強く推奨される。
一つ目の方法は、オプトカプラという部品を使うことだ。オプトカプラは、光を使って電気信号を伝える特殊な部品で、12Vの回路とArduinoの回路の間を電気的に完全に分離してくれるという非常に重要な役割を持つ。これは、たとえるなら、情報を伝えるために直接手を繋ぐのではなく、光信号という"メッセージ"を間に挟むようなイメージだ。この分離があるおかげで、12V側の回路で発生する可能性のある急な電圧の変動(電圧スパイク)や、電気的なノイズがArduino側に伝わるのを防ぎ、Arduinoを安全に保護できる。
オプトカプラ方式に必要な主な部品は、オプトカプラ本体(例えば4N35やPC817といった型番がある)、12Vボタン、そして数キロオーム(kΩ)の抵抗器が一つだ。この抵抗器は、12V回路側でオプトカプラの内部にあるLED(発光ダイオード)に流れる電流を適正な量に制限するために使う。もし抵抗器がなければ、LEDに過大な電流が流れ、すぐに壊れてしまうからだ。
具体的な配線方法を見ていこう。まず、12V電源の一方(プラス側)を12Vボタンの一端に接続する。次に、ボタンのもう一端をオプトカプラの内部LEDのアノード(プラス側)に繋ぐ。LEDのカソード(マイナス側)には先ほど説明した抵抗器(例えば1kΩ)を接続し、抵抗器のもう一端を12V電源のグラウンド(GND、マイナス側)に繋ぐ。これで12V側の回路は完成だ。ボタンが押されると12V電源から抵抗器とLEDを通して電流が流れ、LEDが点灯するようになる。この抵抗器の値は、オプトカプラのLEDが適切に光るように、そして電流が流れすぎないように計算して選ぶ。例えば、12Vの電源に対して1kΩの抵抗を使えば、LEDに安全な電流が流れる。
次に、オプトカプラの出力側、つまりArduinoに接続する側だ。オプトカプラの内部にはLEDの光を受けてON/OFFするフォトトランジスタという部品が入っている。このフォトトランジスタのエミッタ端子をArduinoのGNDに接続する。そして、コレクタ端子をArduinoのデジタル入力ピン(例えばD2ピン)に繋ぐ。この時、Arduinoのソフトウェア設定で、このデジタル入力ピンに「内部プルアップ抵抗」を有効にしておくことが非常に重要だ。pinMode(pin, INPUT_PULLUP);というコードで設定できる。このプルアップ抵抗は、ボタンが押されていないときにデジタルピンの電圧を高い状態(HIGH)に保つ役割がある。
この回路の仕組みは次のようになる。12Vボタンが押されると、オプトカプラの内部LEDが点灯する。この光が内部のフォトトランジスタを「ON」の状態にする。フォトトランジスタがONになると、Arduinoのデジタル入力ピン(コレクタ側)がGND(エミッタ側)と繋がった状態になるため、デジタルピンの電圧は低い状態(LOW)になる。ArduinoはこのLOW信号を「ボタンが押された」と認識する。一方、ボタンが離されると、LEDは消え、フォトトランジスタも「OFF」になる。すると、デジタルピンはGNDから切り離され、Arduinoの内部プルアップ抵抗によってデジタルピンの電圧が高い状態(HIGH)に戻る。ArduinoはこのHIGH信号を「ボタンが離された」と認識する。
Arduinoのプログラムは、例えば次のようになる。まず、ボタンを接続したピン番号をbuttonPinという変数で定義する。setup()関数の中で、シリアル通信を開始し、pinMode(buttonPin, INPUT_PULLUP);という命令で内部プルアップ抵抗を有効にする。loop()関数の中では、digitalRead(buttonPin)でピンの状態を読み取り、それがLOWであれば「Button pressed!」とシリアルモニタに表示する。これにより、ボタンの押下をArduinoが検知できるようになる。短いdelay()を入れることで、ボタンが押された際のチャタリングと呼ばれる小さなノイズによる誤動作を防ぐ効果があるが、より本格的なプロジェクトでは専用のチャタリング防止(デバウンス)処理を用いることが推奨される。
二つ目の方法は、抵抗分圧器とNPNトランジスタを組み合わせる方法だ。この方法はオプトカプラに比べて回路がシンプルで部品点数も少ないが、12V回路とArduino回路の間に電気的な絶縁は提供されない。そのため、12V側に大きなノイズが発生しないような、比較的クリーンな環境での利用に適している。
この方法では、NPNトランジスタ(例えば2N2222やBC547)と、抵抗器が3本必要になる。そのうち2本の抵抗器で「抵抗分圧器」という回路を構成する。抵抗分圧器は、高い電圧を低い電圧に変換するための回路だ。例えば、10kΩの抵抗と4.7kΩの抵抗を直列に繋ぎ、12V電源に接続すると、その分圧された箇所から約3.84Vの電圧を取り出すことができる。この3.84Vであれば、Arduinoのデジタル入力ピンに安全に接続できる電圧となる。
具体的な配線は次の通りだ。まず、12Vボタンの一端を12V電源に接続し、もう一端を抵抗分圧器の入力側(例えば10kΩ抵抗の片側)に接続する。この10kΩ抵抗のもう一方と、4.7kΩ抵抗の片側を繋ぎ、そこからArduinoのデジタル入力ピンに信号を送る。4.7kΩ抵抗のもう一方の端子はArduinoのGNDに接続する。この方法では、ボタンが押されたときに分圧器を通してArduinoピンに約3.84Vの信号が入力され、これはArduinoにとってHIGH信号として認識される。トランジスタは、この分圧された信号を受けて、ArduinoのピンをLOWにするかHIGHにするかを制御する役割を担う。
この方式でArduinoのプログラムを使用する場合、オプトカプラの例とほぼ同じコードが使えるが、ボタンが押されたときの信号がLOWではなくHIGHになる可能性がある点に注意が必要だ。もしボタンが押されたときにピンがHIGHになる場合は、if (buttonState == LOW)ではなくif (buttonState == HIGH)に変更する必要がある。また、誘導性負荷(モーターなど)がボタンに接続されている場合は、電源OFF時に逆起電力による電圧スパイクが発生することがあるため、それを抑制するためにボタンと並列にダイオードを接続するなどの対策を検討すると良い。
いずれの方法にしても、最も重要な警告は、12Vの信号をArduinoのGPIOピンに決して直接接続してはならないということだ。このルールを守らないと、Arduinoは確実に損傷する。紹介した二つの方法のうち、特にオプトカプラを使う方法は、12V回路とArduino回路の間に完全な電気的絶縁を提供し、安全面と信頼性において優れているため、初心者にはこの方法を強く推奨する。Arduinoで様々なプロジェクトを進める上で、異なる電圧レベルを持つ部品を安全に接続する技術は、システムエンジニアを目指す上で非常に重要な基礎知識となるだろう。