micro:bit(マイクロビット)は、本体に搭載されている機能を利用する他にも、外部接続端子で様々な機器とmicro:bitを接続してmicro:bitをコントロールしたり、逆にmicro:bitから外部機器をコントロールしたりすることが可能です。 この記事ではイルミネーション用のLEDライトをmicro:bitに接続して、micro:bitで光り方をコントロールする方法をご紹介します。

ITトレンド最終更新日: 20181221

micro:bitで始めるプログラミング入門[イルミネーション編]

  • このエントリーをはてなブックマークに追加

マイコンボードmicro:bit(マイクロビット)は、本体に搭載されている機能を利用する他にも、外部接続端子で様々な機器とmicro:bitを接続してmicro:bitをコントロールしたり、逆にmicro:bitから外部機器をコントロールしたりすることが可能です。
今回はイルミネーション用のLEDライトをmicro:bitに接続して、micro:bitで光り方をコントロールする方法をご紹介します。

micro:bitの外部接続端子とLEDライトの接続

micro:bitの下部にある外部接続端子を使うと、様々な外部機器をコントロールしたり、micro:bit本体に搭載されている部品以外のものをスイッチやセンサーとして利用したりすることが可能になります。

micro:bitの外部接続端子については『micro:bitで始めるプログラミング入門[接続端子で拡がる用途]』でも紹介していますのでご覧ください。
“micro:bitで始めるプログラミング入門[接続端子で拡がる用途]”
https://www.pc-koubou.jp/magazine/10843

上図赤枠部分が外部接続端子上図赤枠部分が外部接続端子

外部接続端子からは3Vの電源出力(USBか電池での電源供給時)ができ、出力する電圧をコントロールすることも可能です。3Vの電源出力というと、乾電池2個分(1.5V×2)に相当します。

そこで今回は、乾電池で光るLEDライトをmicro:bitの外部接続端子に接続して、光り方をコントロールしてみることにします。

LEDライトは100円ショップ「ザ・ダイソー」の下記ライトを使用します。

今回使用するLEDライト今回使用するLEDライト

※今回は電源の供給方法を変えるだけですが、通常の使用方法と異なる使い方になりますので、実際にお試しになる場合は各自の責任においてお試しください。
※上記LEDライトは季節商品のため店頭在庫限りの販売とのことです。

このライトの電池ボックスを開けてみると、乾電池2個を直列につなぐ形になっていますので、マイナス(―)側の端子をmicro:bit外部接続端子の「GND」端子と、プラス(+)側の端子をmicro:bit外部接続端子の「0」端子と、それぞれワニ口ケーブルで下図のように接続します。

※micro:bitに電源を供給した状態で「GND」端子と「3V」端子は絶対に直接つながないでください。電気がショートし、破損の原因になります。

※micro:bit側のケーブル接続時にワニ口クリップが他の端子にかからないよう、まっすぐ接続してください。

マイナス側を「GND」端子と(グレーの線)、プラス側を「0」端子と接続(赤の線)マイナス側を「GND」端子と(グレーの線)、プラス側を「0」端子と接続(赤の線)

正しく接続していることが確認できたら、LEDライトの電池ボックスに付いている電源スイッチを「ON」に切り替えます。

この状態でmicro:bitから「0」端子へ送る数値をプログラムで制御することで、LEDライトの光り方をコントロールすることができます。

ちなみにmicro:bitに電源を供給した状態でプラス側の端子を「3V」端子に接続すると、すぐにライトが光ります(下図)。ただしこの状態では出力する電圧を変えられないので、プログラムから出力値のコントロールが可能な「0」「1」「2」端子(今回は「0」端子)を用います。

プラス側を「3V」端子につなぎかえるとライトが光る(micro:bit側のLEDが光っているのは内容と関係ありません)プラス側を「3V」端子につなぎかえるとライトが光る
(micro:bit側のLEDが光っているのは内容と関係ありません)

