皆さんこんにちは。もはやお馴染みUGOKのやねこ🐈です。
日付を見て11月が死んだことを知り軽く絶望しました。なぜ死んだ
失っても失っても生きていくしかないので、己を鼓舞しながら研究頑張ります……!(息をするように鬼滅ネタ)
さて、今回は前回書いた「ふりこカウンター」について、全体の設計計画と
今進めているプログラムについて記していこうと思います。
(前回の記事はこちら↓)
ふりこカウンターの全体図として、今考えているものを簡単に図にしました。↓
用意するものは、
・micro:bit 2台
・サーボモーター 1台
・電池
・ふりこ
micro:bit①は、明るさセンサーとしてだけ使用し、明るさの変化を感知したとき、
micro:bit②に無線を送ります。
micro:bit②は、カウント用として使用し、micro:bit①からの無線を受け取ったとき、
カウントを1増やします。
また、スムーズに繰り返しカウントできるよう、Bボタンを押したときカウントが0に戻るプログラムにします。
さらに、サーボモーターに対し、「カウントが1以上かつ10以下」のとき回転、
そうでなければ停止というプログラムを行います。(※カウント10のとき5往復)
サーボモーターについてはまだ具体的にどう学びに結び付けるか思案中なので、
仮に「回転」「停止」だけのプログラムとしています。
ちなみに明るさの変化を感知し、カウントするだけならmicro:bit1台でも十分可能です。
しかし明るさセンサーで実装が上手くできない場合、他のセンサーに代替して試作しなければなりません。
研究をスムーズにすため、また実験の可能性を広くするため、今回は「センサー用」と
「カウント用」で2つのmicro:bitに分けた設計にしました。
サーボモーターをmicro:bit①(センサー用)ではなくmicro:bit②(カウント用)に接続するのも同じ理由です。
micro:bit①(明るさ読み取り用)のプログラムとして、私はまず
「スタート時の明るさの値を変数に入れ、その変数と常時の明るさとの差異を調べる」
というプログラムを考えました。
例えばスタート時の周囲の明るさが120だった場合、変数には「120」が代入され、
「周囲の明るさがスタート時(120)より5以上暗くなった場合」無線を送信する、という流れです。
以下のようなプログラムにしました。
<備考>
※赤の「明るさ」(変数)→[明るさ]と表記
※紫の「明るさ」(入力)→【明るさ】と表記(=周囲の明るさを示す)
○最初に「変数[明るさ]を【明るさ】にする」というプログラムにすると、0に近しい値が代入されてしまい、正常にカウントできない
→変数[明るさ]の最初の値は0とし、「ゆさぶられたときに、変数[明るさ]に周囲の明るさの値を代入」というプログラムに変更
○プログラムの処理が速いためバグが生じる、変化を読み取れない
→「無線で数値を送信」のあとに「0.5秒一時停止」のプログラムを追加
<問題点>
●「最初の明るさ」との違いを感知するので、ずっと暗い状態になったときでも反応し、カウントしてしまう(柔軟に“明るさの変化”を読み取ることができない)
●「最初だけ」しか基準の値を取らないので、最初が極端に明るい場所であったりすると、感知に誤差が生じる
以上の点を踏まえ、さらにプログラムを改良しました。↓
このプログラムでは、「最初だけ」でなく「ずっと」周囲の明るさの値を変数に代入する手法を取りました。
変数を[明るさ1][明るさ2]の2つ用意し、[明るさ1]には常時の周囲の明るさの値を、
その0.1秒後に[明るさ2]に周囲の明るさの値を代入します。
すなわち、「今その瞬間の明るさ」と「次の瞬間の明るさ」の値が変数で取れることになります。
この2つの変数の値の差異を調べることで、より柔軟に「明るさの変化」を感知できます。
常に変数の値を更新するので、ずっと暗い状態になったとしてもカウントはされません。
カウント用プログラムは、それほど難しい処理をしていません。
最初に変数[カウンター]を0とし、無線を受信したとき1だけ増やすというプログラムです。
この処理をカウンターが10になるまで繰り返します。
Bボタンを押すと変数[カウンター]は0となり、初めからカウントできます。
まだサーボモーターのプログラムを組み込んでいないので、micro:bit②のプログラムは現在途中段階といったところです。
●サーボモーターのプログラムを追加する
●一瞬で通り過ぎると変化を認識できないことがあるので、プログラムやセンサーの位置を工夫する
●「カウンター」の数値を表示させることによるタイムラグが生じる
●できればふりこを製作し、カウンターが実際に使えるか試す
今回はここまで。引き続き、プログラムの試作を重ねていきます。
お読み下さった皆様、誠にありがとうございました!!
*****
【リンク】
やねこ🐈Twitterアカウント(・ω・)っ【https://twitter.com/ugok_yaneko】
UGOKTwitterアカウント(・ω・)っ【https://twitter.com/ugok_girls】