你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F091 Nucleo+tcs34725 colour sensor

[复制链接]
leo121_3006061 发布时间:2018-1-17 13:10
收到社区寄来的板子,也不枉参加了一次活动,正好从爱板拍了一个颜色传感器,研究了几天,晓有心得分享一下。此帖在爱板也发了,转发到这里赚点币。传感器的资料请去官网下载(DFrobot)
" V5 b$ J' d# V5 S1. 硬件准备
; |# o& `: h! l' `7 |开发板
" C: f7 v! l1 z# X9 t( ?2 rtcs34725 color sensor5 G: q. {8 {6 v  p" V# r- w4 Z
导线 4根1 P0 H) w$ B% Q5 X$ I6 d2 R& \
2连接方式(兼容ardunio的pin)
: s6 ]+ T" N7 E9 k( s. G4 _9 ^" Y! \9 j7 F- K8 {1 ]
传感器===》Nucleo
5 d  _& M4 q3 T. m/ y* aSDA==>SDA/D14
4 p7 r+ f4 T; M' ?$ ySCL==》SCL/D15
- r. x- l$ o  C. {4 d  ]注意不是A4,A5/ G0 O$ D% ~+ a7 x. ^

' p1 h7 \! y0 u/ _5 u2. 软件开发环境 mbed 在线编译) t5 P% Y. Z7 C( Y3 q+ r
修改一下频率为(100000)原来是200000会报错) F6 a9 N. ?5 @& ?0 z3 l- h8 v! p' Z0 V
* P) G6 w5 l, z6 a/ L
5 q, A4 V, j* S4 t/ |, y* h
2018-01-16 23-19-27屏幕截图.png . c2 N8 v) h. I1 F, ~# E  g

