いろいろなセンサーをつなげてみよう

 前回に続いてKeyestudioのセンサー/モジュールを使ってみます。今回は基本的なセンサーの扱いです。最後にいくつかのセンサーを組み合わせて処理を行わせてみます。

 今回はセンサー/モジュールごとに説明していきます。

ボタン

 プッシュボタンはボタンが押されると入力端子からの信号が1になります。押されていない場合は0になります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

※ロットによって+と-が逆になっている場合があります。ボタンを押しても反応しない場合は+と-を逆につないでください。

 ボタンの押下によってマイクロビットのLEDに値を表示するプログラムは以下のようになります。

 JavaScriptコードの場合は以下のようになります。

basic.forever(function () {
    basic.showNumber(pins.digitalReadPin(DigitalPin.P0))
})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。ボタンを押していない場合はLEDには0が表示されます。ボタンを押すと1が表示されます。

クラッシュセンサー/リミットスイッチ

 クラッシュセンサー/リミットスイッチはスイッチが押されると入力端子からの信号が1になります。押されていない場合は0になります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

ボタンの押下プログラムをそのまま利用できますので、プログラムをダウンロードしマイクロビットに転送して動作を確認します。スイッチが押されていない状態ではLEDには0が表示されます。スイッチが押されると1が表示されます。

傾斜センサー

 傾斜センサーは一定方向に傾くと入力端子からの信号が1になります。傾いていない場合は0になります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

ボタンの押下プログラムをそのまま利用できますので、プログラムをダウンロードしマイクロビットに転送して動作を確認します。スイッチが押されていない状態ではLEDには0が表示されます。スイッチが押されると1が表示されます。

人感センサー

 人感センサーは一定範囲内(約3m範囲内)に人がいる場合、入力端子からの信号が1になります。人がいない場合は0になります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

ボタンの押下プログラムをそのまま利用できますので、プログラムをダウンロードしマイクロビットに転送して動作を確認します。センサーの近くに人がいない場合、LEDには0が表示されます。1mくらいまで人が近寄ると1が表示されます。

磁気センサー

 磁気センサー(Reed Swicth Module)は近くに磁気を感知すると入力端子からの信号が0になります。磁気が検出されない場合は1になります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

ボタンの押下プログラムをそのまま利用できますので、プログラムをダウンロードしマイクロビットに転送して動作を確認します。センサーの近くに磁気がないとLEDには0が表示されます。近くに磁気を感知すると1が表示されます。

フォトインタラプター

 フォトインタラプターは発光部と受光部の間に何か物体があるかどうかを検出できます。物体により発光部からの光が遮断されると入力端子からの信号が1になります。光が遮断されていない場合は0になります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

ボタンの押下プログラムをそのまま利用できますので、プログラムをダウンロードしマイクロビットに転送して動作を確認します。センサーに取り付けられている発光部と受光部の間に何もない場合、LEDには0が表示されます。間に何か物体を入れて光を遮断すると1が表示されます。

環境光センサー

 環境光センサーは明るさをアナログ値で返します。明るいと数値は小さくなり、暗いと大きくなります。数値の範囲は0〜1023になります。環境光センサーは2種類あります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

 環境光センサーの値を読み取ってマイクロビットのLEDに値を表示するプログラムは以下のようになります。2種類のセンサーはどちらも同じプログラムで動きます。

 JavaScriptコードの場合は以下のようになります。

basic.forever(function () {
    basic.showNumber(pins.analogReadPin(AnalogPin.P0))
    basic.pause(5000)
})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。マイクロビットのLEDに明るさを示す数値が5秒ごとに表示されます。

温度センサー

 温度センサーは気温をアナログ値で返します。温度センサーは2種類あります。ここではLM35の温度センサーを使います。
 LM35の温度センサーで計測した温度は「(読み出したアナログ値×300)÷1023」で求めることができます。ただし、この値は華氏なので摂氏にするには32を引く必要があります。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

 温度センサーの値を読み取ってマイクロビットのLEDに値を表示するプログラムは以下のようになります。

 JavaScriptコードの場合は以下のようになります。

let 温度 = 0
basic.forever(function () {
    温度 = pins.analogReadPin(AnalogPin.P0) * 300 / 1023
    basic.showNumber(Math.trunc(温度 - 32))
    basic.pause(5000)
})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。マイクロビットのLEDに温度を示す数値が5秒ごとに表示されます。

ブザー

 ブザーは音を出します。音楽も演奏できます。

 以下のようにモジュールとシールドをつなぎます。

モジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)

 音楽を演奏するプログラムは以下のようになります。

 JavaScriptコードの場合は以下のようになります。

music.beginMelody(music.builtInMelody(Melodies.Ode), MelodyOptions.Once)

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。歓喜の歌が演奏されます。

人感センサーとブザーを組み合わせる

 それでは最後に人感センサーとブザーを組み合わせてみましょう。人が近づくとブザーがなるようにします。
 以下のようにブザーと人感センサーとシールドをつなぎます。

ブザーモジュール側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 0番のS(信号線)
人感センサー側 シールド側
+ V1またはV2(VCC)
- G(GND)
S 9番のS(信号線)

 プログラムは以下のようになります。

 JavaScriptコードの場合は以下のようになります。

basic.forever(function () {
    if (pins.digitalReadPin(DigitalPin.P9) == 1) {
        music.playTone(262, music.beat(BeatFraction.Whole))
    }
})

 プログラムをダウンロードしマイクロビットに転送して動作を確認します。人が近づくとブザーから音がでます。

ブザーでなくLEDが点灯するように改良したり、熱中症予防で温度が一定以上になったらブザーを鳴らすなど、アイデア次第でいろいろできるでしょう。 次回は残りのセンサーとLCDを使ってみます。

著者 古籏一浩
プログラミングをベースにして面白そうなものはとりあえずやってみるというスタンス。複雑なものよりシンプルで楽しめるものが好み。最近は30年前に移植したゲーム(mz-700版 SPACE HARRIER)の話などを書いたりしています。
著者サイト:http://www.openspc2.org/