Other

2016.11.28

[MAKE: PROJECTS] Arduinoで作る息で吹き消せるLEDキャンドル

Text by kanai

LEDCandleReshoot-1

「息を吹きかけて消せるLEDキャンドルが作れないか」

ある夜に、私の娘と私はそう考えた。そこで、私たちはインターネットを検索し、風を感知する方法をいろいろ調べてみた。そして、私たちが求めていたセンサーを発見した。そのセンサーが、今回のプロジェクトの中心となる。

コンセプト:空気の動きや風を感知する

気象観測装置には風速計という風車が付いていて、それで風を測っている。その他、空気の動きを感知するための仕掛けとしては、2本の薄い金属の帯を近くに並べて、風が当たるとそれらが接触して通電するというものもある。しかし、それでは好奇心の強い猫まで感知してしまう。

もうひとつの方法としては、熱々のピザを「フーフー」して冷ますときと同じ原理を使ったものがある。ワイヤーが少量の電気で温められているところへ、息を吹きかけて冷ますと、それによる温度の差を感知するのだ。これは「ホットワイヤー」風探知器という。Modern Deviceから発売されていて(写真A)、Arduinoと相性がいい。

windsensor

1. 風センサーを準備する

センサーのヘッダーにはリード線をハンダ付けする必要がある。あとはブレッドボードに線を差し込んで作る。

「え、ハンダ付けだって? 怖い!」

ぜんぜん大丈夫! ハンダ付けは難しくない。しかし、それにはハンダごて、ハンダ、それから少しばかりの練習が必要だ。ハンダ付けを学べば、大きな力になる。しかも簡単だ。私は、SparkFunのチュートリアル「Make:」のハンダ付け教室のページを見てほしい。このプロジェクトは、ハンダ付けを始めるのに、ちょうどいいきっかけになる。ハンダ付けをする場所が、たった5つしかないからだ。「ヘッダー」とブレッドボードとをつなぐための5つのピンだ(ヘッダーピンはセンサーに付属している)。

ハンダ付けでいちばん難しい点は、ハンダをピンに溶かし込むときに、すべての材料をしっかり固定しておかなければならないことだ。だが今回は、ブレッドボードが助けてくれる。ヘッダーピンの長いほうをブレッドボードの穴に差し込み、その上に出た部分にセンサーの5つの穴を通す。センサーとブレッドボードが平行になるように、センサーの反対側にコインなどを使って支えてやる。

そうしてハンダ付けを行う。隣り合うピンがハンダでつながってしまわないように気をつけよう。ヘッダーピンがハンダ付けできれば、もう準備完了だ。

2. 配線をする

electric-candle-fritzing

上が配線図だ(写真B)。ここからはプラグ・アンド・プレイとなる。もうハンダ付けはいらない。

・ブレッドボードにボタンスイッチを挿入する。ボードの真ん中の溝をまたいで2本ずつの足を穴に入れる。片方の足が1列目に来るように。
・抵抗の片方の足を、ブレッドボードのJ3に入れる。

注意:この抵抗の足はボタンスイッチの足と同じ列になるように。ボタンによってはサイズが異なり、足が入る列が変わる場合もあるので注意してほしい。

・抵抗のもう片方の足を青いマイナスの段に入れる。
・LEDの短い方の足をA 20に入れる。
・LEDの長い方の足をその下のA 21に入れる。
・LEDをブレッドボードに差し込んだら、慎重に足を折り曲げて、LEDを「おじぎ」をさせるように横に倒す。
・風センサーの5本のピンをAの段の一番下の列に差し込む。つまり、Aの26から30に入ることになる。センサーはブレッドボードから左にはみ出す形になる。GNDのピンは30に入っているはずだ。完成すると写真Cのとおりになる。

electric-candle-parts

抵抗はどこ? ほとんどのプロジェクトには、センサーと抵抗がセットで使われる。ここでも抵抗が使われているけれど、センサーのためにではない。抵抗はスイッチに付けられている。

