#203 Color I2C Brick
Overview
カラーセンサを使用したBrickです。
センサーより読み取った赤、緑、青、赤外線(明るさ)の4つのデータを、I2Cにて取得することができます。
Connecting
I2Cコネクタへ接続します。
Support
Arduino | RaspberryPI | IchigoJam | Edison |
---|---|---|---|
◯ | ◯ | ◯ | ◯ |
S11059 Datasheet
Document |
---|
S11059 Datasheet |
Register
Slave Address |
---|
0x2A |
Schematic
Library
for Arduino
-
ライブラリ名:「FaBo 203 Color S11059」
- Library Document
for RapberryPI
- pipからインストール
pip install FaBoColor_S11059
- Library GitHub
- Library Document
Sample Code
for Arduino
I2Cコネクタに接続したColor Brickにより、赤、緑、青、赤外の値を読み取り、シリアルモニタに出力します。
//
// FaBo Brick Sample
//
// #203 Color Sensor I2C Brick
//
#include <Wire.h>
#define DEVICE_ADDR 0x2A // スレーブデバイスのアドレス
#define CTLREG 0x00
uint16_t red = 0;
uint16_t green = 0;
uint16_t blue = 0;
uint16_t infrared = 0;
void setup()
{
Serial.begin(9600); //シリアル開始 表示用
Wire.begin(); //I2C開始
}
void loop()
{
//色の取得
getColor();
//色の出力
Serial.print("R:[");
Serial.print(red);
Serial.print("] G:[");
Serial.print(green);
Serial.print("] B:[");
Serial.print(blue);
Serial.print("] IR:[");
Serial.print(infrared);
Serial.println("]");
delay(500);
}
void getColor()
{
uint16_t color= 0;
// 待機解除
Wire.beginTransmission(DEVICE_ADDR);
Wire.write(CTLREG);
Wire.write(0x83); // ADC reset wakeup
Wire.endTransmission(false);
Wire.beginTransmission(DEVICE_ADDR);
Wire.write(CTLREG);
Wire.write(0x03);
Wire.endTransmission(true);
delay(500);
Wire.beginTransmission(DEVICE_ADDR);
Wire.write(0x03);
Wire.endTransmission(false);
Wire.requestFrom(0x2A,8,true);
//色データの取得
// 赤
color = Wire.read() << 8;
color |= Wire.read();
red = color;
// 緑
color =0;
color = Wire.read() << 8;
color |= Wire.read();
green = color;
// 青
color =0;
color = Wire.read() << 8;
color |= Wire.read();
blue = color;
// 赤外
color =0;
color = Wire.read() << 8;
color |= Wire.read();
infrared = color;
return;
}
for Raspberry PI
I2Cコネクタに接続したColor Brickにより、赤、緑、青、赤外の値を読み取り、コンソールに出力します。
# coding: utf-8
#
# FaBo Brick Sample
#
# #203 Color Sensor I2C Brick
#
import smbus
import time
ADDRESS = 0x2A #S11059 device address
CHANNEL = 1
CTLREG = 0x00
OUTREG = 0x03
RESET = 0x83
RESTART = 0x03
class S11059:
def __init__(self, bus, addr):
self.bus = smbus.SMBus(bus)
self.addr = addr
def writebyte(self, cmd, data):
self.bus.write_byte_data(self.addr, cmd, data)
def readblock(self, cmd, len):
return self.bus.read_i2c_block_data(self.addr, cmd, len)
if __name__ == '__main__':
dev = S11059(CHANNEL, ADDRESS)
#初期化
dev.writebyte(CTLREG,RESET)
dev.writebyte(CTLREG,RESTART)
time.sleep(2.5)
dev.writebyte(OUTREG,CTLREG)
while True:
#データ取得
read_data = dev.readblock(CTLREG, 11)
#データ設定
red = read_data[3] << 8 | read_data[4]
green = read_data[5] << 8 | read_data[6]
blue = read_data[7] << 8 | read_data[8]
infrared = read_data[9] << 8 | read_data[10]
#データ出力
print "R:%x G:%x B:%x I:%x" % (red,green,blue,infrared)
print
time.sleep(0.5)
for Ichigojam
I2Cコネクタに接続したColor Brickにより、赤、緑、青、赤外の値を読み取り、画面上に出力します。
10 'FaBo Brick Sample
20 '#203 Color I2C Brick
30 CLS
100 'Slave address
110 D=#2A
200 'Address set
210 POKE #800,#00,#83,#03
220 POKE #810,#00,11
300 'init
310 A=I2CW(D,#800,1,#801,1)
320 A=I2CW(D,#800,1,#802,1)
320 A=I2CW(D,#802,1,#800,1)
400 'Read RGB IR data
410 A=I2CW(D,#810,1,#811,1)
420 A=I2CR(D,#810,1,#820,11)
500 'Output
510 LOCATE 0,3
520 ?"R;";PEEK(#824)/2+PEEK(#823)*128;" "
530 ?"G;";PEEK(#826)/2+PEEK(#825)*128;" "
540 ?"B;";PEEK(#828)/2+PEEK(#827)*128;" "
550 ?"IR;";PEEK(#830)/2+PEEK(#829)*128;" "
600 'loop
610 WAIT 20
620 GOTO 410
for Edison
I2Cコネクタに接続したColor Brickにより、赤、緑、青、赤外の値を読み取り、コンソールに出力します。
※ACアダプタ接続時に値が正しく取得できない場合があります。
//
// FaBo Brick Sample
//
// #203 Color Sensor I2C Brick
//
var m = require('mraa');
var i2c = new m.I2c(0);
var buffer = new Buffer(11);
i2c.address(0x2A);
// Reset
i2c.writeReg(0x00, 0x83);
// Read Start
i2c.writeReg(0x00, 0x03);
// data byte
i2c.writeReg(0x03, 0x00);
loop();
function loop(){
try{
buffer = i2c.readBytesReg(0x00, 11);
var red = buffer[3]<<8 | buffer[4];
var green = buffer[5]<<8 | buffer[6];
var blue = buffer[7]<<8 | buffer[8];
var ir = buffer[9]<<8 | buffer[10];
console.log("R:" + red + " G:" + green + " B:" + blue + " IR:" + ir);
}catch(e){
console.log("read err");
}
setTimeout(loop, 1000);
}
Parts
- HAMAMATSU S11059