UVC除菌ロボ試作機のメモ

作ったUVC除菌ロボ試作機のメモ。

本体

Raspberry Pi Model B+

cat /proc/device-tree/model
Raspberry Pi Model B Plus Rev 1.2

OS

pi@raspberrypi:~$ cat /etc/debian_version
9.11

ネットワーク回り

基本はwifi。ハードは余っていた古いトングル。無防備にカメラを動かしていると熱暴走でつながらなくなる。トングルに扇風機で風を当てている分には動作する。ファンをつけないとカメラを実運用にのせるには厳しいけれども取り敢えずそのまんま。

なお、移動させないときは有線接続もつかっている。

lsusb
Bus 001 Device 004: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter

電源回り

使用する電圧はラズベリーパイの5v、UVC殺菌灯の20V(17v以上ぐらいでギリギリ点灯可能)、モーターの6v(定格オーバーなのでPMWで調整)。モバイルバッテリーから全て取りたかったが選定ミスのため取り敢えずあるもので間に合わせた。

ラズパイ用+UVC用電力

PDマークが付いていたので20V引っ張れると思って買ったモバイルバッテリーから。USBの口が2つ付いているので、一つはそのままラズパイの電源へ。

もうひとつは、PDのトリガーケーブルで20VのUVC用電力をとりたかった。仕様確認ミスで20Vの出力はされなかった。20V指定のトリガーケーブルをさすとモバイルバッテリーの仕様上最大の15Vがとれた。(15vまでの仕様のUSB PDに20v指定をしていした場合に15vがとれるのは仕様で決められた動作かに関して未確認。)秋月のDCDCコンバーターキットで20vに昇圧している。

モーター用電力

モータードライバーが程よいものが無かったので取り敢えずBD6211F-E2。定格が1Aで130モーターが最大2.2Aぐらい使うので不足。いずれにせよ変更をしないといけないので取り敢えずで、単三電池4本の電池ボックスで6Vで動かしている。

カメラ回り

mjpeg_streamerのシェルを叩き読み込んだカメラ画像をiframeで表示。カメラは普通のUSBカメラ。いま外しているけどラズパイ本体のUSBポートにさして使う。

何かのsoファイルがデフォルトだと読み込めなくてシェルないでパス指定したはず。(記録とるのが遅れたので細かくは忘れた。)カメラ動かすとUSBポートがかなり熱をもつ。扇風機で風を当てていれば動くけれども、実運用はファンをつけないといけない。

動力回り

構成

前輪

コーナンで売っていた100円ぐらいのキャスターで動力はない。

後輪

タミヤのダブルギアボックススポーツタイヤのセット。ダブルギアボックスの中に入っているモーターはデータシートが見つからない。130モーターという企画らしく大体2.2Aが最大定格みたいなのでそれを目安にする。(が、取り敢えず手持ち部品がないのでBD6211F-E2で代用。)

電源

単三電池4本(1.5 v * 4 本 =6 v)を制御用のラズベリーパイ、殺菌灯本体とは別に引っ張っている。

配線

モータードライバーの使い方はこちら。電源から取っている6vフルで動かすとモータードライバーが耐えられないのでpwmで40%まで落として使っている。右車輪用と左車輪用の二つのモータードライバーを使用。使用しているGPIOはソース参照。

UVCライト回り

点灯機能の制御

配線はこちらの通り。GPIOはソース参照。使用している部品は秋月で売っていた2SK4017。

電源

前述のとおりモバイルバッテリーから引き出した15Vを20Vに昇圧したもの。18vぐらいでギリギリ点灯するぐらい。

UVCライト本体

基本的にこちらのとおり。E17殺菌灯はAliExpressがやすいけど日数がかかるしどうせ数100円なのでアマゾンあたりにあるもので良いと思う。

LEDドライバーはAliで探した。国内でもあると思うけど探していない。

E17ソケットはホームセンターで数100円。送料抜きならモノタロウが一番やすかった。モノタロウでもの買う人は一緒に発注しておくといいかも。

