爱板网论坛

查看: 714|回复: 1

[原创] I2C颜色识别传感器+STM32 F091 nucleo

[复制链接]

主题

好友

1018

积分

进士

  • TA的每日心情
    郁闷
    昨天 10:44
  • 签到天数: 598 天

    连续签到: 8 天

    [LV.9]以坛为家II

    发表于 2018-1-16 23:36:45 |显示全部楼层
    本帖最后由 leo121_3006061 于 2018-1-17 00:15 编辑

    正好前几天收到了stm32F091 nucleo开发板,试试这款Dfrobot的颜色传感器。

    1. 硬件准备
    开发板
    tcs34725 color sensor
    导线 4根
    2连接方式(兼容ardunio的pin)

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

    2. 软件开发环境 mbed 在线编译
    修改一下频率为(100000)原来是200000会报错
    2018-01-16 23-19-27屏幕截图.png

    2018-01-16 23-18-58屏幕截图.png

    附上代码,非常简单
    1. // Example program connecting to the TCS34725 Color Sensor to the K64F using I2C

    2. #include "mbed.h"

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

    5. int sensor_addr = 41 << 1;

    6. DigitalOut green(LED1);

    7. int main() {
    8.     pc.baud(9600);
    9.     green = 1; // off
    10.    
    11.     // Connect to the Color sensor and verify whether we connected to the correct sensor.
    12.    
    13.     i2c.frequency(100000);//修改为100000,否则报错
    14.    
    15.     char id_regval[1] = {146};
    16.     char data[1] = {0};
    17.     i2c.write(sensor_addr,id_regval,1, true);
    18.     i2c.read(sensor_addr,data,1,false);
    19.    
    20.     if (data[0]==68) {
    21.         green = 0;
    22.         wait (2);
    23.         green = 1;
    24.         } else {
    25.         green = 1;
    26.     }
    27.    
    28.     // Initialize color sensor
    29.    
    30.     char timing_register[2] = {129,0};
    31.     i2c.write(sensor_addr,timing_register,2,false);
    32.    
    33.     char control_register[2] = {143,0};
    34.     i2c.write(sensor_addr,control_register,2,false);
    35.    
    36.     char enable_register[2] = {128,3};
    37.     i2c.write(sensor_addr,enable_register,2,false);
    38.    
    39.     // Read data from color sensor (Clear/Red/Green/Blue)
    40.    
    41.     while (true) {
    42.         char clear_reg[1] = {148};
    43.         char clear_data[2] = {0,0};
    44.         i2c.write(sensor_addr,clear_reg,1, true);
    45.         i2c.read(sensor_addr,clear_data,2, false);
    46.         
    47.         int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
    48.         
    49.         char red_reg[1] = {150};
    50.         char red_data[2] = {0,0};
    51.         i2c.write(sensor_addr,red_reg,1, true);
    52.         i2c.read(sensor_addr,red_data,2, false);
    53.         
    54.         int red_value = ((int)red_data[1] << 8) | red_data[0];
    55.         
    56.         char green_reg[1] = {152};
    57.         char green_data[2] = {0,0};
    58.         i2c.write(sensor_addr,green_reg,1, true);
    59.         i2c.read(sensor_addr,green_data,2, false);
    60.         
    61.         int green_value = ((int)green_data[1] << 8) | green_data[0];
    62.         
    63.         char blue_reg[1] = {154};
    64.         char blue_data[2] = {0,0};
    65.         i2c.write(sensor_addr,blue_reg,1, true);
    66.         i2c.read(sensor_addr,blue_data,2, false);
    67.         
    68.         int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
    69.         
    70.         // print sensor readings
    71.         
    72.         pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\r\n", clear_value, red_value, green_value, blue_value);
    73.         wait(0.5);
    74.     }
    75.    
    76. }
    复制代码
    下载编译结果,打开串口助手之类的,使用三种颜色来实验,结果如下(传感器不能离的太近,否则数值飙升)

    2018-01-16 23-27-39屏幕截图.png

    2018-01-16 23-14-42屏幕截图.png

    2018-01-16 23-15-54屏幕截图.png


    使用红色的时候,红色值偏大,使用蓝色,蓝色值偏大,另外两个值基本固定在100多不到200.



    最后来张合影

    20180116_231751.jpg


    回复

    使用道具 举报

    主题

    好友

    26

    积分

    白丁

  • TA的每日心情
    奋斗
    2018-2-22 18:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-2-22 18:40:02 |显示全部楼层
    学习学习最近在学习当中
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网

    GMT+8, 2018-5-21 05:10 , Processed in 0.086302 second(s), 14 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号  苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部
    由于网站服务器迁移,2018年5月21日将可能出现暂时不能访问的情况。在此说明,不是网站关闭了,而是网站迁移造成的。请大家稍安勿躁,谢谢!
    X