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/export
echo in > /sys/class/gpio/gpio18/direction
#<-- added
exit 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モジュールを少しいじる。
//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.BME280init().then(async() => {
await bme.readBME280Data();
});
console.log('tsl2561 collector start');
tsl.readLuxData();
console.log('hcsr501 collector start');
hcsr.HCSR501init();
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に変わっただけで判断するのはいささか乱暴な気がするので
そこをどう評価するかを検討してみる。