daikon.berryのアイコン画像
daikon.berry 2026年08月15日作成 © MIT
製作品 製作品 閲覧数 52
daikon.berry 2026年08月15日作成 © MIT 製作品 製作品 閲覧数 52

爬虫類飼育用UVA、UVB測定器を作ってみた

爬虫類飼育用UVA、UVB測定器を作ってみた

はじめに

爬虫類を飼育しているとUVBの量が気になりますよね。
でも製品を購入すると無茶苦茶高いです。
謎のメーカの物が15000円位で売ってますが、信用できるのか?
不安があったため、信頼できるセンサーで自作しました。

必要な部品

UVセンサー:QWIIC UV SENSOR AS7331 ¥4672
I2C線:FLEXIBLE QWIIC CABLE - 500MM ¥467 無くてもよいです
ARDUINO NANO 互換機:DFRDUINO NANO ATMEGA328 EVAL BRD ¥1002
      ARDUINOであれば、ほかの物でもOKだと思います
電源スイッチ:家に転がっていたもの
9V電池スナップ:エルパ(ELPA) 電池ボックス PP-006NH ¥198
液晶パネル:OLEDモジュール SSD1306 ¥400円位
配線:家に転がっていたもの

仮組

キャプションを入力できます
Arduino Nano互換機 VIN:9V電池の+ GRD:9V電池のマイナス(間にプッシュスイッチを入れています)
          A4:SDA A5:SCL +5V:AS7331の+ GRD:AS7331のGRD
Arduino Nano互換機とはQwiicカプラを使っているので、コネクタでつなぎました
配線でつなぐなら+3.3Vのほうが良いかも

Arduino Nano互換機 → AS7331 → OLEDモジュールとつないでいます。
Qwiicの線を半分に切って、AS7331とOLEDモジュールに使用しました。
OLEDモジュール:赤線VDD 黒線GRD 黄線SCK 青線SDA

プログラム

チャッピーに聞いて、ArduinoIDEを開き、必要なライブラリーをインストール
#include <Wire.h>
#include <SparkFun_AS7331.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Wire.h (標準ライブラリ)
種類: Arduino標準ライブラリ(インストール不要)
役割: Arduinoと各種センサー・ディスプレイ間で行われるI2C通信を制御するための基本ライブラリです。特別な導入をしなくても、コードの先頭でインクルードするだけで使用できます。

SparkFun_AS7331.h
種類: サードパーティ製ライブラリ(ライブラリマネージャでインストール)
役割: 今回使用した紫外線センサー「AS7331」を制御するための専用ライブラリです。センサーの初期化、測定モードの切り替え(ワンショット測定)、UVA・UVB・UVCのデータ取得などを行います。
インストール: Arduino IDEのライブラリマネージャで「SparkFun AS7331」と検索してインストールします。

Adafruit_GFX.h
種類: サードパーティ製ライブラリ(ライブラリマネージャでインストール)
役割: Adafruit社が提供するグラフィック描画の共通基盤となるライブラリです。有機EL(OLED)ディスプレイなどの画面に対して、文字、図形、線などを描画するための共通の仕組みを提供します。
インストール: ライブラリマネージャで「Adafruit GFX Library」と検索してインストールします。

Adafruit_SSD1306.h
種類: サードパーティ製ライブラリ(ライブラリマネージャでインストール)
役割: 今回使用したOLEDディスプレイのコントローラーチップ「SSD1306」を制御するための専用ライブラリです。画面のクリアやカーソル位置の指定、文字サイズの変更などを行います(内部で上記の Adafruit_GFX を利用して動作します)。
インストール: ライブラリマネージャで「Adafruit SSD1306」と検索してインストールします。

※インストール時に「依存関係のある他のライブラリ(Adafruit BusIOなど)も一緒にインストールしますか?」と聞かれた場合は、すべて「はい(Install all)」を選択してください。

完成したスケッチ

チャッピーに聞いたら、AS7331の出力はμW/cm2で出てくるらしい。信用してみる

#include <Wire.h> #include <SparkFun_AS7331.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); SfeAS7331ArdI2C myUVSensor; void setup() { Serial.begin(115200); Wire.begin(); // ディスプレイの初期化 if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while(1); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); // 紫外線センサーの初期化 if (myUVSensor.begin() == false) { Serial.println("Sensor failed to begin. Please check your wiring!"); while (1); } // コマンド(ワンショット)モードの準備 if (myUVSensor.prepareMeasurement(MEAS_MODE_CMD) == false) { Serial.println("Sensor did not get set properly."); while (1); } } void loop() { // 1. 測定開始コマンドを送信 if (ksfTkErrOk != myUVSensor.setStartState(true)) { Serial.println("Error starting reading!"); } // 2. 変換時間分だけ待機 delay(2 + myUVSensor.getConversionTimeMillis()); // 3. データを読み込む if (ksfTkErrOk != myUVSensor.readAllUV()) { Serial.println("Error reading UV."); } // 4. 値の取得 float uva = myUVSensor.getUVA(); float uvb = myUVSensor.getUVB(); float uvc = myUVSensor.getUVC(); // シリアルモニタ出力 Serial.print("UVA: "); Serial.print(uva); Serial.print(" | UVB: "); Serial.print(uvb); Serial.print(" | UVC: "); Serial.println(uvc); // ディスプレイ表示 display.clearDisplay(); // タイトル (文字サイズ1) display.setTextSize(1); display.setCursor(0, 0); display.println("AS7331 UV Sensor"); // UVA表示 (文字サイズ1でコンパクトに、または大きめに調整) display.setCursor(0, 16); display.print("UVA:"); display.print(uva, 1); display.println(" uW/cm2"); // UVB表示 display.setCursor(0, 32); display.print("UVB:"); display.print(uvb, 1); display.println(" uW/cm2"); // UVC表示 display.setCursor(0, 48); display.print("UVC:"); display.print(uvc, 1); display.println(" uW/cm2"); display.display(); delay(1000); }

入れ物を作る

このままだと使いづらいので、ケースを設計
なんとなく部品の寸法を計測して、干渉部分はにげつつ

キャプションを入力できます

キャプションを入力できます

3Dプリンタで造形
造形の写真撮り忘れたので、いきなり組立状態
基盤の固定は樹脂を溶かしてカシメました。

キャプションを入力できます

蓋を閉じて完成!

キャプションを入力できます

計測してみた

うちのフトアゴちゃんに嫌な顔されながら計測してみました
半年使用したビバリアのスパイラルUVB デザート 26Wで53μW/cm2でした
本日、8/1のAM9:00 晴れ(薄雲あり)で100μW/cm2でしたので、少し少ないのかな?
OLEDモジュールのちらつきでうまく撮れませんでした。(目視ではちらつきはわからないです)

キャプションを入力できます

最後に

誰かの参考になれば幸いです。素人の電子工作のため、間違いがあったらすいません。
話半分に聞いてください。ありがとうございました。

ログインしてコメントを投稿する