\ 限定の返礼品あり! /
Arduinoで可変抵抗器を使ったLEDディスプレイ表示を制御【ブロックプログラミング】
こんにちは、せでぃあ(@cediablog)です。
ArduinoプログラミングLESSON12では「4ケタ7セグメントディスプレイの点灯制御」を紹介しました。
可変抵抗器のボリューム状態に応じたアナログ入力値(0~1023)を、4ケタ7セグメントディスプレイに表示させるプログラミングでしたが、Scrattino3を使ったスクッラッチプログラミングに課題が見つかりました。
4ケタディスプレイ表示のちらつきが目立つ
この問題の解決方法を探るべく「原因の想定」「対策方法の検討」を実施した結果、ついに解決法を見つけました!
ビジュアルプログラミングでも表示をちらつかせない方法を紹介します
負けず嫌いのエンジニア魂に火が付いたということですね!
今回はLESSON12のちらつき対策に特化して解説しています
LESSON12の内容については、こちらの記事を参照してください。
- 7セグメントディスプレイのちらつきが目立つ原因
- 7セグメントディスプレイのちらつき対策方法
- mBlockを使った7セグメントディスプレイ点灯プログラム
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
遊びが勉強に変わる前に!小学生にこそおすすめしたいのがロボットプログラミング教室です!
結論:mBlockを使うことで対策実現可能
まず結論から言います。
mBlockというビジュアルプログラミングツールを使ってプログラミングすることで、ちらつき問題の対策が可能です。
原因の考察から、mBlockを使ったプログラミング方法まで解説していきます。
4ケタ7セグメントLEDディスプレイとは
4ケタ7セグメントLEDディスプレイとは、7セグメントLEDディスプレイが4桁連結した電子パーツです。
今回使用する機器は、7つのLEDとドット表示のついた8つのLEDを搭載したものが4つ並んだものになります。
4桁7セグメントディスプレイの基本情報については、前回のLESSON12記事を参照してください。
7セグメントディスプレイのちらつきが目立つ原因
Scrattino3でプログラミングするとちらつきが目立つ原因は、プログラム演算処理速度が遅いことだと考えました。
プログラム演算処理が遅いと考えた根拠として、以下の2要素が大きく寄与していると考えます。
- 1ケタずつ順番に点灯させる仕組みの電子機器である
- ArduinoIDEとはプログラム演算方法が異なる
1ケタずつ順番に点灯させる仕組みの電子機器である
4桁セグメントディスプレイですが、4桁同時に点灯させるわけではなく1桁ずつ順番に点灯させています。
高速で点灯切り替えすることで、残像効果により4桁同時に点灯しているように見えるのです。
この仕組みであることから、1ケタずつの点灯切り替えが遅いことで十分な残像効果が得られない=ちらつきが目立つことにつながっていると考えました。
ArduinoIDEとはプログラム演算方法が異なる
前回のLESSON12で分かっている事実として「Arduino IDEプログラムでは4ケタ同時に点灯しているように見える」ということです。
では、Arduino IDEとScrattino3では何がちがうのか?考えた結果、プログラム演算処理方法が異なることが浮かびあがりました。
Arduino IDEプログラムは、Arduino本体にプログラムコードを書き込みArduino本体側で演算します。
一方でScrattino3による演算方法はPC側で演算処理して、USBケーブル経由でArduinoを通信制御する方法です。
このプログラム演算方法の違いが、動作速度の上限限界値を制約しているのだと考察しました。
7セグメントディスプレイのちらつき対策方法
Arduino本体で演算処理させられるビジュアルプログラミングツールを使う
上記ミッション達成=4ケタディスプレイ表示ちらつき解決となると考えました。
そのようなツールを探したところ、mBLockというビジュアルプログラミングツールを使うことで実現可能であることがわかりました。
mBlockとは?
mBlock は、Makeblock社が開発したスクラッチベースのビジュアルプログラミングツールです。
ブラウザ上または、PC(パソコン)にインストールをしてプログラミングを行う無償ソフトウェアになります。
mBlockを使えば文字列プログラミングを使うことなく、Arduino(アルドゥイーノ)を動作をさせることができます。
mBlockの機能とインストール方法について知りたい方は、こちらの記事を参照してください。
どれくらいの演算処理速度が必要か
Arduino IDEプログラミングで1ケタずつの表示切替ウェイトタイマーを変更して、目視で点灯ちらつきが気にならないときの速度を確認しました。
その結果、0.005秒(=5msec)にて4ケタ同時に点灯しているように見えるようになりました。
mBlockを使うことで対策できる理由
mBlockはビジュアルプログラムをプログラムコードに変換してArduino本体に転送し、本体側で演算させることが可能です。
これが同じビジュアルプログラミングツールでありながら、Scrattino3ができなかった高速演算動作をmBlockが実現できる理由になります。
アップロードモードをONにすることで、実現が可能となります。
アップロードモードとは、Arduinoにプログラミングコードを転送し本体側で演算処理させる方式です。
アップロードモードON-OFF機能の詳細については、こちらの記事を参照ください。
mBlockを使ったプログラムの作り方
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、LESSON12記事を参照してください。
パソコンにビジュアルプログラミングするためのソフトウェア「mBlock」のインストールを行います。
以下の記事にて詳しく説明しています。
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します
プログラム内容については、後述するプログラミング例を参考にしてください。
プログラムが完成したら動作確認を行います。
Arduinoにプログラムデータを転送すれば、すぐさま動作が実行されます。
以下のLESSON12と同様の動作になるか、確認してください。
- 可変抵抗器のボリューム状態に応じてディスプレイ表示が変化するか?
- 表示される数値は左周りで最小0、右回りで最大1023に近い数値になるか?
プログラムの作り方
ここからは、mBlockを使ったプログラムの作り方を解説します。
- デバイスにArduino Uno R3を追加する
- 接続モードを「アップロードモードON」にする
- mBlockプログラムを作成する
- プログラムをArduino本体に転送する
これらの基本操作方法については、こちらの記事を参照してください。
変数の作り方
今回演算処理した値を代入するための変数が必要になります。
mBlockでの変数作成方法について紹介します。
①カテゴリエリアの「変数」をクリックします。
②ブロックエリアの「変数を作る」をクリックします。
③変数名をキーボード入力します。
④「このスプライトのみ」を選択します。
⑤「はい」をクリックしてウインドウを閉じます。
作った変数がブロックとして表示されたら、作成完了です。
mBlockを使ったプログラム内容
私が作成した、LESSON12対応のmBlockプログラムを紹介します。
このプログラムを使って、4ケタディスプレイちらつき対策確認済です。
プログラム全体の説明
以下のプログラムが動作プログラムになります。
プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。
容量の関係で画像が複数に分かれていますが、すべてつなげて作成してください
mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。
各ケタの数字切り出しプログラムの解説
4ケタそれぞれに表示させる数字を切り出すプログラムを解説します。
各ケタの数字を切り出す考え方の基本は以下になります。
- 4ケタ目(千の位):値を1000で割って余りを切り捨てる
- 3ケタ目(百の位):値から千の位の数値を除いて100で割り、余りを切り捨てる
- 2ケタ目(十の位):値から千と百の位の数値を除いて10で割り、余りを切り捨てる
- 1ケタ目(一の位):値から千と百と十の位の数値を除く
4ケタ目の抽出から順に考えていくと、イメージしやすいと思います。
割り算した結果のあまりを切り捨てる方法は、演算ブロックの「切り下げ」機能を使います。
Scrattino3と同じ機能のブロックでは動作できなかったため、プログラムを再考しています
動作確認方法
- 可変抵抗器のボリューム状態に応じてディスプレイ表示が変化するか?
- 表示される数値は左周りで最小0、右回りで最大1023に近い数値になるか?
上記項目について確認していきましょう。
可変抵抗器のボリューム状態に応じてディスプレイ表示が変化するか?
可変抵抗器のボリュームツマミを左右に回してみて、ディスプレイ表示される数値が変化することを確認してください。
表示される数値は左周りで最小0、右回りで最大1023に近い数値になるか?
可変抵抗器のボリュームツマミを左にめいっぱい回したときには「0付近」、右にめいっぱい回したときは「1023」付近になることを確認してください。
アナログ入力値の範囲は「0~1023」のため、1024以上の数値が表示されたら異常動作です。
動作がうまくいかないときは、冷静になってプログラムを見直してみよう
アップロードモードOFFのときは、演算がとっても遅い
mBlockにはScrattino3と同様の、PC側で演算処理をさせて変数の現在値をモニタリングできる機能(アップロードモードOFF)があります。
こちらの機能を使ってLESSON12の動作確認を行ったところ、Scrattino3のほうが断然処理が速いです。
mBlockの処理動作は、1ケタずつの表示切替がはるかに遅かったです。
PC側で演算処理させて現在値をモニタリングする場合は、Scrattino3の利用がおすすめです
まとめ
- mBlockはArduino本体にプログラムを転送することが可能
- 早い演算処理が必要な場合はアップロードモードONで使う
- PC側で演算処理させてモニタリング処理する場合は、Scrattino3利用がおすすめ
小学生のお子様には断然、ビジュアルプログラミングがおすすめです!
今後のLESSON記事はScrattino3とmBlockを使い分けていきます
最後まで読んでいただき、ありがとうございました。
小学生のお子様には、プログラミング教室での基礎学習をおすすめしています!
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。
コメント