#026 黄帯認定プロジェクト 携帯土壌湿度センサー 初号機【49歳から始めるArduino -黒帯を目指す】

 今までの単体作業から初のプロジェクトを作って見たいと思います。家族も喜ぶ、分かりやすいテーマということで、自動水やり機のための土壌湿度センサーを作ります。


必要な追加購入品目
  1. USBケーブル 2,49 Eur
  2. Arduino Nano 互換機 15,99 Eur / 5個
  3. 電線 5,46Eur
  4. メスオスケーブル 1,25 Eur/40本
  5. 10kΩ抵抗2つ 6,68 Eur/200個
  6. 適当な大きさの段ボールか不要なキャップ付きペットボトル(太い)


使った道具
  1. カッター
  2. ホットボンド
  3. 定規
  4. ニッパー
  5. テスター
  6. ハンダごてとハンダ


目標:携帯土壌湿度センサーを作り、その場で計測出来る。同センサーは拡張性があり、読み取り値により水をプランターに供給出来るモジュールを接続可能。
耐水性:段ボール紙利用のためないが、必要があれば外部を覆う形で一定の耐防水防塵性能を有数する
連続可動:単純計測の場合は、1日2回、3つの計測地点で3ヶ月
利用電源:AAA 6本(9V)
費用:1000円ぐらいを目標(電池を含まず)
ロードマップ:
  • WiFiによりデーターを転送
  • スリープ機能実装により、1ヶ月は電池交換なしで、1日3回の計測を実施
  • 温度湿度計を追加実装し、土壌湿度との関連性を証明する
  • 段ボールからプラスチックケースに実装


参考にしたWeb:


半完成品です。6cmX15cm程の大きさです。ここで見えるのは
  • 電源取り用に改造したUSB
  • 電源スイッチ
  • ダンボールの上にホットボンドで固定したLCDとArduino Namo
  • Arduino Nanoはミニ・ブレッドボードに固定していあります
  • 電池ボックス。2つの電池ボックスをダンボール上にホットボンドで固定しました
  • 土壌湿度センサー


arduino and yl-69.jpg


こちらは拡大図。ちょっと見えにくいのですが、ミニブレッドボードの奥の1列は赤く塗ってあります。5VのPinが不足したので、ここを充当しました。赤く塗ったのは間違いが内容にするためです。
Arduino Nano + Mini breadboard.jpg


 LCDの固定はこのようにしました。4つのステーをタンボールを丸めてホットボンドで固定し作成。LCDの4隅にあるネジ止め部にこのステーをホットボンドで固定。LCD背後はチップ部と液晶背面の高さの差があるので、一部段ボールを利用して補助的に下から支えてあります。4本のステーで強度がありそうなら、この補助段ボール支えは不要と後から思いました。
Arduino+LCD.jpg


 LCDの接続回路図ですが、こちらを参考にしました。ここでは抵抗が入っています。ところがなくても良い回路図が出ていて、どちらが正しいか分かりません。このLCDは5V仕様です。追って、抵抗を外して、テストしてみたいと思います。

arduino_st7032_sch.png
例えばこんな感じです。


 無事に初号機は完成して、試験運用をしています。表示される数値と実際の土の湿り度が感覚的に結びつくのか、測定値のばらつきは、センサーの寿命は等です。ひと段落ついたら、パッケージイングをして、かっこいいプロトタイプにします。


 参考までにスケッチはこのようになります。 コメントは随分と省いてしまいましたが、センサーを2つ利用するつもりで書きました。実際の運用は一つのセンサーのみを使用しています。


int sensor_pin0 = A0;
int sensor_pin1 = A1;
int output_value0 ;
int output_value1 ;

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
//#define I2C_ADDR    0x27 //普通はここ
#define I2C_ADDR    0x3F

LiquidCrystal_I2C             lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);

void setup() {
 Serial.begin(9600);
 Serial.println("Reading From the Sensor ...");
 delay(2000);

 lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
 lcd.setBacklightPin(3,POSITIVE);
 lcd.setBacklight(HIGH);
 lcd.home ();                   // go home
 lcd.print("Reading from the");
 lcd.setCursor ( 0, 1 );        // go to the 2nd line
 lcd.print("Sensor...");
  }
void loop() {

 output_value0= analogRead(sensor_pin0);
 output_value0 = map(output_value0,1023,0,0,100);
 Serial.print("Mositure0 : ");
 Serial.print(output_value0);
 Serial.println("%");

 output_value1= analogRead(sensor_pin1);
 output_value1 = map(output_value1,1023,0,0,100);
 Serial.print("Mositure1 : ");
 Serial.print(output_value1);
 Serial.println("%");
 
 lcd.clear();
 // lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
 lcd.home ();                   // go home
 lcd.print("Mositure: ");
 lcd.print(output_value0);
 lcd.print("%");
 
 lcd.setCursor ( 0, 1 );        // go to the 2nd line
 lcd.print("Mositure1: ");
 lcd.print(output_value1);
 lcd.print("%");
 delay(1000);
 }

#027 Arduino 黄帯認定プロジェクト LCDを使わないで、複数のLEDを使った距離計を作る

コメント