トドお父さん通信

高BMI中年北部九州サーフィンと家庭菜園と子育てグルメ


テーマ:

みなさん、こんにちわ。

トドお父さんです。

 

おひさしぶりです。

最近、中高年の転職ということで、会社が変わってバタバタしています。てへぺろ

まだ下のコドモが高校生なので、定年後も働かんば、いけません。

それで出張が増えたのですが、せめて気持ちくらい、余裕を持ちたいですね。ニヤニヤ

 

さて前回、中華製Xiomiの激安IPカメラの紹介をしましたが、同時に購入した同じXiomi製のドライブ

レコーダー(以下ドラレコ)の紹介をします。

前回はBestGate、今回はEbayで買いました。 $41.59 日本円で4700円位です。

Xiaomi Yi 1080P 2.7" Car Vehicle Dash Camera Wifi Data Recorder ADAS for Phones

いまは、Amazonでも5000円弱で手に入りますね。

YI ドライブレコーダー ダッシュ カメラ 車載カメラ 165°広角

まぁ、300円安かったので良しとしましょう。でも、日本語対応できているのなら、アマゾンがいいかもです。

 

【閑話休題】

届いたドラレコを開梱します。

 

中華製のいつもの梱包箱の角折れ以外はきれいな状態です。

 

中に入っているのは、本体とシガープラグ(USB電源)、USBケーブル 3mくらい、それと取り付けカップ

です。取り付けカップは3Mの両面テープで窓ガラスに張り付ける方式でした。

 

まぁ、動作の内容は別の方のブログを参考にしました。

 

もふんちょろぐ。 さま

コスパ抜群なドライブレコーダーXiaomi Yi Smart Dashcam買ったよ!

初期設定の仕方や使い方等は先のブログを参考にして頂くとして、これからは特定の自動車に取り付ける説明です。

今回はカミサンのクルマ、日産のNV100 クリッパー軽ワンボックスに取り付けます。
まずは、アマゾンで2つの物を仕入れます。今回は総量が無料のヨドバシ.コムで購入

エーモン工業 amon2309 [プラグロック電源ソケット]

エーモン amonE488 [配線コネクター AV(S)0.50~0.85sq 4個]

それぞれ¥540と¥216(税込)安いですね。

 

クルマへ12V使用の電装品を取り付けるには、シガープラグから取るのが手っ取り早いです。

日本者であれば、エンジン切ると12Vの供給は切れますので、12Vを使うカーナビやETC機器

なんかは、シガープラグから取れば簡単ですが、見た目がみっともないですよね。

今回、シガープラグの裏にもう一つシガープラグを内装し、もともとのシガープラグから配線コネ

クタを経由して電源を取り出す作戦です。

 

ここのHPを参考にしました。

ドライブレコーダーの取り付け方 エーモン工業

このHPでは、+電源はヒューズから、-電源はボディアース(ねじ止め)になっています。

NV100クリッパー(スズキエブリィのOEM品)では、ヒューズボックスは運転席下になっていて

配線が遠くなることが判明しました。

そこで方針を変更して、シガーライターにいっている配線の+側の線を購入した配線コネクタ

で圧着して横取りしようという作戦です。

配線コネクタの使い方は、こちらを参考に

 

配線コネクタの使い方|エーモン

 

シガーライターへの供給はたぶん1A程度でしょうが(0.5sq程度)、ドラレコの電流くらいなら

問題ないでしょう。

さて、そろえた部品と工具です。

 

圧着ペンチと0.5sqの電線は、前に購入していました。 あとはヨドバシで買った配線コネクタ(赤)

とシガープラグ(抜け防止付き)です。

 

今回作った配線図です。

車本体のシガーソケットから出ている2本の配線のうち、黒白が+で黒一色がGNDのようです。

新しく線を作って、配線コネクタで車のシガーソケットの白黒線(+)とクランプします。

新しく線を作りました。 50cmくらいでしょうか? 先に付属のターミナルを圧着

 

配線コネクタです。この先をシガーソケットの配線にクランプします。


クリッパーのグローブボックスを外して、線をクランプしたところです。
グローブボックスの外し方はググってくださいね。簡単に外れます。

