電子工作」カテゴリーアーカイブ

M5Stack+MHZ19Bで通信機能詰め込みCO2センサー

キットの組み立て方はこちらから(MHZ19Cも同一手順)

M5StackとCO2センサーモジュールMHZ19Bを使って通信機能を詰め込んだCO2センサーを作成した。一応1000ppm警告のLEDも付いている。使える通信(と表示)は以下。

  • もとから付いている画面
  • シリアルでのPC等へのUSB経由出力
  • Wifi経由の出力(サーバになる、2.4G回線のみ)
  • bluetooth出力

画面とシリアル出力は常に起動。Wifiとbluetoothは起動時に選択した場合のみ。

画面はこんな感じ。

シリアル出力はこんな感じ。teraterm等で確認するのが楽かも。転送速度は9600。Windows用のCO2閲覧ソフトでも(これに限らずJSONできたら)みられる用にする予定。

[yoshitake@localhost ~]$ stty -F /dev/ttyUSB0 raw 9600
[yoshitake@localhost ~]$ sudo  cat /dev/ttyUSB0
{"CO2":402}
{"CO2":401}

WifiはM5Stack起動時にAボタン(画面向かって左側)が押されていたら起動。繋がった際に画面にipアドレスが出力されるのでそのアドレスにアクセスするとJSONが返ってくる。192.168.1.15がM5StackのIPだとするとhttp://192.168.1.15/で値がJSONで返却される。呼び出し元のページがあるとIoTなこといろいろできる。なお、Wifiに10秒以上つながらなかったら設定モードに入る。設定はスマホアプリのESPTouchというものを使用。英語だけれどもパスワード入れさえすれば動く。注意点はスマホのWIFIが2.4Gのアクセスポイントに繋がっていないといけない。

bluetoothは起動時にBボタン(画面真ん中)が押されていたら起動。CO2Sensorという名前のデバイスが現れるのでそちらに接続すると数値のみが定期的(いまは6秒)で送られる。AndroidであればSerial Bluetooth Terminalというもので取り敢えず値がとれる。

なお、起動後にAボタンとCボタン(画面向かって右側)を長押しするとキャリブレーション(今の濃度を400とみなして基準値のリセット)を実行する。「日光の当たらない場所(できれば夜間)」で「20分以上きれいな外気」にあててから実行する。補正する為の比較対照が無い状態でも通常±50ppm以内には収まる。

ソースはこちら

ハードはM5StackBasicとこちらのキット

Raspberry Pi Pico + SSD1306 + CircuitPython

表題の組み合わせでハマったのでメモ

環境

  • Raspberry Pi Pico
  • CircuitPython(adafruit-circuitpython-raspberry_pi_pico-en_GB-6.2.0.uf2)
  • SSD1306ドライバーのOLED(128*32)
  • ライブラリ(adafruit-circuitpython-bundle-6.x-mpy-20210430)

動いたライブラリ

adafruit_displayio_ssd1306.mpy他(adafruit_scd_30.mpyはセンサーのライブラリで不要)

~/develop/scd30_pico/lib$ ls
adafruit_bus_device    adafruit_displayio_ssd1306.mpy  adafruit_scd30.mpy
adafruit_display_text  adafruit_framebuf.mpy

コード。

# SPDX-FileCopyrightText: 2020 by Bryan Siepert, written for Adafruit Industries
#
# SPDX-License-Identifier: Unlicense
import time
import board
import busio
import displayio
import terminalio
from adafruit_display_text import label
import adafruit_displayio_ssd1306

import adafruit_scd30

displayio.release_displays()

i2c_oled = busio.I2C(scl=board.GP19, sda=board.GP18)
display_bus = displayio.I2CDisplay(i2c_oled, device_address=0x3C)
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=32)

scd = adafruit_scd30.SCD30(i2c_oled)

try:
    while True:
        CO2 = scd.CO2
        print(CO2)
        text_group = displayio.Group(max_size=10)

        # Draw a label
        text = str(CO2)
        text_area = label.Label(terminalio.FONT, text=text, color=0xFFFFFF, x=0, y=4)
        text_group.append(text_area)
        display.show(text_group)

        time.sleep(2)
