まさはる's Weblog
|
| Macintoshとオーディオの話題 |
| トップページに戻る |
|
Arduino
2026年6月12日XIAO RA4M1を使ってみましたCategory : Arduino / Posted at 2026年6月12日 17:09ArduinoはUno R3とNano Everyを持っているのですが、Nanoといっても30ピンなのでブレッドボード1枚の半分を占有してしまいます。そこで、小さいSeeed StudioのXIAO RA4M1を購入してみました。 ![]() Seeed Studio XIAO RA4M1 XIAOは多くのモデルがあり、どれもほとんど値段が変わらないのですが、Nano R4と同じシリーズのMCUで、LEDとリセットボタンが付いている、どちらかというと多機能ではないRA4M1にしました。 以前作った温湿度計をXIAO版にしてみました。XIAOのIO電圧は3.3Vなので、双方向ロジックレベル変換器がなくなって更に簡単な回路になりました。 プログラムの方は、そのままで動作するかもと思ってコンパイルしてみたところ、Stringオブジェクトを配列の文字列に変換するところでエラーが出たので、少し変更しました。プログラムのソースはこちら。 ![]() 温湿度計 ブレッドボード1枚になって小さくなりました。右側の半固定抵抗は、バックライトの明るさ調整用です。 (ついでの話題) 以前、自作Arduino互換機を使って正弦波発生回路を作ったのですが、3.3V電源出力やパソコンとのシリアル通信機能は不要なので、もっとシンプルにならないかと思っていたところ、aitendoで「あちゃんでいいの」というATmega328P用の互換機キットが売られていたので購入してみました。このキットは、基板に水晶発振子、LED、リセットスイッチを付けられるので、かなりコンパクトになります。 ![]() ATmega328Pマイコンボード3種(左から松、竹、梅) 左側は外部電源入力や5/3.3V電源出力のあるフルセット版、中央はパソコンとのシリアル通信機能が使えるUSB電源版、右側はUSB電源版です。IC制御のような用途の場合、プログラムができてしまえば電源のみで十分です。 ![]() ATmega328Pマイコンボード「梅」が稼働中 2026年5月15日AD9833を使った正弦波発生回路を作ってみましたCategory : Arduino / Posted at 2026年5月15日 06:17以前作った、マイコンキット ドットコムの波形発生器キット「MK-200D」は、新たに自作した状態変数型正弦波発生回路に置き換わってから使わなくなったため、キットで使われていたアナログ・デバイセズのAD9833を使用したDDSモジュールを、単独で使ってみる事にしました。 ![]() AD9833 DDSモジュール(キット付属のもの) このAD9833はSPIで制御するので、前回作ったArduino互換機を早速使ってみることに。 これまで作った正弦波発生回路は1kHzしか出せなかったので、今回はスイッチにより3種類の周波数(例えば100Hz, 1kHz, 10kHz)を選択できるようにしてみました。また、アナログ回路の部分は、AD9833が単電源による動作のため0〜約0.6Vの波形を発生させることから、DC成分を取り除くカップリングコンデンサを入れたことと、2VPPへの電圧増幅と出力の振幅調整ができるようにしています。 で、一番大変なのはプログラムの方で、AD9833のデータシートを見ると結構難しそう...。なお、今回も使用したライブラリはSPIのみで、AD9833の制御は自力です。最初は周波数の設定データを手作業で作っていて、融通の利かないプログラムだったのですが、現在のバージョンでは関数の引数に周波数[Hz]を入れて呼び出せば、周波数の設定値が変更されるようになっています。また、スイッチに割り当てる周波数は、自由な値に設定する事が可能です。ちなみにソースはこちらです。 ![]() AD9833 正弦波発生回路 上が正弦波発生回路で、下が前回作ったArduino互換機です。上のタクトスイッチは左から100Hz、1kHz、10kHzに設定されており、選択されると緑、黄、赤のLEDが点灯するようになっています。 ![]() 100Hzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点) ![]() 1kHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)は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に設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点) まあまあ普通に出力されています。オペアンプの出力も2VPPになっています。 ![]() 1MHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点) AD9833の出力はまともなのですが、オペアンプが高周波に対応していないことから出力波形が歪んでおり、振幅も1.5VPPと小さくなっています。アナログ回路を高周波向けに改良すれば良くなりそうです。 ![]() 10MHzに設定した場合のA点とB点(CH1(黄色)はA点、CH2(水色)はB点) AD9833の出力はかなり歪んで、オペアンプの出力は0になっています。今回作った正弦波発生回路の場合は、100kHzぐらいまでで使うのが良さそうです。 (さらにその後...) ![]() 高速・超広帯域オペアンプ NJM2137D このオペアンプは電源電圧が±1.35〜±6V、スルーレートSR=45V/μs、利得帯域幅積GB=200MHzというものですが、最小安定ゲインが1V/Vなので単純に置き換えられそうという事で選定しました。 ![]() 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」を見つけたので購入してみました。 ![]() 左から0.1μF, XC8111, SOT457変換基板, 10μF このSOT457変換基板は裏面パターンがあるので、コンデンサはそれを利用して裏面に取り付けます。 ![]() ATmega328Pマイコンボード Ver. 1.1 上から見た写真ではXC8111がどこにあるのか分かりませんが、もともとダイオードが入っていた、緑色の電源LEDの左下の変換基板に付いています。 ![]() XC8111のアップ 負荷を繋げていない状態ですが、外部電源入力時で出力電圧は5.00V、USB入力時でXC8111の上流は0.00Vになっており、さすが専用ICといった感じです。これで、前回諦めていた外部電源からの電圧降下が無くなったので、Arduino互換機の話題はこれで終わりにしようと思います。 2026年5月 1日Arduino互換機を作ってみましたCategory : Arduino / Posted at 2026年5月 1日 09:03Arduinoを使い始めてから気になっていた、秋月電子通商で販売されている「Arduino Bootloader書込済(5V 16MHz仕様) ATmega328P」と周辺部品を購入してみました。 ![]() 16MHzの水晶発振子とATmega328P 上の写真の他にはUSBシリアル変換キットも購入しており、繋げればArduino互換機になるのではないかと思って作ってみました。 こだわったところは、外部電源入力と5Vと3.3Vの出力を付けたところで、こだわってないというか諦めたところは、USBと外部電源をダイオードで一つの電源ラインにしているところです。 ![]() ATmega328Pマイコンボード ブレッドボードに組む前は、2つの電源をC接点のリレーで切替えたり、MOSFETを使って切替えたりと色々考えていたのですが、ブレッドボード1枚に納まらないので諦めました。その他には、電源LED、ビルトインLED、リセットスイッチが付いています。 ![]() 斜めから見たところ 緑色の電源LEDのリード線に熱収縮チューブが付いていますが、あの中に4.7kΩの抵抗器が入っています。その左下のダイオードは、2つの電源を1つにしているショットキーバリアダイオード(SBD)で順方向電圧0.45Vのものを使っています。 2026年4月24日Arduinoを使ってみました(その3)Category : Arduino / Posted at 2026年4月24日 10:48前回、ICの制御等をI2Cですることが出来たので、早速、本命のICのデータシートをマジマジとみて見たところ、I2Cという言葉が全く出てこない...。よく見るとDATAとCLOCKの隣にLATCHっていう端子が出ているし...これ、もしかしてI2Cでないのでは...(-_-; ...色々と調べた結果、SPIだと分かりました。まぁ、どっちも出来る事に越したことはないし...という事で、今度はSPIを使う事になりました。 ![]() SSOP32変換基板とMUSES72320 このMUSES72320は電子ボリュームICで、表面実装用の0.65mmピッチ(SSOP32)です。これまではんだ付けした最小ピッチは0.95mmだったので、うまく出来るかなと思っていましたが、フラックスとDタイプのコテ先を使うとそんなに難しくなくはんだ付け出来ました。 1枚目の回路図はMUSES72320のアナログ回路とオペアンプの電源回路で、2枚目の、Arduino Nano EveryはUSBからの給電、MUSES72320のデジタル回路はNano Everyからの給電になっています。なお、全くコメントや計算式が書かれていないのは、MUSES72320のデータシートに載っている回路そのままだからですw。 プログラムは、ライブラリのSPIを使っていますが、その他は前回と同様に自力です。ちなみに、作ってから分かったのですが、GitHubにMUSES72320のArduino用のライブラリがあるので、そちらを使う方が手軽で確実だと思います。私のプログラムはチップアドレスが0000で固定だったりと手抜き満載ですが、ソースはこちらです。 ![]() MUSES72320 電子ボリューム 最初は、MUSES72320は0dBから-111.5dBまでボリューム値を変更できるからと、アナログで読んだ0〜1023の値を全体に割り振っていたのですが、動作させてみるとボリュームを12時の位置以上に上げないと出力が現れません。何でかなと思って販売されているボリュームキットを調べてみると-60dB止まりにしている物がいくつかあったので、この電子ボリュームも最低は-60dB、その下はMuteにしています。 ![]() 0dB時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)はB点) ![]() -6dB時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)はB点) ![]() -30dB時の回路図のA点とB点(CH1(黄色)はA点、CH2(水色)は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 ICの制御等をI2Cでやる分には、Uno R3で十分なのですが、ブレッドボードに直接挿した方がまとまりが良さそうだったので...。なお、購入に当たっては、初めから付いているピンヘッダーは太いのではないかと思ったので、ピンヘッダーがはんだ付けされていない方を購入して、細ピンヘッダーで使っています。 なんと素っ気ない、秋月電子通商で売られているモジュールを線で繋げただけの回路図です。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が発売されてから、名前も内容も似ている色々なボードが発売されているのは知っていましたが、小さくなったパソコンなので特に興味はありませんでした。 ![]() Arduino Uno R3 で、なんでR4が出ているのに値段の高いR3にしたのかというと、あらかじめ購入したO'Reilly Japanの「Arduinoをはじめよう 第4版」を読み進めると、どうやらI/Oピンの電圧と電流がモデルによって違うっぽい...。 ![]() 入力電圧でLEDの明るさをコントロール アナログ入力ピンは10bitのADCが利用できるので、入力した0〜5Vを0〜1023の値で取得して、デジタル出力ピンから5Vで0〜255(8bit)段階のPWM出力をLEDに入力してみました。 ![]() PWM出力(回路図のA点) ボリュームを回すとデューティ比が変わります。周波数は490Hzでそれほど高くないようです。 とりあえず、I2Cで通信するモジュールを持っていないので、何か適当な物でも入手してから色々試してみたいと思っています。 |
| トップページに戻る |
|
|