追記:このページは訂正箇所がありますが「引用」の形式でツッコミを入れて残します。おそらく同じように間違いやすい箇所だと思う。
★超教訓:
失敗を繰り返す中でたくさんの気づきがあったので記す。
リレーとブレッドボード
最初、リレーはオムロン「G5V-1」を買ってきました。これの選定理由は、下記「参考ページ」を見たからなのですが、このリレーの取り付け方で大ハマリ。結論から言うと、リレーの足が短すぎてブレッドボードの「真ん中をまたげなかった」ことが原因で動かなかった。たまたまURL(※)を見ながら、ふと、リレーひっくり返して、2と9に直接ワイヤーくっつけたらいい感じのスイッチ音がしたため発覚。「G5V-1」が実装基板用で、そもそもブレッドボードで使われることが想定外であったのだと思われる。
ブレッドボードの使い方がわかってなかったのが悪いんだけど、とんだ初級者殺しだな...。「参考ページにブレッドボードが出てこない」ことに気がつくべきでした。
(※)http://minkara.carview.co.jp/userid/345027/blog/28920061/
ブレッドボードの基本
ブレッドボードのタテのラインは内部で繋がっていて、真ん中の溝で離れている。アタマではわかったつもりでも手が追いついていなかった。
http://jsdiy.web.fc2.com/avr_7segclockbb/
リレーが動かなかった理由
当初「リレーがうまく動かなかった理由」は、「G5V-1」リレーの2と9がショートしていたからである。ショートするとリレーは一見繋がっていても動かない(動くためのパワーが、ショートした側に奪われる)。「ショートすると部品に電流が行かない理由」を説明するには、中学校の勉強内容にさかのぼる。この、水に例えるのは非常にわかりやすかった(学生当時「暗記」して「理解」しなかったツケが...)
http://www.max.hi-ho.ne.jp/lylle/denryu5.html
リレーは赤い波線で回路を「分断」しなければならない(ショートしたらだめ)
だから赤い波線の場所にブレッドボードの「溝」を当て込む。いやー、勉強になったなぁ。ブレッドボードの真ん中の溝をまたげる、でかいリレーを買おう(結論)
ちなみに、「G5V-1」リレーを右90°に回転させて2と9のラインを変えてやる実験をしたら、やかんが沸騰したみたいな「ピー!ピー!」という音がした(音がするタイミングは、狙った通りのタイミング)これは、2と9を分離して安心していた僕に、でも実はつながってはいけない1と2が繋がるという想定外のショートに、リレーが悲鳴をあげたと思われる。
参考ページ
Arduinoで自動水やり器を作る①
http://qiita.com/interestor/items/d59590b64820a8cf973e
ブレッドボードにつけよう(リレーはG6E-134P-US DC5)
(リレー番号を、買い直した後の番号に変えてあるので注意)
電気の基本的な流れは「任意のDigitalOut から始まって(あいだに部品をはさんで)GNDに帰る」だ。今回は「Digi1から始まってリレーの1番に入り、リレーの6番から出てGNDに帰る」だ。
差替1:当初5Vからリレーにワイヤーを直結していた。これでは条件分岐ができない。
リレー
リレー(G6E-134P-US DC5)は5本のピンでできていて、上図右下ワイプのように取り付けた。「OMRON」が普通に読めるように配置してもよかったんだけど、1から6に流れるところをブレッドボードの上半分に持って行きたかった(なんとなく)だけ。
【TIPS】番号が連番じゃないのは、各ピンの位置が物理的に離れているため。1番ピンをブレッドボードの”1″のところに刺すと、次のピンが”2″、その次のピンが”5″の位置に刺さるようになっている。
http://nanoappli.com/blog/archives/2382
下図右端の番号図(端子配置/内部接続図)は "下から見た" 状態なので、ブレッドボードから見るときは逆に見ないといけないけども、リレーの1番から6番に電気が走ると、リレーの10番から12番にリレーの内部金具(?)がスイッチして、「リレーの12番と7番が電気の通り道として有効」になる。
このリレーの12番と7番をポンプの電池の金具部分につけてやろう。それでリレーセクションはクリアだ!
ポンプ
ポンプの基本動作として、ウラからスライドスイッチをスライドすると「A」と「B」が物理的にくっついてポンプが動作するので、とりあえず
・「リレーの7番」と「A」
・「リレーの12番」と「B」
をつないでみたらポンプが動いた!
ソース
# include <Wire.h>
# include <rgb_lcd.h>
// 土壌センサー dry[0-300], normal[300-700], wet[700-950]
int buf;
// LCD
const int colorR = 0;
const int colorG = 0;
const int colorB = 255;
rgb_lcd lcd;
void setup()
{
pinMode(0,OUTPUT); // LED
pinMode(1,OUTPUT); // リレー行きのピン
pinMode(A0,OUTPUT); // 土壌センサー
lcd.begin(16, 2); // 画面表示LCD(LCDは16文字2行です)
lcd.setRGB(colorR, colorG, colorB); // LCDのカラーを決定します
}
void loop()
{
// 土壌センサー 値取得
buf = analogRead(0);
// 乾いている時の挙動
if(buf < 400){
// ポンプを動かす
digitalWrite(1,HIGH);
// ***************
// 「A」
looop:
// パトランプ
digitalWrite(0,HIGH);
delay(10);
digitalWrite(0,LOW);
// 値を見る
buf = analogRead(0);
// 画面表示
lcd.clear();
lcd.print("sensor value is");
lcd.setCursor(0, 1);
lcd.print(buf);
delay(100);
// 判断:値を見て、まだ乾いているなら 「A」 に戻る
if(buf < 400){
goto looop;
}
// ***************
digitalWrite(1,LOW);
}
// 画面表示
lcd.clear();
lcd.print("sensor value is");
lcd.setCursor(0, 1); // Note:行は0base、第2引数で1を指定すると2行目の意
lcd.print(buf);
delay(100);
}
動作確認
ようやくうまくいった!すがらしい
つぎは?
ちょっとしばらく植物を使った実験かな。
気が済んだら、つぎは「SDカードに定期的に記録する」を作りたい。
SDカードは「FlashAir」である。http://www.flashair.info/
つまりSDカードがhttpリクエストが飛ばせる。
httpリクエストで飛ばされた情報をSQLServer(データベース)に記録する。
IOTらしくなってくるかな?