UVC作成キットは需要ありそうなのでキットで売り出すかもしれません。手持ち資材があれば、ツイッター(@YoshitakeKitamu)に連絡もらえれば計1000円+送料+消費税ぐらいで譲れます。

Let’s Encryptの認証局が古いAndroidで使えなくなるので延命

いまさらながら、もう少しで古いAndroid(7.1以下?未満? 大体3割強ぐらい?)だとLet’sEncriptのsslが効かなくなることを知った。「出来立てのころは自前のCAだと知名度なくて実質認証できないからよそのCAに協力してもらってたけど基本自立するよ」ということらしい。(意訳)

optionで1年ぐらい延命できるとのことなので対応中。作業メモがてら記録に残しておく。

certbotの場合はoption(–preferred-chain)で元々のCA(DST Root CA X3)をしていすれば良いらしい。なお、–force-renewalオプションを付けていないとまだ期限内だよと更新してくれないから付けておく。まとめると下の感じ。

certbot-auto certonly --preferred-chain "DST Root CA X3"  --force-renewal +いつものオプション

いちおう証明書のCAと内容も確認しておく

openssl s_client -connect ドメイン:ポート | openssl x509 -noout -enddate
openssl s_client -connect ドメイン:ポート -showcerts

見た感じ想定どおり更新されている。程良い試験端末ないので動作確認はしない!

メインのサーバ群はletsencrypt-nginx-proxy-companion使っているけどそっちでの設定方法(あるのか?)はこれから調べる。

(追記)

2020/10/1時点では対応されていなけど、issueがあがっていて使っているsimp_leが対応してからの模様。「先にsimp_le(のフォーク)にイシューたてな!」といっているのですぐではなさそうな雰囲気。

コロナ対策の為のCO2モニター自動換気システム用メモ

コロナ対策で換気が言われているけど、CO2モニターをすれば結構目安になるらしい。自家利用以外(よその店で使える)する際に、資格や手続きが(多分)いらない構成を考えたメモ。

最低限の要件

CO2濃度を計測して、送風機(専用)のON/OFFが出来る

構成

RaspberryPi

センサーで読み込んだCO2濃度を元に送風機(に繋がっているスマートコンセント)のON/OFFを指定する。難しいことはしないのでスペックは気にせずモデルはなんでも良いと思う。

CO2モセンサーモジュール

RaspberryPiにつながるもの。センサーからは+-50ppmぐらいで濃度とれればたぶん十分。使い方はこんな

スマートコンセント

資格やらをいらなくするための肝。送風機は基本交流で動くのでリレースイッチでOn/OffをするとPSEをとらないといけなくなる。外部からAPIで叩けて、きちんと認証を取っているもの。そこそこ値段するので自家利用かつセンサーの近くでOn/Offするならリレースイッチがお買い得。

電気工事の資格はいずれにせよ出番ない気がする。送風機を改造すると別件で事故が起こっても改造したせいになる。そのため改造するわけにはいかない。するとコンセント部分だけを別に切り出すことになるのでPSEの括りは電源タップとかの扱い。自主検査ではダメで検査機関に認証もらうほうほうだと思う。たぶん相当めんどくさい。

送風機

普通の送風機。コンセント側でOn/Offするのでコンセントの容量だけ気にすればよい。送風速度のコントロールはできないのでON/OFFを微妙に制御してコントロール。

とりあえずソース置き場

http://git@github.com:epea/autofan.git

CO2センサー無いので9/16時点では距離センサー(HC-SR04)で代用したイメージ。本題と全く関係ないけど超音波センサーとかの時間が厳密なものはnodeでは扱いにくい。ラズパイにのっけている時点で厳密にはコントロールできないので割り切るならまぁアリだとは思う。

殺菌で使っているUVC部品のメモ

電球単体でかったのはAliから。

