Arduino UNOで自作可変電源:回路図・コード付きステップバイステップガイド
Arduino UNOを用いた可変電源の作り方
電源は、電子・電気機器と回路にとって基本かつ必須の要件です。回路や機器の種類は様々で、それぞれ必要な電源電圧が異なります。例えば、Wi-Fiモジュール、リレー、モーターなどは異なる電圧を必要とします。市販ではすべての電子機器用の異なる電源を揃えることはできないため、様々な方法で独自の特定電源を生成する必要があります。シンプルな解決策は電池の使用です。
電池は一般的に電子回路とプロジェクトの電源として用いられ、入手しやすく接続も容易です。しかし、すぐに消耗して新しい電池が必要になり、パワフルなモーター駆動に必要な大電流を供給できません。電池は消耗し、回路を大型化させ、長時間・過度使用で発熱し、寿命も低下します。この問題を解決するため、あらゆる回路で使用できるより優れた効率的なソリューションとして、Arduino UNOから可変電源を生成する方法を紹介します。
このプロジェクトを使用すれば、充電・消耗・発熱の心配なく、電子機器に合わせた可変電源を取得できます。可変電源生成には多くの方法がありますが、これは安価で入手しやすい部品で実現できる最も簡単な方法です。必要部品を見てみましょう。
- 関連記事:Arduino活用自動ドアベル(物体検知付き)
必要部品
- Arduino UNO
- 16×2 LCDディスプレイ
- 100μF コンデンサ
- 1kΩ 抵抗
- ジャンパーワイヤー
- 5V 電源
- 2N2222 トランジスタ
ソフトウェア: Arduino Nightly または Atmel Studio 6.2
- 関連記事:Arduinoと超音波センサーによる距離測定
可変電源回路図
プロジェクトに入る前に、いくつか知っておくべきポイントがあります。