except Exception as e:
    print(type(e))
    print(e.args)
    print(e)

動かなかったライブラリ

adafruit_ssd1306

事象

初期化すると、PCにUSBとして認識されなくなる

i2c = busio.I2C(board.GP21, board.GP20)
display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c)

上記で下の感じ

[4936305.202012] usb 2-2: new full-speed USB device number 74 using xhci_hcd
[4936305.202193] usb 2-2: Device not responding to setup address.
[4936305.410209] usb 2-2: Device not responding to setup address.
[4936305.618018] usb 2-2: device not accepting address 74, error -71
[4936305.746021] usb 2-2: new full-speed USB device number 75 using xhci_hcd
[4936305.746221] usb 2-2: Device not responding to setup address.
[4936305.954217] usb 2-2: Device not responding to setup address.
[4936306.162031] usb 2-2: device not accepting address 75, error -71
[4936306.162095] usb usb2-port2: unable to enumerate USB device

バグなのか使い方か不明。まだissueの流れが早すぎて見るの諦めた。

CO2センサーMHZ19CとPCをUSB(シリアル変換)で接続

MHZ19CとPCをUSBで接続する。多分最小構成。

少しだけしゅっとさせたハード stores(少し安め) / amazon

widdows10向けアプリ

Windows向けの閲覧アプリ EPEA-CO2-NDIR-05(USB接続CO2センサー)を指してこちらをインストールすれば使えます。(ドライバーが無い場合はこちらのドライバーも必要です。分からない場合は両方入れておけば間違いはないです。)

v0.3.0

2021/04/18公開 ダウンロード先

CSVダウンロード機能追加

新しいもの13万件分(連続稼働させている場合約1週間分)のデータをCSVとしてダウンロードします。

暖機中の500やエラー、起動待ちの-1/-9もダウンロードされます。

日時のデータにはミリ秒まで入っています。エクセルの標準だと細かいデータまでは表示されませんが必要性に応じて適宜、書式を設定してください。

v0.2.0

2021/04/17公開 ダウンロード先

このバージョンで使用されているライブラリ(※)に環境依存のものが含まれています。おおよその環境で動くものを選択したつもりですがこのバージョンにあげたら動かなくなった場合はライブラリの可能性が高いです。このバージョンから動作しない場合はご連絡ください。

※ C:\Program Files (x86)\Epea\CO2Viewer\SQLite.Interop.dll です。これで伝わる人は適宜入れ替えてください。

手動キャリブレーション機能追加

現在の濃度を400ppm(おおよそ外気平均)として補正する機能です。USBを刺したまま換気をし綺麗な外気に20分以上さらした状態で実行してください。

ログ出力追加

C:\Users\ユーザ名\AppData\Roaming\epea\co2viewer にall.logが出力されるようになりました。設定はC:\Program Files (x86)\Epea\CO2Viewer\CO2View.exe.config 内にあります。

DB出力追加

C:\Users\ユーザ名\AppData\Roaming\epea\co2viewer\co2viewerdb.sqlite に出力されるようになりました。出力機能はこれから作りますがとり急ぎDB Browser(SQlite)等で閲覧可能です。

v0.0.3

2021/04/15公開 ダウンロード先

閲覧機能

CO2センサーから読み取った値を画面上に表示します。USBを刺したポートを選んで接続を押すと値を読み込みます。なお、誤差が100ppm程度ある目安で使用してください。(それでも1万円未満で市販されているCO2センサーの中ではおそらく最高精度です。)

0は初期状態、-1は読み込み準備中、-9はエラー、その他値はセンサーが返した値です。

USBを刺してから2分ほど暖機にかかるのでその後から正確になります。

数値800未満は背景が緑、800以上1000未満は背景が黄色、1000以上は赤になります。自治体等の基準がまだ不明瞭ですがおおよその目安にしてください。

自動キャリブレーションON/OFF機能