電源が確保できましたら、次はUSB電源ケーブルの配線です。

助手席のピラーのところを外すには、ハンドルバーのめくら蓋を外して、ネジを取ります。

(結構堅く閉まっていました。外してくれた日産ディーラの整備士さん、有難うございます)

 


この間を通します。
クランパーが活躍します。


先ほどのグローブボックスを外したところから、ケーブルを這いまわします。


クランパーや粘着ゴム付きテープ等が活躍します。

 

左側に内装するシガーソケットにUSB電源を指し込んで余ったケーブルは

振動で外れないようにタイラップ等で巻き巻きしました。ニヤニヤ

 

ようやくとりつきました! 半日、4時間くらい苦戦しました。
特にピラーのネジの締め付けトルクがハンパなく、外すのに往生しました。

(外してくれた日産ディーラの整備士さん、重ねて有難うございます)

ドラレコ、安いのですが、取り付けが以外と大変ですね。ニヤリ

 

この辺は、中華製であろうと日本製であろうと変わらないのですが、

少しでも安く済ませようという皆さんの参考になれば幸いです。

 

このドラレコ、まだ中国語をしゃべるのですがファームを入れ替えて英語

または日本語に出来るようですね。

でも、特段 不便ではないのでそのままにしています。

音声も音(起動時のピヨーン)も切って使っています。グラサン

 

画像はこの値段とは思えないくらいきれいです。口笛

問題なーーし!

 

それでは、まったね~ 爆  笑

 

 

 

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:

みなさん、こんばんわ。 トドお父さんです。プンプン
春休みの宿題、家庭菜園の自動水やりシステムがようや終わり、ほっとしています。

 

ひとつ、仕事が終わったら次の仕事がわいてくるのはどの世界も同じ。

今度は、自動水やりの制御をしているところをカメラで監視したいという要望がでてきました。

ポンプで水やりをするのではなく、水道から電動バルブで散水するので、ホースが外れて

ないか、とか水がちゃんと出ているか、とか気になりますね。

 

いつものように、安価なIPカメラをEbayでみつくろいます。

 

安いのは2000円くらいからありますね。でも、カメラ技術が優秀で定評のあるXiami社を選択。

今回は、GearBestから購入してみます。

 

Original Xiaomi xiaofang Smart 1080P WiFi IP Camera

\2350くらいで、安いですねー、今回は書き留め代¥350を払って、総計 ¥2700

くらいになりました。

荷物が発送されたら、トラッキングしたいですからねー。

でも、GearBestの書き留めはオランダの郵便を使うので、荷物が一旦オランダに飛んで、

それから日本に配送されます。

同時に手配した、送料無料Xiiamiのドラレコのほうが10日間くらいで先に届きました。

こちらは11日に手配して29日到着なので18日間ということになります。

 

この下は、GearBestに乗っていたレビューへのリンクです。

英語ですが、ご容赦ください。

Xiaomi smart IP camera review | Good personal security guard

この装置の仕様とか、使い方がよくわかります。
中華製の製品、仕様書とかマニュアルとか、ほとんどそろっていません。
日本製が大事にする、これらを切り捨てるから安くでできるのですよね。
現代社会は、この方向性のようです。 サービスはタダでは得られませんからね。
安く買おうと思えば、汗をかかなくっちゃということですね。
 

【閑話休題】

とどいた郵便を早速開封しました。

 QRコード付きマニュアル

中に入っているのは、本体とUSBケーブル、それと電源アダプタです。
四角形で、デザインがいいですね。


机において見ました。

これから、セットアップです。
薄いマニュアルについているQRコードで、MiHomeというアプリをダウンロードします。
これで、Xiaomi社のCloudにアクセスして、スマホからカメラの画像が見れるように
なります。

インストール方法は下記。

Xiaomi XiaoFang 1080p Camera ALL YOU NEED TO KNOW

自分のエリアをMainLand China に選ぶことに気をつけてください。
そうしないと、最後にTimeOutになって機器を認識してくれませんでした
言語はEnglish を選んでもOKです。
メッセージが中国語なので、しゃべっている内容が分かりません(爆)
でも、英語圏の人もなんとかセットアップしているので大丈夫ですよ(たぶん乙)

 

