電子工作一覧

ESP-IDF で wav再生

ESP-IDF 環境で、 wav の再生をやってみました。
先日の WebRadio のもので I2S の配線済みだったので、wav の再生にも I2S へ書き込むようにしました。単なる wav の I2S 再生を ESP-IDF でやっているサンプルってあまりなさそうだったのは、簡単すぎて需要が無いのかも。

続きを読む


ESP-WROOM-32 のための VSCode 設定

ESP-WROOM-32 を Arduino として使っている際には、あまり意識していなかったのですが、 ESP-IDF 環境でプログラムを作成するとなるとちょっとつらくなってきたので環境を整えてみることにしました。

Visual Studio Code を用いて、コードの編集からコンパイル、転送までを集約したいと思います。

続きを読む


ESP32 で WebRadio

手元にあった ESP-WROOM-32 マイコンは mp3 を再生するパワーがあることがわかったので、手っ取り早く確認したかったので、WebRadio を再生するプログラムを動作させてみることにしました。

使用した開発ボードは、 ESP32-DevKitC というものですが、他のボードでも同様に動くと思います。スイッチサイエンスの ESPr Developer 32 も定番の開発ボードです。ESP32 マイコンがどのようなものかは、各所で説明されているのでここでは説明しません。

続きを読む


HiLetGo の OLED の動作確認 (続)

先日の HiLetGo の OLED パネルについて、少し間違った情報を書いてしまったようです。 u8glib 側のコードを編集する必要はありませんでした。

採用されているチップが実は SH1106 で SSD1306 ではなかった模様です。

接続

配線を次のようにします。

Adruinoピン OLEDピン
13 CLK
11 MOSI
10 CS
9 DC

OLED の RESET ピンは Vcc と接続しておきます。

GraphicsTest編集

有効にするのは、次の行でした。
(見ての通りリセットピンに対して制御がないので、前節の配線変更が必要になった感じです)。

参考

同じように OLED パネルを使っている事例を見つけたので、上記のような結論へたどり着くことが出来ました。こちらの方は 0.96 inch から 1.3 inch へ使用するパネルを変えた際にこの問題に遭遇したみたいです。


HiLetGo の OLED の動作確認

Amazon で HiLetGo の有機 EL パネルを買ってみました。割と情報が多く見つかるのが 0.96 インチのものですが、買ったのは 1.3 インチのものです。また接続形式は I2C ではなく、 SPI でした。
動作を Arduino UNO を用いて確認したのですが、ちょっとポイントがあったので備忘録と、誰かの役に立つかもと思って、記録&公開しておきます。

接続について

Arduino と OLED との接続は以下のようになります(電源接続を除く)。
Fritzing で配線図を書こうと思ったのですが、 HiLetGo OLED と合う物が見つからず…

Adruinoピン OLEDピン
13 CLK
11 MOSI
10 CS
9 DC
8 RES

続きを読む


小さい Arduino

夏休みに小さな Arduino を買いました。
というのも、 Atmega A328P-PU を買ってきて、ブートローダーの書き込みをして… とやっていたのですが途中からうんともすんとも言わない状況になってしまいお手上げになってしまったからです。
安いのでまた買ってくればよいのですが、他に何かないかなぁと探していたところに Arduino Nano, Pro-Mini を発見した次第です。

続きを読む


電源電圧を測定する

以前に、減電圧表示回路のほうで Attiny13a のアナログ読み取りと内部基準電圧を用いて測定する話題をやりました。
このときには、セオリー通り抵抗分圧してそのときの値を読み取るという感じで算出しましたが、 Atmega328P (Arduino Uno) を用いては、もう少し変わった方法があることを知りました。今回はこれを紹介したいと思います。

測定方法

気になる測定の方法ですが、「現在の電源電圧を基準電圧として、内部の基準電圧 1.1V を測定する」という方法になります。これにより、内部基準電圧 1.1V が現在の基準電圧(電源電圧)に対してどのくらいの割合になるかが測定されます。

スケッチ

内部基準電圧を測定対象とするためには通常の analogRead() 関数は使用できません。そのためレジスタの値に直接書き込むことにします。
スケッチについては以下のような内容となっています。複数回測定して平均値を出すようにしています。

結果

このスケッチを USB 接続している Aruduino UNO で実行して、電圧を確認してみたところ、 “5.029” と表示されました。そして、 Arduino Uno からとれる 3.3V 電源で、別の atmega328P を稼働させて、そちらで測定したときには、”3.352″ と表示されました。こちらのほうはテスターで計測してみたのですが、”3.32V” だったのでおおよそ合っているように思います。
さらに、単3電池2本で動かしてみたのですが、このときには、 テスター:2.78V、内部計測:2.81V となりました。先の結果よりは精度が落ちていますが、十分実用範囲だと思います。

まとめ

この測定方法により、アナログピンを消費せずに計測できるようになりました。また分圧のための抵抗2本ほども省略できそうです。電源電圧の低下を目安として知るための方法としてはかなり有用なのではないかと思っています。


Arduino ブートローダーの書き込み

