打印
[STM32F0]

I2C颜色识别传感器+STM32 F091 nucleo

[复制链接]
1574|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
硬件准备
开发板
tcs34725 color sensor
导线 4根

沙发
東南博士|  楼主 | 2018-2-28 20:18 | 只看该作者
连接方式(兼容ardunio的pin)

传感器===》Nucleo
SDA==>SDA/D14
SCL==》SCL/D15
注意不是A4,A5

使用特权

评论回复
板凳
東南博士|  楼主 | 2018-2-28 20:19 | 只看该作者
软件开发环境 mbed 在线编译
修改一下频率为(100000)原来是200000会报错

使用特权

评论回复
地板
東南博士|  楼主 | 2018-2-28 20:20 | 只看该作者
截图1

1.png (269.78 KB )

1.png

使用特权

评论回复
5
東南博士|  楼主 | 2018-2-28 20:21 | 只看该作者
截图2

2.png (372.6 KB )

2.png

使用特权

评论回复
6
東南博士|  楼主 | 2018-2-28 20:21 | 只看该作者
// Example program connecting to the TCS34725 Color Sensor to the K64F using I2C

#include "mbed.h"

I2C i2c(I2C_SDA, I2C_SCL); //pins for I2C communication (SDA, SCL)
Serial pc(USBTX, USBRX);

int sensor_addr = 41 << 1;

DigitalOut green(LED1);

int main() {
    pc.baud(9600);
    green = 1; // off
   
    // Connect to the Color sensor and verify whether we connected to the correct sensor.
   
    i2c.frequency(100000);//修改为100000,否则报错
   
    char id_regval[1] = {146};
    char data[1] = {0};
    i2c.write(sensor_addr,id_regval,1, true);
    i2c.read(sensor_addr,data,1,false);
   
    if (data[0]==68) {
        green = 0;
        wait (2);
        green = 1;
        } else {
        green = 1;
    }
   
    // Initialize color sensor
   
    char timing_register[2] = {129,0};
    i2c.write(sensor_addr,timing_register,2,false);
   
    char control_register[2] = {143,0};
    i2c.write(sensor_addr,control_register,2,false);
   
    char enable_register[2] = {128,3};
    i2c.write(sensor_addr,enable_register,2,false);
   
    // Read data from color sensor (Clear/Red/Green/Blue)
   
    while (true) {
        char clear_reg[1] = {148};
        char clear_data[2] = {0,0};
        i2c.write(sensor_addr,clear_reg,1, true);
        i2c.read(sensor_addr,clear_data,2, false);
        
        int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
        
        char red_reg[1] = {150};
        char red_data[2] = {0,0};
        i2c.write(sensor_addr,red_reg,1, true);
        i2c.read(sensor_addr,red_data,2, false);
        
        int red_value = ((int)red_data[1] << 8) | red_data[0];
        
        char green_reg[1] = {152};
        char green_data[2] = {0,0};
        i2c.write(sensor_addr,green_reg,1, true);
        i2c.read(sensor_addr,green_data,2, false);
        
        int green_value = ((int)green_data[1] << 8) | green_data[0];
        
        char blue_reg[1] = {154};
        char blue_data[2] = {0,0};
        i2c.write(sensor_addr,blue_reg,1, true);
        i2c.read(sensor_addr,blue_data,2, false);
        
        int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
        
        // print sensor readings
        
        pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\r\n", clear_value, red_value, green_value, blue_value);
        wait(0.5);
    }
   
}

使用特权

评论回复
7
東南博士|  楼主 | 2018-2-28 20:22 | 只看该作者
下载编译结果,打开串口助手之类的,使用三种颜色来实验,结果如下(传感器不能离的太近,否则数值飙升)

3.png (474.08 KB )

3.png

使用特权

评论回复
8
東南博士|  楼主 | 2018-2-28 20:23 | 只看该作者
截图

4.png (128.7 KB )

4.png

使用特权

评论回复
9
東南博士|  楼主 | 2018-2-28 20:24 | 只看该作者
截图

5.png (127.96 KB )

5.png

使用特权

评论回复
10
東南博士|  楼主 | 2018-2-28 20:24 | 只看该作者
使用红色的时候,红色值偏大,使用蓝色,蓝色值偏大,另外两个值基本固定在100多不到200.



最后来张合影

使用特权

评论回复
11
東南博士|  楼主 | 2018-2-28 20:25 | 只看该作者
靓照

1.jpg (452.1 KB )

1.jpg

使用特权

评论回复
12
dongnanxibei| | 2018-2-28 23:24 | 只看该作者
这是可以拍照还是可以做什么。

使用特权

评论回复
13
東南博士|  楼主 | 2018-3-4 12:49 | 只看该作者
dongnanxibei 发表于 2018-2-28 23:24
这是可以拍照还是可以做什么。

做眼色鉴别啊!

使用特权

评论回复
14
yingdian6| | 2019-3-8 18:16 | 只看该作者
工程能发出来参考吗

使用特权

评论回复
15
東南博士|  楼主 | 2019-3-13 09:28 | 只看该作者
演示识别吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

382

主题

6081

帖子

34

粉丝