R-2R DACでオシロスコープに独自ビジュアルを描画
部品と材料
| 抵抗 1kΩ(または任意の値、比率R:2Rを維持) | ×50 |
| Arduino UNO / Nano / STM32 Blue Pill / Black Pill | ×1 |
アプリとオンラインサービス
Arduino IDE
プロジェクト概要
R-2R DACの仕組み
R-2Rラダー型DACは、Rと2Rの2種類の抵抗のみで構成できる最もシンプルなD/A変換器です。ビット数は2Rの分岐数で決まります。本プロジェクトではArduino Uno/Nanoのポート制約(PORTD: 8ビット、PORTB/PORTC: 6ビット)により、X軸用に8ビット、Y軸用に6ビットのR-2R DACを構成します。
抵抗値は統一してもよく(例:全て10kΩ、2Rは直列2本)、別値(1kΩと2kΩ)でも構いません。ブレッドボード実装例とTinkercad図を掲載。
ポートマニピュレーション
高速出力のため、digitalWrite()ではなくレジスタ直接操作(PORTD, PORTB)を使用します。ATmega328Pのポートマッピング:
- PORTD (PD0-PD7) → デジタルピン 0-7(8ビット全ビット使用可)
- PORTB (PB0-PB5) → デジタルピン 8-13(PB6,7は水晶振動子用で不可、6ビットのみ)
セットアップでDDRD=0xFF, DDRB=0x3Fとし、ループで配列値をポートに書き出します。Y軸(6ビット)は8ビット値をmap()で0-63に変換して出力。
描画ツール(Python + tkinter)
マウスドラッグで軌跡を描くと、255×255座標系でポイント列を記録し、終了時にArduino用配列定義(x_points, y_points, NUM_POINTS)を標準出力に吐き出します。
python drawlog.py > arduino_list.txt
生成されたテキストをスケッチの配列部分に貼り付けるだけで描画可能。UNOのメモリ制約で約400ポイント程度まで(STM32なら4000以上)。
オシロスコープのXYモード
CH1にX(PORTD 8ビットDAC出力)、CH2にY(PORTB 6ビットDAC出力)を接続し、オシロスコープをXYモードに設定。ノブで位置・拡大調整すれば描画が現れます。
メモリ節約の重要Tips(コミュニティフィードバック反映)
- イテレータを
byteからintに変更で255ポイント制限解除 - 配列を
const byte型にしPROGMEM属性でフラッシュメモリ配置すればUNOでも約15,000ポイントまで格納可能 pgm_read_byte_near()で読み出し、Y軸はループ内で>> 2シフト
コード
Arduinoスケッチ
const byte FIGURE_DELAY = 1;
const int NUM_POINTS = 87;
const byte x_points[NUM_POINTS] = { ... };
const byte y_points[NUM_POINTS] = { ... };
void setup() {
DDRD = B11111111;
DDRB = B00111111;
for (byte t=0; t
描画ツール
import tkinter as tk
# マウスクリック・ドラッグで座標記録、終了時にC配列定義を出力
# 詳細なコードは原文参照
回路図
8ビットR-2R(PORTD)、6ビットR-2R(PORTB)の2種類、および全抵抗同一値版の計4枚の回路図を掲載。
製造プロセス
- 家庭用の低コストワイヤレスセンサーネットワークを構築
- Raspberry Piダッシュボードで家庭の温度を監視する
- Raspberry Piの可能性を最大限に引き出す必須アクセサリー
- Raspberry Pi用DIY Google Voice HATの自作ガイド
- Arduino UNOで作る精密反応速度テスター
- バンドソー選びの究極ガイド:種類・刃・選定ポイント
- 車のドアハンドル修理:ステップバイステップ完全ガイド
- 車の錆(サビ)補修ガイド:表面錆・赤錆・穴あき別の修理手順
- PCオシロスコープ:コンピュータを使った低コスト波形解析機の構築
- 抵抗器の基礎:種類、特性、実用応用
- 重量列車におけるダイナミックブレーキの理解