かった店ではもう売っていないけどよそでShenzhen Awell Technology Co. Ltdというメーカー製として売っていたものと同じ気がする(スペックがwicm2というワカラナイ単位になっていたり)。ただ、そのメーカーでlinkedinにアカウントがありURLが乗っているがアクセス警告(linkedinのブラックリスト的なものらしい)がでるのでそれ以上アクセスできていない。linkedinのアカウントが怪しい??

CNLightのZW3Z1Wというものの類似品という扱い?wicm2という単位をμw/cm2と読みかえるとスペックがにているので公称30cmで30μw/cm2以上と理解しておけばよさそう。実測はできていないけど間違ってみた時に目がやられるので桁がずれているほどスペックが低いということはなさそう。なお、CNLightのものもウシオのランプよりに較べて公称スペックが明らかに高いので実測値は結構違うかも。

いつもの参考サイトによると、5.1 mJ/cm2 で 99.9% まで不活化程度の論文(査読前)がでている。公称スペックを信じて計算すると、120 cmで7.5 μw/cm2なので666sで99.9%。3分で1/10ぐらい。

コロナ自宅待機用マシーン

家族がコロナにかかるとごはん渡しにいくのも危険ですね。

ということで手持ちのマシンを改造し、「ラジコンのように動く台車(除菌機能付き)」を作成します。もととなるマシンは下のやつ。

家庭内で誰かが感染->自宅内で別の部屋に隔離->ご飯等を台車でリモート運搬->除菌してから家族のもとに台車が帰ってくるというイメージです。

安定してそこそこの値段で収取できる部品の除菌能力が、1mの距離にしいる一般的なウィルスを1/10にするのにかかる時間が150秒程度。