基準値補正を自動で行うか否かを選択する機能です。24時間以内に観測された最低値を外気基準値として補正する機能です。自動キャリブレーションをONにしていると換気ができていない場合や、電圧が不安定な場合等に値が不正確になることが多いのでOFFにした利用を推奨しております。(選べるようにしておいて欲しいという声がありましたので機能を付けています。。。)

Windowsアプリの話が長くなってきましたがやっとここからMHZ19CとPCをUSBで接続する。多分最小構成の話再開。

必要なもの

USBシリアル変換モジュール

USBとシリアルを変換するやつ。MHZ19Cで200mAぐらい必要なのでPCから給電されたものがそのままピンに出てくるタイプでないといけない。CH380GというICのものなら大体ドライバーがPCに入っていると思うけどなければ自分でインストール。

参照 動作確認できたもの Amazonの購入元KKHMF 3個 CH340モジュール STC マイクロ コントローラー ダウンロード USBターンTTLシリアル

MHZ19C

定番のCO2センサーモジュール。

データシート

2021/03時点送料込み国内最安値

秋月電子(送料抜きだと最安値。他のものも一緒に買う人はこっちが安い)

しゅっとさせたやつ(EPEA-CO2-NDIR-05)

stores amazon 手数料の関係でstoresの方が安い。

PC

USBがあるもの。電源が弱いやつだと不安定になると思う。試しているOSはCentOS7

接続方法

以下のように接続(前がモジュール後ろがMHZ19)

  • 5V-VIN
  • GND-GND
  • TXD-Rx
  • RXD-Tx

プログラム

軽く探したところ使いやすそうなライブラリはまだ見つからなかった。ラズパイ想定のライブラリから抜粋して動作確認。python3.7.1でpySerialいれてある。/dev/ttyUSB0は環境によって(都度)変わるので適宜読みかえ

[yoshitake@localhost usbpy]$ pyenv version
3.7.1 (set by /home/yoshitake/develop/usbpy/.python-version)

pip install pyserial
import serial
import traceback
import time

serial_dev = '/dev/ttyUSB0'


def connect_serial():
    return serial.Serial(serial_dev,
                         baudrate=9600)


def mh_z19():
    try:
        ser = connect_serial()
        result = ser.write(b"\xff\x01\x86\x00\x00\x00\x00\x00\x79")
        s = ser.read(9)
        return {'co2': s[2]*256 + s[3]}
    except:
        traceback.print_exc()
    finally:
        ser.close()


def main():

    while 1:
        value = mh_z19()
        co2 = value["co2"]
        print('CO2:', co2)
        time.sleep(5)


if __name__ == '__main__':
    main()

出力はしたみたいな感じで、暖機が終わるまで少しかかるはず。(ただ、MHZのメーカーはちょいちょい動きをかえてくるのでだいたいの目安。)

yoshitake@localhost usbpy]$ python test2.py 
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 500
CO2: 465
CO2: 451

アンドロイドの野良アプリ。動作確認レベルの出来だけど値は取得できる。自分でインストールできる人向け。 こちら

ラズパイでMHZ19Bが動作しない時のエラーパラーン(切り分け用)

UARTが有効になっていない。

pi@raspberrypi:~ $ sudo cat /boot/config.txt |grep uart
enable_uart=0
pi@raspberrypi:~ $ sudo python3 -m mh_z19
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 265, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyAMA0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/mh_z19/__init__.py", line 62, in mh_z19
    ser = connect_serial()
  File "/usr/local/lib/python3.7/dist-packages/mh_z19/__init__.py", line 58, in connect_serial
    timeout=1.0)
  File "/usr/local/lib/python3.7/dist-packages/serial/serialutil.py", line 240, in __init__
    self.open()
  File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 268, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyAMA0: [Errno 2] No such file or directory: '/dev/ttyAMA0'
A dependency job for serial-getty@ttyAMA0.service failed. See 'journalctl -xe' for details.
null

CO2モニター用基板EPEA-CO2-NDIR-04で他とシリアル接続するときのイメージ

