2018年07月一覧

電源電圧を測定する

以前に、減電圧表示回路のほうで 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つ注意点があるとすれば、ものによってはアナログの読み取りには、デジタルと比べ時間がかかるということです。


ESXi 6.0u2 から 6.5 へ更新

今更な話ではありますが、 VMware vSphere Hypervisor 6.0 u2 では、 Chrome で WebClient にアクセスしたときに、ハンドルされない例外エラーが発生して正常に操作できないという問題がありました。ひとまず Firefox を使うことで対処できていたのですが、 そもそもの ESXi のバージョンを上げることで根本解決となります。

前提条件

今回の ESXi ホストでは ssh が許可されていることを想定しています。
ssh で接続して、バージョン更新作業を行ってみます。

バージョン更新を行う

VMware vSphere Hypervisor のバージョンを確認します。バージョンアップ前にはこのようになっていました。

vmware の Web ページから VMware vSphere Hypervisor 6.5 の Offline Bundle (zipファイル) をダウンロードしてきます。これを、 ESXi ホストの適当な場所にアップロードします。ESXi で ssh を許可しているのであれば、 WinSCP などで転送します。

そして、以下のコマンドを実行します。プロファイルの確認をして、アップグレードのコマンドを実行しています。

アップグレード中は進行状況も出ずに、もくもくと動くようでやや不安になりますが、しばらく待っていると結果が出てきます。

あとは ESXi ホストの再起動を行い、再度バージョンを確認してみると以下のようになっていました。無事にバージョンの更新ができたようです。

早速、 Chrome ブラウザで WebClient にアクセスしてログインしてみたところ、エラーも出なくなり操作が可能になりました。