JX Wave Generator – Arduino互換DDS発振器(OLEDディスプレイ搭載)
概要
電子工作とプログラミングを組み合わせ、安価で高機能な信号発生器を自作するプロジェクトです。Arduino NanoとAD9833 DDSモジュール、SH1106 OLEDディスプレイ、ロータリーエンコーダーを用いて、1Hz〜999,999Hzの正弦波・三角波・矩形波を出力できます。AC/DC結合切替、スイープ機能、画面セーバーなど実用的な機能を搭載し、単一のノブで全操作が可能です。
主な特徴
- 出力周波数: 1Hz〜999,999Hz
- 周波数変更モード: 対数ステップ / 1桁ずつ編集
- 波形: 正弦波、三角波、矩形波
- 出力結合: AC / DC / OFF(切断)
- スイープ機能: 設定した最小・最大周波数間をステップ周波数で連続掃引
- 操作: ロータリーエンコーダー1つ(回転+押下+長押し)
- OLED焼き付き防止用スクリーンセーバー内蔵
必要な部品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | 他のArduinoモデルでも動作可能 |
| SH1106 I2C OLED 128×64ピクセル(4ピン) | 1 | |
| AD9833 DDSモジュール | 1 | |
| ロータリーエンコーダー(プッシュボタン付き) | 1 | 基板実装タイプ推奨(プルアップ抵抗内蔵) |
| 5Vリレーモジュール(オプション) | 1 | AC/DC結合切替用。ブレッドボード実装タイプが便利 |
| リードリレー 5V 500Ω(オプション) | 1 | 小信号用に最適。Arduinoピンに直結可能(10mA) |
| コンデンサ 10µF | 1 | |
| コンデンサ 10nF(ポリエステル) | 1 | |
| AC-DC 5Vステップダウン電源モジュール(オプション) | 1 | USB給電以外で動作させる場合 |
必要な工具
- はんだごて(ブレッドボードで試すだけなら不要)
使用ソフトウェア・サービス
- image2cpp - カスタムアイコンをPROGMEM用16進数形式に変換
回路図
回路図と実装写真はプロジェクトページを参照してください。リレー駆動にはトランジスタやダイオードが必要な場合があります。Arduinoのデジタルピンは最大40mAまでなので、コイル抵抗120/150Ωの電磁リレーは直接駆動できません。リードリレー(500Ω)なら直結可能です。
警告: 商用電源(100-220V)を扱う際は感電・火災の危険があります。十分な知識と注意を持って作業してください。
ソフトウェア構成
コードは3つのファイルで構成されます:
JX_Wave_Generator_8.7.7.ino- メインスケッチJXWG_Defs.h- 定数・変数・ライブラリインクルード・EEPROM設定構造体JXWG_Graphics.h- アイコン・ビットマップデータ(PROGMEM格納)
主なライブラリ
Wire.h- I2C通信EEPROM.h- 設定保存SimpleRotary.h- ロータリーエンコーダー制御Adafruit_SH1106.h- SH1106 OLED制御(SSD1306ライブラリの派生)
動作モードと状態遷移
エンコーダーの回転・押下・長押しにより以下のモードを遷移します:
- LOGARITHMIC(対数モード) - 回転で周波数を対数ステップ(1, 10, 100, 1k, 10k, 100kHz)で増減。押下でOPTIONSへ。
- SINGLEDIGIT(桁編集モード) - 回転でカーソル左右移動(6桁+アイコン3つ)。押下で桁値変更(DIGITCHANGE)またはアイコン選択(OPTIONS)。
- SWEEP(スイープモード) - スイープ最小/最大/ステップ周波数の編集、開始/一時停止/停止。
- OPTIONS - 動作モード、波形、結合モードの選択。
- 各サブモード(OPTMODE, OPTWAVE, OPTCOUP, OPTSWEEP, SWEEPEDIT, DIGITCHANGE) - 詳細設定。
主要なアルゴリズム
- 対数ステップ計算(AutoStep): 現在値に応じて1/10/100/1k/10k/100kHzのステップを自動決定。
- スイープ制御: 非ブロッキングでアップ/ダウン掃引。エンコーダー押下で一時停止・再開・停止。ヒステリシス付きコンパレータ風の閾値処理で安定動作。
- 設定のEEPROM保存/読み出し: 起動時の最終設定を復元。バージョン管理付き(
JXWG1)。 - スクリーンセーバー: 10分無操作で画面クリア、操作で復帰。
AD9833制御
SPIライクなシリアルインターフェース(FSYNC=D9, CLK=D10, DATA=D11)で周波数・波形レジスタを書き込み。28ビット周波数レジスタへの分割書き込みと位相リセットを実装。
ビルド・書き込み手順
- Arduino IDEに上記ライブラリをインストール。
- 3つのファイルを同一フォルダに配置。
- ボード「Arduino Nano」、プロセッサ「ATmega328P (Old Bootloader)」を選択し書き込み。
- 起動後、エンコーダーで動作確認。必要ならEEPROMリセット(長押し)で初期化。
今後の改善案
- 出力振幅調整機能(DACやデジタルポテンショメータ追加)
- 任意波形生成(ウェーブテーブル合成)
- PC連携GUI(シリアル/Bluetoothでパラメータ設定・波形表示)
- 筐体化・バッテリー駆動対応
ライセンス
MITライセンス。詳細はソースコードヘッダー参照。
製造プロセス
- Arduino Nanoで水滴を高速撮影 – DIYハイスピードフォトグラフィ
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
- Arduino MegaとNEO-6M GPSモジュールの接続:ステップバイステップガイド
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド