Skip to main content

Grove - I2C UVセンサー (VEML6070)

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Grove - I2C UVセンサー(VEML6070)は、I2Cプロトコルインターフェースを備えた高度な紫外線(UV)光センサーです。紫外線(UV)は波長が10nmから400nmの電磁放射で、可視光より短く、X線より長いものです。このセンサーは320〜410nmの光を最も効果的に検出し、太陽紫外線の強度をデジタルデータに変換します。

このモジュールはVEML6070をベースにしており、太陽紫外線に対する線形感度を持ち、外部抵抗によって簡単に調整できます。

さらに、閾値ウィンドウ設定を伴うアクティブアクノリッジ(ACK)機能により、UVセンサーがUVIアラートメッセージを送信することが可能です。強い太陽紫外線条件下では、スマートACK信号をソフトウェアプログラミングによって簡単に実装できます。

特徴

  • 長時間の太陽紫外線曝露下での優れた紫外線測定性能
  • 優れた紫外線感度と線形性
  • 優れた温度補償
  • 高い動的検出解像度
  • アクノリッジ機能(ACK)をサポート

仕様

項目
動作電圧3.3V / 5V
スペクトル感度範囲320 ~ 410 nm
ピーク感度355 nm
UVA感度5 μW/cm2/ステップ(典型値)
インターフェースI2C
I2Cアドレス0x38(データLSB) / 0x39(データMSB)
caution

実際には、このセンサーには3つのI2Cアドレスがあります。

典型的な用途

  • 太陽紫外線指標
  • 化粧品/屋外スポーツ用携帯製品
  • 消費者向け製品

ハードウェア概要

ピンアウト

対応プラットフォーム

ArduinoRaspberry Pi
caution

上記で対応可能とされているプラットフォームは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能です。そのため、ユーザーは独自のソフトウェアライブラリを作成する必要があります。

はじめに

Arduinoで遊ぶ

ハードウェア

必要な材料

Seeeduino V4.2Base ShieldGrove - I2C UV Sensor (VEML6070)
今すぐ購入今すぐ購入今すぐ購入
note

1 USBケーブルを優しく差し込んでください。そうしないとポートを損傷する可能性があります。内部に4本のワイヤーがあるUSBケーブルを使用してください。2本のワイヤーしかないケーブルではデータを転送できません。お持ちのケーブルが適切かどうかわからない場合は、こちらをクリックして購入できます。

2 Groveモジュールを購入すると、各モジュールにGroveケーブルが付属しています。Groveケーブルを紛失した場合は、こちらをクリックして購入できます。

  • ステップ 1. Grove - I2C UV Sensor (VEML6070) を Grove-Base Shield の I2C ポートに接続します。

  • ステップ 2. Grove - Base Shield を Seeeduino に差し込みます。

  • ステップ 3. USBケーブルを使用して Seeeduino をPCに接続します。

note

Grove Base Shield がない場合でも、以下のようにこのモジュールを直接 Seeeduino に接続することができます。

SeeeduinoGroveケーブルGrove - I2C UV Sensor (VEML6070)
GNDGND
5V または 3.3VVCC
SDASDA
SCLSCL

ソフトウェア

caution

Arduinoを初めて使用する場合は、開始する前にArduinoの使い方を参照することを強くお勧めします。

  • ステップ 1. Seeed_VEML6070 ライブラリをGithubからダウンロードします。

  • ステップ 2. ライブラリのインストール方法を参照して、Arduino用のライブラリをインストールします。

  • ステップ 3. Arduino IDEを再起動します。以下の3つの方法のいずれかで例を開くことができます:

    1. Arduino IDEで直接開く:File --> Examples --> Seeed_VEML6070 --> INT_mode のパスをたどります。

    2. コンピュータ上で開く:XXXX\Arduino\libraries\Seeed_VEML6070-master\examples\INT_mode フォルダ内にある INT_mode.ino をクリックします(XXXX はArduino IDEをインストールした場所です)。

    3. または、以下のコードブロックの右上にあるアイコン をクリックして、以下のコードをArduino IDEの新しいスケッチにコピーすることもできます。