ハードシリアルの0,1番ピンをセンサーモジュールとの接続に使っているのでソフトシリアルで2,3番ピンあたりを開く。

あとはTX,RXとGNDを対向のものにつなぐ。PCだと(普通は)シリアル接続の口がないのでUSBシリアル変換モジュールを間にはさむ。なお、USBシリアル変換モジュールでも多少の給電はできるけどNDIRセンサーを動かすには電力不足なので主電源は通常のUSB差込口になる。

なお、MHZ19のエラーが出たときにライブラリはハードシリアルにメッセージを出すようになっています。ハードシリアル上書きしているのでライブラリ書き換えないとメッセージは拾えません。

#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 2
#define STX 3

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);


void setup()
{
  Wire.begin();
  delay(1000);
  
  softSerial.begin(9600);
  delay(100);
  Serial.begin(9600);
  delay(100);

  myMHZ19.begin(softSerial);
  myMHZ19.autoCalibration(false);
  delay(1000);
}

int co2 = 0;
void loop()
{
  co2 = myMHZ19.getCO2();
  Serial.println(co2);
  delay(1000);
}

赤外線バリアモジュールの使い方

安くて簡単に使える衝突防止センサー

電圧は3.3v-5V。

VCCを3.3Vから5VにつなぎGNDをグランドにつなぐ。OUTから出てくるものはセンサーの近くにものがあると0,無いと1。つなぎ方もシンプルだし袋空けて10分もすれば大隊使えると思う。

Arduinoのサンプルソース

int PIN_IN = 2;
int PIN_OUT = 3;

void setup() {
  pinMode(PIN_IN, INPUT);
  pinMode(PIN_OUT, OUTPUT);
  Serial.begin(9600);
  Serial.println("start");
}

void loop() {
  Serial.println("loop");
  // ものが近く
  if( digitalRead(PIN_IN) == 0 ){
    Serial.println("PIN_IN == 0");
    digitalWrite(PIN_OUT, LOW); 
  } else {
    // ものが遠く
    Serial.println("PIN_IN == 1");
    digitalWrite(PIN_OUT, HIGH); 
  }

  delay(1000);                      
}

ON/OFF判定は楽なので、近づいたら光る消すぐらいならマイコンなくても簡単。

CO2センサー用基板EPEA-CO2-NDIR-04 Rev3.0.9の使い方

このページのライセンス

MITライセンス。すきにしてください。あわよくばセンサーをショップ及びAmazon(MHZ19B/MHZ19C)で売っているのでそちらから買ってください。

(12/27追記) サンプルで付けているソースのライセンスは各ライブラリのライセンス(MHZ19のライブラリはLGPL等)に従ってください。

はじめに

EPEA-CO2-NDIR-04 Rev3.0.9MH-Z19BMH-Z19CをAtmega328PU(内部クロック8Mhz/3.3v)で動かすための基盤です。マイクロUSBのDIP化基板のみAliexpressで調達したもので入手に時間がかかりますが他の部品は秋月電子等ですぐに手に入ると思います。

(1/16追記) 3端子レギュレータは半田をしやすいように意図的に幅を広めています。そのため奥迄は入りません。

必要部品

最低限動作スケッチ

最低限の動作をさせるためのスケッチです。基盤は0,1をソフトシリアルで使用していますが、ハードシリアルのピンなのでその内別のピンに変更します。なお、下記はMHZ19B用(外観)です。MHZ19C(外観)の場合はこちら(github)になります。

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);

  Wire.begin();
  lcd.begin();
}
int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}

回路図

応用例

プログラムの書き換え方法はこちら

数値が一定以上だったら音をならす。

数値が一定以上だったらLEDを光らせる。

数値が一定以上だったら何かを動作させる。

別のものとシリアル通信する。 サンプル

ネットワーク系は部品が足りないので苦手です。ネットワーク対応モジュール搭載基板がその内でるかもしれません。

ケース用SVG/Scad

3mmアクリル板をレーザーカッターで作る用のデータ github

