Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
プロジェクト背景
産業現場や屋外センサーでは、サージ・雷サージ・EMI・アース電位差などにより、Arduinoのアナログ入力が破損したり誤読み取りしたりするリスクがあります。本プロジェクトでは、電圧-周波数変換 (V-F変換) IC「LM331」とフォトカプラ「4N25」で完全絶縁し、周波数信号としてArduinoへ安全に取り込む回路を設計・実装しました。
必要な部品
| 部品 | 数量 | 仕様・備考 |
|---|---|---|
| LM331 (V-Fコンバーター) | 1 | TI製、精度良好 |
| 4N25 (フォトカプラ) | 1 | 出力側オープンコレクタ |
| LM7808 (8Vレギュレーター) | 1 | フィールド側電源生成 |
| マルチターンポテンショメーター 5kΩ | 1 | スケール調整用 |
| ダイオード 1N4001 | 4 | 整流・保護 |
| 各種抵抗・コンデンサ | 1式 | 精密抵抗(±1% 金属皮膜)推奨 |
| Arduino UNO | 1 | 周波数カウント用 |
回路構成と動作原理
入力段
- 電圧入力: 20mV〜5V(分圧抵抗で拡張可)
- 電流入力: 4〜20mA(ジャンパーW1挿入時、並列250Ωで1〜5V変換)
V-F変換部 (LM331)
入力電圧に比例した周波数(約 1kHz/V に調整)のパルス列を出力。LM331の出力はオープンコレクタで、プルアップ抵抗を介してフォトカプラLED側へ駆動。
絶縁部 (4N25)
- 一次側(フィールド): LM331出力 → LEDアノード、カソードをGND
- 二次側(Arduino): コレクタをArduino 5Vへプルアップ(2.2kΩ)、エミッタをGND、コレクタ信号を D5 (T1/PD5) へ入力
電源分離
トランスT1の2次側から LM7808 で 8V 生成し、LM331・センサー駆動・フォトカプラLED側に供給。Arduino側はUSBまたは別電源で完全分離。
Arduino側周波数測定
Martin Nawrath氏の FreqCounter ライブラリを使用。Timer1でパルスカウント、Timer2でゲートタイム生成(1ms割り込み)。ゲートタイム 1000ms (1秒) とすることで、商用電源50/60Hzノイズを平均化し、実効分解能をUno標準の5倍(約0.2Hz相当)に向上。
#include <FreqCounter.h>
void setup() {
Serial.begin(9600);
Serial.println("Optoisolated analog input");
}
long int frq;
void loop() {
FreqCounter::f_comp = 0; // 補正なし
FreqCounter::start(1000); // 1000msゲート
while (FreqCounter::f_ready == 0); // 完了待ち
frq = FreqCounter::f_freq; // 周波数取得
Serial.println(frq); // 出力
delay(100);
}
測定方式の比較
| 方式 | 分解能 | 測定速度 | ノイズ耐性 | 備考 |
|---|---|---|---|---|
パルス幅測定 (pulseIn) | 低 (μs単位) | 高速 (~周期) | 低 (50/60Hzに敏感) | HIGH/LOW幅を足して周期算出 |
| 周波数カウント (FreqCounter) | 高 (1秒で1カウント) | 低速 (ゲートタイム依存) | 高 (ゲート=商用周期整数倍で除去) | 精密測定向け、本採用方式 |
調整手順
- 既知の電圧源(例: 1.000V)を入力
- ポテンショメーターP1を調整し、周波数カウントが 1000Hz 付近になるよう合わせる(1kHz/V)
- 複数点(0.5V, 2.5V, 5.0V)で直線性確認
- 電流入力モード時は、4mA→1kHz, 20mA→5kHz となるよう確認
拡張・応用
- 入力レンジ拡張: 10V入力対応なら LM7808→LM7815、トランス二次電圧も上げる
- 多チャネル化: LM331+4N25を複数並列、Arduino側でマルチプレクス(カウンター切替)
- データロガー化: SDカード/RTC追加でスタンドアローン記録
- 無線化: LoRa/Sigfox/セルラーで遠隔監視
参考資料
詳細な設計ノート・実装記録はブログ記事 ardupiclab.blogspot.it に掲載。
製造プロセス
- スマート渇きアラート植物アラーム – 最適な水やりタイミングを知らせるDIYセンサー
- Arduino Nanoで20kHzオシロスコープを自作:Nokia 5110 LCD搭載・簡易DIYガイド
- スマートブラインド:Arduinoとソーラー電源で実現する自動光制御
- イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
- アナログ3ピンで4×3キーパッドを接続 - Arduinoピン節約テクニック
- Arduino MKR Fox 1200で作る信頼性の高いSigfox kWhメーター
- Bluetooth対応温度モニター:Arduino NanoとHC-06でスマホ監視
- 非接触ジェスチャー錠: APDS-9960とArduinoでセキュアアクセス
- Arduino Nanoコンパニオンキット – 電子工作に必須の部品とツールを搭載した多機能IC型デバイス
- Arduino Micro/Leonardo用 USB-MIDIアダプタキット – 完全パーツリストと実装ガイド
- クレジットカードサイズのArduboyクローンをArduino NanoとI2C OLEDで自作する