#include "Seeed_VEML6070.h"


/*SAMD core*/
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif

VEML6070 sensor;

char *UV_str[]={"低レベル","中程度のレベル","高レベル","非常に高い","極端"};

err_t read_UV()
{
err_t ret=NO_ERROR;
u16 step;
sensor.wait_for_ready();
CHECK_RESULT(ret,sensor.read_step(step));
SERIAL.print("UVステップ = ");
SERIAL.println(step);
RISK_LEVEL level=sensor.convert_to_risk_level(step);
SERIAL.print("UVレベルは ");
SERIAL.println(UV_str[level]);
SERIAL.println(" ");
SERIAL.println(" ");
SERIAL.println(" ");
return ret;
}



void setup()
{
SERIAL.begin(115200);
delay(10);
SERIAL.println("シリアル開始!!");
delay(1000);
if(sensor.init())
{
SERIAL.println("初期化失敗!!!");
}
/*しきい値は145ステップ*/
/*有効化*/
sensor.set_interrupt(INT_145_STEP,ENABLE);
}


void loop()
{
if(read_UV())
{
SERIAL.print("UVセンサーの読み取りに失敗しました!!");
}
//sensor.enable();
//sensor.disable();
delay(1000);
}
note

ライブラリには2つのデモがあります:
basic_demo.ino

    >この例では、シリアルからUVインデックスとUVレベルを取得できます。データのポーリングを行います。

INT_mode.ino

    >センサーモジュールにはINTパッドがあり、VEML6070のACKピンに接続されています。UVしきい値を102ステップまたは145ステップ(2つの選択肢のみ)に設定できます。UV値が制限を超えると、INTピンは低出力を出します。INTピンをホストの割り込みピンに接続することで、プログラムの動作効率を向上させることができます。  
caution

ライブラリファイルが更新される可能性があります。このコードは更新されたライブラリファイルには適用されない場合がありますので、最初の2つの方法を使用することをお勧めします。

  • ステップ 4. デモをアップロードします。コードのアップロード方法がわからない場合は、コードのアップロード方法を確認してください。

  • ステップ 5. Arduino IDEのシリアルモニターを開きます。Tool-> Serial Monitor をクリックするか、++ctrl+shift+m++ キーを同時に押します。ボーレートを 115200 に設定します。

success

すべてが正常に動作している場合、UV光をこのモジュールに照射すると、以下のような情報が表示されます:

4シリアル開始!!
cmd reg=32
UVステップ = 20
UVレベルは低レベル



UVステップ = 125
UVレベルは低レベル



UVステップ = 511
UVレベルは低レベル

アラート機能

ハードウェア概要の部分で確認できるように、ACKピンは割り込み信号として機能するために使用できます。良いニュースとしては、102ステップと145ステップの2つの閾値を選択できることです。悪いニュースとしては、独自の数値を設定することはできず、102と145のみが有効です。ACKピンはデフォルトでLowを出力し、設定した閾値をUV値が超えるとACKピンがHighを出力します。それでは、例のコード INT_mode.ino に戻りましょう。

46行目では、デフォルトの閾値設定が145になっています。102を使用したい場合は、以下のようにコードを変更してください:

old.ino
sensor.set_interrupt(INT_145_STEP,ENABLE); // この行を変更
modify.ino
sensor.set_interrupt(INT_102_STEP,ENABLE); // 修正済み

Raspberry Piで遊ぶ (Grove Base Hat for Raspberry Piを使用)

ハードウェア

  • ステップ 1. このプロジェクトで使用するもの:
