sample1 OELDとBME280を使った気圧測定
表記のハードを使っていますので、素のmicrobitでは動作しません。私自身の実験のためであり、使用して不都合があっても関知しませんのでご注意を! 汚いプログラムですが、閲覧はご自由に。


R1.8.15 風力計

 以前から風力計を作りたかった。スマホを持っていなかった一年前か数年前にスマホに差し込んで風力を測定する道具が発売されていたことを知った。これを格安で購入した。イヤホンジャックに差し込む形式だったと記憶していた。回転部分に磁石が入っていて、それを磁気センサーで読み取るんだろうなという見当でやってみた。

 取り敢えずテストをしてみる。プログラムは下のようにしてArduinoIDEのシリアルプロッタでその様子を見てみた。心拍センサーと似たような扱いだ。

 左側はマイクロビットだけをグルグル動かしたもの。動かしただけで大きく変化する。磁力変化に規則的なものがあるのかどうか、マニュアルを読んでみないといけないな。
 右側は風力装置を付けて静止させ(−60くらい)、手で勢いよく回転させた結果。動いている間は−60から90くらいの間の変化だ。止まった時は60ほどになっている。回転素子の中の磁石の向きによってこれは決まるのだろう。

 この測定間隔だと台風の風では測定不能になりそうだな。
 正確な測定には程遠いようだ。まあ、最近は流行っていないような測定器で、サーファーの方の中に大体の風力が分かればいいという人は使っているようだ。GooglePlayの評価でも、使える人と使えない人両方に分かれていた。機種を選ぶのだろう。専用のアプリも私のスマホでは使えない。計測を開始するが結果が出てこない。


R1.8.9 基板群のシステム変更

 マイクロビットのエッジコネクタを3連にしたので、OLEDとBME280を使った気象観測装置を3連で使えるように基板替えをした。OLEDもBME280も以前の基板から半田を溶かしながら外すのは厳しいものがあった。かなり熱くなってしまい、壊れないか?とヒヤヒヤしたが、移行してみても正常に機能していた。有難い。

 ところが、以前使っていたOLED拡張機能が使えなくなっていた。昔のブロックを読みだしてコンパイルするとエラーになるのだ。SSD1306 OLEDの拡張機能を探してみると同じようなものと別のものがあった。下画像の左にあるoled-ssd1306という拡張機能が以前のものと同様仕様だと思う。

ので、それぞれ試してみた。下画像の左は以前のブロック図。右図、赤線で引いてあるのがOLED-SSD1306で青線がOLED12864_I2C。赤線の方を見てみると、イニシャライズでwidthとheightの順番が違っている。旧の方はコンパイルエラーになるし、新の方はコンパイルするもののマイクロビットに送ってやるとマイクロビットのLED画面で怒られる(?)。エラーらしい。ということで、もう1つのOLED12864_I2Cでブロックを組んでやるとうまくいく。フォントが見難いのが難点だが。

 ところで、これらの拡張機能を検索するとき、何度も見つからない結果となったが、何回かトライすると見つかることもある!という不思議な現象があった。挫けず続けて頑張れ! ということか....


H31.3.17 温度測定3

 S-8120C温度センサーでの測定で、どうも腑に落ちないので再度調べてみた。
 マイクロビットのP1から受け取るアナログ値をtとして調べた値が509〜506の時に、左のプログラムで電圧に変換すると、1638mV〜1629mV。温度に直すと9.37度〜10.50度になる。当然、10ビットのアナログ値1刻みごとに、3mV刻みとなり、0.38度刻みとなる。小数点以下の温度はあてにならないということですね。残念。

 正確な温度や小刻みな温度変化を知るためには、-10〜+40℃くらいに限定して、センサーからの電圧を3.3Vを越えない程度に増幅し、40度の時の電圧を0とするような回路を作ればいいのかもしれない。でも、その知識はない、残念。
 それはともあれ、このセンサーは熱容量は小さそうなので、感度が良いはず。断熱膨張による温度変化は測定できるかも。


H31.3.3 温度測定

 以前購入していたS-8120Cという温度センサーを活用した。とても小さいので、熱容量が少なく敏感に温度変化に反応してくれるかな?という思いで購入していた。断熱膨張の実験に使えるかなと.....
 5枚つながっていて200円。下は、1枚切り取ったもの。マス目は1cm間隔.

 切り取った1枚に細いリード線を半田付けしてブレッドボードに差し込む。それを超音波センサーを使ったボードと結ぶ。抵抗やコンデンサなど他の部品が不要なので(多分)コンパクトにおさまる。

 このS-8120Cを使うにあたって、マイクロビットはアナログデータを受け取れるので使いやすい。上左の画像で、左からVDD、GND、VOUT:測定電圧データ端子となる。
 VOUTからは、受け取るデータが10ビット分解能で入ってくる。基準電圧が3000mVなので、VOUT値を3/1024倍にするとS-8120Cからの出力電圧(mV)となる。ただ、3000/1024=2.93なのだが、他の温度計との比較で、3.06のほうが良かったので、プログラムの中では3.06を使っている。電池の状態によって異なるのかな? プログラムを走らせた直後に基準電圧を測定した方がいいかも。

 さらに、S-8120Cのデータシートでは-30℃で1951mV、+30℃で1474mV とあるので、このあたりを使うことにして、単純に(1951-1474)/60として7.95mV/℃とする。VOUTのデータから得られた電圧を7.95で割れば、-30℃からの違いとなるので、-30℃にそのまま足せば現在の温度となるはず。ところが、マイクロビットは単純にこの計算結果を表示させると、小数点以下を切り捨ててしまう。
 そこで、小数点第2位まで計算しておいて、整数値と小数値とを分けて処理する。小数点の方を第2位を四捨五入にして、結合して小数第1位まで表示するということになる。

 理屈を考えてみたが、実際に上のプログラムはそれを反映しているかどうか自信はないけれど、まあまいい結果は出てきた。

 次は、密閉容器に入れて実験してみる。