micro:bitでイルミネーションの点滅をコントロールする

イルミネーション点滅プログラムの作成

LEDライトとmicro:bitの接続の仕方がわかったら、イルミネーションの点滅をコントロールするプログラムを作っていきます。
今回作成するプログラムの全体を下図に示します。

イルミネーションを点滅させるプログラムの全体図イルミネーションを点滅させるプログラムの全体図

まず、①で点滅をさせる時間を設定し、②で「0」端子から値を出力します。
「0」端子に値1が送られると「0」端子から出力される電圧が最大値となりLEDライトが光り、「0」端子に値0が送られると電圧も0になりLEDライトが消える、これを①で設定した時間ごとに繰り返す、という仕組みです。

では上記のプログラムを実際に作成していきます。
まず「Microsoft MakeCode for micro:bit」にアクセスし、「新しいプロジェクト」をクリックして、ブロックエディタを表示します。

“Microsoft MakeCode for micro:bit”.Microsoft.2018.※掲載情報は随時更新されています。
https://makecode.microbit.org/#lang=ja

※ブロックエディタの使用については「micro:bitで始めるプログラミング入門[基本操作〜カップラーメン専用タイマー制作]」記事も参照してください。

“micro:bitで始めるプログラミング入門[基本操作〜カップラーメン専用タイマー制作]”
https://www.pc-koubou.jp/magazine/10208

「最初だけ」ブロックに「変数」メニューをクリックすると表示される「変数を追加する…」をクリックし、「作成する変数の名前:」ダイアログボックスで「wait」と入力し「OK」ボタンを押すと下図のような表示になります。

「変数waitを0にする」ブロックをエディタ上にドラッグ&ドロップ「変数waitを0にする」ブロックをエディタ上にドラッグ&ドロップ

「変数waitを0にする」ブロックをエディタ上にドラッグ&ドロップ「最初だけ」ブロックに挟み込み、数値を「300」に設定します。
数値の単位は「ミリ秒」という単位で、1000ミリ秒=1秒、値が300の場合は0.3秒となります。

変数の値を300に設定変数の値を300に設定

続いて「0」端子に電圧の値を送るブロックを追加します。
「高度なブロック」内「入出力端子」メニューから「デジタルで出力する」ブロックをエディタ上にドラッグ&ドロップします。

「デジタルで出力する」ブロックをエディタ上にドラッグ&ドロップ「デジタルで出力する」ブロックをエディタ上にドラッグ&ドロップ

「デジタルで出力する 端子P0 値0」ブロックを「ずっと」ブロックに挟み込みます。
先ほどの「wait」と同様に新たに「on」という変数を作成し、「on」ブロックを値の部分に入れ込みます(下図)。

「デジタルで出力する」ブロックの値を図のように設定「デジタルで出力する」ブロックの値を図のように設定

続いて、「変数」メニューから「変数 on を 0にする」ブロックをエディタ上にドラッグドロップし、先ほどの「デジタルで出力する」ブロックにつなぎます。
「計算」メニューの上から2番目にある引き算「0 – 0」ブロックを「変数 on を 0にする」ブロックの「0」部分にはめ込み、引き算の左側の値を「1」に書き換え、右側の値に先ほどの「デジタルで出力する」ブロックと同様、変数「on」ブロックをはめ込みます。

「変数 on を 0にする」ブロックをはめ込み値を設定「変数 on を 0にする」ブロックをはめ込み値を設定

この変数ブロックにより、イルミネーションが消えていれば(=端子「0」の電圧が0=「on」の値が0)値を1-0=「1」にしてイルミネーションを点灯させ、イルミネーションが点灯していれば(=端子「0」の電圧が1=「on」の値が1)、値を1-1=「0」にしてイルミネーションを消灯させます。

最後に光った状態を維持するため、「基本」メニューから「一時停止(ミリ秒)」ブロックを追加し、値を変数「wait」とします。