! Q$ r1 ^* g* k# ^+ n4 ? 2018-01-16 23-18-58屏幕截图.png # R- m8 H( L+ L) b2 P& {
附上代码,非常简单
5 E0 z% o3 h7 h4 V& S
" Z1 \+ G" Y) c
  1. // Example program connecting to the TCS34725 Color Sensor to the K64F using I2C
    4 w; C4 R9 Z! o1 Q: J8 j! U1 e$ v
  2. 0 u8 t$ `* P6 D
  3. #include "mbed.h"
    + a5 U  h3 \2 k  F) m* ]6 S

  4. + e3 ^( ~% w5 Q3 x1 V
  5. I2C i2c(I2C_SDA, I2C_SCL); //pins for I2C communication (SDA, SCL)1 O  Q+ P' I6 O; n
  6. Serial pc(USBTX, USBRX);1 Y3 @* V% o4 b7 R8 h
  7. ; O( q* b$ P% V
  8. int sensor_addr = 41 << 1;
    . |! i  @8 r( H

  9. + l0 w- a7 P% q
  10. DigitalOut green(LED1);
    : O4 J+ X. W) w! i

  11. ( K) H: o1 j" ^( ?; A# }
  12. int main() {$ F+ |- i/ u. I. R2 D7 }; e
  13.     pc.baud(9600);% A0 u4 v2 p- y: n& `1 k7 ?
  14.     green = 1; // off$ `( h& E4 k# v/ j5 J3 p# d
  15.    
    - E9 v, a' ^" ^, M
  16.     // Connect to the Color sensor and verify whether we connected to the correct sensor. 6 [+ X9 K. e3 N% Y+ q
  17.    
    / W5 p7 g7 ~7 [6 x9 i
  18.     i2c.frequency(100000);//修改为100000,否则报错$ D4 k/ j( Z0 ~$ c, S4 S
  19.       @7 x. D/ X, }/ u
  20.     char id_regval[1] = {146};- N: F) J# K( j9 m6 @8 O. x' i
  21.     char data[1] = {0};
    ; C8 b5 a, [7 o3 U, s
  22.     i2c.write(sensor_addr,id_regval,1, true);
      C8 n& v6 p: y) p
  23.     i2c.read(sensor_addr,data,1,false);+ n5 N1 \% F- x$ j* E
  24.    
    ) Z$ K8 T( A+ k' n
  25.     if (data[0]==68) {$ l- w! G3 T( i* x
  26.         green = 0;/ Q  k2 B( _! U; s2 w" X) ]# h
  27.         wait (2);
    - _% O( ?' z) U) @# w
  28.         green = 1;5 m% B! w, F) ~( [0 ~- @- K5 p
  29.         } else {
    + X2 B: I$ M5 y/ I2 n4 r
  30.         green = 1; % A5 ]: ?$ `7 F8 l
  31.     }
    - m8 K( T* U( R7 ~9 ~, N: u
  32.    
    , u" v  r+ E6 H+ f; R  e7 b
  33.     // Initialize color sensor
    5 H  o3 ?* F0 I# v/ E0 T
  34.     $ B6 t) e1 q+ t) \0 u" E
  35.     char timing_register[2] = {129,0};
    3 r6 N4 @; F. G  \1 ]
  36.     i2c.write(sensor_addr,timing_register,2,false);8 k& D) K9 |9 b- [* R8 w- V  h/ {
  37.    
      ?. C5 g. Y4 m. H0 W7 M
  38.     char control_register[2] = {143,0};
    : o. M$ ?5 L# ]) G# b9 Q
  39.     i2c.write(sensor_addr,control_register,2,false);
    $ D  S: l. G, _# r  |8 R/ |
  40.    
    ) c+ Z6 O, ^2 ]
  41.     char enable_register[2] = {128,3};3 p+ z, {/ ~: }. ?; D! C
  42.     i2c.write(sensor_addr,enable_register,2,false);
    5 i& R0 W3 i" ^) p
  43.     1 D( @3 m3 s3 g- ~, ^1 Z
  44.     // Read data from color sensor (Clear/Red/Green/Blue)& }8 s- P& v$ S
  45.     4 Y5 p$ K* h, j* U; Y! M
  46.     while (true) {
    ! O/ S6 r% r4 _. D
  47.         char clear_reg[1] = {148};( B2 X( V( H; s+ {
  48.         char clear_data[2] = {0,0};
      a  l* A7 z" w! K+ d$ M4 X
  49.         i2c.write(sensor_addr,clear_reg,1, true);3 ?/ N- b2 x# b" P; h
  50.         i2c.read(sensor_addr,clear_data,2, false);! Z8 s+ K+ G  w
  51.         
    7 z/ Z3 E1 E& y2 m1 |
  52.         int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
      _$ l/ w: e$ G* d: f0 ]
  53.         
    2 n( A8 \+ T+ t1 d7 H
  54.         char red_reg[1] = {150};+ C5 S7 l+ w# d7 x1 p+ y* D# n
  55.         char red_data[2] = {0,0};
    / H+ ?, B! n/ b0 I% M7 \# |: p) ^
  56.         i2c.write(sensor_addr,red_reg,1, true);
    # _" s% @. V4 {  O' J% k
  57.         i2c.read(sensor_addr,red_data,2, false);1 @9 V; g% P  ?+ _( V5 Z
  58.         4 m( B  Z! ?6 Q& n. [. n
  59.         int red_value = ((int)red_data[1] << 8) | red_data[0];- W6 K9 n3 G# h2 k5 L; k4 N7 h- E
  60.         
    , u, E" \8 }% L( J9 ^+ [
  61.         char green_reg[1] = {152};
    9 {# Y4 [  s6 y) o) O
  62.         char green_data[2] = {0,0};# n1 t$ r% C, \4 G- ?9 ~
  63.         i2c.write(sensor_addr,green_reg,1, true);
    / J" U& F. j: x( H
  64.         i2c.read(sensor_addr,green_data,2, false);/ Z/ w. D, g6 O5 b
  65.         
      F* u2 x8 z* b3 l7 B9 t
  66.         int green_value = ((int)green_data[1] << 8) | green_data[0];1 Q( Y+ e- h( i5 u1 z
  67.         2 `; z: ?5 Y: W# |
  68.         char blue_reg[1] = {154};- [8 x! h0 f' E3 [# U/ H
  69.         char blue_data[2] = {0,0};
    5 F+ P5 ^/ K0 L/ f2 z
  70.         i2c.write(sensor_addr,blue_reg,1, true);2 v6 l% m+ E3 `4 T' l. u* d
  71.         i2c.read(sensor_addr,blue_data,2, false);
    . y7 [; A2 F" j1 w8 C0 r
  72.         
      s7 M$ j' Y1 O" i0 D/ V6 n
  73.         int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
    # ?8 S2 ?; M1 K) b* \
  74.         
    $ h. }. `) R4 ^1 Y* k  x6 j
  75.         // print sensor readings2 }7 o" W7 o! J; t0 w, y5 U
  76.         
    ; T7 A; Z) e& ^, t6 b  d% b
  77.         pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\r\n", clear_value, red_value, green_value, blue_value);9 p+ j. W* D: `
  78.         wait(0.5);, b0 v3 V- h0 e
  79.     }0 G) o" s1 G( g/ b+ q0 M8 B
  80.     * r/ T: A; w* b. N; k; f
  81. }
复制代码

1 ~2 y6 i& K. i* R% \
  f( I$ O3 S7 a下载编译结果,打开串口助手之类的,使用三种颜色来实验,结果如下(传感器不能离的太近,否则数值飙升)
, y4 H4 z8 m9 R, @5 E
! s6 X5 o# ?( `# a1 x# o  Q 2018-01-16 23-27-39屏幕截图.png
; K0 U4 f! {9 y5 u
* Z# q0 o) l$ c+ E3 t 2018-01-16 23-15-54屏幕截图.png
' T: C  T8 O9 Y; l2 Z& Y4 F, n0 V1 D$ K$ j2 B: i
2018-01-16 23-14-42屏幕截图.png ! e9 ?5 e* u5 s

& i& B: [- }1 _( s7 x' C( F使用红色的时候,红色值偏大,使用蓝色,蓝色值偏大,另外两个值基本固定在100多不到200.
* O( m2 [" v0 r
. h. U8 `+ }+ G. L* v8 u4 o* g  F4 o* o; M: z# |

% @. a# k9 g1 O+ J- W% ^最后来张合影
( j, \/ `1 x2 o# ~, j: C. A( q& K7 G& L
  [/ K" O  `4 ~2 f1 x& K- {
001502tg4xpx8mud4gfumx.jpg ' R/ {) V6 F! l
0 b% W1 P( M" H- N* W

评分

参与人数 1 ST金币 +1 收起 理由
Inc_brza + 1

查看全部评分

赞 收藏 1 评论5 发布时间:2018-1-17 13:10

举报

5个回答
zero99 回答时间:2018-1-17 13:41:15
谢谢分享了~
anywill 回答时间:2018-1-17 13:44:01
tcs34725有点贵没舍得买,,) K& |$ @! _) R# N" G1 J' u2 T
高手都在玩Linux了,
leo121_3006061 回答时间:2018-1-17 14:14:02
anywill 发表于 2018-1-17 13:44
& s. s; W! O; ~% ftcs34725有点贵没舍得买,,$ C: g& @5 o; [& k, ^; n. X
高手都在玩Linux了,

* a8 D, `& }) [$ P& I/ }( H5 D过奖了,我也是初学者刚刚入门,这个传感器确实贵,我是拿金币拍的,拍完就回到解放前了
leo121_3006061 回答时间:2018-1-17 14:15:30
zero99 发表于 2018-1-17 13:41- @  ~7 \+ }1 H1 e" W- S! v1 S. U
谢谢分享了~

7 Z  D! d% T  Y0 S# K, X5 M感谢破总捧场
xudongqiang 回答时间:2020-6-14 17:01:00
666666666666

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版