Arduino Uno で作ったプログラムを工作物の中にいれるために、 atmega328P-PU を買ってきました。
Arduino は 3000 円程度しますが、本体のマイコンである atmega328P-PU は 300円もしません。これなら気軽に使っていけそうですが、arduino のスケッチを書き込んで使っていくためには事前準備が必要になります。

ブートローダーの書き込み準備

必要な手順として、買ってきたばかりの atmega328P-PU にブートローダーを書き込む必要があります。ブートローダーの書き込みのためには装置が必要になりますが、 Arduino UNO を書き込み装置として使うことにします。

以前の ATTINY13A 編でも書いたように Arduino IDE からスケッチ例 Arduino ISP を選択して書き込みます。これで、 Arduino UNO を書き込み装置として使用可能になります。

内蔵発振で使用するために

atmega328P-PU は内蔵発振でも動作するようになっています。精度が悪いのが問題らしいですが、消費電力が減って電池駆動時間が延びることや必要部品変数が減ること、使用可能なピンが増えることといったメリットがあります。この内蔵発振での書き込みについてはマイナーなのか、調べたとおりにやってみても現在においてはうまくいかなかったり、情報が少なめだったりとして苦戦しました。

配線は以下のようにします。

内蔵発振で使用するため用の Arduino 環境を準備します。
https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard から、 breadboard-1-6-x.zip をダウンロードします。
そして、 ドキュメント/Arduino/hardware のフォルダに、先ほどの zip の中身である breadboard フォルダをコピーします。この場所が見当たらない場合には、作成してしまって問題ないようです(自分の場合にはうまく認識しました)。

この状態で Arduino IDE を起動すると、 ATmega328 on a breadboard というボード構成を選ぶことができるようになります。
このボード構成を選んだ状態で、ブートローダーの書き込みを選択すると、ブートローダーの書き込みが始まります。
このとき、Arduino 上のマイコンを抜いたりする必要はありません。

通常のスケッチの書き込みのときには、「書き込み装置を使って書き込む」を選択します。このときにも Arduino Uno は ISP として構成したままのものを使います。

外部発振で使用する

水晶振動子を追加して、外部発振で使用する場合について説明します。
Aruduino Uno を Aruduino ISP として、書き込み装置にする部分までは前項と同じです。ただし、回路を変更して以下のようにします。

ボードの選択は、 Arduino / Genuino UNO を選択します。この状態でブートローダーを書き込みを選択すると、書き込みが始まります。この場合でも Arduino 上のマイコンを抜く必要はありません。

先ほどと同様に、通常のスケッチの書き込みの際には、「書き込み装置を使って書き込む」を選択します。間違えてマイコンへ書き込むを選択すると、書き込み装置としている Arduino 側のマイコンを書き換えてしまうのでご注意ください。

その他

ブートローダーの書き込みが失敗して、結構手こずることがありましたが、上記の手順ができてからはスムーズにできている気がします。今回使用している Arduino IDE は 1.8.5 となっています。
それでもうまくいかないことがあります。ブレッドボードでの配線が悪いのか、接触不良でマイコンを認識失敗することが多いです。そんなときには配線をやり直したり、ICをぐぐっと押し込んだりして対処しています。

追記

冒頭で Arduino Uno R3 は約 3000 円と話していたのですが、公式ならばという条件でした。 Amazon を見てみると、 Arduino 互換機もいろいろとあるようで、 Arduino Uno の互換機も以下のようにありました。


これだと1つあたり 650 円となるので、今まで説明してきたような手間から解放される点を考慮すると十分に安いといえると思いました。これなら何かの工作物にためらいなく入れられそうです。


減電圧表示回路について

電源電圧が一定レベルを切ったときに通知するような仕組みを作りたくて色々と調べて実験していました。
こういった回路は、減電圧表示回路というキーワードで調べると良いとのことで調べてみたのですが、自分の欲しい内容となると調整が難しい感じでした。
ACアダプタによる給電なら、このような仕組みを作らずともよいのですが、乾電池やバッテリーでの動作となると必要になってくる気がします。

見つけた回路

こちらで詳解されていた回路は、知識不足の自分でも多少の調整がききそうで、しかも正確、使いやすい回路となっていました。
知恵袋で聞いている人の内容がまさに自分の場合と同じで助かりました。聞いているのは 2.0V 付近となっているようですが、
自分の場合には 2V 半ばで検知して欲しかったので抵抗を調整することにしました。そうして出来上がった回路が以下のものです。

設計者の話によれば、この回路をつけっぱなしにしていても大丈夫なくらいに低消費電力 (3.5μA) となっているようです。
シャントレギュレータからの電圧をリファレンスとして、計りたい対象を抵抗分圧して、2者を比較する、というやり方をこれで学びました。

課題があるとすれば、 NJM2825, LMC7225 らが表面実装のパーツで素人には使いづらい点と、パーツのお値段でしょうか。
各パーツが 150円くらいしてしまうのと、ピッチ変換基板をプラスするとさらにコスト増になってしまいます。
続きを読む