こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。
前回の記事の続きになります。
はじめに
前回はセンサーの値が一定値以下になるとLEDが点灯するものを作りました。
今回はセンサーの値が一定値以下になるとポンプで水を汲み上げるようにします。
対象バージョン
Raspberry pi4 Model B
土壌湿度センサー(SEN0114)
小型ポンプ 3-5V 100-200mA (メーカー不明。Amazonで4個入りでチューブ付きだったので購入しました。)
node.js ver.4.2.6
回路図の設定
入門キットにあった回路を参考に作ったのであんまり良くわかっていません。(理解できたら記載します!)
簡単に書くと、センサーの値を見てGPIO17のON/OFFを切り替えます。
GPIO17の先には抵抗=>トランジスタ=>ダイオード=>リレー=>ポンプが接続されています。
Raspberry PiのGPIOから出力される電流が16-50mAとのことで、ポンプの電流が100-200mA必要ではパワー不足になってしまいます。
そこでリレーを使って電流を増幅させてあげれば良いようです。
プログラム構成
const raspi = require('raspi');
const gpio = require('raspi-gpio');
const HIGH = gpio.HIGH;
const LOW = gpio.LOW;
const Input = gpio.DigitalInput;
const Output = gpio.DigitalOutput;
var initHandler = function() {
var d_in = new Output('GPIO10');
var d_out = new Input('GPIO9');
var clk = new Output('GPIO11');
var cs = new Output({ 'pin' : 'GPIO8', 'pullResistor' : gpio.PULL_UP });
var pump = new Output('GPIO17');
var clock = function(count) {
for(var i = 0; i < count; i++) {
clk.write(HIGH);
clk.write(LOW);
}
};
var readValue = function() {
cs.write(LOW);
var i;
var ch = 0;
var cmd = ( ch | 0x18 ) << 3;
for(i = 0; i < 5; i++) {
d_in.write(( cmd & 0x80 ) ? HIGH : LOW );
cmd <<= 1;
clock(1);
}
var result = 0;
for(i = 0; i < 13; i++) {
result <<= 1;
clock(1);
if(d_out.read()) {
result |= 0x1;
}
}
cs.write(HIGH);
console.log('result : ', result);
if(result < 3000) {
pump.write(HIGH);
} else {
pump.write(LOW);
}
};
setInterval(readValue, 500);
};
raspi.init(initHandler);
まとめ
ホースの系が5mmあるので水の勢いが強いです。
ポンプをもう少し小型のものか、水の量を抑えるようにしないといけないです。
次はそのあたりの対策と外側の入れ物を作っていきたいと思います。
コメント