Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
.NET対応組み込みデバイス「Netduino」入門(12)

.NET対応組み込みデバイス「Netduino」入門(12)

littleBitsではんだ付けなしの電子工作を実現

2015年10月9日

磁石で電子回路をつないで電子工作が行えるlittleBits。Netduinoと組み合わせると、どのような電子工作が実現できるのか? その可能性を探る。

Microsoft MVP for Windows Platform Development 初音 玲
  • このエントリーをはてなブックマークに追加

 今回は、磁石で電子回路をつないで電子工作が行えるlittleBitsを、Netduinoと組み合わせると、どのような形で電子工作ができるのか。その可能性を探ってみたいと思う。

 littleBitsは、CEOのAyah Bdeir氏によりニューヨークで2011年9月に設立・創業されたlittleBits社から発売されているオープンソースハードウェア製品である。littleBitsを使えば、Bitsモジュールという電子回路部品を磁石で組み合わせるだけで、あたかもレゴでいろいろなものを作るかのような手軽さで電子工作が行える。

 日本では2013年よりKORGが日本総代理店として販売を開始し、また、2015年3月からは学校、EdTech(Education×Technology)、IoT分野での主担当としてゼッタリンクスも代理店として取り扱いを開始している。なお今回の連載に当たり、ゼッタリンクスさんのご厚意により、2015年12月31日までの期間限定で何回でも利用可能なBuild Insider読者専用の割引クーポンを提供していただけた。ゼッタリンクス・オンラインショップの[お支払方法の設定]画面でクーポンコード「Build_Insider」を入力すれば、オンラインショップ内の全製品が8%割引となるので、ぜひご利用いただきたい。

littleBitsの基本的電気特性

 littleBitsの各Bitsモジュールは、電源関係で青色の「power」、ボタンやセンサーなど入力関係でピンク色の「input」、分岐回路や合成回路などモジュール同士を接続するオレンジ色の「wire」、LEDやブザーなど出力関係で緑色の「output」の4種類に分かれている(図1)。

図1 littleBitsの接続例

 Bitsモジュール同士は、GNDピン、シグナルピン、5Vピンにより電気的に接続される。色分けされた接続部分はbitSnapと呼ばれており、オスとメスがあってGNDと5Vが逆にならないように磁石の極性をうまく利用して必ず一致する形でしかはまらないようになっている(図2)。

図2 littleBitsの接続部

 入力用Bitsモジュールでの操作はシグナルピンに変化を与える。例えば、ボタンモジュールを接続するとシグナルピンの電圧は0Vとなり、ボタンを押すと5Vとなる(図3)。出力用Bitsモジュールはシグナルピンの電圧を使って表示を行う。

図3 ボタンモジュールを接続したときに電気特性

 なぜ5Vピンが必要かといえば、Bitsモジュールの中にはIC(集積回路)が載ったものもあり、そのICの駆動用に、操作により電圧が変化しない5Vピンが必要なのだ。

基本となるBitsモジュールについて

 littleBitsのBitsモジュールは単品でも入手ができるが、使い勝手のいいモジュールを組み合わせた各種KITもある。

BitsモジュールBASE KITPREMIUM KITDELUXE KITSYNTH KITSPACE KIT
[p1]パワー ○ x2
[i3]ボタン
[i5]スライドディマー
[i6]ディマー
[i7]IRトリガー
[i11]圧力センサー
[i13]光センサー
[i16]パルス
[i17]タイムアウト
[i19]ローラースイッチ
[i20]サウンドトリガー
[i21]マイクロフォン
[i30]キーボード
[i31]オシレーター ○ x2
[i32]フィルター
[i33]エンベロープ
[i34]ランダム
[i35]ディレイ
[i36]シーケンサー
[i37]ミックス
[w1]ワイヤー ○ x2 ○ x2 ○ x4 ○ x2
[w2]ブランチ
[w7]フォーク
[w8]ラッチ
[w10]インバーター
[w19]スプリット
[o2]ロングLED ○ x2
[o3]RGB LED
[o4]バイブレーション
[o5]DCモーター
[o6]ブザー
[o7]IR LED
[o9]バーグラフ
[o11]サーボ
[o13]ファン
[o14]発光ダイオード
[o16]ライトワイヤー
[o21]2桁7セグLED
[o24]シンセスピーカー
表1 Kit別Bitsジュール一覧