使用するUVC(強力な紫外線)の特色は以下

  • ウィルスや細菌に効果有(参考
  • 効果があるのは紫外線が直接当たったところだけで影になる部分は効かない。
  • 紫外線を浴びると人にも有害(皮膚がん、白内障、大腸がん等)
  • ペット・植物等にも有害
  • プラスチック等の劣化も若干あるので大事なものも注意(1mの距離で夏の屋外程度)
  • 紫外線が出ていない(=ランプが点灯していない)ければ残留物はほぼ無し
  • 紫外線でオゾン(イメージ良いかもしれないが有毒)が若干発生。

タミヤのダブルギアボックスに入っているモータの消費電流

データが見つからなかったので3vでざっくり計測。

ギヤ比344.2:1で片方のモーターで計測

  • タイヤを地面につけないで計ったところ凡そ200mA。
  • 手でタイヤをつかんで無理矢理ロックで凡そ1000mA。(何かが空転している音がするのでモーター自体は完全には止まっていない)

モータ二つあるので壁にささってとまっていると3v*1A*2個で6wぐらい取られる。5倍ぐらい余裕もつと30w。

物自体はこちらにあるノーマルモーターなのかな?

性能分からないと気持ち悪いので後程秋月で売っているのに変えておこう。

モバイルバッテリーのPD対応マーク

モバイルバッテリーにPD対応マークがついているのでPDの規格にあっているものならば出力できるかと勘違いしていた。具体的にはPDマークが付いているポートならば(ケーブルが対応していれば)20V5Aまでとれるものかと。。

そんな勘違いのもとに、PDから20Vをとれるというケーブルを共立さんから購入。

で、さっそく試したところ15Vしかでていない。。

15V
見にくいけど抵抗200KΩのみの最小構成

使用したモバイルバッテリー(Anker PowerCore 10000 PD Redux +)の仕様を再確認すると、20V出力が対応していない。

ある程度の対応をしていたらPDマークは付いているようなので出力側もきちんと確認してから買わないといけない。

ところで20V指定のケーブルで15vを引っ張るのは問題ないのかな??

モータードライバーが動かないので切り分けメモ

ラズパイからモータードライバー経由でモーター2つを動かそうとしているけど期待どおりに動かない。ハードの切り分けなど殆どしたことがないので切り分け作業用のメモを残しておく。基本時系列に沿って書いていく。

切り分け開始前

GPIO22とGPIO13とGPIO17とGPIO27でセットでVREFからの電圧で動かす予定。組み合わせは以下の認識。

GPIO221100
GPIO130110
動作動く(順方向)動かない(ロック)動く(逆方向)動かない(空転)
GPIO22と13(17と22のセットも同じ動作)

配線をいじったりしたが部品によって動作が違いそう。整理しながらやらないとハマりそうなので腰を据えて調べていく。

切り分け開始

モーター動作用の電源は電池ボックスから5.5Vほどで取れている。モーターに電源を直結しても想定どおりの回転方向で動作。

各GPIO毎に電圧をかけて個別にLEDを光らせたところPINからの電圧は正常どおり出ている模様。

gpio -g write n 1
gpio -g write n 0

モータードライバーは秋月で売っていたBD6211Fを手作業で半田付けしたもの。半田付けの失敗などの理由でモータードライバーが正常に動作していない気がする。2つのモータードライバーで動作が違いそうなのでマジックで色を塗って見分けられるようにする。以降ドライバー白/黒。確認した結果は以下(GPIO17,27の組合せでも同じ動作だったが表は省略)

GPIO221100
GPIO130110
想定動く(順方向)動かない(ロック)動く(逆方向)動かない(空転)
結果×
ドライバー白
GPIO221100
GPIO130110
想定動く(順方向)動かない(ロック)動く(逆方向)動かない(空転)
結果×(かろうじて動いている)×
ドライバー黒

結果は

  • 白/黒ともに動かないが、それぞれ別の動きをしている
  • GPIO22,13ともに1の時にロックは動作している
  • ドライバー白の順方向が動作しないとはいえかろうじて動いている

どこかがショートしていて動作に必要な量がモーターまでうまく流れていない気がする

通電状況を調べてみる

白から

GPIO221100
GPIO130110
想定動く(順方向)動かない(ロック)動く(逆方向)動かない(空転)
結果×
V少し(0.1vぐらい)と0を数秒で行き来040
ma少し(0.1vぐらい)と0を数秒で行き来0250以上0
ドライバー白

黒も

GPIO221100
GPIO130110
想定動く(順方向)動かない(ロック)動く(逆方向)動かない(空転)
結果×(かろうじて動いている)×
V少し(0.5vぐらい)と0を1秒で00.05v程度安定0
ma100mA程度と0を1秒で00.1ma程度で安定0
ドライバー黒

これから

Raspberry PIのGPIO初期値

いま作っている殺菌ロボットがラズパイの電源を入れるとモーターが動き出していた。

使っているB+だとBCMで17&27,22&6にモータードライバー2つのFIN/RINをそれぞれつなげていたのだけど、GPIO6だけ初期値が1(IN)。

pi@raspberrypi:~$ gpio readall
 +-----+-----+---------+------+---+---Pi B+--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi B+--+---+------+---------+-----+-----+

XORが1の時に動作をするのでGPIO22&GPIO6が1で動作していた。GPIOの初期値は(起動時にソフト的に書き換えられるけど)ハード的に決まっているもよう。トラブルで電源入れたら動き出すと気持ち悪いので初期値0のGPIOにつなげることにする。

古いRaspberry PIではVS Code remoteは使えない

“Unsupported architecture: armv6l”といわれる。使おうとした端末はRaspberry PI1のB+

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
[11:47:52.753] > ready: b428c5836ec1
[11:47:52.769] > Linux 4.19.66+ #1253 Thu Aug 15 11:37:30 BST 2019
[11:47:52.770] Platform: linux
[11:47:52.890] > b428c5836ec1: running
[11:47:52.950] > Unsupported architecture: armv6l
[11:47:52.952] > b428c5836ec1##27##
[11:47:52.952] Received install output: b428c5836ec1##27##
[11:47:52.953] Unsupported architecture
[11:47:52.953] Terminating local server
[11:47:52.956] Resolver error: The remote host's architecture is not supported
[11:47:52.963] ------

要望はあるけど使えないらしい。zeroでも使えないのね。