こんにちは〜UGOKのやねこ🐈です。
「まだ冬じゃないし…」とずっと分厚いマフラーを温存して薄めのマフラーで生活していたのですが、そのままいつのまにか12月に入ってました。
まだまだこの薄いマフラーでいける感じがするので今年の冬は大したことないですね。(思い上がる愚かな人間の図)
さて、今回も前回のふりこカウンターを改良していこうの記事になります。
今回はふりこが触れる時間を自動で計測する「タイマー機能」の実装を行いました。
(前回の記事はこちら↓)
自動タイマー機能の実装にあたり、micro:bitの「入力」→「その他」タブの中にある
「稼働時間(ミリ秒)」という入力値を活用しました。
稼働時間とは、micro:bitがプログラムを読み込んで稼働し始めた瞬間から計測する経過時間のことを指します。
今回はふりこが10往復する時間を知りたいので、図にすると以下のようになります。
この図から、【ふりこ開始】の時間と【ふりこ終了】の時間がわかれば、
ふりこが10往復する時間を計測できそうですね。そこで↓
上記の図から、ふりこ開始の時点(=1往復目)までの稼働時間と、
ふりこ終了の時点(=10往復目)までの稼働時間をそれぞれ取得し、
10往復する時間=【ふりこ終了までの稼働時間】ー【ふりこ開始までの稼働時間】
の計算で10往復する時間を算出することができそうです。
上記の設計を踏まえ、前回の記事で示した「カウント用のプログラム(micro:bit②)」を改良し、
以下のようにタイマープログラムを実装しました。
前回のプログラムではカウンターは1~10まででしたが、
今回は10往復をカウントするので1~21をカウントするプログラムに変更しました。
前回のプログラムから結構変えたので1つずつ説明します。
●「最初だけ」
・無線のグループを設定
・変数【カウンター】【タイマー】【開始時間】【終了時間】に0を代入
●「ずっと」
・変数【カウンター】を表示
●「無線で受信したとき」(=「明るさ」の変化を読み取ったとき)
・もし【カウンター】が20以下なら
>>【カウンター】を1ずつ加算
>>もし【カウンター】が1なら
>>>>【開始時間】に「稼働時間(ミリ秒)」を代入
>>もし【カウンター】が21なら
>>>>【終了時間】に「稼働時間(ミリ秒)」を代入
>>>>【タイマー】に「【終了時間】ー【開始時間】」を代入
<補足>
【カウンター】が20のときまで1加算するので、21までカウントできます。
【カウンター】が1のとき「稼働時間」を代入することで【ふりこ開始までの稼働時間】、
21のとき再び「稼働時間」を代入することで【ふりこ終了までの稼働時間】が取得できます。
この2つの「稼働時間」の差を算出することで【タイマー】(ふりこが10往復する時間)を算出できます。
●「Aボタンが押されたとき」
・変数【タイマー】(ふりこが10往復する時間)を表示
●「Bボタンが押されたとき」
・変数【カウンター】を0に戻す(リセット機能)
このプログラムを実行した結果がコチラです↓
今回10往復する時間を自動で計測するタイマー機能を実装したことで、
○人が10往復をカウントする手間
○人がストップウォッチを制御することで生じる誤差
をかなり削減できるものになったと思います。
この「ふりこカウンター」制作の目的は、前々回の記事で示したようにふりこ実験の
[1] 10往復を人の目で数えなければならない。
[2] ストップウォッチを押すタイミングによって結果に差異が生じる。
という2点の問題点を改善させることだったので、
プログラム自体はこれで一旦完成ということになるかと思います。
(サーボモーターを使う手法も考えてみたかったですがこの製作で利用するのは少し難しそうです……)
プログラム上はこれで完成ですが、「明るさ」の変化を読み取る方式なので
正確にカウントできるかは正直五分五分といったところです…( ˘ω˘ )
よって、今後の課題としては
●ふりこの実験の結果が正確に出るか確かめる
●「明るさ」の変化をより正確に読む工夫を考える
●明るさセンサー以外の他の手法でふりこの振れをカウントできないか考える
あたりになるかと思います。
今回の記事はここまでです。
お読み下さったみなさん、誠にありがとうございました!
*****
【リンク】
やねこ🐈Twitterアカウント(・ω・)っ【https://twitter.com/ugok_yaneko】
UGOKTwitterアカウント(・ω・)っ【https://twitter.com/ugok_girls】