表中の「x2」は2個あることを意味する。

 今回は、この中からBASE KITに含まれているBitsモジュールを使ってサンプルを作成する。その際に使用する各Bitsモジュールの内容を紹介しておこう。

[p1]Power Bitsモジュール

 まずは必須ともいえるBitsモジュールが、全てのKITに含まれている識別コードp1Power Bitsモジュールだ(図4)。このBitsモジュールは、入力側bitSnapの代わりにACアダプター用のプラグを持ち、9~12Vの入力電圧に対して、出力側のシグナルピンと5Vピンに5Vを供給する。なお、9V電池の消費は比較的早く、モーターやスピーカーを出力側についないでいると3時間程度で消費してしまうこともある。

Power Bitsモジュール
図4 Power Bitsモジュール

[p3]USBパワー

 各種KITには含まれていないがぜひ押さえておきたいBitsモジュールが識別コードp3USB Power Bitsモジュールだ(図5)。このBitsモジュールには、入力側bitSnapの代わりにUSB端子が付いている。USBでPCと接続することで、5V 500mAの出力が可能になる。さらに、AC電源アダプターに接続すれば、そこからの供給により5V 1Aの出力が可能になる。大容量電流が必要なBitsモジュールを接続する場合だけではなく、9V電池が不要になるため、ランニングコストが大幅に軽減できる。

USB Power Bitsモジュール
図5 USB Power Bitsモジュール

[i3]ボタン

 Netduinoのデジタル入力と接続するのは、識別コードi3Button Bitsモジュールだ(図6)。これは、押したときにだけシグナルピンがON=5Vになり、押していないときは常にシグナルピンがOFF=0Vになるプッシュ・スイッチだ。このように、押している間だけONになる動作をモーメンタリと呼ぶ。

Button Bitsモジュール
図6 Button Bitsモジュール

[i13]光センサー

 Netduinoのアナログ入力と接続するのは、識別コードi13Light Sensor Bits モジュールだ(図7)。これは、周囲の明るさに応じてシグナルピンの出力を0~5Vで変化させるモジュールだ。

Light Sensor Bitsモジュール
図7 Light Sensor Bitsモジュール

[o5]DCモーター

 Netduinoのデジタル出力で制御するのは、識別コードo5DC Motor Bitsモジュールだ。

DC Motor Bitsモジュール
図8 DC Motor Bitsモジュール

[o14]発光ダイオード

 NetduinoのPWM出力で制御するのは、識別コードo14Bright LED Bitsモジュールだ。

Bright LED Bitsモジュール
図9 Bright LED Bitsモジュール

Netduinoとの接続について

[w9]Proto

 Bitsモジュールの端子であるbitSnapとNetduinoのピンを接続するために使用するのが、識別コードw9Proto Bitsモジュールだ。

Proto Bitsモジュール
図10 Proto Bitsモジュール

 Proto Bitsモジュールは、2つのbitSnapに加えて、上下にターミナルブロックを配置している。このターミナルブロックにジャンパー線をねじ留めすれば、ジャンパー線のもう一方をNetduinoやブレッドボードと接続できるようになる(なお、小さなねじを回すためのマイナスドライバーは、紫色のものがKITに同梱されている。無い場合は精密ドライバーが必要になる)。図11は、ブレッドボードとの接続例だ。

図11 Proto Bitsモジュールとブレッドボードの接続例
ジャンパーピンの役割

 Proto Bitsモジュールの中央にある3つのジャンパーピンは、bitSnapとターミナルブロックの接続を切り替えるために使用する。

 ジャンパーピンが刺さっている(=ジャンパーをショートしている)状態では、左右のbitSnapと上下のターミナルブロックが十字に接続されている(図12)。そのため、左のbitSnapのシグナルピンに入ってきた情報は、上下のターミナルブロックと、右のbitSnapに分配して伝わることになる。