メニューを見てがっかりするのは、日本語のチョイスがないことです。

まぁ、それは分かるのですが、韓国語のチョイスはあるのが悔しいですね。

なんか、日本の製品開発と欧州/米国と中国の製品開発がかなり乖離してきているようです。

余計なコストをかけない、ということで徹底しています。

 

きょうはここまでですねー 

プンプン


おやすみなさい  

zzz

 

 

 

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:

みなさん、こんばんわ。 トドお父さんです。プンプン
家庭菜園の自動水やりシステム、EasyIoTとの連携の説明が今回の5回目でようやく終わりです。

 

連携の説明が終わったら、実際の家庭菜園の自動水やりの制御をしているところをレポート

したいのですが、こちらはまだ出来上がってませんので今回でいったん終了です。

GWに始めたので。ここまで3か月強。 ながながとお付きあい、有難うございます。キョロキョロ

 

【閑話休題】

ESP8266のプログラムコードの説明、前回の続きを始めますね。

プログラム:ESP8266_mqtt_irrigator_Aug09a.ino

前のブログから、説明が続いてますので併せて見てくださいねー。!!

前回のブログ

[電子工作]Part5 家庭菜園の自動水やりシステムの作成再開!(EasyIoTとの連携 Ⅳ)

 

前々回のブログ、

[電子工作]Part4 家庭菜園の自動水やりシステムの作成再開!(EasyIoTとの連携 Ⅲ)

 

前々々回のブログ、

[電子工作]Part3 家庭菜園の自動水やりシステムの作成再開!(EasyIoTとの連携 Ⅱ)

 

前々々々回のブログ、

[電子工作]Part2 家庭菜園の自動水やりシステムの作成再開!(EasyIoTとの連携)

 

また、もとネタのインストラクタブルの下記の記事も併せて参照してくださいね。

ESP8266 Smart Plant Irrigation System

この記事にある、Githubに登録されたコードをベースに私のシステムに合わせて修正しています。

 

【プログラムの説明の続き】

今回作ったプログラムは本家と同様に、GitHubに登録しています。

My ESP8266 Vegitable gardem iIrigation System

Githubの内容は前回に説明していますので、今回は割愛させて頂きますね。

 

前回は初期設定 setuo() の途中まで説明したので、今回はその続き、それとプログラムの

本体部 loop()の説明です。

 

