まさはる's Weblog

まさはる's Weblog
Macintoshとオーディオの話題
Arduino

2026年6月12日

XIAO RA4M1を使ってみました

Category : Arduino / Posted at 2026年6月12日 17:09

 ArduinoはUno R3とNano Everyを持っているのですが、Nanoといっても30ピンなのでブレッドボード1枚の半分を占有してしまいます。そこで、小さいSeeed StudioのXIAO RA4M1を購入してみました。

XIAO RA4M1
Seeed Studio XIAO RA4M1

 XIAOは多くのモデルがあり、どれもほとんど値段が変わらないのですが、Nano R4と同じシリーズのMCUで、LEDとリセットボタンが付いている、どちらかというと多機能ではないRA4M1にしました。

温湿度計の回路図
温湿度計の回路図(PDFはこちら

 以前作った温湿度計をXIAO版にしてみました。XIAOのIO電圧は3.3Vなので、双方向ロジックレベル変換器がなくなって更に簡単な回路になりました。

 プログラムの方は、そのままで動作するかもと思ってコンパイルしてみたところ、Stringオブジェクトを配列の文字列に変換するところでエラーが出たので、少し変更しました。プログラムのソースはこちら。

温湿度計
温湿度計

 ブレッドボード1枚になって小さくなりました。右側の半固定抵抗は、バックライトの明るさ調整用です。

(ついでの話題)

 以前、自作Arduino互換機を使って正弦波発生回路を作ったのですが、3.3V電源出力やパソコンとのシリアル通信機能は不要なので、もっとシンプルにならないかと思っていたところ、aitendoで「あちゃんでいいの」というATmega328P用の互換機キットが売られていたので購入してみました。このキットは、基板に水晶発振子、LED、リセットスイッチを付けられるので、かなりコンパクトになります。

ATmega328Pマイコンボード3種
ATmega328Pマイコンボード3種(左から松、竹、梅)

 左側は外部電源入力や5/3.3V電源出力のあるフルセット版、中央はパソコンとのシリアル通信機能が使えるUSB電源版、右側はUSB電源版です。IC制御のような用途の場合、プログラムができてしまえば電源のみで十分です。

ATmega328Pマイコンボード「梅」
ATmega328Pマイコンボード「梅」が稼働中
このページのトップに戻る

2026年5月15日

AD9833を使った正弦波発生回路を作ってみました

Category : Arduino / Posted at 2026年5月15日 06:17

 以前作った、マイコンキット ドットコムの波形発生器キット「MK-200D」は、新たに自作した状態変数型正弦波発生回路に置き換わってから使わなくなったため、キットで使われていたアナログ・デバイセズのAD9833を使用したDDSモジュールを、単独で使ってみる事にしました。

AD9833 DDSモジュール
AD9833 DDSモジュール(キット付属のもの)

 このAD9833はSPIで制御するので、前回作ったArduino互換機を早速使ってみることに。

AD9833 正弦波発生回路の回路図
AD9833 正弦波発生回路の回路図(PDFはこちら

 これまで作った正弦波発生回路は1kHzしか出せなかったので、今回はスイッチにより3種類の周波数(例えば100Hz, 1kHz, 10kHz)を選択できるようにしてみました。また、アナログ回路の部分は、AD9833が単電源による動作のため0〜約0.6Vの波形を発生させることから、DC成分を取り除くカップリングコンデンサを入れたことと、2VPPへの電圧増幅と出力の振幅調整ができるようにしています。

 で、一番大変なのはプログラムの方で、AD9833のデータシートを見ると結構難しそう...。なお、今回も使用したライブラリはSPIのみで、AD9833の制御は自力です。最初は周波数の設定データを手作業で作っていて、融通の利かないプログラムだったのですが、現在のバージョンでは関数の引数に周波数[Hz]を入れて呼び出せば、周波数の設定値が変更されるようになっています。また、スイッチに割り当てる周波数は、自由な値に設定する事が可能です。ちなみにソースはこちらです。

AD9833 正弦波発生回路
AD9833 正弦波発生回路

 上が正弦波発生回路で、下が前回作ったArduino互換機です。上のタクトスイッチは左から100Hz、1kHz、10kHzに設定されており、選択されると緑、黄、赤のLEDが点灯するようになっています。

100HzのA点とB点
100Hzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

1kHzのA点とB点
1kHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

10kHzのA点とB点
10kHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

 上から100Hz、1kHz、10kHzで、縦軸のスケールは全て同じです。AD9833から出力される周波数はかなり正確で、100.003Hz、999.969Hz、9.99995kHzとなっており、振幅は0〜0.6V弱ぐらいです。

正弦波発生回路
正弦波発生回路のアップ

 相変わらず謎の立体交差配線がされていますが、ブレッドボード1枚に納めようとするとこんな感じの仕上がりに...。ま、そこは置いといて、使ってみるとスイッチ一つで出力する周波数が瞬時に変わるのはかなり便利です。これまでアンプの動作確認は1kHzでしかしていなかったので、今後は100Hzや10kHzも使ってみたいと思います。

(その後...)
 その後、私の場合は使い道がないのですが、もっと高い周波数でも正弦波が出せるのか、100kHz、1MHz、10MHzを設定してみました。

100kHzのA点とB点
100kHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

 まあまあ普通に出力されています。オペアンプの出力も2VPPになっています。

1MHzのA点とB点
1MHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

 AD9833の出力はまともなのですが、オペアンプが高周波に対応していないことから出力波形が歪んでおり、振幅も1.5VPPと小さくなっています。アナログ回路を高周波向けに改良すれば良くなりそうです。

10MHzのA点とB点
10MHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

 AD9833の出力はかなり歪んで、オペアンプの出力は0になっています。今回作った正弦波発生回路の場合は、100kHzぐらいまでで使うのが良さそうです。

(さらにその後...)
 1MHzの出力波形がだいぶ歪んだので、高速・広帯域のオペアンプに替えると変わるかもと思い、これまで見向きもしなかったNJM2137Dに変更してみました。

NJM2137D
高速・超広帯域オペアンプ NJM2137D

 このオペアンプは電源電圧が±1.35〜±6V、スルーレートSR=45V/μs、利得帯域幅積GB=200MHzというものですが、最小安定ゲインが1V/Vなので単純に置き換えられそうという事で選定しました。

1MHzのA点とB点
1MHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

 少し右にズっていますが、まぁまぁいい感じに。周波数を2MHz、3MHzと高くしていくともっと右にズレていき形が崩れていきます。ちなみに周波数の低い方(例えば100Hzとか)もちゃんと出ますが、今のところ高周波は用事が無いのでNJM4580DDに戻しました。

このページのトップに戻る

2026年5月 8日

Arduino互換機を作ってみました(その2)

Category : Arduino / Posted at 2026年5月 8日 08:50

 前回、USBと外部電源の5Vを順方向電圧0.45Vのショットキーバリアダイオードで一つの電源ラインにしていたため、5V出力の電圧が落ちていたのですが、せめて外部電源入力時の出力ぐらいは5Vにしたいので、理想ダイオードを試してみました。

理想ダイオード回路
理想ダイオード回路

 試してみると、電圧が落ちることなく逆流もほとんど無いようです。これで十分なのですが、部品点数が5つと多く、ユニバーサル基板に組んで基板を立ててもかなり嵩張ります。何か良いのがないかと探してみると、「理想ダイオード機能搭載 ロードスイッチIC XC8111」を見つけたので購入してみました。

XC8111
左から0.1μF, XC8111, SOT457変換基板, 10μF

 このSOT457変換基板は裏面パターンがあるので、コンデンサはそれを利用して裏面に取り付けます。

回路図
ATmega328Pマイコンボード Ver. 1.1の回路図(PDFはこちら
ATmega328Pマイコンボード Ver. 1.1
ATmega328Pマイコンボード Ver. 1.1

 上から見た写真ではXC8111がどこにあるのか分かりませんが、もともとダイオードが入っていた、緑色の電源LEDの左下の変換基板に付いています。

XC8111
XC8111のアップ

 負荷を繋げていない状態ですが、外部電源入力時で出力電圧は5.00V、USB入力時でXC8111の上流は0.00Vになっており、さすが専用ICといった感じです。これで、前回諦めていた外部電源からの電圧降下が無くなったので、Arduino互換機の話題はこれで終わりにしようと思います。

ピン配置図
挿せる場所はたくさんあります(PDFはこちら
このページのトップに戻る

2026年5月 1日

Arduino互換機を作ってみました

Category : Arduino / Posted at 2026年5月 1日 09:03

 Arduinoを使い始めてから気になっていた、秋月電子通商で販売されている「Arduino Bootloader書込済(5V 16MHz仕様) ATmega328P」と周辺部品を購入してみました。

ATmega328P
16MHzの水晶発振子とATmega328P

 上の写真の他にはUSBシリアル変換キットも購入しており、繋げればArduino互換機になるのではないかと思って作ってみました。

ATmega328Pマイコンボードの回路図
ATmega328Pマイコンボードの回路図(PDFはこちら

 こだわったところは、外部電源入力と5Vと3.3Vの出力を付けたところで、こだわってないというか諦めたところは、USBと外部電源をダイオードで一つの電源ラインにしているところです。

ATmega328Pマイコンボード
ATmega328Pマイコンボード

 ブレッドボードに組む前は、2つの電源をC接点のリレーで切替えたり、MOSFETを使って切替えたりと色々考えていたのですが、ブレッドボード1枚に納まらないので諦めました。その他には、電源LED、ビルトインLED、リセットスイッチが付いています。
 初めてUSBに繋げると、ボードとポートを選択する必要があります。上の回路図の構成の場合ですが、ボードは「Arduino UNO」、ポートは見覚えのないやつ(w)を選べば多分大丈夫です。なお、Macの場合はUSBシリアル変換器のドライバのインストールは必要ありません。

ATmega328Pマイコンボード
斜めから見たところ

 緑色の電源LEDのリード線に熱収縮チューブが付いていますが、あの中に4.7kΩの抵抗器が入っています。その左下のダイオードは、2つの電源を1つにしているショットキーバリアダイオード(SBD)で順方向電圧0.45Vのものを使っています。
 なお、外部電源入力の電圧を5Vに落としているIC1のNJM2396F05は、ヒートシンクが無い場合の消費電力は2Wが限界です。熱くなるようならヒートシンクが必要です。

このページのトップに戻る

2026年4月24日

Arduinoを使ってみました(その3)

Category : Arduino / Posted at 2026年4月24日 10:48

 前回、ICの制御等をI2Cですることが出来たので、早速、本命のICのデータシートをマジマジとみて見たところ、I2Cという言葉が全く出てこない...。よく見るとDATAとCLOCKの隣にLATCHっていう端子が出ているし...これ、もしかしてI2Cでないのでは...(-_-;

 ...色々と調べた結果、SPIだと分かりました。まぁ、どっちも出来る事に越したことはないし...という事で、今度はSPIを使う事になりました。

MUSES72320
SSOP32変換基板とMUSES72320

 このMUSES72320は電子ボリュームICで、表面実装用の0.65mmピッチ(SSOP32)です。これまではんだ付けした最小ピッチは0.95mmだったので、うまく出来るかなと思っていましたが、フラックスとDタイプのコテ先を使うとそんなに難しくなくはんだ付け出来ました。

MUSES72320 電子ボリュームの回路図
MUSES72320 電子ボリューム(1/2)の回路図(PDFはこちら

MUSES72320 電子ボリュームの回路図
MUSES72320 電子ボリューム(2/2)の回路図(PDFはこちら

 1枚目の回路図はMUSES72320のアナログ回路とオペアンプの電源回路で、2枚目の、Arduino Nano EveryはUSBからの給電、MUSES72320のデジタル回路はNano Everyからの給電になっています。なお、全くコメントや計算式が書かれていないのは、MUSES72320のデータシートに載っている回路そのままだからですw。

 プログラムは、ライブラリのSPIを使っていますが、その他は前回と同様に自力です。ちなみに、作ってから分かったのですが、GitHubにMUSES72320のArduino用のライブラリがあるので、そちらを使う方が手軽で確実だと思います。私のプログラムはチップアドレスが0000で固定だったりと手抜き満載ですが、ソースはこちらです。

MUSES72320 電子ボリューム
MUSES72320 電子ボリューム

 最初は、MUSES72320は0dBから-111.5dBまでボリューム値を変更できるからと、アナログで読んだ0〜1023の値を全体に割り振っていたのですが、動作させてみるとボリュームを12時の位置以上に上げないと出力が現れません。何でかなと思って販売されているボリュームキットを調べてみると-60dB止まりにしている物がいくつかあったので、この電子ボリュームも最低は-60dB、その下はMuteにしています。

0dB時のA点とB点
0dB時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

-6dB時のA点とB点
-6dB時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

-30dB時のA点とB点
-30dB時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

Mute時のA点とB点
Mute時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)はB点)

 上から3枚目の-30dB時のボリューム位置は12時の状態で、オシロスコープだとほんの少し盛り上がっているのが分かります。後は、実際に音を聞いてみて調整する必要がありそうです。

 ちなみに、この回路は実際のボリュームで分圧された電圧をアナログで読み取って、電子ボリュームの値に単純に変換している関係で、境目あたりで値がふらつきます。プログラムでは、ふらついて頻繁にボリューム値を変更しないよう細工をしています。

はんだ付け状況
0.65mmピッチのはんだ付け状況

 綺麗にはできませんでしたが、ちゃんと動作するので良しとしておきます。

このページのトップに戻る

2026年4月17日

Arduinoを使ってみました(その2)

Category : Arduino / Posted at 2026年4月17日 15:09

 つい最近Arduino Uno R3を購入したばかりなのに、また購入してしまいました。

Arduino Nano Every
Arduino Nano Every

 ICの制御等をI2Cでやる分には、Uno R3で十分なのですが、ブレッドボードに直接挿した方がまとまりが良さそうだったので...。なお、購入に当たっては、初めから付いているピンヘッダーは太いのではないかと思ったので、ピンヘッダーがはんだ付けされていない方を購入して、細ピンヘッダーで使っています。

温湿度計の回路図
温湿度計の回路図(PDFはこちら

 なんと素っ気ない、秋月電子通商で売られているモジュールを線で繋げただけの回路図です。I2Cで通信する温湿度センサーとLCDは、どちらも3.3Vなので通信経路に双方向ロジックレベル変換器を入れてあります。

 プログラムは、ライブラリのWireを使っていますが、使いたいICにライブラリがあるとは限らないので、温湿度センサーとLCDはライブラリを使わずに処理しています。プログラムのソースはこちら。

温湿度計
温湿度計

 プログラムで結構苦労しましたが、なんとか出来ました。最初、温湿度センサーは値を取得できたのですが、LCDがうんともすんとも...秋月電子通商の説明書によるとLCDのアドレスは0x7Cとなっているのですが、どうやら0x3Eのようで、変更したら表示されるようになりました。

 初めてI2Cを使ってみましたが、2本の信号線を並列に繋げば複数のモジュールが機能するので、かなり便利なインターフェースです。これで本命のICの制御ができるかも...。

このページのトップに戻る

2026年4月10日

Arduinoを使ってみました

Category : Arduino / Posted at 2026年4月10日 14:59

 ずいぶんと前にシングルボードコンピュータのRaspberry Piが発売されてから、名前も内容も似ている色々なボードが発売されているのは知っていましたが、小さくなったパソコンなので特に興味はありませんでした。
 最近になって、電子部品を調べていてICの制御等をI2Cでやっているのがほとんどだという事に気づいたため、使えるようになればいいなという事で、流行っているワンボードマイコンのArduino Uno R3を購入してみました。

Arduino Uno R3
Arduino Uno R3

 で、なんでR4が出ているのに値段の高いR3にしたのかというと、あらかじめ購入したO'Reilly Japanの「Arduinoをはじめよう 第4版」を読み進めると、どうやらI/Oピンの電圧と電流がモデルによって違うっぽい...。
 最初はコネクタがUSB-Cで安価なArduino Uno R4 Minimaにしようと思っていたのですが、データシートを見るとI/Oピンで使える電流は8mAと記されており、本によるとうまく動作しなかったらトランジスタで駆動しましょうとか書いてあるので、20mAまで使えるDIPのICが載ったUno R3にしました。

LEDと可変抵抗器の回路
入力電圧でLEDの明るさをコントロール

 アナログ入力ピンは10bitのADCが利用できるので、入力した0〜5Vを0〜1023の値で取得して、デジタル出力ピンから5Vで0〜255(8bit)段階のPWM出力をLEDに入力してみました。
 手持ちの部品でできるのはこの程度なのですが、試しにPWM出力をオシロスコープで見てみたところ、0-5Vの矩形波が出てきました。

PWM出力
PWM出力(回路図のA点)

ボリュームを回すとデューティ比が変わります。周波数は490Hzでそれほど高くないようです。

 とりあえず、I2Cで通信するモジュールを持っていないので、何か適当な物でも入手してから色々試してみたいと思っています。

このページのトップに戻る