【初級者殺し：解決】リレーを介した、ポンプとの直結

追記：_このページは訂正箇所がありますが「引用」の形式でツッコミを入れて残します。おそらく同じように間違いやすい箇所だと思う。_

#★**超教訓**：
失敗を繰り返す中でたくさんの気づきがあったので記す。
##リレーとブレッドボード
最初、リレーはオムロン「G5V-1」を買ってきました。これの選定理由は、下記「参考ページ」を見たからなのですが、このリレーの取り付け方で**大ハマリ**。結論から言うと、リレーの足が短すぎてブレッドボードの「真ん中をまたげなかった」ことが原因で動かなかった。たまたまURL(※)を見ながら、ふと、**リレーひっくり返して、2と9に直接ワイヤーくっつけたら**いい感じのスイッチ音がしたため発覚。「G5V-1」が実装基板用で、そもそもブレッドボードで使われることが想定外であったのだと思われる。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/94562/ada0017b-5aed-5f10-0c62-02ead2121b51.jpeg)
ブレッドボードの使い方がわかってなかったのが悪いんだけど、とんだ初級者殺しだな...。「**参考ページにブレッドボードが出てこない**」ことに気がつくべきでした。
(※)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

![3.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/7e376f82-0663-f53c-2a94-774bbfb69207.jpeg)
リレーは赤い波線で回路を「分断」しなければならない（ショートしたらだめ）
だから赤い波線の場所にブレッドボードの「溝」を当て込む。いやー、勉強になったなぁ。ブレッドボードの真ん中の溝をまたげる、でかいリレーを買おう（結論）

ちなみに、「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からリレーにワイヤーを直結していた。これでは条件分岐ができない。

![1.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/7d64d62e-c7db-c7b5-2db2-83cb41c083c6.jpeg)



##リレー
リレー（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番が電気の通り道として有効」になる。
![1.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/a994e4fc-81a9-82a9-c231-4d8e1e61bbf7.jpeg)

***
このリレーの12番と7番をポンプの電池の金具部分につけてやろう。それでリレーセクションはクリアだ！
##ポンプ
ポンプの基本動作として、ウラからスライドスイッチをスライドすると「A」と「B」が物理的にくっついてポンプが動作するので、とりあえず
・「リレーの7番」と「A」
・「リレーの12番」と「B」
をつないでみたらポンプが動いた！
![キャプチャ3.JPG](https://qiita-image-store.s3.amazonaws.com/0/94562/57fc4701-68f4-93b9-bc5c-c8fb0759a879.jpeg)

#ソース
```text
#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らしくなってくるかな？