ウイルスに対する効果と安全なオゾン濃度の検証
注)この記事の書き始めは実は2020/5頃です。めんどくさくて後々になってましたが、無理くり書き終えましたので公開します
とりあえず、家の居間にはダイキンの空気清浄機を設置している。去年ぐらいに安売りしてて衝動買いに近い感じで買ったけど、買っておいてよかったなぁと思った。コロナ関係で半端ない価格になっているので注意(2020/04)。
エアコンと空気清浄機の加湿ストリーマでウイルスなんかは退治できるみたいだけど・・・そこはダイキンさんを信じて、汚れないように定期的に清掃して使ってます。
それに加えウイルスを家に入れないという観点からは、玄関でコートなどを脱ぎコート掛けも急遽玄関に移動しました。ここで、玄関は靴やら、コートやら外と直接つながるところでもあるし、うちの場合はトイレも玄関ホールにつながっています。玄関の空間除菌(ウイルスの不活化なので除菌って言葉は使いたくないけど・・・)をしたいなぁと思っていた。
そこで、昔、消臭のために買った業務用のオゾン発生器を思い出す・・・。
車の消臭とか部屋の消臭とかに使っていたものです。結構危険なぐらいのオゾンが出るのでメーカーの使い方にも締め切った部屋で人は外に出で畳数に応じて燻煙するという使い方で説明があります。この発生器の動作時間をコントロールして、何とか問題ない濃度で使うことができないだろうかと考えてみました。ちなみにオゾンのウイルスに対する効果はインフルエンザで実験した論文やウイルスに対しての効果を示したデータがネットで提示されています。
まぁ、上の論文の10ppmとか20ppmはとても危険な濃度ですのでウイルスどころか人も危険となります。ウイルスの不活化という点では低濃度で連続して長時間運転する必要がありそうです。
安全な範囲で利用するのであれば0.02ppm~0.05ppm程度で利用すべきと思います。
でも色々読んでみると脱臭には結構有効な感じだけど、ウイルスに対する効果は・・・
しないよりマシ!!
レベルなのかもしれないですね。
MQ131センサーでのオゾン濃度計測
実際のオゾン濃度を確認するためにはオゾン濃度計で計測する必要があるとおもいます。オゾンの広がりや空間容積など様々な要因がからむので計算しにくいです。製品としてオゾン濃度を計測するテスターが販売されています。
けっこうお高いです。常にオゾンに暴露される職業なら買いますが、年に1度使うか使わないかなので、買うものではないですねw。とりあえず自作の道を探ると、どうやらMQ131というセンサーでオゾン濃度を測定できるとのこと。
安くはないですけど、それでもだいぶお求めやすい価格になりました。時間かかりますけどAliExpressで買うともっと安くなります。
このMQ131のセンサーは低濃度用(Low Concentration)と高濃度用(High Concentration)の2種類があります。両方乗ってる製品もあるみたいです。
計測範囲は低濃度用で10-1000ppb(0.01-1ppm)、高濃度用で10-1000ppmみたいです。室内のオゾン濃度を計測するのであれば低濃度用になると思います。見分け方は、プラスチックの黒いカバーの方が低濃度用。網キャップのほうが高濃度用な感じです。下に、低濃度用のデータシートの抜粋を掲載します。
あとはマイコンとつなぐわけですが、この類のガスセンサーは5V系の動作です。ライブラリも探してみたら
あたりが見つかりました。MQSensorsLibは高濃度用のサンプルしかなかったので、Arduino-MQ131-driverを使おうと思います。ReadMeを見ると、センサー部分のみで接続しているみたいですが、まぁ基板からはがせばいいでしょう(雑)。
ヒーター部をMOSFETでスイッチングしてるみたいですが入れっぱなしじゃダメなんでしょうかね?。コードを読んでみてもヒーターのオンオフって必要なのかなとも思いましたが、まずは忠実に再現してみます。MOSFETは手持ちの2SK4017を使いました。データシートをみるとヒーターで900mW(5Vだと180mA)程度流れるみたいなので2SC1815トランジスタ(最大Ic=150mA)では、ちょっと役不足かもです。
というわけでセンサーも5V系、ライブラリもArduino前提なので、今回はESP8266ではなくArduino NANOを使います。サクサクっと接続してみました。販売元からマニュアルを送ってもらい回路図を見るましたが、結局抵抗外したりしなきゃならないみたいで、それならセンサー部を外したほうが早いという結論になりましたw。このライブラリを使うならセンサー単品の方がいいかもしれません。
早速サンプルを動かします。
キャリブレーション後、Samplingが表示され少し待つと濃度が出ます。
うーん。なんかマイナス表示になります。なんでだろうとサンプリング中にテスターでA0を計測するとテスター接続時には濃度はマイナスにならない・・・(濃度が正しいかは別)。
たぶん並列に接続しているテスターの内部抵抗影響なのでは?
つまり、バランス抵抗がテスター接続後(内部抵抗が並列接続されるので)で変化しており、それが影響していると推測。要はRL(回路図ではR1)の抵抗値が疑わしい。RLの1MΩの抵抗をデジタルテスタで計測すると1.009MΩ(1009KΩ)。その数値をbeginに渡すRL値として使ったらマイナス表示しなくなりました。この1MΩの抵抗の精度で濃度が結構変わります。あらかじめデジタルテスターで1MΩ(1000KΩ)に近い抵抗を使うべきです。
また電源電圧も5vに近い方がいいと思います。安定化電源で検証するといいと思います(やるとは言ってないw)
あとこのセンサーは48時間の余熱が必要です・・・
なげぇっすよ・・・・・・
MQシリーズのガスセンサーは全部こんな感じですw
基本は接続して放置というスタイルなので、LCD1602などを接続して表示できるようにしておきます。ケースには設置してませんが適当に探してセットする予定です。
ライブラリのサンプルに追記したスケッチを掲載します。LCD1602をI2C接続してLiquidCrystal_I2Cライブラリを使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
#include <MQ131.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); void setup() { lcd.init(); lcd.backlight(); Serial.begin(115200); // Init the sensor // - Heater control on pin 2 // - Sensor analog read on pin A0 // - Model LOW_CONCENTRATION // - Load resistance RL of 1MOhms (1000000 Ohms) MQ131.begin(2,A0, LOW_CONCENTRATION, 1000000); Serial.println("Calibration parameters"); Serial.print("R0 = "); Serial.print(MQ131.getR0()); Serial.println(" Ohms"); Serial.print("Time to heat = "); Serial.print(MQ131.getTimeToRead()); Serial.println(" s"); lcd.setCursor(0, 0); lcd.print("Calibration ok"); } void loop() { Serial.println("Sampling..."); MQ131.sample(); Serial.print("Concentration O3 : "); Serial.print(MQ131.getO3(PPM)); Serial.println(" ppm"); Serial.print("Concentration O3 : "); Serial.print(MQ131.getO3(PPB)); Serial.println(" ppb"); Serial.print("Concentration O3 : "); Serial.print(MQ131.getO3(MG_M3)); Serial.println(" mg/m3"); Serial.print("Concentration O3 : "); Serial.print(MQ131.getO3(UG_M3)); Serial.println(" ug/m3"); float o3_ppb = MQ131.getO3(PPB); lcd.clear(); lcd.setCursor(0, 0); lcd.print("O3 : "); lcd.print(o3_ppb); lcd.print(" ppb"); char buf[50]; if(o3_ppb>100){ sprintf(buf,"Danger >100"); }else if(o3_ppb>40){ sprintf(buf,"Caution 40-100"); }else{ sprintf(buf,"Safety <40"); } lcd.setCursor(0, 1); lcd.print(buf); delay(1000); } |
濃度表示はppb(ppmの1/1000)での表示です。2行目には目安として
- 安全 40ppb(0.04ppm)未満
- 注意 40-100ppb(0.04-0.1ppm)
- 危険 100ppb(0.1ppm)超
の表示も加えました。
ちなみに、オゾン発生器の前においてオゾンを浴びせたら濃度が危険をはるかに超えたので検出はできていると思います。