見出し画像

micro:bitで電気角度計を作る-2(OLEDを追加)

こんにちはロック204チャンネルです。
今回の動画では、「マイクロビットで電気角度計を作るパート2 OLEDを追加」 お送りします。

動画の内容は前回作成した電気角度計にOLEDを追加したので紹介します。
使用した機器は
マイクロビット
可変抵抗器
タクトスイッチ
ゴニオメーター(角度計)
ブレードボード
エッジコネクター
OLEDはSSD1306
となります。
また開発環境はMakeCodeのPythonを使用し
拡張機能としてOLED13864_I2C
を追加しました。

こちらにマイクロビットとタクトスイッチ、可変抵抗との接続図を示しています。
またマイクロビットとの接続には エッジコネクターとブレードボードを使用しました。
追加したSSD1306のSDA端子はマイクロビットのポート20に、SCL端子はポート19に接続しました。

それではプログラムコードについて説明していきます。
今回のプログラム開発環境はMakeCodeのPython言語を使用しました。
ブロックプログラムは大きくなると可読性が低下しますので記述型の言語を使用することにしました。
最初に実行するコードはこちらのプログラムとなります。
41行目のコードでOLEDを初期化し使用可能とします。
そして 42行のshow_stringで0行0列に「Pro. ROM3」 と表示します。 その後の1とあるのは 通常表示を意味します。0と設定した場合は 反転表示となります。
この表示を1秒表示し、次に変数を初期化します。
bfは使いすてのバッファーとします。
 deg_180は 180度の位置で取得されたアナログ値を入れる変数です。同様にdig_0は 0度の位置のアナログ値を入れます。
mg_dgはアナログ値を角度に変換した値を入れます。これが角度の測定値となります。
48行目のmodeは 測定の過程を記録するために使用しています。 999は準備状態、1は測定中、0は停止の状態を記録します。
また 接続したタクトスイッチは ポート1に接続しています。 このスイッチの入力状態を安定させるために 49行目でプルダウンに設定しています。
これらの設定が終わると 関数syokikaを呼び出します。 ここでキャリブレーションを行ないます。

こちらがキャリブレーションのコードになります。
最初にOLEDの画面をクリアし、0行0列に「Start Cal」 と表示し
一行目に「move to 0」と表示します。
そして 音を鳴らした後 タクトスイッチが押されるまで 21行22行で待ちます。
タクトスイッチが押されると変数でdeg_0に可変抵抗の電圧を取得します。

キャリブレーションの続きとなります。
次に 24行で「move to 180」 と表示し 角度計を180度に持ってくるように促します。
音を鳴らした後タクトスイッチが押されるまで待ちます。
タクトスイッチが押されると180度の位置のアナログ値を取得します。これをdeg_180に入れます。
そして modeを0として 測定停止状態にします。
マイクロビットに表示するアイコンはチェックマークとします。
そしてOLEDに「END Cal」 と表示し1秒待ち画面をクリアします。
37行38行で「Measurement Ready」 、次の行に「Start->A」と表示しAボタンを押すよう促します。

こちらはAボタンとBボタンの設定を示しています。
Aボタンが押されると3から8行のコードが実行されます。
まずmodeを1として測定開始とします。
そしてOLEDの画面をクリアし 「Start Measur.」の文字を 表示します。
A+Bボタンでは 関数syokikaを呼び出しキャリブレーションを行ないます。
これはキャリブレーションをやり直したいときに行う操作とします。

こちらに測定ルーチンを示します。
on_forever 関数の中に測定プログラムを書いていきます。
 modeが1の場合に測定をおこないます。
マイクロビット にハートマークを表示し、 測定が可能であることを示します。
そして タクトスイッチが押されるまで待ちます。
この間、角度計を測定したい角度に合わせてタクトスイッチを押します。
そして 61行で 変数bfにアナログ値を取得します。
取得したアナログ値はmath.map関数でアナログ値を角度に変換します。 これをm_degに代入します。
その後、音を鳴らして角度を四捨五入し bfに代入します。
そして変数string_bfに bfと文字列「 deg」を結合し代入します。
次に画面をクリアし この文字列を 0行目に表示します。
70行目には「measur->A」の文字列を表示し、次の測定はAボタンを押すようにすることを促します。
そしてmodeを0とし測定停止状態とします。
以上がプログラムとなります。

今回は、可変抵抗器を使用した電気角度計にOLEDを接続しより操作性の良いものに改良したので紹介しました。
また開発言語をブロックコードとよりPythonに変更することによりプログラムの可読性を向上させることができました。
次回はデータロギングにも対応したバージョンを考えていきたいと思います。

ご視聴ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?