すらりん一覧

Hyper-V を使わずに Windows で Docker

普段から VMware Workstation や Player を使っているため、 Hyper-V による Docker は自分にとって都合が悪かったりします。でも、 Docker による便利な実行環境構築の恩恵は受けたい、というちょっとわがままな願いを叶える方法が見つかったので試してみました。

準備

使用している Windows は Windows10 Professional, 1803 x64 バージョンです。
この環境に、 Microsoft Store から Ubuntu 16.04 をインストールします。

続きを読む


IPv6 の本

IPv6 の書籍が昨年クラウドファンディングしていて、それに協力したのですが、先日忘れた頃にこれが届きました。たしか、昨年内に出すという目標だったと思いますが、半年ほどスリップした感じですね。
ただ現時点における仕様がちゃんと書かれているので、すごくいい書籍になっているんじゃないかと思っています。

で、 Amazon を覗いていたら、この書籍が並んでいました。まさか Amazon ですでに買えるようになっているとは驚きでした。

ほかの IPv6 書籍を読むよりはこれ1冊を読むのがいいんじゃないかというくらい内容が充実しているようです。以前に IPv6 を軽く勉強してみようと読んだときの情報は古くなっていて使えなかったりしていたので、この書籍で“今”に追いつけたらと思ってます。


電源電圧を測定する

以前に、減電圧表示回路のほうで 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 にアクセスしてログインしてみたところ、エラーも出なくなり操作が可能になりました。


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 の環境ではルートフォルダから任意の場所に行ける仕組みだからこれで問題ないのかもしれません。

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