Raspberry PiGrove Base Hat for RasPiGrove - I2C UV Sensor (VEML6070)
今すぐ購入今すぐ購入今すぐ購入
  • ステップ 2. Grove Base HatをRaspberry Piに接続します。
  • ステップ 3. Grove - I2C UV Sensor (VEML6070)をBase HatのI2Cポートに接続します。
  • ステップ 4. USBケーブルを使用してRaspberry PiをPCに接続します。

ソフトウェア

  • ステップ 1. ソフトウェア設定に従って開発環境を構成し、grove.pyをRaspberry Piにインストールします。
  • ステップ 2. 以下のコマンドを実行してコードを実行します。
# Python3用のvirtualenv
virtualenv -p python3 env
source env/bin/activate
# コマンドを入力
grove_uv_sensor

以下はgrove_uv_sensor.pyのコードです。

from __future__ import print_function
from grove.i2c import Bus
import time


# デバイスのI2Cアドレス
VEML6070_DEFAULT_ADDRESS = 0x38

# VEML6070コマンドセット
VEML6070_CMD_ACK_DISABLE = 0x00 # ACK無効
VEML6070_CMD_ACK_ENABLE = 0x20 # ACK有効
VEML6070_CMD_ACK_THD_102 = 0x00 # ACK閾値102ステップ
VEML6070_CMD_ACK_THD_145 = 0x10 # ACK閾値145ステップ
VEML6070_CMD_IT_1_2T = 0x00 # 統合時間 = 1/2T
VEML6070_CMD_IT_1T = 0x04 # 統合時間 = 1T
VEML6070_CMD_IT_2T = 0x08 # 統合時間 = 2T
VEML6070_CMD_IT_4T = 0x0C # 統合時間 = 4T
VEML6070_CMD_RESERVED = 0x02 # 予約済み、1に設定
VEML6070_CMD_SD_DISABLE = 0x00 # シャットダウン無効
VEML6070_CMD_SD_ENABLE = 0x01 # シャットダウン有効
VEML6070_CMD_READ_LSB = 0x38 # データのLSBを読み取る
VEML6070_CMD_READ_MSB = 0x39 # データのMSBを読み取る

class VEML6070():
def __init__(self, address = VEML6070_DEFAULT_ADDRESS):
self._addr = address
self._bus = Bus()
self.write_command()

def write_command(self):
"""提供された値からUVライトコマンドを選択"""
COMMAND_CONFIG = (VEML6070_CMD_ACK_DISABLE | VEML6070_CMD_IT_1_2T | VEML6070_CMD_SD_DISABLE | VEML6070_CMD_RESERVED)
self._bus.write_byte(VEML6070_DEFAULT_ADDRESS, COMMAND_CONFIG)

def read_uvlight(self):
"""データを読み取る VEML6070_CMD_READ_MSB(0x73) と VEML6070_CMD_READ_LSB(0x71), uvlight MSB, uvlight LSB"""
data0 = self._bus.read_byte(VEML6070_CMD_READ_MSB)
data1 = self._bus.read_byte(VEML6070_CMD_READ_LSB)

# データを変換
uvlight = data0 * 256 + data1

return {'u' : uvlight}


def main():

veml6070 = VEML6070()

## 終了ハンドラ ##
# この関数は、control-Cを押したときにPythonがスタックトレースを表示するのを防ぎます
def SIGINTHandler(signum, frame):
raise SystemExit

# この関数は、終了時にコードを実行できるようにします
def exitHandler():
print("終了します")
sys.exit(0)

while True:
light = veml6070.read_uvlight()
print("UV値: {0}".format(light['u']))
print(" *********************************** ")
time.sleep(1)

if __name__ == '__main__':
main()
success

すべてが正常に動作すれば、以下の結果が表示されます。


(env)pi@raspberrypi:~ grove_uv_sensor
UV値: 0
UV値: 0
UV値: 0
UV値: 0
^C終了します

このプログラムは、ctrl+cを押すだけで終了できます。

回路図オンラインビューア

リソース

プロジェクト

こちらはこの製品の紹介ビデオです。簡単なデモが含まれており、ぜひお試しください。

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...