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

STM32F091 Nucleo+tcs34725 colour sensor

[复制链接]
leo121_3006061 发布时间:2018-1-17 13:10
收到社区寄来的板子,也不枉参加了一次活动,正好从爱板拍了一个颜色传感器,研究了几天,晓有心得分享一下。此帖在爱板也发了,转发到这里赚点币。传感器的资料请去官网下载(DFrobot)/ A! N. t. }( P; e  K
1. 硬件准备. P! Z! ?/ M( M
开发板7 |; m+ T, c# r5 ]6 g# `) Z* f
tcs34725 color sensor
- |+ l3 O  p& M* V2 N7 q2 @导线 4根: W9 X  v, b' i, w4 f5 D( E
2连接方式(兼容ardunio的pin)- r4 D: m1 k: d1 J6 b
. Z: E) I) I1 G" R5 n! E5 q
传感器===》Nucleo
  Q( w$ F& |  j% U1 o: P, I+ r. GSDA==>SDA/D14* E) }! C6 v( l% r2 C
SCL==》SCL/D15$ ]& ]: }! ~7 V) w1 a4 C
注意不是A4,A5
# a6 P3 T1 j# V0 `5 M
  p2 @$ d' p3 D6 V2. 软件开发环境 mbed 在线编译. z: J- M  U( ~* x) R
修改一下频率为(100000)原来是200000会报错2 o& o; x6 H( p2 t: d$ y5 [- `

$ L& [7 m3 j. C5 M" T  U. R8 E
1 ~6 r! [. \; s& F& O7 S; Q 2018-01-16 23-19-27屏幕截图.png : h5 u& C4 j, i' m' a# p

" Z9 O% z- j( a! G 2018-01-16 23-18-58屏幕截图.png
- {& h# l3 q* C  B附上代码,非常简单1 @% {3 Q2 ~" b; B: Z: T" s/ \

9 {; h' M* }5 ?$ r
  1. // Example program connecting to the TCS34725 Color Sensor to the K64F using I2C
    8 L3 ^- I& n: T& L& |& d; r% k. k
  2. ( c) K3 k0 x/ Z
  3. #include "mbed.h"5 C5 |# V' z. P9 p

  4. ; D) A: o2 `9 g, k* @
  5. I2C i2c(I2C_SDA, I2C_SCL); //pins for I2C communication (SDA, SCL)4 X+ O2 q  W6 O. ^9 J4 I2 ?
  6. Serial pc(USBTX, USBRX);
    # j) x/ i0 M* T2 ~
  7. 6 ^( d2 ~0 _* f5 @9 @. B
  8. int sensor_addr = 41 << 1;: w' ~1 K5 Z. y- G8 r

  9. % }4 L0 V6 w7 E
  10. DigitalOut green(LED1);6 M5 z8 h( }7 P: B' u3 ^

  11. 8 w  U4 N5 N; G
  12. int main() {* P" R  L* R$ i6 @4 z' O
  13.     pc.baud(9600);/ i' x1 D- i+ E2 V3 d8 }, d
  14.     green = 1; // off
    & X2 P. |5 m; z0 J! q3 N* m: a% N
  15.    
    " a# @& @$ ~- L4 S
  16.     // Connect to the Color sensor and verify whether we connected to the correct sensor.
    ( O& l7 m/ D$ i8 d
  17.    
    7 k8 L9 W: \: ~3 O+ b7 P
  18.     i2c.frequency(100000);//修改为100000,否则报错& T" O$ h. y1 `# G
  19.     # c' q2 t9 k, s! [9 U; b
  20.     char id_regval[1] = {146};2 a) y$ o4 V3 o1 a
  21.     char data[1] = {0};2 k5 t# I8 ?: ]! J
  22.     i2c.write(sensor_addr,id_regval,1, true);
      i2 q  p4 R! V8 d* f
  23.     i2c.read(sensor_addr,data,1,false);
    " }: g! O) A& K8 d" M  o2 K- G
  24.    
    . R! N* S4 L3 e
  25.     if (data[0]==68) {* Y2 ^& ~/ f0 i5 ]! k
  26.         green = 0;
    ' w5 r% Y; h8 [# b+ R
  27.         wait (2); : h4 E1 S# d4 ~) C  X
  28.         green = 1;
    ) m- i" Y0 u$ x8 F( c( T. |
  29.         } else {
    7 X  J+ T6 Q( G, C
  30.         green = 1; 7 a* x) I2 y+ u+ {
  31.     }' b8 l; H. X) \
  32.     3 ?, _+ }' l2 Q, N" G7 ^
  33.     // Initialize color sensor
    4 A( c# X1 V9 u8 d: Y) n
  34.     - Y5 m6 l5 }0 v0 ?- ?
  35.     char timing_register[2] = {129,0};6 X4 n, w8 @. H/ ^- |# q( V1 e
  36.     i2c.write(sensor_addr,timing_register,2,false);" T( b+ p/ G5 g0 |
  37.    
    ; ]. k# k% ~  [( `
  38.     char control_register[2] = {143,0};8 ^7 n3 _* X, f0 }* }* U9 Q
  39.     i2c.write(sensor_addr,control_register,2,false);0 g) I* y7 g3 b1 l) C/ E% G
  40.     5 L0 X4 ?/ o, P- Y( @
  41.     char enable_register[2] = {128,3};8 ?& |9 D  O$ z; b4 L: H1 v6 x
  42.     i2c.write(sensor_addr,enable_register,2,false);
    9 N8 @- n( I9 |
  43.    
    4 I/ s3 ]/ i' w
  44.     // Read data from color sensor (Clear/Red/Green/Blue)
    : ^4 e% k8 n% b5 @5 ]9 x6 v1 T( ^
  45.     , K" {$ n( t3 C' S& i/ r
  46.     while (true) { % \* G$ C7 T3 D: o9 }* U
  47.         char clear_reg[1] = {148};( F- O: H) E, ?4 X$ g
  48.         char clear_data[2] = {0,0};+ k  u0 `, x4 L. D0 _+ b
  49.         i2c.write(sensor_addr,clear_reg,1, true);
    0 J  K1 X4 T% x- K( i/ I* p2 F
  50.         i2c.read(sensor_addr,clear_data,2, false);0 g1 I* i  }  f8 N% r
  51.           \/ x  @1 D1 a# J: w4 _
  52.         int clear_value = ((int)clear_data[1] << 8) | clear_data[0];7 M1 o, Z# t) `
  53.           r& \2 l6 z+ Y  U; Y
  54.         char red_reg[1] = {150};8 f! \( F# @% t5 m
  55.         char red_data[2] = {0,0};- @' U2 s) m$ U- }' W: ^8 b
  56.         i2c.write(sensor_addr,red_reg,1, true);
    $ c; h3 }* b# v( v( b2 E
  57.         i2c.read(sensor_addr,red_data,2, false);. ?1 I3 a/ {2 V4 x
  58.         
    5 C6 ]$ V" ^. m
  59.         int red_value = ((int)red_data[1] << 8) | red_data[0];+ l5 _' p5 s1 g' L: I7 K) V
  60.         2 }! t3 x9 b, x. B+ V3 \! |
  61.         char green_reg[1] = {152};. c" b/ {9 U8 {  Y
  62.         char green_data[2] = {0,0};" T/ l3 n- i  f7 j- u- w
  63.         i2c.write(sensor_addr,green_reg,1, true);
    # l/ a- s  }; s7 d* u
  64.         i2c.read(sensor_addr,green_data,2, false);6 C0 J$ U; b( C/ E( z* c
  65.         7 w( @1 q# m1 v  G
  66.         int green_value = ((int)green_data[1] << 8) | green_data[0];
    : g# ]5 o7 l" Y* M4 A
  67.         
    $ w5 }" `' r3 e, g, y
  68.         char blue_reg[1] = {154};
    ( h* R7 u, o8 y. p7 K, M( D! ]
  69.         char blue_data[2] = {0,0};& A0 `2 ]+ U  o: Z
  70.         i2c.write(sensor_addr,blue_reg,1, true);
    ( H# h( _+ a7 u! [. A. j
  71.         i2c.read(sensor_addr,blue_data,2, false);
    5 {3 U+ {0 U% N
  72.         & s3 P1 S9 S& m5 N
  73.         int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
    8 V4 e0 Z2 `8 W# `
  74.         5 @; t+ ^( u& q5 h
  75.         // print sensor readings
    : X* k4 J, u) ~- A
  76.         % T6 p/ {& o2 f9 o3 M0 ]) _* E
  77.         pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\r\n", clear_value, red_value, green_value, blue_value);
    ' B8 c$ x: u% d3 {" S* Y/ y
  78.         wait(0.5);. o9 m: B9 e2 }/ A! P: a
  79.     }
    - X( B* c: z/ P% |
  80.     & x  L5 @  T2 g" z; i
  81. }