図12 ジャンパーピンを刺したときの電気的接続

 3つのジャンパーピンを全て抜いた場合は、入力側の左bitSnapからは下ターミナルブロックのみに接続し、上ターミナルブロックからは出力側の右bitSnapのみに接続される(図13。なお、ジャンパーピンを指で抜くのは難しいので精密ピンセットがあると便利だ)。

図13 ジャンパーピンを抜いたときの電気的接続

 ジャンパーピンを抜いておいて、下ターミナルブロックからNetduinoの入力に接続し、Netduinoからの出力を上ターミナルブロックに接続するのが、littleBitsとNetduinoの基本的な接続方法だ。ブレッドボードを使用して、下ターミナルブロックの5VとGNDから、ブレッドボードのプラス電源ラインGNDラインを経由して、上ターミナルブロックの5VとGNDに接続するようにしてもよいだろう。

デジタル入出力とlittleBits

 Button Bitsモジュールの入力をNetduinoのデジタル入力に、Netduinoのデジタル出力をDC Motor Bitsモジュールへ接続してみる。

Proto Bitsモジュールを2つ使った回路例

 入力側BitsモジュールにつないだProto Bitsモジュールからの出力をブレッドボード経由でデジタル13番ピンに入力し、デジタル12番ピンからの出力を出力側BitsモジュールにつないだProto Bitsモジュールに入力する。

 電源についても、ブレッドボードの電源ラインを使ってNetduino自体にも給電する。このように接続すると、NetduinoへUSB経由で給電が不要になる。

 この回路は図14のような形になる(図15は実写真)。

図14 Proto Bitsモジュールを2つ使った配線例

この図には示されていないが、左上のPower Bitsモジュールには、KITに付属の電池を接続する必要がある。また、同モジュールの下にある電源スイッチを右にずらしてONにする必要がある(ONの状態では赤いLEDが点灯する)。

 このとき、注意点が2つある

 (1)プログラム転送のためにUSBを接続するときは、Netduinoの5Vピンの接続は抜いておくこと。抜いておかないと電源が2つ存在してしまうことになる。
 (2)ノイズ対策として、ブレッドボードの電源ラインGNDラインには、パスコンとして0.1μFのコンデンサー(図14の青い部品)を入れること。

図15 Proto Bitsモジュールを2つ使った接続例

デジタル入出力用ソースコード

 プロジェクトの作成方法は、これまでと同様なので割愛する(第3回などを参考にされたい。本稿の例では、プロジェクト名はVB.NET用は「LittleBitsDigitalVB」、C#用は「LittleBitsDigitalCS」とした)。もし、Visual Studio 2015をお使いの場合は番外コラム01も参照にしてほしい。

 今回のサンプルコードは、デジタル13番ピン(Pins.GPIO_PIN_D13)でボタンからのON/OFFを入力し、デジタル12番ピン(Pins.GPIO_PIN_D12)にその結果を出力する。また、同時にオンボードLEDPins.ONBOARD_LED)にも同じ値を出力してLEDをON/OFFする。

Visual Basic
Imports Microsoft.SPOT.Hardware
Imports SecretLabs.NETMF.Hardware.Netduino
 Module Module1

  Sub Main()
    Dim led = New OutputPort(Pins.ONBOARD_LED, False)
    Dim button = New InputPort(Pins.GPIO_PIN_D13, False, Port.ResistorMode.Disabled)
    Dim motor = New OutputPort(Pins.GPIO_PIN_D12, False)
    Dim isButtonOn = False

    Do While (True)
      isButtonOn = button.Read()
      led.Write(isButtonOn)
      motor.Write(isButtonOn)
      Thread.Sleep(1000)
    Loop
  End Sub