「基本」メニューから「一時停止(ミリ秒)」ブロックを追加「基本」メニューから「一時停止(ミリ秒)」ブロックを追加

これでプログラムは完成です。

実際に光らせてみる

完成したプログラムをmicro:bitに書き込み、LEDライトをつないで光らせてみましょう。

LEDライトをつないで光らせてみるLEDライトをつないで光らせてみる

なお、最初の変数waitの値を変えることで、点滅の間隔を変えることができます。
下記に値を「50」にしたプログラムと、「1000」にしたプログラムで点滅させたイルミネーションを並べた動画を載せていますので、点滅の違いを見てみましょう。下側が値を「50」、上側が値「1000」のものです。

イルミネーションの点滅をやわらかくコントロールする

アナログ出力を使った点滅プログラムの作成

先ほどのプログラムでは点滅の仕方が「パッパッ」とメリハリのきいた光り方をしていましたが、ゆっくり点滅をさせてみたい場合はアナログ出力を使います。
下記にアナログプログラムの場合の全体像を示します。

まず①の部分でどれくらいの段階で徐々に明るくなるか(=どれくらいの段階で電圧を上げていくか)を決め、②の部分で先ほどのデジタル出力と同様に、光っていなければ明るくし、光っていれば暗くする処理を行っています。

まず「変数」メニューで先ほどと同様に変数「d」を作成し、「最初だけ」ブロックに「変数dを0にする」ブロックを挟み込み、値を「10」に設定します。
また、「高度なブロック」内「入出力端子」メニューから「アナログで出力する」ブロックを「ずっと」ブロック内に挟み込み、先ほどと同様に「変数」メニューで変数「on」を作成の上、値0を変数「on」に変更します(下図)。

次に、徐々に明るくする処理を設定します。
「変数」メニューから「変数 on を0 だけ増やす」ブロックを「アナログで出力する」ブロックの下に追加し、値0に変数「d」を設定します。
さらに「論理」メニューから「もし」ブロックを「変数 on を d だけ増やす」ブロックの下に追加し、条件を下図のように設定します。
これは、変数「on」の値が0以下(電圧の最小値)、もしくは1023以上(電圧の最大値)であれば、という条件を設定しています。
もう一つ、「もし」ブロックの下に「変数 d を 0 にする」ブロックを追加し、値「0」に「計算」メニューの掛け算ブロックを設定し、「d × -1」と設定します。
これにより、電圧が最小値以下、または最大値以上、つまり光っている途中でなければ変数dにマイナスを掛け合わせ、変数dが正の値(=10ずつ増えている)なら負の値(=10ずつ減っていく)に、変数dが負の値なら正の値にし、徐々に電圧を上げる処理と下げる処理を交互に行う形になっています。

アナログ出力の光り方を確認してみる

プログラムが出来上がったら、先ほどと同様に光り方を確認してみます。徐々に点滅する様子がわかると思います。

せっかくですので、2台のmicro:bitを使ってツリーに飾り付けてみました。本格的なイルミネーションのような仕上がりになっています。

まとめ

このように、micro:bitとLEDライトを組み合わせると、本格的なイルミネーションのような動作をさせることが比較的簡単なプログラムで可能になります。今回のプログラムをもとに、オリジナルのイルミネーション制作に取り組んでみてください。

電子工作におきましては設定や接続の方法を間違えると機器の発火や破損に繋がる恐れがあります。
十分に設定や接続方法を確認の上で通電を行ってください。

※本記事は「ザ・ダイソー」の掲載許諾を得て作成しています。

ライタープロフィール 合同会社 4D Pocket 石郷祐介

大学卒業後、公設研究機関勤務を経て、情報科学芸術大学院大学[IAMAS]に入学。インタラクティブ作品を作る傍ら、多数のメディアアート作品の実装を手がける。
近年は、開発イベント企画、勉強会講師、コミュニティ形成等も行っている。
合同会社4D Pocket 代表、日本総合ビジネス専門学校 講師。

記事を
シェア