製作した自動水やり機を小型化及び省電力化するように改良していきたいと思います。
改良内容
- Arduino UNO からArduino NANO に変更
- スリープモードの実装
- 電源をACアダプタ から モバイルバッテリーに変更
スリープモードによる省電力化により、モバイルバッテリーでも長時間使用できるようにないりました(大体1週間ぐらい)。コードがなくなったので使用時の取り回しがラクになります。
目次
- 使用部品
- 本体の加工
- 回路の製作
- 電源について
- 組立
- プログラム
❶ 使用部品
・使用部品
No | 品名 | 単価 | 数量 | 備考 |
1 | 電動灯油ポンプ | ¥700 | 1 | |
2 | タッパー | ¥100 | 1 | |
3 | 防水ケーブルグランド | ¥80 | 1 | |
4 | USD端子 (オス) | ¥50 | 1 | |
5 | モバイルバッテリー | ¥2,500 | 1 | CHE-061-IOT |
6 | Arduino Nano | ¥500 | 1 | |
7 | ユニバーサル基板 | ¥30 | 1 | |
8 | ターミナルブロック | ¥25 | 3 | |
9 | トランジスタ(2SC3422) | ¥40 | 1 | |
10 | 抵抗① 330Ω | ¥10 | 1 | Arduinoートランジスタ間の抵抗 |
11 | 抵抗② 10KΩ | ¥10 | 1 | プルダウン抵抗 |
12 | 抵抗③ 470Ω | ¥10 | 2 | 土壌センサ |
13 | 酸化金属皮膜抵抗 1.5Ω | ¥80 | 1 | |
14 | ダイオード (1N5406) | ¥50 | 1 | 還流ダイオード |
15 | トランジスタ(2SC1815) | ¥5 | 1 | |
16 | 絶縁体の板 | ー | 1 | |
17 | ステンレス線 | ¥50 | 1 | |
18 | 配線コード | \170/m | 1 | 2芯ケーブル |
19 | 端子台 | ¥250 | 1 |
リンク
リンク
・消耗品
No | 品名 |
1 | 配線コード |
2 | 丸形圧着端子 |
3 | ピン型圧着端子 |
4 | 両面テープ |
5 | 接着剤 |
➋ 本体の加工
・使用部品
No | 品名 | 単価 | 数量 | 備考 |
1 | 電動灯油ポンプ | ¥700 | 1 | |
2 | タッパー | ¥100 | 1 | |
3 | 防水ケーブルグランド | ¥80 | 1 |
・タッパーと電動灯油ポンプの加工
タッパーには電動灯油ポンプと防水ケーブルグランドを取り付ける穴を空けます。
電動灯油ポンプの電池ボックス部分を外しモーター配線をむき出しにします。後にモーター配線には部品位置を確認した後、長さを確認して丸形圧着端子を取り付けます。
・組立
タッパーと電動灯油ポンプは接着剤で付けます。
❸ 回路の製作
・使用部品
No | 品名 | 単価 | 数量 | 備考 |
1 | Arduino Nano | ¥500 | 1 | CHE-061-IOT |
2 | ユニバーサル基板 | ¥30 | 1 | |
3 | ターミナルブロック | ¥25 | 3 | |
4 | 抵抗① 330Ω | ¥10 | 1 | Arduinoートランジスタ間の抵抗 |
5 | 抵抗② 10KΩ | ¥10 | 1 | プルダウン抵抗 |
6 | 抵抗③ 470Ω | ¥10 | 2 | 土壌センサ |
7 | トランジスタ(2SC1815) | ¥5 | 1 |
下に回路図を掲載します。
大きいもしくは流れる電流量が大きい、酸化金属皮膜抵抗、ダイオード (1N5406)、トランジスタ(2SC3422)については直接、端子台につけるためユニバーサル基板には付けませんでした。
❹ 電源について
電源はモバイルバッテリーを使用しました。通常のモバイルバッテリーでは電力使用量が低いと電源が落ちるようになっているため使用できません。IoT機器に対応した「cheero Canvas 3200mAh」を使用しました。
❺ 組立
端子台を中心にポンプ配線、基板、電源線を配線します。土壌センサは以前製作したものを流用しました。
❻ プログラム
今回作成するプログラムの流れは下の写真の通りです。
プログラムとして下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <avr/sleep.h> #include <avr/wdt.h> int InPutPin=A7;//土壌センサ入力ピン int OutPutPin=2;//モーター出力ピン int SensorValue=0;//土壌センサの値を入れる変数 int OutPutValue=1000;//モーター値を入れる変数 void setup(){ Serial.begin(9600);//シリアルモニターを使うための設定 pinMode(InPutPin,INPUT); pinMode(OutPutPin,OUTPUT); set_sleep_mode(SLEEP_MODE_PWR_DOWN); wdt_enable(WDTO_8S); } void loop(){//センサの値確認 SensorValue=analogRead(InPutPin);//センサの値を取得 Serial.print("センサー値=");//センサの値をシリアルモニターに表示 Serial.println(SensorValue);//センサの値をシリアルモニターに表示 delay(1000); //条件に応じてモーターを動かす if(SensorValue<350){ digitalWrite(OutPutPin,HIGH); } sleep_mode(); } |
プログラムとしては思ったより短いと思います。
土壌センサのほど良い値を確認した後は
- シリアルモニターを使うための設定
- センサの値をシリアルモニターに表示
はいらないので削除してもOKです。