前言
2 i" A1 t8 r3 v: B' ?& l本篇文章我们讲带大家了解光敏电阻的使用
7 |; n9 l0 ~$ i3 h& E1 b
/ N# S# t8 d" Q5 X3 P一、光敏电阻介绍
5 x5 x% a/ b$ n$ ]下面是4线光敏电阻实物图+ d8 k5 m3 D& {( K7 E$ C
: C) \0 Q* ^+ n' w
" R9 O9 t2 {) e' k' s4 w1 h6 l$ c" v
产品接线说明:
8 c; l# Z. L& m0 _! G2 ^' F4 C* J1、VCC 接电源正极 3.3-5V, p# e7 G! O7 a$ r% S W! g
2、GND 接电源负极1 J/ M1 M( e* }3 ?
3、DO TTL 开关信号输出 (配置为输出模式)% O7 m2 s* |, n) ?4 i) m2 Z
4、AO 模拟信号输出(ADC采样通道)
! m2 P) \3 d7 l5 c+ p6 Q6 m/ \0 ^ `1 G% M8 P( `/ o3 _
光敏电阻主要用于检测周围的光照强度,光照强度发生变化那么ADC采样的值也会发送变化。% r: P2 H0 T1 ?4 f
9 x2 K2 z" U4 G6 F
二、cubeMX配置
$ O9 p2 |) Y( a$ r8 J M- f简单的配置我们就不多说了主要是ADC采样的配置5 T% _" Q6 S, ?0 U) N
这里我采用的是ADC1通道4所以光敏电阻的A0就应该接在对应的ADC通道上。 w2 M! N- x1 ]: x8 f4 N& ?
' t9 U& S# p/ n- X0 C
+ o2 G1 x) M: k
u* O1 A/ J0 x9 B顺便配置一下D0为输出模式用于简单检测光照强度。
; ^ a( i. R( M; \
- T9 G; ]" h+ A4 ~' m2 k" h
9 D2 W; ?; ?) }& m
0 @; W* w' p" h- \; G+ H三、代码说明
3 D- r$ _, B1 R2 i& u& Y( O- //IO口定义
) I7 _- Q6 u; a5 x- R9 K# j - #define D0_SET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin, GPIO_PIN_SET)) a- x% G0 |& R9 ] E" d
- #define D0_RESET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin,GPIO_PIN_RESET)
* z; b$ z/ }7 } K - ! A' j. V" ^1 G* E7 y
- 6 R7 U C2 L: C0 k7 r2 _' R
- //ADC采样数值% d, z# F- ^* t3 F: |4 K5 H) Y9 f
- typedef struct" T7 ^+ q S9 x
- {* Z" Q S9 l" U* h0 @+ Q
- u32 adc_vol;//ADC测量的值6 d, z% x i3 }* Y+ E
- float vol;//实际电压值$ b: ?8 v( O4 E5 a w% R# c7 \ n
- * H) t( F4 P# h V2 F$ q2 u. u$ F
- }RESIST;
) ]/ L" ^" G5 `* P: k$ J
5 B. ^5 ~, R5 c4 \; U1 o2 A$ J- HAL_ADC_Start_IT(&hadc1);//中断方式开启ADC
: g- P9 `" g/ ~( | - //ADC回调函数( C8 p- h' Z! a5 N
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc), g5 j0 g' i0 W# {* h
- {! v7 I- @2 F1 x' H+ B: F, ~
- resist_data.adc_vol=HAL_ADC_GetValue(hadc);//获取ADC转换结果0 ]' R$ p* H+ T5 c, g0 `0 T
- resist_data.vol=resist_data.adc_vol*5/4095;//转换为电压值5 u8 x% c& E# b+ k
- }& u& a9 @( n' a4 x
- + I- z# ^- ~9 ?: A
- //测试函数当电压大于2.5时D0输出低电平光敏电阻上的LED指示灯被点亮6 }8 X# w# `6 B' @; p
- void Resist_Test(void): ?$ F& l. V3 ?. N
- {8 Z7 C1 w$ t4 T3 b
- if(resist_data.vol>2.5); x, g) A: w% E
- {) ]5 F- `( Y/ q5 ~4 j: C5 v& |8 x
- D0_RESET();
8 g, {! v" [1 l - }3 U5 O- C! |( I/ k$ B. T
- else n0 C" p/ F* i2 ^% g3 U, U
- {, b& y1 O3 N0 ~8 ]$ t
- D0_SET();9 L% ^0 g1 ?4 J8 f$ r. j) o
- }
, p" y& q n% K! N3 e - }
1 N4 @9 d5 q; l4 G - ' h3 _- J/ Z; G* r$ \& j; N
- while(1)
) K/ C$ g) T q- A - {
2 |7 p/ W8 G5 B' X4 v - Resist_Test();
9 F8 X! Y: p4 t' X6 X - }
复制代码 ) g$ O9 N# p" Y+ k( ^9 f4 J
总结
$ Z" @0 @# R* g: a- @光敏电阻的使用其实就是ADC采样的使用,大家如果不熟悉ADC采样的话可以看我前面的文章:ADC采样0 _. ^* o; x! p
8 q5 A& u4 G G: e! V7 C: |+ _* i' V6 }6 ?; C4 @
( [ l0 l- ?8 R$ ?5 { |