Farbsensor TCS34725 am Raspberry Pi

Gepostet von am 27. März 2016, 23:06

Bei vielen Roboterwettbewerben müssen oft Objekte nach Farbe sortiert werden. Dazu gibt es Farbsensoren, die an den I2C-Bus angeschlossen werden. Einer davon ist der TCS34725 von TAOS bzw. ams.

Gehäuse

Der TCS34725 kommt in einem kleinen SMD-Gehäuse mit 6 Pins. Es gibt dafür aber auch ein Breakout-Board von Adafruit

Ansteuerung

Nach dem Start müssen diverse Register gesetzt werden, damit der Sensor vernünftige Ergebnisse liefert. Wichtig ist die integration time. Ich habe diese auf 101 ms gesetzt, damit Flackern von Leuchtstofflampen oder LEDs rausgefiltert wird. Das gain control wird entsprechend der Beleuchtungssituation beim Sensor gesetzt. Bei mir lieferte 4x sinnvolle Werte.

Der TCS34725 hat 4 Sensoren, je einen für rot, grün und blau und einen ohne Farbfilter, der die Gesamthelligkeit messen kann. All diese Werte werden mit 16 bit in Digitalwerte umgewandelt und können einzeln ausgelesen werden.

Beispielprogramm

Hier mein Beispielprogramm für den Raspberry Pi

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
	int file;
	unsigned char x;
	short unsigned int clear,red,green,blue;

	printf("ams TCS34725\n");
	if((file=open("/dev/i2c-1",O_RDWR))<0)	// open i2c-bus
	{
		perror("cannot open i2c-1");
		exit(1);
	}
	if(ioctl(file, I2C_SLAVE, 0x29)<0)	// open slave, address TCS34725 = 0x29
	{
		perror("cannot open slave address");
		exit(1);
	}
	i2c_smbus_write_byte_data(file,0x80,0x03);	// enable: AEN POW
	i2c_smbus_write_byte_data(file,0x81,0xd5);	// ATIME integration time 101ms
	i2c_smbus_write_byte_data(file,0x8F,0x01);	// gain control: 4x

	x=i2c_smbus_read_byte_data(file, 0x92);	// check device id
	printf("Device ID: 0x%02x\n", x);	// should be 0x44;

	clear=i2c_smbus_read_word_data(file, 0xb4);	// CDATA register
	printf("Clear: 0x%04x = %i\n", clear,clear);
	red=i2c_smbus_read_word_data(file, 0xb6);	// RDATA register
	printf("Red:   0x%04x = %i\n", red,red);
	green=i2c_smbus_read_word_data(file, 0xb8);	// GDATA register
	printf("Green: 0x%04x = %i\n", green,green);
	blue=i2c_smbus_read_word_data(file, 0xba);	// BDATA register
	printf("Blue:  0x%04x = %i\n", blue,blue);

	close(file);

	return 0;
}

Kategorien

Stichworte Sensor,Farbsensor,ams,TAOS,TCS34725,I2C,Raspberry Pi,RGB


Kommentare

Kommentarfunktion für diesen Artikel geschlossen.