End Module
C#
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using System.Threading;

namespace LittleBitsDigitalCS
{
  public class Program
  {
    public static void Main()
    {
      var led = new OutputPort(Pins.ONBOARD_LED, false);
      var button = new InputPort(Pins.GPIO_PIN_D13, false, Port.ResistorMode.Disabled);
      var motor = new OutputPort(Pins.GPIO_PIN_D12, false);
      var isButtonOn = false;
      
      while(true)
      {
        isButtonOn = button.Read();
        led.Write(isButtonOn);
        motor.Write(isButtonOn);
        Thread.Sleep(1000);
      }
    }
  }
}
リスト1 デジタル入出力用コード(上:Module.vb、下:Program.cs)より抜粋

Proto Bitsモジュールを2つ使った実行例

 Netduinoの5Vピンの接続を外してからUSBケーブルをNetduinoに接続し、Visual Studioで実行すれば、プログラムが転送されてButton Bitsモジュールの操作によってDCモーターBitsモジュールが動く。これだけだと単独動作感が少ないので、USBケーブルを外してから5Vピンとブレッドボードの電源ラインを接続すれば、PCとは独立してNetduinoが動作している感じが一気に増加する。

【動画】littleBitsとNetduino連携(デジタルIO編) Proto Bitsモジュール x 2

Proto Bitsモジュールのジャンパーピンを活用する

Proto Bitsモジュールを1つ使った回路例

 Proto Bitsモジュールは、(3つのうち)真ん中のジャンパーピンを外すと上下の接続が切り離される。つまり1つのProto Bitsモジュールで入力側と出力側を兼ねることができる。そこで、真ん中のジャンパーピンをはずして先ほどのデジタル入出力例をProto Bitsモジュール1つで組み立てると次のようになる(本稿の以降のサンプルでは、真ん中のジャンパーピンを外した状態で使っているので、間違えないように注意してほしい)。

図16 Proto Bitsモジュールを1つ使った配線例

Proto Bitsモジュールは、(3つのうち)真ん中のジャンパーピンを外しておく必要がある。

 この場合も、プログラム転送のためにUSBを接続するときは、Netduinoの5Vピンの接続は抜いておくという注意点を忘れないでほしい。なお、プログラム内容は先ほどと同じものになるので、上記のプログラムを動かせる状態であれば、再転送する必要はない。

図17 Proto Bitsモジュールを1つ使った接続例

Proto Bitsモジュールを1つ使った実行例

 見た目では、Button Bitsモジュールからの信号をDCモーターBitsモジュールとNetduinoに並行して分配しているように見えるが、実際はNetduinoを経由しているので、DCモーターBitsモジュールへの出力はNetduino側のアプリによっていろいろとアレンジ可能だ。

【動画】littleBitsとNetduino連携(デジタルIO編) Proto Bitsモジュール x 1

アナログ入力とlittleBits

 光センサーBitsモジュールの入力をNetduinoのアナログ入力につなぎ、そこで取得した値をI2C接続したLCDに表示してみる。LCD接続の詳細については、第5回を参考にされたい。

アナログ入力を使った回路例

 Proto Bitsモジュールの真ん中のシグナルには光センサーBitsモジュールで計測した明るさが0~5Vの間で出力されてくる。Netduinoのアナログ入力は5Vトレラントなのでそのままの電圧で入力できる。

図18 アナログ入力を使った配線例

 なお、このサンプルでもNetduinoへの給電はlittleBitsから行っているので、プログラム転送のためにUSBを接続するときはNetduinoの5Vピンの接続は抜いておくという注意点を忘れないでほしい。

図19 アナログ入力を使った接続例

上側に外れている黄色いジャンパーワイヤーは使っていないので注意してほしい。