その他必要資材は 

  • ボルトm3の30mm4本
  • 1mm厚程度のナット 6個(基盤のスペーサー替わり4,基板押えるよう対角線に計2つ)
  • ふたを抑える用のナット4個
  • ワッシャ任意

CO2センサー用基板EPEA-CO2-NDIR-04 Rev3.0.8の使い方

このページのライセンス

MITライセンス。すきにしてください。あわよくばセンサーをショップで売っているのでそちらから買ってください。

(12/27追記) サンプルで付けているソースのライセンスは各ライブラリのライセンス(MHZ19のライブラリはLGPL等)に従ってください。

はじめに

EPEA-CO2-NDIR-04 Rev3.0.8はMH-Z19B、MH-Z19CをAtmega328PU(内部クロック8Mhz/3.3v)で動かすための基盤です。マイクロUSBのDIP化基板のみAliexpressで調達したもので入手に時間がかかりますが他の部品は秋月電子等ですぐに手に入ると思います。3端子レギュレータの半田はかなり狭いです。次の3.0.9では広めにしました。

注意事項

LCD(液晶)は秋月電子様取り扱いのAE-AQM1248基盤を使用していますが、配線間違えによりSCL/SDAが逆になっています。当該部品を使用する場合はSCL/SDAを手作業で修正する必要があります。

必要部品

最低限動作スケッチ

最低限の動作をさせるためのスケッチです。基盤は0,1をソフトシリアルで使用していますが、ハードシリアルのピンなのでその内別のピンに変更します。

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);

  Wire.begin();
  lcd.begin();
}
int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}

本来の回路図

実際の基板(Rev3.0.8)はLCDのSCLとSDAが逆になっています。

応用例

数値が一定以上だったら音をならす。

数値が一定以上だったらLEDを光らせる。

数値が一定以上だったら何かを動作させる。

ネットワーク系は部品が足りないので苦手です。ネットワーク対応モジュール搭載基板がその内でるかもしれません。

CO2センサーCCS811のエラー

先日から稼動し始めた店のCO2センサーで使っているモジュールのCCS811だけど、エラーでモジュールの電源入れ直せというメッセージと共に落ちていた。

pi@raspberrypi:~/ccs811 $ sudo systemctl status ccs811.service
● ccs811.service - ccs811 moniter Daemon
Loaded: loaded (/home/pi/ccs811/ccs811.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-21 13:12:40 JST; 4s ago
Main PID: 22651 (python3)
CGroup: /system.slice/ccs811.service
└─22651 /home/pi/ccs811/.env/bin/python3 /home/pi/ccs811/ccs811.py
Oct 21 13:12:45 raspberrypi python3[22651]: Traceback (most recent call last):
Oct 21 13:12:45 raspberrypi python3[22651]: File "/home/pi/ccs811/ccs811.py", line 79, in
Oct 21 13:12:45 raspberrypi python3[22651]: main()
Oct 21 13:12:45 raspberrypi python3[22651]: File "/home/pi/ccs811/ccs811.py", line 60, in main
Oct 21 13:12:45 raspberrypi python3[22651]: wrapper = CCSWrapper()
Oct 21 13:12:45 raspberrypi python3[22651]: File "/home/pi/ccs811/ccs811.py", line 18, in init
Oct 21 13:12:45 raspberrypi python3[22651]: self.ccs811 = adafruit_ccs811.CCS811(self.i2c)
Oct 21 13:12:45 raspberrypi python3[22651]: File "/home/pi/ccs811/.env/lib/python3.7/site-packages/adafruit_ccs811.py", line 121, in init
Oct 21 13:12:45 raspberrypi python3[22651]: "Device returned a error! Try removing and reapplying power to "
Oct 21 13:12:45 raspberrypi python3[22651]: RuntimeError: Device returned a error! Try removing and reapplying power to the device and running the code agai

自動でonn/offしようと考えると、データシートみると最大で54 mA(常時観測のモード1だと30 mAなので大抵はこっちで考えてもOKかも)なのでGPIOのoutput直でon/offきりかえは無理。

無人で再起動かけようとするとトランジスタも必要かな。

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円+送料+消費税ぐらいで譲れます。