Arduino UNO
Arduino UNOは電子プロジェクト開発用のオープンソースプラットフォームです。いつでも簡単にプログラミング、消去、再プログラミングが可能。Arduino UNO、Arduino Nano、Arduino Mega、Arduino LilyPadなど、用途に応じた様々な仕様のボードが市販されています。本プロジェクトでは、家電自動制御用にArduino UNOを使用。ATmega328マイクロコントローラーICを搭載し、16MHzクロックで動作。USART、I2C、SPI通信プロトコルに対応した強力なボードです。
- 関連記事:Arduino活用自動ナイトランプ
通常、マイクロUSBケーブルでArduino IDEソフトウェアを使用してプログラミング。ATmega328にはオンボードブートローダーがプリプログラミングされており、外部ハードウェアなしでコードアップロードが容易。電子プロジェクトや製品開発に幅広く応用可能。C/C++言語でプログラミングし、学習・使用が容易。Arduino IDEはコードをvoid setup()とvoid loop()の2部分に分離し、さらに使いやすくしています。void setup()は1回のみ実行され主に初期化用、void loop()は継続実行される部分です。
このモデルは6個のアナログ入力ピンと14個のデジタルGPIOピン(うち6個はPWM出力対応)を持ち、pinMode()、digitalWrite()、digitalRead()、analogRead()関数で入出力制御可能。6チャネルのアナログ入力はピンA0〜A5で10ビット分解能。ボードはUSBケーブル(5V動作)またはDCジャック(7〜20V動作)で給電可能。
低電力デバイス動作用の3.3V生成のためオンボード電圧レギュレーター搭載。ATmega328はUSART、SPI、I2C通信プロトコル対応で、USART用に0(Rx)と1(Tx)ピン、I2C用にSDA(A4)とSCL(A5)ピン、SPI用にSS(10)、MOSI(11)、MISO(12)、SCK(13)ピンを装備。
- 関連記事:Arduinoによるシリアル通信
Arduino UNOのADC
Arduino UNOにはオンボードで6チャネルのADCがあり、0V〜5Vの範囲でアナログ信号を読み取り・検知可能。Arduino UNOのようなマイクロコントローラーにセンサーをインターフェース接続すると、センサーはアナログ出力値を生成しますが、Arduino UNOはデジタル値として検知します。したがって、ADCがセンサー値をアナログ値に変換し、マイクロコントローラーへ供給します。ADCの応用例は、温度検知、距離測定、速度測定、アナログ値を生成する様々なセンサーなど多数あります。
Arduino UNOは10ビットADCで、値は0〜1023の範囲でステップごとに変化。これが分解能であり、アナログ値範囲で生成可能な離散値の数を示します。
ADC最大電圧が5Vのため、0〜1023の各ステップは約5mVに相当。ADCチャネルはArduino UNOボード上のA0〜A5の6つあり、同時に6台までのアナログ値生成デバイスを制御・インターフェース可能。
Arduino IDEにはアナログ値読み取り用の組み込み関数analogRead(pin)があります。
接続デバイスのピン番号(A0〜A5)を指定するだけで、アナログ値を読み取れます。
- 関連記事:クロバーサーキットとは? 設計と動作
Arduino UNOのPWM
パルス幅変調(PWM)は、周波数を一定に保ちながらパルス幅を変化させることで、デジタルソースからアナログ信号を生成する技術です。PWMを定義する2つの主要要素:デューティサイクルと周波数。
信号のデューティサイクル:
1周期中に信号がON状態にある割合をデューティサイクルと呼びます。
デューティサイクル = 100 × Ton / (Ton + Toff)
負荷への電力供給を、信号のON/OFFで制御するために一般的に使用。例えば、光の強度やモーター速度の制御など。analogWrite()関数呼び出し後、次のanalogWrite()呼び出し、または同一ピンでのdigitalRead()/digitalWrite()呼び出しまで、指定デューティサイクルの安定した矩形波を生成し続けます。
- 関連記事:555タイマー・BC547トランジスタ活用シンプルタッチセンシティブスイッチ回路
信号の周波数:
信号の周波数は、信号が1サイクルを完了する速さ、つまりON状態からOFF状態、またはその逆へ切り替わる時間を示します。特定のデューティサイクルでこれを行うことで、出力が一定のアナログ電圧のように振る舞います。ほとんどのピンでのPWM信号周波数は約490Hz。Uno等のボードではピン5と6が約980Hz。Leonardoのピン3と11も980Hzで動作。
Arduino UNOには〜記号付きの6個の8ビットPWMチャネルがあります。Arduino IDEのanalogWrite関数でアナログ電圧を取得可能:
analogWrite(ピン, デューティサイクル)
ピン:Arduino UNOでアナログ出力生成に使用するピンを指定。
デューティサイクル:0(最小)〜255(最大)の値を入力し、デューティサイクルを変更。
- 関連記事:ツェナーダイオード活用シンプル過電圧保護回路
16×2 LCDディスプレイ
LCDでカスタム文字生成はそれほど難しくありません。LCDのカスタム生成ランダムアクセスメモリ(CG-RAM)とLCDチップコントローラーについての知識が必要です。これは、Arduino UNOを16×2 JHD162A LCDモジュールとインターフェース接続する内容です。JHD162Aは日立HD44780ドライバー基盤の16×2 LCDモジュール。JHD162Aは16ピンで、4ビットモード(データライン4本のみ使用)または8ビットモード(全8データライン使用)で動作可能。本プロジェクトでは配線数削減のため4ビットモードを使用。
16×2 LCDモジュール ピン説明:
| LCDピン | 説明 |
| VSS | グラウンドピン |
| VCC | +5V電源 |
| VEE | LCDコントラスト変更用ピン |
| RS | レジスタセレクト:データモードまたはコマンドモード |
| RW | 読み書きモード |
| E | LCDイネーブル |
| DB0-DB7 | データとコマンドをこれらのピンで送信 |
| LED+ | バックライトLEDアノード |
| LED- | バックライトLEDカソード |
- 関連記事:自動浴室照明スイッチ回路図と動作
このLCDには自発光機能がないため、画面裏のLEDがバックライトとして機能。Arduino UNOとのインターフェース接続は簡単で、Arduino IDEのLiquidCrystalライブラリが初期化・表示を容易にする多くの組み込み関数を提供。本プロジェクトで主に使用するLCD関数:
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
lcd.begin()
lcd.clear()
lcd.print()
- 関連記事:12V→5Vコンバーター回路
Arduinoを用いた可変電源の動作
回路図通りに配線を正しく接続してください。本プロジェクトでは、出力端子で得られる電圧を入力としてADCチャネルの1つに与えます。ADCチャネルがデジタル値を出力し、後で16×2 LCDディスプレイに表示。プロジェクトで使用するボタンは電圧のインクリメント・デクリメント用で、Arduino UNOのピン4とピン5に接続。Arduino UNOは10ビット分解能(0〜1023変化)、最大ADC電圧5Vのため、1ビット = 5/1024 ≈ 4.9mV。インクリメント・デクリメントでデジタル値が0〜1023で変化。
A0チャネルのADC値を読み取り。Arduino IDEの組み込み関数analogRead(pin)でADC値読取、ここではチャネルA0なのでpin=A0。PWM用にArduino UNOのピン3を使用。Arduino IDEのanalogWrite(pin, Duty Cycle)関数で、指定デューティサイクルでの所望出力電圧をピン3で生成。
2つのボタンを押すことでPWM信号のデューティサイクルを変更し、結果として出力電圧を変化。1つのボタンでデューティサイクル増加、もう1つで減少。Arduino UnoのPWM値は0〜255で変化、0で0V、255で5V達成。ピン3をさらにNPNトランジスタへ供給し、エミッターで可変電圧を出力、スイッチングデバイスとして動作。
トランジスタのベースには可変デューティ比PWMが入力されるため、端子で可変出力電圧を取得可能。電圧がリニアではないため、コンデンサを接続して可変出力電圧のノイズをフィルタリング。
- 関連記事:IC 4017・555タイマー活用信号機制御電子プロジェクト
コード解説
ライブラリインクルード:
#include <LiquidCrystal.h>
LCDディスプレイ用組み込みライブラリ。LCDへの文字表示を容易にする関数を提供。
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
int ref_volt = 125;
float flag = 0;
liquid crystal lcdは、LCDディスプレイのデータピン、RS、RW、Eピンが接続されているピン番号を取得。基準電圧を2.5Vに設定するため、デューティサイクル50%としてref_voltを125に設定。
pinMode(3, OUTPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
Arduino UNOのピン3をPWM出力、ピン4とピン5を電圧増減用入力に設定。
lcd.begin(16, 2);
delay(100);
lcd.setCursor(1, 0);
lcd.print("Variable Voltage");
lcd.clear();
delay(1000);
lcd.begin関数でLCDディスプレイの文字数設定。起動時に「Variable Voltage」を画面表示。
float value = (analogRead(A0));
value = (value * 5) / 1024;
analogWrite(3, ref_volt);
value変数でA0 ADCチャネルから取得したデジタル値を読み取り、電圧値に変換。analogWriteでArduino UNOのピン3にPWM出力。
if (digitalRead(4) == LOW) {
if (ref_volt < 250) {
ref_volt = ref_volt + 1;
delay(100);
}
}
インクリメントボタンが押されたかチェック。押されていればref_voltを増加。
if (digitalRead(5) == LOW) {
if (ref_volt > 0) {
ref_volt = ref_volt - 1;
delay(100);
}
}
デクリメントボタンが押されたかチェック。押されていればref_voltを減少。
- 関連記事:IC 555タイマー・非タイマー活用クラップスイッチ回路
以上の方法で、電池や大型化の心配なく、Arduino UNOを用いた5V可変電源を生成できます。
産業技術
- ArduinoだけでDTMFデコーダーを構築 – 外付けIC不要
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduino UNO WiFi Webサーバー:ブラウザからLEDをON/OFF制御
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
- Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
- スマホのGセンサーで操作するBluetoothロボットカー:ArduinoとRemoteXYで実現
- Helium、Azure IoT Hub、Power BIを用いたリアルタイムGPSトラッキング
- AIがグローバルサプライチェーンにおける人身・野生生物取引を検知
- 可変速ドライブにおける電流、電力、トルクのマスター
- 230VACから±12VDCデュアル電源回路 - 回路図とガイド
- トランスレス電源:コストとスペースを削減する実証済みソリューション