ArduinoでLチカしたその後に【後編】長文注意
さて、前回の続き。
ArduinoでLチカしたあとに、なかなか次の一歩が踏み出せなかった経験から、同じような状況の人に一歩を踏み出すための情報をまとめている。
作ったものが目で見ても楽しい方が自分のやる気にもなるし、他の人にもわかってもらいやすいことから、出来る限り見てわかるものを多めに。
前回は基本的なパーツが多かったけれど、今回は少し難度を上げ、その分一気に色々な応用がしやすいものに踏み込んでみよう。
アナログセンサーを使う
センサーの結果が、電圧や電流、抵抗値の変化となるタイプのセンサー。Arduinoのアナログ入力を使い、analogRead()でデータを取得する。
結果は、0〜1023の値で返ってくる。
光センサー(CdSセル)
光の強さによって抵抗値の変化するセンサー。
CDSセル 5mmタイプ: パーツ一般 秋月電子通商 電子部品 ネット通販
安くて簡単に使えるので、アナログ入力の実験をするのに最適だ。また「暗くなったら光る」というのは例えば液晶のバックライトなどでも応用が効くので、一度は試しておきたい。
第5回 光センサーでArduinoへの入力を試してみる! | Device Plus - デバプラ
ここなどを参考に試せると思うが、この回路でもプルアップ抵抗が必要になるということには注意。
また、実際の値がどのようになっているかは、前回やったシリアル接続で、ArduinoとPCをつないで数値を見てみるといい。
例えば、フランスのArduino互換ポータブルゲーム機であるGamebuinoは、画面の横にCdSセルが設置され、画面のバックライトの明るさをコントロールしている。
Gamebuino | An arduino game console
3軸加速度センサー
スマホなどにも搭載されている、向きや動きを検知するためのセンサー。X軸、Y軸、Z軸の3つのセンサーをもつことで、立体的な動きを検出することができる。Wiiのコントローラなどもに3軸加速度センサーは入っている。
3軸加速度センサモジュール KXR94−2050: 半導体 秋月電子通商 電子部品 ネット通販
CdSセルとは違い、DIPにまとめられたセンサーとなる。適切にVCCやGNDをつなげば、3つのピンからX軸、Y軸、Z軸の値が出力されるシンプルな作りだ。
arduino使い方:加速度センサ(KXM52)で傾斜角度を測定
色々な向きにしてみたり、動かしたりして数値を見てみるといい。数値の変化の組み合わせから、「どんな動きをしているのか」がわかれば、モーションセンサーを作ることができる。
加速度センサーで面白いのは、手で持って振るPOV。
POV複数のLEDを動かすことでLEDの光の残像で文字や図形が浮かび上がって見えるというもの。
こんなの。
加速度センサーを使えば、手で持って振るタイプのPOVを作ることができる。
「ワクワクワークショップ~五徳バー LED シールドを作って Arduino でお得に遊ぼう!」@はんだづけカフェに行ってきました | せかいらぼ
こんなのなんだけどな。ネットで見てもいい例が見つけられない。
書いてて思い出したんだけど、このワークショップに参加して「Arduinoって面白いじゃん!」って思ったんだった。このワークショップがきっかけだったかもしれない。この五徳バーLEDシールドは、入出力一式持ってるから面白いな。
距離センサー
センサーの目前にある障害物との距離が測定できるセンサー。
シャープ測距モジュール GP2Y0A21YK: センサ一般 秋月電子通商 電子部品 ネット通販
超音波距離センサー HC−SR04: センサ一般 秋月電子通商 電子部品 ネット通販
意外と使うのにクセがあったりするので、色々とネットで調べながら使うといい。
初心者だけど、一歩ずつ Arduino 超小型マイコン電子工作: シャープの測距モジュールを使った実験(1)
PIC AVR 工作室別館 ”arduinoの館 - 接続くん 赤外線測距モジュール”
詳細な距離を測定する、というよりも、範囲内に障害物がないのかを調べる、程度の利用がいいと思う。
僕が以前作ってみたのはこんなの。
帽子につけて、目の前に障害物が迫った際にアラートを出す装置。歩きスマホ危ないよね、ってことで。この時使ったのは、Arduino Pro互換のDaVinci 32u。
https://strawberry-linux.com/catalog/items?code=25005
デジタルセンサーを使う
同じ機能でも、デジタルでデータを返すセンサーもある。ここではI2C(アイスクエアドシー)という方式でシリアル通信するセンサーを使う。I2Cの機器は増えてきているし、他のマイコンなどでもよく使うので慣れとくとよいと思う。
Arduinoは5V、他のマイコンは3.3Vが多くなってきてるので、センサー機器が5Vでも使えるかは事前によく調べて。
I2C気圧センサ
i2Cで気圧のデータを扱えるセンサー
MPL115A2使用大気圧センサーモジュールキット(I2C) Ver2: センサ一般 秋月電子通商 電子部品 ネット通販
利用方法はこんな感じ。
arduino使い方:気圧センサMPL115A2(I2C)と接続する
気圧がわかれば、天気の動向もわかるようになるし、高度の計算にも利用できる。台風などの時にデータを取ってみると、台風の接近にともなって気圧が急激に変化するのもわかるだろう。
I2Cのセンサーはとても増えてきている。アナログセンサーのところに書いたような3軸加速度計などもある。I2Cの接続のいいところは、電源とGNDを除けば2線のバスだけで機器をいくらでも追加できることだろう(もちろん限界はある)。センサー1つにつき1ピン消費するのに比べて使い勝手がいいとも言える。また、次に紹介する表示器もI2Cで同じように接続でき、大変便利だ。
液晶表示器(LCD)を使う1
I2Cは情報の読み取りだけでなく、情報を送るのにも使える。その一つがキャラクター表示のLCD。キャラクターというのは「文字」のこと。画像を表示したりするのではなく、文字を表示する用のLCDは、I2Cでコントロールできるものが多い。
これがあれば、単体である程度のデータ表示できるようになるので楽しい。
例えば、この商品などは、とても小さいので色々な機材に組み込みやすいだろう。
I2C接続小型LCDモジュールピッチ変換キット: 組み立てキット 秋月電子通商 電子部品 ネット通販
使い方などはこのあたりで。
先人がライブラリを作り公開してくれていますので、それをありがたく使わせていただきましょう。
http://n.mtng.org/ele/arduino/i2c.html
前出のCAmiDionもこの液晶を使っている。結構小さくて安いので、使い勝手がいい。1つ2つもっておいても損はない。
また、トラ技2014年2月号に付属するボードを用いたこのI2Cテストキットは、I2Cのセンサーなどもあるので、I2Cを試してみるのにはとてもいいのではないかと思う。
I2C学習基板組立部品セット MPK-TG1-CP マルツエレック製|マルツオンライン
雑誌のバックナンバー購入も忘れないように。
液晶表示器(LCD)を使う2
グラフィック表示するなら、グラフィック液晶を用いる。液晶だけでなくOLED(有機EL)なども比較的安価に利用できる。モノクロ、カラー、また色々なサイズやピクセル数のものがある。
SPIはSerial Peripheral Interfaceの略で、I2Cと同じくシリアル通信ではあるのだが、電源とGND以外の制御信号に4線使うのが特徴。I2Cと比較すると通信速度が速いので、より多くのデータを扱うグラフィック液晶ではI2CではなくSPIを使うものが多い。とは言え、シリアル通信なので、本当に速度が必要な表示などはパラレル通信を用いたりするが、制御や回路がシンプルに出来るSPIを用いた液晶を使ってみる。
モノクロで超小型のグラフィック液晶
超小型グラフィックLCDピッチ変換キット: ディスプレイ関連 秋月電子通商 電子部品 ネット通販
タッチパネルもついたカラー液晶
2.8インチTFTタッチシールド for Arduino V2: マイコン関連 秋月電子通商 電子部品 ネット通販
モノクロの超小型グラフィック液晶は、キャラクタ液晶と同じくらいの小さな液晶で、これまた色々な応用ができそう。使い方はこんな感じ。
SPIグラフィック液晶AQM1248A - densikit.com and the arduino variants
この記事に出てくるu8glibは、色々なグラフィック液晶の制御でよく使われるので、一度触っておくと良いと思う。
また、上記のカラー液晶の商品を作っているAdafruitは色々おもしろい商品が多い。また同じくAdafruit-GFX-Libraryは、グラフィック液晶の制御ではお世話になるとこも多いかもしれない。これも機会があれば触れておきたい。
ArduinoではなくGR-KURUMIを用いた作例だが、今こんな感じでポータブルなゲーム開発環境のプロトタイプを作っている。この液晶もSPI制御のグラフィック液晶だ。
グラフィック液晶が使えるようになると、グラフを表示したり、アイコン的なものを表示したり、よりわかりやすい表示が可能となり、また一気に楽しさが増えるけど、その分利用するメモリが多く必要になったりするので、利用できるメモリがかなり少なめなArduinoのような環境だと、プログラム上の工夫を色々と凝らす必要が出てくる。
先ほど紹介したようなライブラリがどのようなプログラムになっているのかを見てみるのも初心者を抜けだした後は面白いだろう。
たくさんのボタンを使う
前回書いたとおり、ボタンの読み取りの基本は、ボタンとつながったピンの情報の読みとりで行う。ということは、ボタン一つにピン一つ消費してしまうので、たくさんのボタンを使いたいときはピンが足りなくなってしまう。
例えばこのCAmiDionは48個ものボタンを載せているが、48個もピンはない。大量のボタンを少ないピンで扱う場合はマトリクスを組む。前回はLEDマトリクスを使ったが、まさにその逆の手法を用いることになる。
原理は以下のサイトで。
マトリクスなら、48個のボタンも、6x8の組み合わせで作れるので、利用するピン数は6+8の14ピンで済む。
まるでパズルのように回線を組み上げるのでとても面白い。ダイオードを用いるので、ダイオードの働きを知るのにもいい。
汎用小信号高速スイッチング・ダイオード 1N4148 100V200mA(50本入): 半導体 秋月電子通商 電子部品 ネット通販
ちょっとインターフェイスを作り始めると、そこそこの数のボタンが必要になったりするので、この方法は覚えておきたい。
Bluetoothで通信してみる
せっかくなので、無線での通信も試してみたい。色々な通信の仕方があると思うけど、ここではRunningElectronicsのSBDBT5Vを用いたBTによるシリアル通信をしてみたい。
PIC24FJ64GB004 5V入出力対応マイコン基板 SBDBT5V - ランニングエレクトロニクス
この商品にBluetoothのUSBドングルを挿せば、Bluetoothを簡単に利用できるようになる。
このページにいくつかのファームウェアが公開されているが、出荷時に書き込まれているSPPサーバーファームウェアを利用する。SPPとは、BluetoothのSerial Port Profileのこと。このファームウェアを使うと、ピンからのシリアル通信をBluetoothのシリアル通信に変換してくれる。
Windowsでの例
Arduinoで遊ぶ(12)-Bluetooth - のんびり電子工作
Macでの例
Arduino+BluetoothとMacとで通信してみた - Dazing days
これを用いることで、PCと離れたところにArduinoを設置していても、PCでデータを受け取ることができるし、PCからArduinoに指示を送ることもできる。
作りたいものをつくろう
このくらいまでやると、あとは組み合わせで色んなことができるようになってる。
センサー機器や、表示器など、新しいものを見かけるとそれを使ってこんな事できるな、とか考えられるようになる。
一方でArduinoでは扱いにくい問題にも遭遇してくる。3.3Vの機器を使いたくなったり、プログラムサイズが収まらなくなったり、ピンの数が足りなくなったり。
3.3Vで動くArduinoMicroとか使ったり、ピンやメモリの大きなArduinoMEGA使ったりするなどArduinoシリーズの他の機器使ってみたり、mbedなど他のプラットフォームを試してみるのも良いと思う。
インターネットに接続したければ、それができるようなモジュールを探せば出てくるだろう。もしやりたいことができるモジュールがなければ、色々なものを組み合わせて創りだしてしまえばいい。
デバイスやモジュールを使えるようになることはそんなに難しいことではない。ただ「何を作るのか」が難しいのだと思ってる。
これからは、こういうデバイスがもっと手軽に使えるようになり、もっと充実してくるのだと思う。僕達がこれらを使いこなせるようになる新しいリテラシーがあるのだとすれば、それは「作りたいものが作れる」ようになることであり、「自分自身の問題を解決するものを作ることができる」ことだと思うので、どんどん思いついたものを自分のために作っていけばいいのだと思う。
だから、作りたいものをつくろう。もっともっと、多くの人が、もっともっと色んな物を作ったら面白い。