今までの単体作業から初のプロジェクトを作って見たいと思います。家族も喜ぶ、分かりやすいテーマということで、自動水やり機のための土壌湿度センサーを作ります。
必要な追加購入品目
- 土壌湿度センサー 8,16Eur/5個
- 電池箱(AAA 6本収納) 2,9 Eur
- USBケーブル 2,49 Eur
- Arduino Nano 互換機 15,99 Eur / 5個
- 電源ON /OFF用スイッチ6,99 Eur/ 5個
- 電線 5,46Eur
- オスメスコネクター 9,99 Eur/10組
- メスオスケーブル 1,25 Eur/40本
- 10kΩ抵抗2つ 6,68 Eur/200個
- ミニブレッドボード 2,5 Eur
- 適当な大きさの段ボールか不要なキャップ付きペットボトル(太い)
使った道具
- カッター
- ホットボンド
- 定規
- ニッパー
- テスター
- ハンダごてとハンダ
目標:携帯土壌湿度センサーを作り、その場で計測出来る。同センサーは拡張性があり、読み取り値により水をプランターに供給出来るモジュールを接続可能。
耐水性:段ボール紙利用のためないが、必要があれば外部を覆う形で一定の耐防水防塵性能を有数する
連続可動:単純計測の場合は、1日2回、3つの計測地点で3ヶ月
利用電源:AAA 6本(9V)
費用:1000円ぐらいを目標(電池を含まず)
ロードマップ:
- WiFiによりデーターを転送
- スリープ機能実装により、1ヶ月は電池交換なしで、1日3回の計測を実施
- 温度湿度計を追加実装し、土壌湿度との関連性を証明する
- 段ボールからプラスチックケースに実装
参考にしたWeb:
- 話題の電子工作「arduino」を使って、自動水やりロボットを作ったので、その手順を解説!(2015.02) ->省電力スケッチについての記載あり。非常に読みやすく参考になった
- USB 端子配置(配線方法)のまとめ -> USBケーブルの改造時に利用しました
- Guide for Soil Moisture Sensor YL-69 or HL-69 with Arduino -> 英語で、読みやすくセンサーを理解するのに利用しました
半完成品です。6cmX15cm程の大きさです。ここで見えるのは
- 電源取り用に改造したUSB
- 電源スイッチ
- ダンボールの上にホットボンドで固定したLCDとArduino Namo
- Arduino Nanoはミニ・ブレッドボードに固定していあります
- 電池ボックス。2つの電池ボックスをダンボール上にホットボンドで固定しました
- 土壌湿度センサー
こちらは拡大図。ちょっと見えにくいのですが、ミニブレッドボードの奥の1列は赤く塗ってあります。5VのPinが不足したので、ここを充当しました。赤く塗ったのは間違いが内容にするためです。
LCDの固定はこのようにしました。4つのステーをタンボールを丸めてホットボンドで固定し作成。LCDの4隅にあるネジ止め部にこのステーをホットボンドで固定。LCD背後はチップ部と液晶背面の高さの差があるので、一部段ボールを利用して補助的に下から支えてあります。4本のステーで強度がありそうなら、この補助段ボール支えは不要と後から思いました。
LCDの接続回路図ですが、こちらを参考にしました。ここでは抵抗が入っています。ところがなくても良い回路図が出ていて、どちらが正しいか分かりません。このLCDは5V仕様です。追って、抵抗を外して、テストしてみたいと思います。
例えばこんな感じです。
無事に初号機は完成して、試験運用をしています。表示される数値と実際の土の湿り度が感覚的に結びつくのか、測定値のばらつきは、センサーの寿命は等です。ひと段落ついたら、パッケージイングをして、かっこいいプロトタイプにします。
参考までにスケッチはこのようになります。 コメントは随分と省いてしまいましたが、センサーを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を使った距離計を作る
コメント