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

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


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 に接続します。
今回は以下のような変換するものを用いてみました。

続きを読む


Arduino Uno を買ってみた

Raspberry Pi が手元にあるのですが、衝動買い的に Arduino Uno を購入してみました。
たまに RPI では信号レベル変換が必要な電子パーツの動作確認にも使えそうだなと思っています。

そんな Arduino ですが、 Arduino IDE を使ってスケッチと呼ばれるプログラムを作成し、ROMに書き込んで実行します。
このあたりが、 Raspberry Pi とはちょっと違いますね。

1つ自分が Arduino を初めて触ってみて、手間取った点をここでは詳解したいと思います。

手間取った点

Arduino IDE でスケッチを作成して、Arduino に書込をしようとすると失敗になっていた点です。
コンパイルは通るのと、機材には電源も投入されて LED が光っている状態なのに、です。

こうなってしまったのは自分の環境が問題でした。
既に USB シリアル変換ケーブルを使用していて、 Arduino は2番目の認識となっていた点が原因です。これを切り替えるのには、 Arduino IDE のメニューから “ツール/シリアルポート” で Arduino が接続されている COM ポートを適切に選択することが必要でした。

本当の意味で初めて、こういったボードを触る場合にはこの点に引っかかることはないでしょう。

これからもう少し Arduino を触ってみたいと思いますが、先にエディタ部分をなんとかしたいと感じでした。Arduino IDE もコンパクトで悪くない印象ですが、エディタ部分が自分が使い慣れているエディタとか、他のエディタを使いたいなぁという気持ちがありますね。
かるく検索すると VSCode を開発環境に使うことが出来そうなので、それを試してみたいと思います。

その他

ボード本体だけを買ったらまさかの USB タイプ B のケーブルが必要だったので、それは驚きました。今の時代ずいぶんとこのケーブルを見かけなくなりました。
これから始める人は、必要な USB ケーブルについても手持ちがあるのかを調べておいた方がよさそうです。

あるいは最初から色々とセットになったものを買うというのも安全ですね。


Caliburn.Micro に入門してみる その3

前回は簡単にバインディングができることを確認しました。実はあれは省略形に近いものだったので、フルに設定するとどのようになるかを今回確認します。
基本的に前回のプロジェクトの使い回しで説明します。

メソッド呼び出し

ボタンの Name を削除して、 Interaction.Triggers を指定してメソッドを呼び出してみます。

ShellView.xaml は以下のように変更します。

EventTrigger の Click までは問題ないとして、 Livet では CallMethodAction を呼び出していたような箇所で、 ActionMessage によってメソッドを呼び出します。
この ActionMessage も引数情報を設定することが可能です。パラメータを指定するには以下のようにします。

これを受け取るための IncrementCount メソッドでは引数を取れるように変更する必要があります。忘れると例外(No target found for method IncrementCount.)が飛びます。

メソッド呼び出し その2

ここまでの設定方法が Long Syntax と呼ばれるものになっているようです。次に Short Syntax と呼ばれるものについて確認してみます。

ShellView.xaml を編集してボタンを追加してみます。

見て分かるように、 cal:Message.Attach という添付プロパティでイベントとアクション(メソッド呼び出し)を設定しています。
注目なのはイベント名の記述と、メソッドの呼び出し&引数記述がこのように書ける、という点です。わかりやすいですね。

引数については即値で書いていますが、ここを他のコントロールの値にすることも可能です。

さらに Caliburn では、メソッド引数名から、引数を推測してバインディングしてくれる機能もあります。
以下のように ShellView.xaml を編集して、スライダとボタンを用意してみます。

スライダの名前を IncrementCount の引数名である delta としたことで、 Caliburn が情報をうまく解釈して結合してくれます。

まとめ

自分でバインディング設定を記述しないでもバインディングしてくれることで、プログラマの作業を省力化してくれる感がすごくあります。
ただし、ルールを知らないと動きを追いかけるのも厳しいという印象です。

これらのバインディングについては、 All About Actions を参照して読んでおくのもよさそうです。
パラメータとして、 $source, $view, $dataContext といったものも設定可能であったりするので、なかなか深いです。


Caliburn.Micro に入門してみる その2

前回はとりあえずプロジェクトを作成し、 Caliburn.Micro のお作法に従った Hello,world のようなものをやってみました。
今回はこのプロジェクトを使って、データバインディングを確認をしてみます。

今回も先人の記録を辿りつつ進めていきたいと思います。

ちなみに Caliburn.Micro の Documents の中では Basic Configuration 項にこの部分が書いてありますが、ほんの少しでした。

データバインディング

ShellViewModel に Count プロパティを追加します。

ShellView.xaml を以下のように編集してみます。

これを実行すると以下のようになります。明示的に「Text=”{Binding Count}”」 と書いていないですが、 Caliburn がこのバインド処理を行ってくれます。今回の場合、TextBlock の Name と対応するプロパティを見つけて、バインドを行う処理となっています。

コマンドバインディング

続いて以下のように ShellViewModel クラスにメソッドとプロパティを追加してみます。

そして、 ShellView.xaml も以下のように編集します。

これを実行して、 Increment ボタンを押すと、カウンタがインクリメントされ、 80 カウントになるとボタンが無効となります。

先ほどと同様にバインディングを記述していませんが、各コントロールの Name プロパティと一致するものを見つけて、バインドする処理が Caliburn によって行われるため不要となっています。Command の Can 系についても、同様に接頭辞 Can が付いたものを見つけて判定処理としてくれています。

余談

もちろん、Name を設定せずに Text=”{Binding Count}” などと記述することも可能です。 ValueConverter が必要なときには、こちらのような書き方をする必要が出てきそうです。


Caliburn.Micro に入門してみる

今まで MVVM のインフラストラクチャのライブラリとして Livet を使用していましたが、新バージョンも出ないし新しい環境用のプロジェクトテンプレートも提供が無いようだったので、比較的最近のものでよさそうなものは無いかと探してみたところ、Caliburn.Micro が良さそうだったのでこれを触ってみることにしました。

ここでは、 Nuget から簡単にインストールができる Caliburn.Micro バージョン 3.2.0 を対象にしています。また Visual Studio は 2017 (v15.6.1) を使用しています。

Caliburn.Micro について

Caliburn.Micro は出たばかりというわけでなく、5年以上経過しているというのに、日本語での記事がほぼないです。これから MVVM アーキテクチャでソフト開発を始めようと思っている人には、 Livet のほうをオススメできるのではないかと思います。 Livet のほうが日本語での検索性は良いです。

Caliburn のほうが良い点としては、対応プラットフォームが Livet よりも多いこと、現在も開発が続いていることが挙げられると思います。また、現時点においては開発者の方は Microsoft にいるらしいです。近いうちに、バージョンが 4.0 が出そうです。自分は Livet の良かった点に、プロジェクトテンプレートやらスニペットの準備やら、始めるのに楽だった点があります。 Caliburn.Micro ではそのような点は標準ではなさそうですが、普段のコード書きを楽にしてくれそうなバインディングの仕組みを提供してくれています。そして、 MEF を用いた拡張しやすそうな構成も1つの魅力に感じました。
続きを読む