電子工作一覧

小さい 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円くらいしてしまうのと、ピッチ変換基板をプラスするとさらにコスト増になってしまいます。
続きを読む



1ピンで複数スイッチに対応する

アナログ入力ピンを使用すると、複数のスイッチの入力をチェックすることが出来ます。といっても同時押しに対応出来るわけでないです。
押下時にはいずれかのスイッチのみという条件を用いて、使用するピン数を削減します。

方法

原理は簡単で、押下したスイッチに応じて抵抗分圧される仕組みを用います。このときの電圧値を読み取ることでどのスイッチなのかを知ることが出来るようになります。

このときの抵抗の計算がポイントになってくるのですが、それをうまく解説したサイトを見つけました。

単に同じ抵抗をぶら下げていってはダメなことがここにしっかりと書いてあります。

計算した抵抗値

上記のサイトの計算により、3スイッチでやってみました。使用したのは R1 = 10K, R2 = 2.2K, R3 = 4.7K, でやってみました。
これだと、 SW1 = 0V, SW2 = 0.18V, SW3 = 0.40V と割といい感じの比率でスイッチ入力の電圧として振り分けることができました。

これらの抵抗になった理由は、部品箱にあった抵抗類で済ませたい&合成もしたくなかった、という点によります。
あと2つくらいスイッチを増やせるかなと思って計算だけはしたところ、 R4 = 8K, R5 = 22K となりました。 E24系列で考えると 8K は無いため、 8.2K を使用することになるかなと思います。

最後に

ピンを減らして複数のスイッチを読み取る場合に、アナログ入力が使えるということを確認しました。1つ注意点があるとすれば、ものによってはアナログの読み取りには、デジタルと比べ時間がかかるということです。


DFPlayer Mini を使ってみる

マイコンで音声ファイルを再生するのに、 SDカード等にいれたデータをストリーミングして再生かなと考えていたのですが、 mp3 のファイルを直接再生するモジュールボードを発見しました。
amazon で眺めていたら発見したのが以下のものです。これを書いている現在で2つで 800 円ほどとなっており、ネットの情報からすると少し高くなっているのかもしれません。

このモジュールボードのチュートリアルとしては以下の Wiki に記載がありました。

https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Tutorial

実ボードでは “MP3-TF-16P” と刻印がありますが、まあなんとか動いている感じです(※)。
また、より詳細な仕様書的なものとしては、以下の pdf を参照して試してみています。

http://www.flyrontech.com/uploadfile/download/2016441645109830.pdf

※ もしかすると別に本家があるコピー品なのかもしれません。
続きを読む


ATTINY13A

ATTINY13A という個人的に面白いマイコンを知りました。
これは、 RAM 64byte, ROM 1Kbyte、そいて8ピンのマイコンです。小さいけれどスペックも小さいというシロモノです。
これでいて普通に Arduino IDE でスケッチを書いてプログラムを動かすことが出来ます。
しかしこれだけの制限された状態では一体これで何が出来るんだ?という状況ですが、これで十分な場面もあるのではないでしょうか。

あと、このマイコンは安いです。 Arduino UNO に載っている ATMega328 は 230 円なのに対して、 ATTINY13A は 50 円でした。

Arduino IDE 環境の更新

ATTINY13A に向けたスケッチを書くためには、 Arduino IDE に設定をしなくてはなりません。

まず、 ArduinoIDE を起動して環境設定を開きます。
そこで「追加のボードマネージャのURL」に、次の URL を追加します。

  • https://kimio-kosaka.github.io/bitDuino13/package_bitDuino13_index.json

その後、メニューの「ツール / ボード / ボードマネージャ」 と選びます。
各ボードのリストが出ているのですが、この中に ”bitDuino13” というものがあるとおもうので、これをインストールします。

インストールが完了すれば、ひとまずこのチップに向けたバイナリが生成できるようになっていると思います。

書込のための準備

スケッチを書くことが出来ても、プログラムを ATTINY13A に書き込むことが出来なくては意味がありません。
ライターが必要になりますが、ここで以前準備しておいた Arduino UNO を利用したいと思います。

以下の手順で、Arduino を ISP として書込の装置と化させます。

  1. ArduinoIDE を起動
  2. メニューの ファイル / スケッチ例 / 11.ArduinoISP / ArduinoISP を選択します。
  3. マイコンボードに書き込むを実行

書込み

Arduino IDE に以下のようなスケッチを書いてみます。

そして、「ツール / ボード / ATtiny13」を選択します。また、「ツール / 書込装置 ”Arduino ISP”」を選択します。

ArduinoISP と ATtiny13 を接続します。接続については以下のような感じになります。

接続したら、マイコンボードに書き込む、をメニューから選択すると先ほどのスケッチが書き込まれます。

Lチカ確認

先のスケッチでは3番ピンを ON/OFF していたので、ここに LED を繋いで点滅するかを確認します。
Arduino で書き込んだ場合では、書込完了後既にマイコンが動き出すようでした。そのため先に全て配線してしまってから、スケッチを書き込むと、書込完了後から点滅が始まると思います。

その他

生成された HEX ファイルを確認してみたいと思って、 preferences.txt の中に、”build.path=(出力先パス)” を記述してみました。そうしたところ、スケッチのコンパイルの終段でエラーが発生するようになってしまいました。
どうも相対パスによって出力先を変更するような感じなので、書込先ドライブを変更してみました。この結果うまく出力が出来るようになりました。
非 Windows の環境ではルートフォルダから任意の場所に行ける仕組みだからこれで問題ないのかもしれません。

同じように悩んでいる人の助けになったら幸いです。自分はこれに気付くのにしばらくかかりました。


7セグ4桁の表示モジュールを買ってみた

Amazon をぶらぶらを見ていたら、デジタル LED チューブモジュールというものを見つけました。
7セグ LED を持っておらずちょっと憧れがあって、このモジュールは4桁かつ3個セットでこのお値段ということもあって、つい買ってしまいました。

通常の一般的な 7セグ LED とは使い勝手が全く違うものだったりするので、やっぱり通常の7セグは欲しいなと思う気持ちは変わりませんでした。
このモジュールでは、信号線が2つで4桁を表示できるようになるのでその点が魅力のものといえるようです。

使い方

Arduino との接続は以下のようにしました。

そして動かすためのスケッチですが、公開されているライブラリを使用しました。
このライブラリは、 https://github.com/reeedstudio/libraries の中にある、 DigitalTube です。

これを追加した上で、以下のようなスケッチを作成しました。

動作させると、カウンタが進みつつ、中央のコロンが点滅するといった動きが確認できるようになっています。


FlashAir を Raspberry Pi の起動メディアにする

FlashAir を Raspberry Pi の起動ディスクにしてみました。
ここでの Raspberry Pi は Raspberry Pi 2 や、 Raspberry Pi Zero あたりをターゲットとしています。

必要なもの

どちらの環境にしても FlashAir は通常サイズの SD カードなので、変換をして Raspberry Pi2/Zero に接続します。
今回は以下のような変換するものを用いてみました。

続きを読む