复制代码
' W& v7 {# @# k+ A) `7 ~5 x
0 [7 J: L& G  ~4 p4 ?
下载编译结果,打开串口助手之类的,使用三种颜色来实验,结果如下(传感器不能离的太近,否则数值飙升)' d: h) Y5 e* Z$ C* i
5 Q& M" ]) ]4 `7 m, Z7 e
2018-01-16 23-27-39屏幕截图.png
1 t; D1 r! g) Z* k" L
9 a- ~$ n+ W, }# D. V$ l 2018-01-16 23-15-54屏幕截图.png
. d/ G; V: V& y- m0 _" M3 e+ V; q: m
3 Y6 E2 d+ Y5 I- D( U# q 2018-01-16 23-14-42屏幕截图.png # A* g# o: M9 O' S" m

# m4 X0 |  x: N( D使用红色的时候,红色值偏大,使用蓝色,蓝色值偏大,另外两个值基本固定在100多不到200.. X/ C1 J5 g8 c9 M
$ f* [0 z  T: x+ ^* e4 ?* g+ J

# u; C0 F) V  v. m8 s
7 E3 |* H4 T4 W# c0 i最后来张合影
& T# b: d, ^# N; I6 t( E7 [" M% G6 ?% C& _( K. s* F$ m* @
# _, K+ u& |& g. M* h
001502tg4xpx8mud4gfumx.jpg
( X  r9 p$ W; @! C/ m/ W0 f! L' y% L% }7 E  Q+ ^

评分

参与人数 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/ S: }& B" N7 m# U  V5 k& K* _
高手都在玩Linux了,
leo121_3006061 回答时间:2018-1-17 14:14:02
anywill 发表于 2018-1-17 13:44
% G" i2 |0 b- s1 a# x" Y. p/ a4 p' m- rtcs34725有点贵没舍得买,,# s+ u, m$ ?0 z* `+ s9 @2 k$ y
高手都在玩Linux了,

5 B# \, J9 U- m- H. ?( R6 ^6 W4 D过奖了,我也是初学者刚刚入门,这个传感器确实贵,我是拿金币拍的,拍完就回到解放前了
leo121_3006061 回答时间:2018-1-17 14:15:30
zero99 发表于 2018-1-17 13:41
+ q8 K; ^6 |5 B5 N2 `0 b谢谢分享了~
  T% l  ]: _* Z
感谢破总捧场
xudongqiang 回答时间:2020-6-14 17:01:00
666666666666
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版