そのわけは? このセンサーボードは進歩していて、必要な抵抗だけでなく、その他の部品もすでにセンサーボードに内蔵されているのだ。センサーボード自体が電源をコントロールし、Arduinoが必要とする信号だけを送り出すようになっている。

それでは、ジャンパー線の配線に移ろう。これから、ジャンパー線1本ずつ配線していく。色は何を使ってもかまわないが、ここでは、写真Bと同じ色の線を使って解説する。

・赤い線の片方をArduinoの3.3Vピンに差し込み、もう片方をブレッドボードのH1に差し込む。
・緑の線の片方をArduinoのDigital列の2番に差し込み、もう片方をブレッドボードのH3に差し込む。ここは、ボタンの片方の足と抵抗の片方の足と同じ列になる。繰り返すが、ボタンの足が違う列に入っているときは、それに揃えること。
・黒い線の片方をArduinoのGND(グランド)ピンに差し込み、もう片方をブレッドボードの右側の青いマイナスの段に差し込む。抵抗の片方の足が入っている同じ段だ。ここは「グランドレール」となる。つまり、すべての部品のマイナス側がここにつながることになる。
・もう1本の黒い線の片方を、ブレッドボードの右側のグランドレールに差し込み、もう片方をB20に差し込む。ここはLEDの短い方の足が入っているのと同じ列だ。これも、LEDのマイナスの足をグランドにつなぐための線だ。
・黄色い線の片方をArduino 13番ピンに入れ、もう片方をブレッドボードのB21に入れる。ここはLEDの長い方の足が入っているのと同じ列だ。
・もう1本の赤い線の片方をArduinoの5Vピンに入れ、もう片方をブレッドボードのC29に入れる。ここは、センサーボードの+Vピンと同じ列だ。この線はセンサーボードに電源を送る。
・オレンジの線の片方をArduinoのアナログピンA0に入れ、もう片方をブレッドボードのC26に入れる。ここは、センサーボードのTMP(温度)ピンと同じ列になる。
・もう1本の黄色い線を、ArduinoのアナログピンA1に入れ、もう片方をブレッドボードのC27に入れる。ここはセンサーボードのRV(RAWループ電圧)のピンと同じ列だ。
・最後に、もう1本の黒い線の片方をブレッドボードのC30に入れて。もう片方をブレッドボード右側のグラウンドレールに入れる。

これで回路は完成(写真D)。

electric-candle-assembled

よくできました。

3. コードを読み込む

Arduinoを初めて使う人は、説明書をよく読んでコンピューターに接続してほしい。

プロジェクトのコードを入手したら、「Copy Code to Clipboard」(クリップボードにコードをコピー)ボタンをクリックする。

Arduino IDE(開発環境)を起動し、メニューの「File(ファイル)」 > 「New(新規)」で新規のスケッチを開く。ほとんど白紙のスケッチウィンドウが開く。最初から書き込まれているコードはすべて削除しよう。そして、ウィンドウの何も書かれていないところをクリックして、「Edit(編集)」 > 「Paste(貼り付け)」で、ウェブサイトからクリップボードにコピーしておいたコードを貼り付ける(写真E)。「File(ファイル)」 > 「Save(保存)」でコードを保存する。

arduinoscreenshot

次に、このコードをArduinoにUSBケーブルを使ってアップロードする。メニューの「Sketch(スケッチ)」 > 「Upload(アップロード)」を選択すると行えるが、ウィンドウ上部にあるアップロード用の矢印ボタンをクリックするともっと簡単だ。アップロードに成功すると「Done Upload(アップロード完了)」というメッセージがウィンドウ下部に表示され、LEDが点灯する。おめでとう! これでArduinoのプログラムができた。

4. 吹いてみよう!

これで、Arduinoに電気を通せばキャンドルプログラムが実行される。LEDがチカチカと点滅するので、センサーの上部(写真F)に息を強く吹きかけてみよう。LEDが消えるはずだ。ブレッドボードのボタンを押すと、また点灯する。

kaia_candle