6、プログラム 初期化処理3 (moduleIdの生成と新規moduleの登録(初回のみ))

  //create module if necessary 
  if (storage.moduleId == 0)
  {
    //create module
    Serial.println("create module: /NewModule");
    storage.moduleId = myMqtt.NewModule();

    if (storage.moduleId == 0)
    {
      Serial.println("Module NOT created. Check module limit");
      while(1)
        delay(100);
    }

   // set module type
    Serial.println("Set module type");    
    myMqtt.SetModuleType(storage.moduleId, "ZMT_IRRIGATOR");

 

ESP8266の初回起動時は、EEPROM(512)の領域は全て、"00h"でクリアされています。

EEPROMの初期化のときに、  loadConfig(); でEEPROMに書き込まれたパラメータをを読みこ

みますので、初回は全てParametaが"0" になります。 ModuleID を読みこんで判定します。

 

その下の文は、moduleIDが"0"の初回のみ処理して、ここでmoduleIdを生成します。

この新しいmoduleIdでEasyIOT Cloudサーバーにアクセスして新しいModuleを登録し、

Module Type (ここでは"ZMT_IRRIGATOR"を登録します。

 

7、プログラム 初期化処理4 4つのパラメータのEasyIoTサーバー登録)

      // create Sensor.Parameter1 - humidity treshold value
    Serial.println("new parameter: /"+String(storage.moduleId)+ PARAM_HUMIDITY_TRESHOLD);    
    myMqtt.NewModuleParameter(storage.moduleId, PARAM_HUMIDITY_TRESHOLD);

    // set IsCommand
    Serial.println("set isCommand: /"+String(storage.moduleId)+ PARAM_HUMIDITY_TRESHOLD);    
    myMqtt.SetParameter(storage.moduleId, PARAM_HUMIDITY_TRESHOLD, true);

    // create Sensor.Parameter2
    // Sensor.Parameter2 - manual/auto mode 0 - manual, 1 - auto mode
    Serial.println("new parameter: /"+String(storage.moduleId)+ PARAM_MANUAL_AUTO_MODE);    
    myMqtt.NewModuleParameter(storage.moduleId, PARAM_MANUAL_AUTO_MODE);

    // set IsCommand
    Serial.println("set isCommand: /"+String(storage.moduleId)+ PARAM_MANUAL_AUTO_MODE);    
    myMqtt.SetParameterIsCommand(storage.moduleId, PARAM_MANUAL_AUTO_MODE, true);
  
    // create Sensor.Parameter3
    // Sensor.Parameter3 - pump on/ pump off
    Serial.println("new parameter: /"+String(storage.moduleId)+ PARAM_PUMP_ON);    
    myMqtt.NewModuleParameter(storage.moduleId, PARAM_PUMP_ON);

    // set IsCommand
    Serial.println("set isCommand: /"+String(storage.moduleId)+ PARAM_PUMP_ON);    
    myMqtt.SetParameterIsCommand(storage.moduleId, PARAM_PUMP_ON, true);

    // create Sensor.Parameter4
    // Sensor.Parameter4 - current soil humidity
    Serial.println("new parameter: /"+String(storage.moduleId)+ PARAM_HUMIDITY);    
    myMqtt.NewModuleParameter(storage.moduleId, PARAM_HUMIDITY);

    // set Description
    Serial.println("set description: /"+String(storage.moduleId)+ PARAM_HUMIDITY);    
    myMqtt.SetParameterDescription(storage.moduleId, PARAM_HUMIDITY, "Soil moist.");

    // set Unit
    Serial.println("set Unit: /"+String(storage.moduleId)+ PARAM_HUMIDITY);    
    myMqtt.SetParameterUnit(storage.moduleId, PARAM_HUMIDITY, "%");

    // set dbLogging
    Serial.println("set Unit: /"+String(storage.moduleId)+ PARAM_HUMIDITY);    
    myMqtt.SetParameterDBLogging(storage.moduleId, PARAM_HUMIDITY, true);

    // save new module id
    saveConfig();
  }

  subscribe();
  lastAnalogReading = analogRead(PIN_HUM_ANALOG); 
  autoModeOld = !autoMode;
}

 

折り返し処理がないので見にくくなっておりすみません。 (CSSで横の折り返しのみ付きました!)

長くなっていますが、Parameter1/~Parameter4/までのパラメータ設定を自動で行う内容です。

最後に、EEPROMにmoduleIdを書き込んで、サーバーの初期のパラメータを一旦subscribe()で

読み込みます。

あとは、土壌センサの値を読み込んで初期設定です。

ここまでが、setup()の内容になります。

 

一旦、EEPROMに書き込まれると、もういちど書き込もうとしても無効になりますので注意してください。

ESP8266のEEPROMを初期化するには、ツールでファームを書き込むのが一番早いと思います。

ESP8266_Flasher でググってくださいね。

 

8、プログラム 実行プログラム (前半分です)

