第二項 Arduinoとセンサー入力の基本
電子工作創作表現(2019/4/25)
スライドPDF
Arduinoに触る
- 電子部品を手軽に扱えるようにするツール
- もっとも基本的なのがArduino UNO(左側)
- たくさんの種類がある
今日から実際に電子部品に触っていこうと思いますが、そのために必用なツールArduinoについて紹介します。ワンボードマイコンと呼ばれる電子基板のことで、電子部品でやれる基本的なことは大概これにプログラムを書き込むことですぐ実現できるようになっています。
Arduino UNOと呼ばれるものが一番ベーシックなタイプです。よく似たものにLeonardというものがありますが、最初のうちはUNOを使う事をおすすめします。
込み入った話しをすると、UNOが使うATmega328PではなくATmega32u4というチップを使っていて、これはUSBホストとして振る舞えるのでマウスやキーボードとして動作させたり、UARTというシリアル通信ポートがUSB以外にも付いていたりとちょっとだけ違います。込み入ったことをやり始めるとハマったりすることがあるので、まずはUNOで練習するのが良いでしょう。
他にもたくさんの種類があります。メインストリームのUNOはこの前にいくつもバージョンアップを重ねていて、生産終了したものではDuemilanoveやDiecimilaという物があります。もともとイタリアで産まれたプロジェクトなので、イタリア語がよく使われています。
他のArduino - Arduino nano/micro
小型のArduino。小さい空間に使ったり、ウェアラブルデバイスにも便利
用途別のラインとして開発されているものもあり、Arduino nanoはUNOを小型化したタイプ、Arduino microはLeonardを小型化したタイプとして位置づけられています。小さなデバイスやウェアラブル用途に向いています。
他のArduino - Arduino mega
大型で入出力が多いArduino MEGA
他にはArduino megaという、電気を入出力するチャンネルがたくさん付いたバージョンもあります。作品によってはArduino UNO/Leonardで実現しにくい事もあるので、こういったシーンに応じて使い分けができるというのも頭の片隅に置いておくと良いと思います。
Arduino IDE の基本画面
ArduinoIDEを起動すると、このような画面が出てきます。IDEとは統合開発環境(Integrated Development Environment)のことで、ようはこのソフトの事を指します。ソフトを指して「Arduino」と言ったりすることもありますし、それで通じる事もありますが、ここでは基本的に本体をArduino、PC上で動くソフトの事をArduino IDEと表記します。
Arduinoはここにスケッチと呼ばれるプログラムを書いていって、最終的にUSB経由で書き込む事で目的の動作を実現します。一度書き込んだプログラムは基本的にはArduinoの中に残ったままになるので、ArduinoIDEを閉じてもArduinoの中でプログラムは動作し続けますし、USBを差し直せばまた最初からプログラムが動作します。
サンプルのプログラムBlink
試しに、プログラムをArduinoに書き込んでみましょう。メニューのファイル>スケッチ例>01.Basics>Blinkを選択すると、新しいウィンドウが開き、プログラムのサンプルが読み込まれます。このスケッチ例には、色々なプログラムのサンプルが登録されているので、コードが読めるようになると、Arduinoにどんな機能が備わっているか、特定の機能を実現する時にどんなコーディングをすれば良いか、知ることができます。
プログラムを書き込む
読み込んだコードを実際にArduinoに書き込みます。ツール>シリアルポートを選んで、書き込むデバイスを選択します。シリアルポートというのはPCが外のデバイスとやりとりする出入り口のようなもので、英語だと「港」という意味です。PC本体が陸地だとすると、データがやりとりされる港のようなものなので意味を覚えておくと理解しやすいかもしれません。
シリアルポートの中に(Arduino/Genuino Uno)という表記があれば、それを選択します。表記が出ない場合は、Arduinoを抜くと消えるポートが出てくるので、それがArduinoのポートだということが認識できます。Macの場合ttyとcuから始まる物があるかもしれませんが、どちらを選択しても構いません。
それとその上の「ボード」も確認します。どのタイプのArduinoに書き込むかという事を明記する必要があります。
書き込み&実行
設定ができたら、矢印マークの書き込みボタンを押すと書き込みがされます。しばらく下の領域に文字がつらつらと流れた後、日本語だと「ボードへの書き込みが完了しました。」と表示されます。こうなると書き込み成功です。
”Lチカ”
正しく書き込まれていると、基板の上の方にあるLEDが1秒おきに点滅します。これでArduinoにプログラムを書き込む手はずは整ったので、実際に電子部品を扱ってみようと思います。
センサー(入力)とは
現実で起きている出来事を、プログラム上の「数値」に置き換える
まず最初は「センサー」を扱おうと思っています。センサーと言う言葉はわりとどの言語圏の方も馴染みあると思うのですが、電子回路においては、現実に起きていることをプログラムの中の数値に直して扱うという考え方です。
明るさセンサーを読み取る
フォトトランジスタNJL7302L-F5
秋月電子で1個50円
実際に明るさセンサーNJL7302L-F5(http://akizukidenshi.com/catalog/g/gI-08700/)を使って、センシングまでの流れを追ってみます。ちなみに光センサにはフォトトランジスタの他にCdsセルというのもありますが、こちらは硫化カドミウムという有害な物質を含んでいるので最近はあまり使われなくなっているようです。
ブレッドボードに配線
ブレッドボードにセンサーを差し込み、Arduinoと接続していきます。(TinkerCadの都合上光センサが白いです)ブレッドボードは隣り合って並ぶ穴が電気的に中で繋がっている板になっていて、部品を差し込んでいくだけで回路が作れる便利グッズです。
フォトとランジスタには極性があるので注意してください。赤い線とつなぐのは、少しだけ足が長いコレクタ(=電気を集めるのでCollect)、緑の線とつなぐのは短い方のエミッタ(=電気を放射する、発するのでemit)です。
プログラムを入力
接続が終わったら、このようにコーディングします。A0ピンに送られてくる電気の電圧を計測して、USBから数値を出力するプログラムです。
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println(analogRead(0));
delay(12);
}
シリアルモニタ
プログラムの書き込みができたら、ツール>シリアルモニタか、画面右上の虫眼鏡マークをクリックして、シリアルモニタを開きます。シリアルモニタはUSB経由でデータをやりとりするためのもので、Arduinoのプログラムから送信されたデータを表示してくれます。
通信速度を先程コードで書いた数値と同じ115200に設定すると、数値がたくさん流れてきます。この状態でフォトトランジスタに手をかざして、数値が変化すれば成功です!
シリアルプロッタ
値の確認に便利なシリアルプロッタ
シリアルモニタと同時には起動できないが、シリアル通信で流れてきたデータをグラフにしてくれる
そしてもう一つ便利なシリアルプロッタという機能があります。これも一度シリアルモニタを閉じてからツール>シリアルプロッタと押すと出てきて、先程の数字を自動的にグラフで表示してくれます。
数値の変化を直感的に読み取ることができるというのと、センサーの微調整や複数の値を比較する時に重宝します。
アナログの値を図る回路
アナログ入力をする時の基本形
Arduinoで値が取れたところで、回路に戻りましょう。
ワイヤーで3本の線をつなぎましたが、線が2本ある部品の場合、多くがこのような形で配線をします。一方を電源(プラス)、もう一方を抵抗を介した状態でグラウンド(マイナス)に接続し、部品と抵抗の間から線を伸ばしてそこの電圧を図るという形です。
構造が単純なセンサーの多くがこのような電源・グラウンド・Voutの3線式の形を取っているので、この図を頭の隅に置いておくと今後色々と便利になると思います。
抵抗が変化するタイプのセンサー
- 光量・温度等センシングする条件によって抵抗値が変わる
- 「分圧回路」を作ってあげてセンサーで読み取る
光センサのように線が2本出ているタイプというのは、前の画像の回路のような分圧回路を作ってあげることで、Arduino等のマイコンで値の変化を読み取ることができるようになります。
フォトトランジスタはトランジスタの構造を持っているので少し特殊ですが、他多くのセンサーは、条件によって抵抗値が変わる仕様になっています。
モジュールになっている3線式のセンサー
- Vcc・Vo・GNDがあらかじめパッケージされて出ているので、接続が楽
- 電圧ではなくデータを送信する場合もあるので注意(センサー応用編で解説します)
また、この回路があらかじめ組まれている親切なタイプのセンサーも販売されています。
例:
磁気センサー(http://akizukidenshi.com/catalog/g/gI-11029/)
距離センサー(http://akizukidenshi.com/catalog/g/gI-02551/)
このように必要な機能がある程度組み込まれたものを「センサモジュール」とか「パッケージ」とか言ったりするのですが、このパッケージの中に先ほどのような回路が組み込まれているので、Arduinoから利用する時は出ている3本線をつなぐだけでセンサーの値を取ることができます。
ただし、同じ3線式でも電圧の上下ではなくデジタルの信号を送信してくるタイプもあるので、自分でセンサーを買って試してみる時にはデータシートをよく読んで確認してください。そのようなタイプのセンサーの使い方は、また後の講義で解説します。
データシート
- 部品の使い方など細かい情報は「データシート」を読むと分かる
データシートという言葉が出てきましたが、これは部品に関する情報がまとまった、いわゆる「取扱説明書」のようなものです。例えば先ほどの光センサは、秋月電子通商のWebサイトで確認することができます。(http://akizukidenshi.com/download/ds/jrc/NJL7302L-F5.pdf)
「XXセンサ Arduno 使い方」などで検索すると、たいていの物は丁寧な解説ページが出てきたりもするんですが、そういう方たちはじゃあどこで情報を得ているかというと、部品メーカーが制作しているこのデータシートが基準になります。
白黒で専門用語だらけですし、モノによっては全て英語だったりするのですが、このデータシートをしっかり読めるようになると自分の目的に合った部品を選定できるようになるので、色々なパーツを試してみたい人は頑張って読めるようにしておくと良いと思います。
電子部品屋さんについて
- 電子部品と言えば秋葉原だが、最近は通販も充実
- アマゾンにも色々売っているが、データシートのような情報は部品屋さんが充実
自分でも部品を色々買いたいとなったら、電子部品屋さんで購入するのがおすすめです。秋葉原はすっかりアニメカルチャーの街になってしまいましたが、それでも昔ながらの電子部品屋さんがたくさん残っています。
秋月電子のようにメジャーな電子部品屋さんだとだと、実店舗と通販を両方やっています。こういう所で買っておくと、普段は通販を使いつつ急に必要だったりした時に買いに走れるというメリットもあります。
アマゾンも最近は色々な部品が売られたりしているのですが、製品の情報が薄かったり怪しかったりするので、単純な部品以外は少し注意して購入するのが良いでしょう。