Kubernetes に翻弄され、機械学習に難しさを覚え、Go でSCPってなんやねんとなっている今日このごろです。
そんな中、今日は LittleBits と Arduino を使って、ランダムに1つの数字を抽選する機能を作ってみました。
そもそも LittleBits ってなに?
Arduino は知ってても、LittleBits は知らない人も多いかもしれないですね。
LittleBits は電子回路をはんだ付けや複雑な配線を行わずに磁石でくっつけるだけで行えるという教育・学習用のキットになります。詳しいことはリンク先などを見てもらえればと思います。
LED や モータ、スイッチやライトセンサーなどが Bit と呼ばれる単位で提供されており、それらを磁石で接続するだけで電子回路として機能させることができます。組み合わせても動くことがある程度保証されており、またアイディアをすぐに試すことができて簡単に試行錯誤できる点が電子回路初心者でも入門しやすいかと思います。ただただ教育用というだけではなく、複雑なものもアイディアと工夫次第で達成できるのも魅力的だと思います。
欠点としては複雑なことを達成したりするには少々値段としては高いかもしれません。本格的に電子回路を組んでいきたい場合には、LittleBits から離れて実際に電子回路部品などを購入してやっていくということを考えたほうが良さそうです。
学習という点では色々と学べることもあるので、接続の失敗などが起きないこういったものから挑戦できるのはよいですね。
LittleBits + Arduino
LittleBits の Bit には Arduino Bit と言うものがあり、Arduino を利用することができます。
Arduino は Sketch と呼ばれるC言語風の言語を使って制御可能な基盤で、ハードウェア設計が公開されているオープンソースハードウェアです。
これにより、LittleBits でプログラムによる制御や簡単なPC操作も可能になります。
抽選機能を作ってみる
では、実際に数字をランダムに抽選する機能を作ってみます。
まずは Bit の配置です。
上部のボタンは抽選の開始とリセットになります。中央のディマーは抽選時の最大値を設定するためのものです。
それでは早速ですが実際のプログラムを示します。
もうちょっと綺麗にかけそうかなとは思いつつも、これでもキチンと動いてくれます。
LittleBits + Arduino で数値をランダム抽選してみた
Bit の数自体が少なくてもこういった機能を作り込めるのはプログラムで制御できるからこそですね。Arduinoでは setup()
関数で初期化等を行い、 loop()
でループ処理を書きます。C言語で言えば以下のような感じになっているイメージでしょうか。
int main() { setup(); while(1) { loop(); } }
上記のことを知っていれば、プログラムを書いたことがある人なら、あとは Arduino のライブラリを見ながらで十分書けるかと思います。
さて、LittleBits で Arduino を使う際の気をつける点としては、アナログのインプット、アウトプットへの数値でしょうか。
コード上のコメントにある①や②の部分を見てもらえればわかるかと思います。アナログ入力では、Bit から [0, 1023] の範囲で入力があります。一方でアウトプットとして Bit に流す場合、[0, 255] の範囲で最小、最大値が扱われ、超えた場合は 256 からまた 0 になります。そこで map()
関数を利用して、調整を行っています。
また③の部分では未接続のピンを利用して、乱数のシード値を未接続ピンの入力から得ています。
まとめ
LittleBits 自体非常に面白いのですが Arduino を利用することで更に複雑なこともできるようになるため、より一層アイディアを膨らませて作り上げていくことができるかと思います。
なかなかPC上のプログラムのようにうまくいかないことも多々ありますが、これからも色々と試していってみようと思います。