前言: a& q9 n7 y" [. E# j2 Y5 h
本篇文章我们讲带大家了解光敏电阻的使用* D/ V$ q$ U2 `- B
) @+ i2 j6 H) }2 C: q4 V6 Z+ v
一、光敏电阻介绍2 G* T; X1 |- C1 Z% Y
下面是4线光敏电阻实物图: A. p8 _! x$ I+ s3 `$ J$ p) S
6 q3 R4 k, z. a! r8 A( {4 ]- B: H- [# |! G2 m- a
产品接线说明:
& Z5 @+ O, O: g8 B( v6 i3 i* d0 A1、VCC 接电源正极 3.3-5V$ |, d, z% u/ M+ @! s" x
2、GND 接电源负极, I9 r4 }- B) Y' b6 M# z" Q0 s' L& m
3、DO TTL 开关信号输出 (配置为输出模式)
. \& ^( Z- ?# [; S4、AO 模拟信号输出(ADC采样通道)+ `6 C& E. N- t# c6 ?$ }: C
' Z, j) l3 N& O8 j& ]5 h0 X$ v光敏电阻主要用于检测周围的光照强度,光照强度发生变化那么ADC采样的值也会发送变化。
9 X S( `; e' ] Y! }! G& v" o) C8 v
二、cubeMX配置
! i7 v/ q" l1 _! c z# T简单的配置我们就不多说了主要是ADC采样的配置. b8 i- i3 r; z" ?
这里我采用的是ADC1通道4所以光敏电阻的A0就应该接在对应的ADC通道上。
v$ I: u9 F) }, i3 I& ]; f8 P: [! @0 n* r6 A4 T' _* K
/ p0 a5 \1 {( L/ v K" B) `
4 U( T% s L/ v+ B( J顺便配置一下D0为输出模式用于简单检测光照强度。& n3 z0 ?0 C3 t8 _
, l7 u; Q6 E( i: E0 |
4 S- ^- \' f* {! m) y
+ x/ D" Y$ E/ c$ I2 \7 O/ ~$ Z三、代码说明
$ s0 b0 T( d4 E% W: v, B+ t: D- //IO口定义
% l+ d. V) t' o! E% `4 _& ^ - #define D0_SET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin, GPIO_PIN_SET)# {0 R9 k6 ] E+ }
- #define D0_RESET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin,GPIO_PIN_RESET)% H, u5 V; t/ R: ^% q& p; y
- & K$ m% H0 A- @2 B
1 s9 F2 v* L& U( `3 _* h. J- //ADC采样数值
: K7 ^ Y+ p, G8 Y4 x5 P- I - typedef struct
, ^: m) y* A8 A5 n4 M - {
- m d/ u* p' R* F- q' P - u32 adc_vol;//ADC测量的值2 O {( n' B8 j! d2 @# o
- float vol;//实际电压值( Y- }! {3 c" k! i' C
! R: [# j" A! S a# O* t- }RESIST;
* q( N9 O6 g+ f+ h. \% E3 R - . B! [: ?6 W" r" t) w1 j
- HAL_ADC_Start_IT(&hadc1);//中断方式开启ADC
! Z& t; u( S; ^+ W - //ADC回调函数
$ L1 \6 J8 A" Z9 E5 m4 u3 j+ K - void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
6 E2 e/ x$ w I9 P4 T2 s - {0 s: o# d& E7 x [3 O
- resist_data.adc_vol=HAL_ADC_GetValue(hadc);//获取ADC转换结果, @& Y. }+ I) y# T# \ o% ?
- resist_data.vol=resist_data.adc_vol*5/4095;//转换为电压值5 `/ o8 k5 H! S" u
- }
# |5 _3 a2 |" i2 u) U2 ^& h
/ L' |0 Z' B0 b' ^0 n( ?6 h3 Q1 L# c- //测试函数当电压大于2.5时D0输出低电平光敏电阻上的LED指示灯被点亮
& i! Y/ D9 a. K+ n2 }. W - void Resist_Test(void)- a$ B3 w9 [0 s/ h9 ~) o. G$ Y
- {2 q4 [0 S/ _! M" `5 [3 v
- if(resist_data.vol>2.5)
% {8 S* `# L/ y8 L8 M. b v- f - {
: Z0 _* F$ O& f7 {: ]5 ]7 R- B. x - D0_RESET();5 q( d; w j$ ?1 I# W
- }
5 R% t2 P/ g9 B, Q4 ~ - else" ~# h+ ~) n3 f$ H# d
- {" `7 V) @! E- Z4 U* s
- D0_SET();
5 r: x5 _8 G @, } - }, I7 s& T4 @& U2 u" R
- }
! {% L" Y: a+ R4 h! A - ! Q+ |$ y$ C* R) b
- while(1)
& d" y' Y3 k6 b& D3 u' o+ r - {
i5 s' _4 |' K - Resist_Test();
+ Y9 J# Q7 {4 a% ?1 S+ C3 V - }
复制代码 / B& A3 U7 y2 |- U. q
总结: S# ^( B4 m7 o" \# V R
光敏电阻的使用其实就是ADC采样的使用,大家如果不熟悉ADC采样的话可以看我前面的文章:ADC采样+ W# g* t5 Z2 o3 e6 }4 Y5 m9 D
- M, D) g, p: p" W
% {* C4 H9 C2 T/ b0 N$ t! C; H- h/ O) S- b6 E
|