void loop() {
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
#ifdef DEBUG        
    Serial.print(".");
#endif
  }

  int in = digitalRead(PIN_BUTTON);

  //Serial.println(in);
  if (in == 0)
  {
    while(digitalRead(PIN_BUTTON) == 0)
      delay(100);

    if (state == s_idle || state == s_irrigation_start)
      state = s_irrigation_start;
    else
      state = s_irrigation_stop;
  }
  
  // post auto mode changes
  if (autoModeOld != autoMode)
  {
    autoModeOld = autoMode;

    if (autoMode)    
      valueStr = String("1");
    else
      valueStr = String("0");
    
    topic  = "/"+String(storage.moduleId)+ PARAM_MANUAL_AUTO_MODE;
    result = myMqtt.publish(topic, valueStr, 0, 1);

    Serial.print("Publish topic: ");
    Serial.print(topic);
    Serial.print(" value: ");
    Serial.println(valueStr);  
  }

  // post treshold changes
  if (soilHumidityThreshold != soilHumidityThresholdOld)
  {
    soilHumidityThresholdOld = soilHumidityThreshold;
    valueStr = String(soilHumidityThreshold);
    
    topic  = "/"+String(storage.moduleId)+ PARAM_HUMIDITY_TRESHOLD;
    result = myMqtt.publish(topic, valueStr, 0, 1);

    Serial.print("Publish topic: ");
    Serial.print(topic);
    Serial.print(" value: ");
    Serial.println(valueStr);  
  }
  
  if (IsTimeout())
  {
    startTime = millis();
    // process every second
    int aireading = analogRead(PIN_HUM_ANALOG);

    Serial.print("Analog value: ");
    Serial.print(aireading);
    Serial.print(" ");
    // filter s
    lastAnalogReading += (aireading - lastAnalogReading) / 10;  
    Serial.print(lastAnalogReading); 
   
   // calculate soil humidity in % 
   int newSoilHum = map(lastAnalogReading, MIN_ANALOG_VAL, MAX_ANALOG_VAL, 100, 0);  
   Serial.print(", Soil hum %:");
   Serial.println(newSoilHum); 
        
   // limit to 0-100%
   if (newSoilHum < 0)
      newSoilHum = 0;

    if (newSoilHum > 100)
      newSoilHum = 100;
 
   // report soil humidity if changed
   if (soilHum != newSoilHum)
   {
     soilHum = newSoilHum;
     //esp.send(msgHum.set(soilHum)); 
     
     valueStr = String(soilHum);
     topic  = "/"+String(storage.moduleId)+ PARAM_HUMIDITY;
     result = myMqtt.publish(topic, valueStr, 0, 1);

     Serial.print("Publish topic: ");
     Serial.print(topic);
     Serial.print(" value: ");
     Serial.println(valueStr);  
   }
   

 

最初はWifii接続です。 Disconnectされたときの再接続の対応だと思います。

 

次がスイッチ入力の処理です。

① 乾燥センサの値で自動ON、 ②PC/スマホのUI上からON/OFF、③ 基板のスイッチによるON/OFF

と3種類の方法があります。 ここでは、スイッチの入力をセンシングして、OFF状態なら、ON。

ON状態ならOFFします。

 

次はオートモードの切り替えです。

サーバーからsubscribe()でゲトしたParameter2のデータで、automode (自動モード)のON/OFFを

制御します。ON/OFFの変化があったら、サーバーにPublishします。

 

次はスライダーバーで表示されるHUMIDITY_THRESHOLD (湿度閾値)の変動をチェックします。

オートモード同様に、subscribe()でゲトしたParameter1のデータで閾値の変化をチェックし、

前の値と変化があったら、結果をサーバーにPublishします。

 

土壌湿度(乾燥度)の測定は1000mS毎に行います。(IsTimeout())

lastAnalogReadingには10回の測定値(Airreading) の移動平均値を入れています。

湿度%の計算はmap()を使って、MIN_ANALOG_VALを0%、MAX_ANALOG_VALを100%に

正規化処理を行っています。上の値は実験的に決めて、自分のシステムやセンサーに

あった値にしてくださいねー。(Analog入力、1V超えても壊れはしないようです。1024のままですが)

 

計算値がオーバー/アンダーした場合は、シリアルプリントでは105%とか、-5%とか

表示されますが、サーバーへPublishする値は 0%と100%で頭切りしていますね。

 

9、プログラム 実行プログラム (後半分です)

   // irrigator state machine
   switch(state)
   {
     case s_idle:     
       if (irrigatorCounter <= IRRIGATION_PAUSE_TIME)
         irrigatorCounter++;
       
       if (irrigatorCounter >= IRRIGATION_PAUSE_TIME && autoMode)
       {
         if (soilHum <= soilHumidityThreshold)
           state = s_irrigation_start;       
       }         
       break;
     case s_irrigation_start:
       irrigatorCounter = 0;
       digitalWrite(PIN_PUMP, HIGH);
       //esp.send(msgMotorPump.set((uint8_t)1));       
       valueStr = String(1);
       topic  = "/"+String(storage.moduleId)+ PARAM_PUMP_ON;
       result = myMqtt.publish(topic, valueStr, 0, 1);    

       Serial.print("Publish topic: ");
       Serial.print(topic);
       Serial.print(" value: ");
       Serial.println(valueStr);  
 
       state = s_irrigation;
       break;
     case s_irrigation:
       if (irrigatorCounter++ > IRRIGATION_TIME)
         state = s_irrigation_stop;
       break;
     case s_irrigation_stop:
       irrigatorCounter = 0;
       state = s_idle;
       //esp.send(msgMotorPump.set((uint8_t)0));
       valueStr = String(0);
       topic  = "/"+String(storage.moduleId)+ PARAM_PUMP_ON;
       result = myMqtt.publish(topic, valueStr, 0, 1);    
      
       Serial.print("Publish topic: ");  // add for debug  2017. Aug.9th
       Serial.print(topic);
       Serial.print(" value: ");
       Serial.println(valueStr);   

       digitalWrite(PIN_PUMP, LOW);
       break;
   }
  }
}

 

