.NET対応組み込みデバイス「Netduino」入門(12)
littleBitsではんだ付けなしの電子工作を実現
磁石で電子回路をつないで電子工作が行えるlittleBits。Netduinoと組み合わせると、どのような電子工作が実現できるのか? その可能性を探る。
今回は、磁石で電子回路をつないで電子工作が行える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)。
Bitsモジュール同士は、GND
ピン、シグナル
ピン、5V
ピンにより電気的に接続される。色分けされた接続部分はbitSnapと呼ばれており、オスとメスがあってGNDと5Vが逆にならないように磁石の極性をうまく利用して必ず一致する形でしかはまらないようになっている(図2)。
入力用Bitsモジュールでの操作はシグナル
ピンに変化を与える。例えば、ボタンモジュールを接続するとシグナル
ピンの電圧は0Vとなり、ボタンを押すと5Vとなる(図3)。出力用Bitsモジュールはシグナル
ピンの電圧を使って表示を行う。
なぜ5V
ピンが必要かといえば、Bitsモジュールの中にはIC(集積回路)が載ったものもあり、そのICの駆動用に、操作により電圧が変化しない5V
ピンが必要なのだ。
基本となるBitsモジュールについて
littleBitsのBitsモジュールは単品でも入手ができるが、使い勝手のいいモジュールを組み合わせた各種KITもある。
Bitsモジュール | BASE KIT | PREMIUM KIT | DELUXE KIT | SYNTH KIT | SPACE 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]シンセスピーカー | ○ | ○ |
※表中の「x2」は2個あることを意味する。
今回は、この中からBASE KITに含まれているBitsモジュールを使ってサンプルを作成する。その際に使用する各Bitsモジュールの内容を紹介しておこう。
[p1]Power Bitsモジュール
まずは必須ともいえるBitsモジュールが、全てのKITに含まれている識別コードp1のPower Bitsモジュールだ(図4)。このBitsモジュールは、入力側bitSnapの代わりにACアダプター用のプラグを持ち、9~12Vの入力電圧に対して、出力側のシグナル
ピンと5V
ピンに5Vを供給する。なお、9V電池の消費は比較的早く、モーターやスピーカーを出力側についないでいると3時間程度で消費してしまうこともある。
[p3]USBパワー
各種KITには含まれていないがぜひ押さえておきたいBitsモジュールが識別コードp3のUSB Power Bitsモジュールだ(図5)。このBitsモジュールには、入力側bitSnapの代わりにUSB端子が付いている。USBでPCと接続することで、5V 500mAの出力が可能になる。さらに、AC電源アダプターに接続すれば、そこからの供給により5V 1Aの出力が可能になる。大容量電流が必要なBitsモジュールを接続する場合だけではなく、9V電池が不要になるため、ランニングコストが大幅に軽減できる。
[i3]ボタン
Netduinoのデジタル入力と接続するのは、識別コードi3のButton Bitsモジュールだ(図6)。これは、押したときにだけシグナル
ピンがON=5Vになり、押していないときは常にシグナル
ピンがOFF=0Vになるプッシュ・スイッチだ。このように、押している間だけONになる動作をモーメンタリと呼ぶ。
[i13]光センサー
Netduinoのアナログ入力と接続するのは、識別コードi13のLight Sensor Bits モジュールだ(図7)。これは、周囲の明るさに応じてシグナル
ピンの出力を0~5Vで変化させるモジュールだ。
[o5]DCモーター
Netduinoのデジタル出力で制御するのは、識別コードo5のDC Motor Bitsモジュールだ。
[o14]発光ダイオード
NetduinoのPWM出力で制御するのは、識別コードo14のBright LED Bitsモジュールだ。
Netduinoとの接続について
[w9]Proto
Bitsモジュールの端子であるbitSnapとNetduinoのピンを接続するために使用するのが、識別コードw9のProto Bitsモジュールだ。
Proto Bitsモジュールは、2つのbitSnapに加えて、上下にターミナルブロックを配置している。このターミナルブロックにジャンパー線をねじ留めすれば、ジャンパー線のもう一方をNetduinoやブレッドボードと接続できるようになる(※なお、小さなねじを回すためのマイナスドライバーは、紫色のものがKITに同梱されている。無い場合は精密ドライバーが必要になる)。図11は、ブレッドボードとの接続例だ。
ジャンパーピンの役割
Proto Bitsモジュールの中央にある3つのジャンパーピンは、bitSnapとターミナルブロックの接続を切り替えるために使用する。
ジャンパーピンが刺さっている(=ジャンパーをショートしている)状態では、左右のbitSnapと上下のターミナルブロックが十字に接続されている(図12)。そのため、左のbitSnapのシグナル
ピンに入ってきた情報は、上下のターミナルブロックと、右のbitSnapに分配して伝わることになる。
3つのジャンパーピンを全て抜いた場合は、入力側の左bitSnapからは下ターミナルブロックのみに接続し、上ターミナルブロックからは出力側の右bitSnapのみに接続される(図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は実写真)。
※この図には示されていないが、左上のPower Bitsモジュールには、KITに付属の電池を接続する必要がある。また、同モジュールの下にある電源スイッチを右にずらしてONにする必要がある(ONの状態では赤いLEDが点灯する)。
このとき、注意点が2つある
(1)プログラム転送のためにUSBを接続するときは、Netduinoの5V
ピンの接続は抜いておくこと。抜いておかないと電源が2つ存在してしまうことになる。
(2)ノイズ対策として、ブレッドボードの電源ライン
とGNDライン
には、パスコンとして0.1μFのコンデンサー(図14の青い部品)を入れること。
デジタル入出力用ソースコード
プロジェクトの作成方法は、これまでと同様なので割愛する(第3回などを参考にされたい。本稿の例では、プロジェクト名はVB.NET用は「LittleBitsDigitalVB」、C#用は「LittleBitsDigitalCS」とした)。もし、Visual Studio 2015をお使いの場合は番外コラム01も参照にしてほしい。
今回のサンプルコードは、デジタル13番
ピン(Pins.GPIO_PIN_D13
)でボタンからのON/OFFを入力し、デジタル12番
ピン(Pins.GPIO_PIN_D12
)にその結果を出力する。また、同時にオンボードLED
(Pins.ONBOARD_LED
)にも同じ値を出力してLEDをON/OFFする。
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
|
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);
}
}
}
}
|
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つで組み立てると次のようになる(※本稿の以降のサンプルでは、真ん中のジャンパーピンを外した状態で使っているので、間違えないように注意してほしい)。
この場合も、プログラム転送のためにUSBを接続するときは、Netduinoの5V
ピンの接続は抜いておくという注意点を忘れないでほしい。なお、プログラム内容は先ほどと同じものになるので、上記のプログラムを動かせる状態であれば、再転送する必要はない。
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トレラントなのでそのままの電圧で入力できる。
なお、このサンプルでもNetduinoへの給電はlittleBitsから行っているので、プログラム転送のためにUSBを接続するときはNetduinoの5V
ピンの接続は抜いておくという注意点を忘れないでほしい。
アナログ入力用ソースコード
プロジェクトの作成方法は、これまでと同様なので割愛する(第3回などを参考にされたい。本稿の例では、プロジェクト名はVB.NET用は「LittleBitsAnalogVB」、C#用は「LittleBitsAnalogCS」とした)。もし、Visual Studio 2015をお使いの場合は番外コラム01も参照にしてほしい。
今回のサンプルコードは、アナログ0番
ピン(Pins.GPIO_PIN_A0
)にシグナル値を入力している。入力した値はLCDに表示される。
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
|
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);
}
}
}
}
|
アナログ入力の実行例
実際に動作させて、光センサー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モジュールの動作を変えるには十分な電圧変化を行える。
なお、このサンプルでもNetduinoへの給電はlittleBitsから行っているので、プログラム転送のためにUSBを接続するときは、Netduinoの5V
ピンの接続は抜いておくという注意点を忘れないでほしい。
PWM出力用ソースコード
プロジェクトの作成方法は、これまでと同様なので割愛する(第3回などを参考にされたい。本稿の例では、プロジェクト名はVB.NET用は「LittleBitsPulseVB」、C#用は「LittleBitsPulseCS」とした)。もし、Visual Studio 2015をお使いの場合は番外コラム01も参照にしてほしい。
今回のサンプルコードは、PWMとして20000ナノ秒=20ミリ秒周期の中でONとOFFの比率を変化させたものを、デジタル9番
ピン(Pins.GPIO_PIN_D9
)に出力している。ONにしている秒数についてはLCDにも表示している。
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
|
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);
}
}
}
}
}
|
PWM出力の実行例
実際に動作させて、LCDへの表示が0、4000、8000、12000、16000、20000と変化し、再び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]を参照してください。
13. 【現在、表示中】≫ littleBitsではんだ付けなしの電子工作を実現
磁石で電子回路をつないで電子工作が行えるlittleBits。Netduinoと組み合わせると、どのような電子工作が実現できるのか? その可能性を探る。
14. MESHとNetduinoでiOSデバイスとの連携を実現
SONYのスマートDIYキット「MESH」とは? さまざまな連携が実現可能なMESHを使って、NetduinoとiPadを連携をさせてみよう。
15. Netduinoでロボットコントロール(前編) ― PLEN.Dを直接動かす
組み立て式のロボット「PLEN.D」に使われているサーボモーターを、NetduinoのPWM出力で制御してみよう。