raspberrypi カラーセンサーS11059-02DT

秋月電子でデジタルカラーセンサーS11059-02DTをゲットした。
I2Cなので接続は簡単だが、例によってレジスタへの読み書きが必要になる

幸い秋月電子のセンサーには、仕様の説明とレジスタの中身およびデータの
送受信例があったので、それを参考にプログラミングして見た

sudo i2cdetect -y 1でアドレスの確認

アドレスは0x2a
smbusを使用
秋月の資料を参考に

1.スリープを解除
 アドレス0x2aの0x00レジスタに 0x80を書き込み

2.ADCにコントロール信号をおくる
 アドレス0x2aの0x00レジスタに
 レジスタ4ビット目がハイゲインとローゲイン(40セルと4セル)
 下位2ビットが179.2 22.4 1.4msの積算時間
 0x0bだと1011だからハイゲンでmsをセット
ただしモードが固定時間モードの場合でマニュアルモードだと倍の時間になる
 これのセットはマニュアルは下位3ビット目 1マニュアル 0固定
 
3.積算時間待機

4.データの読み出し
 0x03レジスタから8バイト分 上位1バイトと下位1バイトでペア
 上位x256+下位

#!/usr/bin/env python
#秋月の資料より
import smbus
import time
bus = smbus.SMBus(1)
addr = 0x2a
#0x0b,0x0a,0x09,0x08 ハイゲイン 40せる
#0X03,0x02,0x01,0x00 ローゲイン 4セル
#179.2 22.4 1.4 0.875
ctrl=[0x0b,0x0a,0x09,0x08,0x03,0x02,0x01,0x00]
#スリープ解除
bus.write_byte_data(addr , 0x00, 0x80) 
#ADCリセット
bus.write_byte_data(addr , 0x00, ctrl[0] )
#待機
time.sleep(1)
#読み出し8バイト アドレス0x2a レジスタ0x03
data = bus.read_i2c_block_data(addr , 0x03, 8)
#上位ビットx256+下位ビット
#R = data[0] *256 + data[1] <<8=x256 
R = (data[0] << 8) + data[1]
print ('R:',R)
G = (data[2] <<8) + data[3]
print ('G:',G)
B = (data[4] *<<8) + data[5]
print ('B',B)
#赤外
IR = data[6] *256 + data[7]
print ('IR',IR)
無事読み出し完了
カテゴリー iot