H30.12.12 気圧測定!

 岡山の某8階建ビルディングに行ったのを機会に測定してみました。地下1階の駐車場から一気に4階、ついで8階に止まった後、皆さんが降りたのを幸いに、1階ずつ降りて測定してみました。マイクロビットは1秒ごとに測定して表示するので、各階毎にドアが開いたときの表示を記録。グラフの赤線は昇り、青線は降りになります。

 本来は数回行うのですが、繰り返すのは申し訳ないので、1回限りにしました。さっとグラフを描いたら、いいデータになっていたので、無理せずに....

 この時は、気温も一緒に測定していたのですが、暇がなかったので記録なし。それでも、ちょっと見には変化なかったようです。エレベーターの中ですから、温度変化はなかったということでしょうね。

 もっと高いビルディングや東京スカイツリーなんかで測定してみたいものです。山に登りながら、気温も一緒に測定しながら記録しても面白いかと思います。


H30.12.8 気圧測定器

 これまでの気圧測定器が嵩張って実際の実験には使用しにくそうだったので、作り変えてみました。

 この大きさに変更して、ボタン電池で運用できるので、密閉した透明容器の中に入れて、容器に力を加えたときの圧力や温度の変化を見ることができそうです。しっかりした密閉袋に入れて、水圧を測ることもできるのではないかな。

 ほどほど感度がいいので、これを持って3階の建物を歩いて上下したら、気圧の変化が見れるはず、と思って実施したら、失敗しました。3階に暖かい空気が溜まってたんですね。気圧が高くなってしまいました。これってボイル・シャルルの法則? 次回は、温度も一緒に測ってみましょうか。一番いいのは、エレベーターで動くことでしょうね。夏休みの自由研究によさそうです。


H30.11.16 OLEDとBME280で気象観測

 マイクロビットをボタン電池を使うとコンパクトになることから、以前ラズパイZeroでやろうとした気象観測の道具を作ってみた。

 格安の128×64ドット、0.96インチのLCDモジュールとBME280を使った。両方ともI2Cでつなぐので並列接続であり、他に必要な部品もなくとても簡単。

 これまでに組んだ基板を使ったので、ちっともコンパクトではないが、今後コンパクトにするとして、取りあえず実験。
 イニシャライズで縦を64ドットにすると、8行表示できるが、細かすぎるので32ドットを指定すると文字が大きくなって4行になる。粗い表示になるが遠目にも見えるということで使えると思う。

 単純に表示させるとマイクロビットは整数値しか表示しないので、整数値と余の部分を加工して、小数第1位や第2位を必要に応じて表示させる。小数第2位までにすると、この装置を持って階段を上下するだけで気圧の変化を知ることができそうだ。

 下のグラフ、赤いグラフは同じ場所で測定した気圧。大分変化していますが、0.2ヘクトパスカルの間におさまっているようです。一方の青いグラフは、1m毎の気圧の変化の理論値です。違いがよく分かります。

 この休みに、実際に街に出かけて高層ビルのエレベーターに乗り、測定してみたいものです。
 高層ビルが近くにあったかな???


H30.9.11 BME280を使う

 LM35DZによる気温測定を、前回の回路ほぼそのままで、プログラムもそのまま使ってみた。LM35DZは4V〜になってはいたが、マイクロビットの3.3Vでやってみた。もちろん、3端子中央のVoutをマイクロビットのP0端子につないでやる。すると、それなりにAQM0802に数値データが表示される。プログラム内の計算式が3.3Vで行われていないので、なんらかの手直しが必要か、あるいは電圧が不足しているのかもしれない。5Vを与えたらどうなるかな。

 今回は、BME280を使ってみようと思った。ネットを見るとできるらしい。それも、面倒なC言語を使うことなくブロックを組んでだ。weather:bitという拡張基板にはBME280が付いていて、それを使うパッケージを追加してやると、拡張基板がなくてもBME280 を下図のように組んでやると使いこなすことができるのだ。実際にやってみると、温度・湿度・気圧が整数値ではあるが表示される。5×5のLEDにスクロールしてだ。見にくい(^^;)... せめてキャラクター液晶に表示してみたい。

 I2Cを使うんだね。ということは、AQM0802と連携もできるかな。他のI2Cセンサーも使えるかな。この拡張基板SparkFun weather:bitには、いろいろつなげられるらしい。さらに、micro:bit用GROVEシールドという拡張基板では、超音波距離センサモジュールや7セグメント4桁ディスプレイなども別売されている。7セグはコントローラが裏に張り付いていたので、それを買わないと私の手に負えそうもない。超音波距離センサー HC−SR04を持っているが、これは5Vだ。GROVEシールド用に用意されたGROVE - 超音波距離センサモジュールは3.2Vからの動作となっている。まあ、やってみるか。GROVEのパッケージを入れたら、超音波距離センサーと4桁ディスプレィが使えるようになっていた。こんなときは、素人は強い! 怖い!というべきか。

 追加パッケージは、Microsoft MakeCode画面の中央「基本」の下にある高度なブロックを開いてやって、その一番下、「パッケージを追加」で検索してやると出てくる。「weather」で検索すると出てくる。かなりアバウト。ついでに「katakana」を検索して追加してやると、半角カタカナを使うことができる。力のある人は、いろいろ作ってほしいよね。他力本願で申し訳ないけど。自分でやるにはもう時間がないから....