アナログ入力用ソースコード

 プロジェクトの作成方法は、これまでと同様なので割愛する(第3回などを参考にされたい。本稿の例では、プロジェクト名はVB.NET用は「LittleBitsAnalogVB」、C#用は「LittleBitsAnalogCS」とした)。もし、Visual Studio 2015をお使いの場合は番外コラム01も参照にしてほしい。

 今回のサンプルコードは、アナログ0番ピン(Pins.GPIO_PIN_A0)にシグナル値を入力している。入力した値はLCDに表示される。

Visual Basic
Imports System.Threading
Imports Microsoft.SPOT
Imports SecretLabs.NETMF.Hardware.Netduino

Public Module Module1

  Sub Main()

    Dim sensor = New SecretLabs.NETMF.Hardware.AnalogInput(Pins.GPIO_PIN_A0)

    Using lcd = New AQM0802Lib()
      lcd.Init()
    End Using
    Do While (True)
      Dim value = sensor.Read()       アナログ値の取得
      Using lcd = New AQM0802Lib()
        lcd.ClearDisplay()
        lcd.WriteMessage(value.ToString())
      End Using
      Thread.Sleep(1000)
    Loop
  End Sub

End Module
C#
using SecretLabs.NETMF.Hardware.Netduino;
using System.Threading;

namespace LittleBitsAnalogCS
{
  public class Program
  {
    public static void Main()
    {
      var sensor = new SecretLabs.NETMF.Hardware.AnalogInput(Pins.GPIO_PIN_A0);

      using (AQM0802Lib lcd = new AQM0802Lib())
      {
        lcd.Init();
      }
      while (true)
      {
        var value = sensor.Read();     // アナログ値の取得
        using (AQM0802Lib lcd = new AQM0802Lib())
        {
          lcd.ClearDisplay();
          lcd.WriteMessage(value.ToString());
        }
        Thread.Sleep(1000);
      }
    }
  }
}
リスト1 アナログ入力用コード(上:Module.vb、下:Program.cs)より抜粋

アナログ入力の実行例

 実際に動作させて、光センサーBitsモジュールのセンサーを押さえつけるような形で光を遮断すると数値は0となる。また指をかざす度合いによってリニアに値が変化する。

【動画】littleBits光センサー入力値測定

PWM出力とlittleBits

 NetduinoのPWM出力で光センサーBitsモジュールの制御してみる。PWM(Pulse Width Modulation)は一定周期で出力電圧をON(3.3V)とOFF(0V)の間で切り替えて、疑似的に3.3V~0Vの間の電圧を作り上げている。例えば、ONが10msでOFFが10msの20ms周期でパルスを制御した場合、1.65Vの電圧を疑似的に作り上げるという感じだ。

PWM出力を使った回路例

 Proto Bitsモジュールの真ん中のシグナルの0~5Vに入力すると、それが出力側Bitsモジュールの駆動に使われる。残念ながら、Netduinoからの出力は最大でも3.3Vなので最大電圧の5Vを供給することはできないが、それでも主力側Bitsモジュールの動作を変えるには十分な電圧変化を行える。

図20 PWM出力を使った配線例

Proto Bitsモジュールは、(3つのうち)真ん中のジャンパーピンを外しておく必要がある。

 なお、このサンプルでもNetduinoへの給電はlittleBitsから行っているので、プログラム転送のためにUSBを接続するときは、Netduinoの5Vピンの接続は抜いておくという注意点を忘れないでほしい。

図21 PWM出力を使った接続例

下側に外れている黄色いジャンパーワイヤーは使っていないので注意してほしい。

PWM出力用ソースコード

 プロジェクトの作成方法は、これまでと同様なので割愛する(第3回などを参考にされたい。本稿の例では、プロジェクト名はVB.NET用は「LittleBitsPulseVB」、C#用は「LittleBitsPulseCS」とした)。もし、Visual Studio 2015をお使いの場合は番外コラム01も参照にしてほしい。

 今回のサンプルコードは、PWMとして20000ナノ秒=20ミリ秒周期の中でONとOFFの比率を変化させたものを、デジタル9番ピン(Pins.GPIO_PIN_D9)に出力している。ONにしている秒数についてはLCDにも表示している。

Visual Basic
Imports System.Threading
Imports SecretLabs.NETMF.Hardware
Imports SecretLabs.NETMF.Hardware.Netduino

Public Module Module1

  Sub Main()
    Dim power = New PWM(Pins.GPIO_PIN_D9)

    Using lcd = New AQM0802Lib()
      lcd.Init()
    End Using
    Do While (True)
      For value As UInteger = 0 To 20000 Step 4000
        power.SetPulse(20000, value)
        Using lcd = New AQM0802Lib()
          lcd.ClearDisplay()
          lcd.WriteMessage(value.ToString())
        End Using
        Thread.Sleep(1000)
      Next
    Loop
  End Sub

End Module
C#
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using System.Threading;

namespace LittleBitsPulseCS
{
  public class Program
  {
    public static void Main()
    {
      var power = new PWM(Pins.GPIO_PIN_D9);

      using (AQM0802Lib lcd = new AQM0802Lib())
      {
        lcd.Init();
      }
      while (true)
      {
        for (uint value = 0; value <= 20000; value += 4000)
        {
          power.SetPulse(20000, value);
          using (AQM0802Lib lcd = new AQM0802Lib())
          {
            lcd.ClearDisplay();
            lcd.WriteMessage(value.ToString());
          }
          Thread.Sleep(1000);
        }
      }
    }
  }
}
リスト1 PWM出力コード(上:Module.vb、下:Program.cs)より抜粋

PWM出力の実行例

 実際に動作させて、LCDへの表示が040008000120001600020000と変化し、再び0に戻る。その数値に合わせて、発行ダイオードBitsモジュールの光量も変化する。

【動画】littleBits光センサー入力値測定

まとめ

 今回はlittleBitsとNetduinoをつなぐ基本を紹介した。Proto Bitsモジュールの特性さえ理解すれば非常に簡単だったのではないだろうか。サンプルで組み合わせたように、前回紹介したBluetooth接続なども組み合わせるとlittleBitsだけでは実現できないようなものも仕立て上げられる。littleBitsにもArduino BitsモジュールやCloud Bitsモジュールがあるが、Netduinoでさらに自由度を手に入れてみると面白味が増すと思う。

 次回はSONYのスマートDIYキットMESHとNetduinoを組み合わせておしゃれなMESHタグの中にNetduinoを組み込んでしまおうと思う。どうやるのかといえば、MESHにはGPIOタグがあるのでこれを活用する。

※以下では、本稿の前後を合わせて5回分(第11回~第15回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

.NET対応組み込みデバイス「Netduino」入門(12)
11. NetduinoでDCモーターをコントロールしよう

ミニ四駆やプラレールに使われるなど、電池やバッテリーを動力源にできる「DCモーター」を、Netduinoから制御する方法を解説する。

.NET対応組み込みデバイス「Netduino」入門(12)
12. Bluetoothで遠隔操作しよう

BluetoothでPCと連携し、電源もバッテリー給電とすることで、移動体などへの搭載も可能なコードレス仕様のDCモーター制御を実現してみよう。

.NET対応組み込みデバイス「Netduino」入門(12)
13. 【現在、表示中】≫ littleBitsではんだ付けなしの電子工作を実現

磁石で電子回路をつないで電子工作が行えるlittleBits。Netduinoと組み合わせると、どのような電子工作が実現できるのか? その可能性を探る。

.NET対応組み込みデバイス「Netduino」入門(12)
14. MESHとNetduinoでiOSデバイスとの連携を実現

SONYのスマートDIYキット「MESH」とは? さまざまな連携が実現可能なMESHを使って、NetduinoとiPadを連携をさせてみよう。

.NET対応組み込みデバイス「Netduino」入門(12)
15. Netduinoでロボットコントロール(前編) ― PLEN.Dを直接動かす

組み立て式のロボット「PLEN.D」に使われているサーボモーターを、NetduinoのPWM出力で制御してみよう。

サイトからのお知らせ

Twitterでつぶやこう!