felt someone or sumn さて、今回は4番をやる。
When I Want(時間で)
If She Felt Temp/Humidity(温湿度センサから)
When She Saw(カメラから)
If She Felt Someone(人感センサから)
先日注文したHCSR501が届いたので セットアップしてみる。
Pin Assignment チップを裏から見たときに 左からGND、Output、+Powerと なっている。 下のように接続した。 今回もブレッドボードの余った場所に マウントした。 ピンアサインは以下の通り。
Chip
Pi
GND
P6
Out
P12
PWR
P4
さてこの設定を有効にするには以下のように行う。
pi@raspberrypi:/srv/google-home-helper $ sudo sh -c "echo 18 > /sys/class/gpio/export" pi@raspberrypi:/srv/google-home-helper $ sudo sh -c "echo 'in' > /sys/class/gpio/gpio18/direction" pi@raspberrypi:/srv/google-home-helper $ ls -l /sys/class/gpio/gpio18/value -rwxrwx--- 1 root gpio 4096 9月 15 11:52 /sys/class/gpio/gpio18/value pi@raspberrypi:/srv/google-home-helper $ ls -l /sys/class/gpio/gpio18/value 1 pi@raspberrypi:/srv/google-home-helper $ vi /etc/rc.local echo 18 > /sys/class/gpio/exportecho in > /sys/class/gpio/gpio18/directionexit 0
値はファイルの中身を見るだけ。 非常に簡単だ。 0のときは無反応。 1のときは動くものがいるということ。
mysql table まずは他のセンサと同様にmysqlに データを蓄積することとする。
mysql> create table sensor_moti(id integer primary key auto_increment not null , dt_created datetime not null , val_sensor text not null );
setting up module DBモジュールを少しいじる。
insertMoti (param ){ param.table_name ="sensor_moti" ; this .insert (param); } selectMoti (param ){ param.table_name ='sensor_moti' ; return this .select (param); }
get sense さて、Node.jsモジュールにする。
const fs=require ('fs' );const path=require ('path' );const DB =require ('./db' );const dt=require ('date-utils' );getMotionSensorData=async ()=>{ let dir='/sys/class/gpio/' ; let pin=18 ; let value=0 ; let gpio18=path.join (dir, 'gpio' + pin); value=await fs.readFileSync (path.join (gpio18, 'value' )); let now=await new Date (); let db=await new DB (); let data={}; await db.open (); data.dt_created =now.toFormat ('YYYY/MM/DD HH24:MI:SS' ); data.val_sensor =new String (value).replace (/\r?\n/g ,'' ); await db.insertMoti (data); db.close (); setTimeout (await getMotionSensorData,20 * 1000 ); return (value==1 )?true :false ; } exports .HCSR501init =()=> { console .log ('motion sensor daemon started' ); getMotionSensorData (); }
これをHCSR501Collector.jsというファイルで保存。 んで、センサー用のモジュールsensor.jsに 取り込んでみる。
const bme=require ('./BME280Collector' );const tsl=require ('./TSL2561Collector' );const hcsr=require ('./HCSR501Collector' );console .log ('bme280 collector start' );bme.BME280 init().then (async () => { await bme.readBME280Data (); }); console .log ('tsl2561 collector start' );tsl.readLuxData (); console .log ('hcsr501 collector start' );hcsr.HCSR501 init();
pi@raspberrypi:/srv/google-home-helper $ forever stop sensor.js pi@raspberrypi:/srv/google-home-helper $ forever start sensor.js
これで20秒間隔でデータがさきほど作ったテーブルに insertされるはず。
mysql> select * from sensor_moti limit 1 ; + | id | dt_created | val_sensor | + | 1 | 2018 -09 -22 00 :00 :01 | 0 | + 1 row in set (0.00 sec)
Next さて次は、人感センサのデータを評価してみる。 0が1に変わっただけで判断するのはいささか乱暴な気がするので そこをどう評価するかを検討してみる。
コメント: