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

STM32F091 Nucleo+tcs34725 colour sensor

[复制链接]
leo121_3006061 发布时间:2018-1-17 13:10
收到社区寄来的板子,也不枉参加了一次活动,正好从爱板拍了一个颜色传感器,研究了几天,晓有心得分享一下。此帖在爱板也发了,转发到这里赚点币。传感器的资料请去官网下载(DFrobot)
9 I- B. N* Q) \$ Z% `0 P3 P1 g1. 硬件准备
$ l0 s6 S- G1 M9 W开发板3 g( h3 [! ], `3 L1 F
tcs34725 color sensor
! l; d, @& m# S. M4 C" r导线 4根
: ~* t, i/ X' Y8 R) A5 I( O; c2连接方式(兼容ardunio的pin)  D5 x2 P/ ^- o  f
7 d4 T, H6 W- N! i/ k8 A
传感器===》Nucleo: e& q& q3 d! A
SDA==>SDA/D14, L1 l1 V; `9 u! A! p
SCL==》SCL/D15; h% ]( k& r2 W+ y1 f: O! X) a$ `6 H- [
注意不是A4,A51 A  G; i/ u9 U! [8 V+ p

& i+ u" ~5 K) O6 R2. 软件开发环境 mbed 在线编译
" X1 f, A, ^/ l' W修改一下频率为(100000)原来是200000会报错' `2 n1 \( K# ^% b
& \  R' v: E2 d3 D* @
7 Q* P& O7 s2 `) ?8 N
2018-01-16 23-19-27屏幕截图.png
  S: }! d& x6 \. Y6 f- Y: _$ A7 m  D. p6 w! E5 J
2018-01-16 23-18-58屏幕截图.png # V; {% e, \* b+ m$ K  j" J3 `
附上代码,非常简单
' p" l) f1 G- [/ J% {
: B* O, {0 W/ J: Y& `. ^6 j
  1. // Example program connecting to the TCS34725 Color Sensor to the K64F using I2C0 R" s) J# q+ z* g2 O

  2. ; y7 I7 E: o! K2 A3 V0 w
  3. #include "mbed.h"
    & M( [# K7 P4 V" V- W2 w* P7 T( h: `
  4. ! T$ O$ [3 X6 i5 ^- m
  5. I2C i2c(I2C_SDA, I2C_SCL); //pins for I2C communication (SDA, SCL)$ Q4 X- @6 \# W
  6. Serial pc(USBTX, USBRX);; f. E2 l, L" ^/ w
  7. 8 ~! T; W. e  z) _+ Z
  8. int sensor_addr = 41 << 1;
    6 i0 F  _# B4 q# m
  9. - \4 `  f/ ?% f0 f1 ]  @1 W- b
  10. DigitalOut green(LED1);
      ]9 R4 D3 W* e/ i

  11. ( {7 p& [( G  O$ L  v: H" W
  12. int main() {
    5 w% \3 K# b% Q/ O8 V
  13.     pc.baud(9600);6 ^( n; w0 |$ h
  14.     green = 1; // off: Z( m" O" U; C# ?' l
  15.     ; g8 V& t- }* S. ~8 P. I
  16.     // Connect to the Color sensor and verify whether we connected to the correct sensor. + j7 Y3 Q# u" z! X; t$ B5 }
  17.    
    ( P8 Z/ W0 {# Y1 K# B* l
  18.     i2c.frequency(100000);//修改为100000,否则报错
    8 C" R( p  H; @3 J& G$ ]* C
  19.     ; l" x) S2 q( q* A+ N5 W
  20.     char id_regval[1] = {146};
    : m3 z% |+ D* L  N
  21.     char data[1] = {0};
    6 r1 s/ H( B7 X1 b/ d& P
  22.     i2c.write(sensor_addr,id_regval,1, true);% ^3 I/ _7 G0 q; n# ^# `: v6 [0 L1 d
  23.     i2c.read(sensor_addr,data,1,false);
    8 _7 Y7 V, y3 q: Y$ h) e
  24.    
    6 ~; N7 g) }. y: I. ]+ `
  25.     if (data[0]==68) {. m( Q5 Y5 q; B) t
  26.         green = 0;- e3 q: S! a3 U! b
  27.         wait (2); " g- S/ l+ y& Z# Y) Z
  28.         green = 1;
    & x- N9 w9 E2 _8 j
  29.         } else {7 N; ]7 V3 b: V% ?
  30.         green = 1;
    # J9 H2 @4 c2 g% O# ^# J
  31.     }
    7 }4 K+ ]2 ~9 }; S( @
  32.    
    $ n) }4 B; G+ ^  D7 c. U8 S8 P
  33.     // Initialize color sensor
    ' z( _1 X, h6 ]* U* Q' I
  34.     * |8 ^3 a, ^) O
  35.     char timing_register[2] = {129,0};% P! {- v8 F: O1 i  h
  36.     i2c.write(sensor_addr,timing_register,2,false);5 i& l+ Q' e2 S5 u  ~7 v& ]0 v
  37.     3 i) |5 t- K, `' U% k( R7 s
  38.     char control_register[2] = {143,0};/ ?' r4 v" d# ~. Z5 [! C
  39.     i2c.write(sensor_addr,control_register,2,false);
    * O( [; U! B! G( W& |  G
  40.    
    1 B  l/ I* e6 m
  41.     char enable_register[2] = {128,3};
    : E7 S/ J7 U! B2 D
  42.     i2c.write(sensor_addr,enable_register,2,false);) L1 Z) o$ x! I: {) T' G5 n  ~
  43.     " C9 R- r; L- O# E# w1 W+ \3 u
  44.     // Read data from color sensor (Clear/Red/Green/Blue)! _$ v  L! g" R
  45.     4 i3 x+ Y. T0 A5 w# g
  46.     while (true) { 6 {* S- A/ D+ t  j3 l0 {! d
  47.         char clear_reg[1] = {148};
    + M6 L. a1 s5 N' o3 o! J: W
  48.         char clear_data[2] = {0,0};
    + M/ d6 G! ^9 a9 N- G
  49.         i2c.write(sensor_addr,clear_reg,1, true);
    6 e# a) J0 p8 ~0 K/ V9 m  \$ z
  50.         i2c.read(sensor_addr,clear_data,2, false);
    7 A; x9 ^7 G( D* a# {  e' l
  51.         
    , `, d  d6 h  t+ J' [. M
  52.         int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
    / l. I! u- U/ S$ e$ }) D
  53.         ! J: Y# I. C- K' B3 Q+ o& V
  54.         char red_reg[1] = {150};% o6 a0 S$ W0 L- h( p9 b. C
  55.         char red_data[2] = {0,0};# i! k& }0 X/ ?& c! I
  56.         i2c.write(sensor_addr,red_reg,1, true);
    % f  W9 L1 v6 V
  57.         i2c.read(sensor_addr,red_data,2, false);" O; o8 \& d% e. R2 d4 d* f  ?
  58.         ; U& _8 K) j9 s
  59.         int red_value = ((int)red_data[1] << 8) | red_data[0];. q7 E0 ?  z3 w6 ]2 i4 o; ]% u
  60.         
    $ v) R- m& y5 E- d$ u7 q( s  X
  61.         char green_reg[1] = {152};5 x! r/ F  y# {; v4 B; j
  62.         char green_data[2] = {0,0};
    ! H4 f/ k" D. S
  63.         i2c.write(sensor_addr,green_reg,1, true);
    " V9 u+ y: a& x9 g  U4 _7 A
  64.         i2c.read(sensor_addr,green_data,2, false);
    6 T) R5 d5 k. Q; j
  65.         
    % T' k" f8 d$ n* `9 p+ o! j
  66.         int green_value = ((int)green_data[1] << 8) | green_data[0];1 U- ?: f7 r& F4 w9 S7 \' {
  67.         5 a$ I. O& r6 o
  68.         char blue_reg[1] = {154};7 q& S1 N0 {: k3 B3 M9 D
  69.         char blue_data[2] = {0,0};* D. a6 J, R. u5 d( k+ m
  70.         i2c.write(sensor_addr,blue_reg,1, true);; W3 k3 e" W/ C1 v9 x# y+ K
  71.         i2c.read(sensor_addr,blue_data,2, false);' V7 _) |: y1 C1 `
  72.         
    4 @) T% a# a- C( v' p6 q
  73.         int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
    0 a! H/ S/ b" g! `7 c( L4 t; J
  74.         
    # l# \' c; M- \: |3 E" V
  75.         // print sensor readings# f3 r# Z8 W! e/ X
  76.         
    4 q5 }8 e$ H$ L
  77.         pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\r\n", clear_value, red_value, green_value, blue_value);+ J6 S; d2 a4 x- e% S
  78.         wait(0.5);/ h4 u; k+ v! Y7 j6 C! U3 a5 Z3 I
  79.     }, x6 l1 D+ z" A% r: s& W
  80.    
    % d  p/ c5 d# Z' ~; X: U) A
  81. }
复制代码

* J2 b* y% ]% q  U9 q" ~2 g
: a: y( s0 l. A+ v, U9 X/ x; |下载编译结果,打开串口助手之类的,使用三种颜色来实验,结果如下(传感器不能离的太近,否则数值飙升)# }( P1 D  S( Y' n) Z5 w

* }, ~! R9 `  K8 e3 } 2018-01-16 23-27-39屏幕截图.png
! |8 j: o' S, H' V' S/ H  P* B9 _* d3 Y$ A
2018-01-16 23-15-54屏幕截图.png 7 O2 n* ^5 ~7 q% m

' X; p% s: R( m# K! f, t 2018-01-16 23-14-42屏幕截图.png
/ i( ^/ X  y- u8 e
5 G& Z* W1 M* O, I& O4 a  Y使用红色的时候,红色值偏大,使用蓝色,蓝色值偏大,另外两个值基本固定在100多不到200.9 R: u! c# {* r! W
# |3 z% t6 _/ a% A
) _* G5 N3 X0 U! K
; {. i: M$ k! C; E+ v. H+ S, \
最后来张合影8 a( A$ C& f- F3 J

, {& a5 p* A0 M5 c5 Z
1 L, z- e! `5 s7 l 001502tg4xpx8mud4gfumx.jpg
$ b; @& `' }& ^# R0 H: V, x6 C7 [$ |6 Q, v7 R$ Y/ t

评分

参与人数 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有点贵没舍得买,,
! u+ Z& [* v* X3 r+ Y6 Z: j/ o7 Q  V高手都在玩Linux了,
leo121_3006061 回答时间:2018-1-17 14:14:02
anywill 发表于 2018-1-17 13:44
7 B  {) t9 U9 ^( @tcs34725有点贵没舍得买,,3 ]0 t, h/ Z7 ?" X' k' J" ^. ^! m9 F
高手都在玩Linux了,

1 y+ d6 z6 x2 c& n& ~过奖了,我也是初学者刚刚入门,这个传感器确实贵,我是拿金币拍的,拍完就回到解放前了
leo121_3006061 回答时间:2018-1-17 14:15:30
zero99 发表于 2018-1-17 13:41
! j  ^$ b) s$ N% P9 W. v, T, H谢谢分享了~
$ D; D# h5 a: l, W/ S8 u
感谢破总捧场
xudongqiang 回答时间:2020-6-14 17:01:00
666666666666
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版