後は、enum{ 列挙型変数で定義した4つのステートを使ったステートマシンで制御しています。

Case文で分かりやすく記述していますね。(Breakを忘れないこと)

 

1、s_idleステート:Autoモードの場合はIRRIGATION_PAUSE_TIMEに設定された値(msec)

  の間は、次の灌水をしないように制御しています。

  30000設定 の場合、自動灌水は50分間隔になります。灌水時間は10秒で設定されています。

  灌水開始の条件が満たされると、のステートに移行します。

2、」s_irrigation_startステート:irrigatorCounterを0リセットして、ポンプ(水バルブ)をONします。

  同時に、サーバーにポンプがON状態になったことをPublishして知らせます。 

  のステートに移行します。

3、s_irrigationtステート:IRRIGATION_TIMEの設定値(ここでは10(秒))が経過するとポンプ

  (水バルブ)をOFFし、のステートに移行します。

4、s_irrigationt_stopステート:irrigatorCounterを0リセットして、のステートに移行します。

  同時にサーバーにポンプがOFF状態になったことをPublishして知らせます。 

ここまでが、プログラムの説明になります。

内容は分かっていただけたでしょうか?

自分でいじらないといけない部分が分かると、いいんですけどね。

メインの後に関数がいくつかついてますが、説明は割愛させて頂きますね。

 

自分自身がプログラムを始めたばかりで、良く理解できない部分もありますので、分かりにくい

ところはご容赦くださいねー。

 

10、プログラムを起動して確認

 

Part2でEasyIoT Cloudサーバーにアクセスして、手動で作った内容を覚えていますでしょうか?

このプログラム起動して新しく登録されたModuleのパラメータは下記の4つになります。

 

ModuleのModue Type と設定パラメータ

 

Sensor.Parameter1の右側⇒をクリックすると、下記のように設定されています。

パラメータの設定内容

 

追加されたモジュール(起動直後)

 

これまでの、プログラムの内容、実は理解するのに2カ月かかってしまったんですよ。

とくにEEPROMが一回目しか書き込まれていないことを理解できなくて試行錯誤しました。

 

IoTのサーバー、他にも色々あって試しましたが、このサーバーが自由度が高くて個人的には

気にいっています。

あとは、カスタムのModule_Type のHTMLとJavaScriptの記述が理解できるともっと

面白くなりそうな気がします。

(実はWhether Stationのアイコンはカスタムで追加しました)

 

そんなところで、プロトタイプはうまく動作するようになりました。  合格

ホンちゃんのシステムを作るのに、もう少し時間が必要なようです。

このプロジェクト、一旦終わりますが、実際の運用が始まりましたら、また報告しますね。メラメラ

 

あ”-ここまで疲れました! ダウン叫び

それでは、おやすみなさい。 zzz

 

 

 

 

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。