こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。
前回の記事の続きになります。
はじめに
前回はLEDライトを常時点灯しているだけの仕組みを作りました。
今回は土壌湿度センサーで測定した値が3000未満になった場合にLEDライトが点灯されるように改良したものになります。
完成動画を先にアップしておきます。
対象バージョン
Raspberry pi4 Model B
土壌湿度センサー(SEN0114)
node.js ver.4.2.6
回路図の設定
前回のLEDの回路で、17番端子(3.3V)に接続していましたが、こちらを7番端子(GPIO4)に変更しています。
GPIO4=>LEDアノード=>LEDカソード=>220Ω=>9番端子(GND)という構成になります。
(図で表示できるといいのですが。。。)
プログラム構成
コードに関しては参考サイトのものを少し手を加えさせて頂いてます。
最後のresult値が3000未満ならLDEを点灯させるようにしています。
アナログ変換の部分がよくわかっていないので勉強しないとですね。。。
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 led = new Output('GPIO4');
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) {
led.write(HIGH);
} else {
led.write(LOW);
}
};
setInterval(readValue, 500);
};
raspi.init(initHandler);
まとめ
測定した結果の動画を添付したいけど、GIFにしたほうがいいのか。
取り敢えず画像ですみませんw
次回は水やりができるように機能を追加したいところですが、水をどこから引っ張ってくるのがいいか。
最終的にはプラスチック製のタンクから水を取って、植物にシャワー状にまきたいです。
ただ、どういった角度でまくのかといったことも検討しないといけないのかなと、
この辺が一番難しいところなのかもしれないですね。
コメント