コンピューターから外したときは、電源アダプターをArduinoにつながなければならない。または、9ボルトの電池でもよい。Arduinoに接続できるようになっているスイッチ付きの電池ボックスが売られている。覚えておいて欲しいのは、LEDが消えてもArduinoには電気が流れ続けているということだ。完全に電源をオフにしたいときは、電池ボックスのスイッチを切るか、電源を抜き取る必要がある。

調整する

このコードでは、強い風を感じるようになっている。もっと弱い風で作動するようにしたいときは、より小さな風速でプログラムが反応するようにコードを書き換える必要がある。次の行では、数値が6になっているが、これを変更してみよう。

if (WindSpeed_MPH > 6) {

どういう仕掛けか?

センサーの「ホットワイヤー」(別に熱いわけではない)に風が当たると、ワイヤーが冷却されて抵抗値が変化する。ボード上の他の部品がこの変化を感じ取り、その値をArduinoがわかる信号にして送り出す。

その値が、決められた値を超えると、LEDを消すようにコードが命令する。そして、ボタンが押されるまで、そのまま待機するのだ。

コードを書こう

キミはスターだ。

このコードには、高度な数学の要素が含まれているが、どういう理屈になっているのかは深く考えなくても使える。しかし、ここでコードに使用される数学の記号を学んでおけば、今後役に立つ。

+は足し算で、は引き算であることは、誰でもわかっているだろう。

では*は何だろう? これは掛け算の記号だ。だから、2 * 36となる。/は割り算だ。6 / 32となる。

このコードでは、powという記号も出て来る。マンガの擬音ではない。power、つまり乗数のことだ。10の2乗とかいうあれだ。普通は10²と書くが、Arduinoのコードではpow(10, 2)と書く。答は同じ、100だ。

楽しい関数

このプロジェクトのコードをよく見ると、void setup()void loop()という行があるのがわかる。これはArduinoのコードでは必ず使われるものだ。

その少し下を見ると、void douseCandle()void lightCandle()というのが出てくる。これはなんだろう? これらは「関数」と呼ばれるものだ。これらは特別な仕事をしてくれる。私は、analogRead()digitalWrite()といったArduinoに元から備わっている命令を使って、新しい2つの関数(命令)を作ったのだ。

void loop()のセクションで、私はこれらの関数を、いくつかの場所から「呼び出し」ている。そのひとつは次のような感じだ。

if (WindSpeed_MPH > 6) {
douseCandle();
}

プログラムが、douseCandle()という行に差し掛かると、私が作った関数を探しに行く。そこにはこう書かれている。

void douseCandle() {
// turn LED off
digitalWrite(led, LOW);
}

この関数が呼び出されると、プログラムは関数であることを示す{と}の間の命令を実行する。ここでは、LEDピンをLOWにしなさいと書かれてある。

関数とはとても便利なものだ。ひとつには、決まった命令のグループを、いろいろな場所から呼び出して使えることがある。関数をひとつ作っておけば、いろいろなところで使い回しができるのだ。つまり、同じ命令のグループを何度も繰り返して書く必要がない。面倒だからね。こういうコードには名前が付いている。DRYだ。「Don’t Repeat Yourself(繰り返さない)」という意味。

一歩進めてみよう

LEDCandleReshoot-3

このプロジェクトでは、純粋にセンサーの働きを実験するだけだったが、これを応用して、風速を測るデバイスを作るといったことも可能だ。正確に作るには、センサーには Arduinoとは別の独立した電源が必要になる。なぜなら、Arduinoを通した電源はわずかに揺らぐからだ。それが正確な測定の邪魔をする。独立した電源の作り方は、この風速センサーの説明書を見てほしい。

これを小さくして、ロウソク型のケースに収めることもできる。ArduinoをArduino NanoなどのArduino互換の小さなマイクロコントローラーに置き換えるのだ。そしてブレッドボードを使わすに、部品を直接ハンダ付けする。

「Make:」の技術インターン、Sydney Palmerがそれを作った(写真G)。厚紙の筒に、ホットグルーでロウが溶けたような感じを出し、色を塗ってある。

LEDCandle-1

原文