前言. Z; y$ L9 b( v9 j6 j7 A
本篇文章我们讲带大家了解光敏电阻的使用( B; O" N/ Z( e+ |; c
1 P! b4 H- I8 J3 Q% P
一、光敏电阻介绍
0 ^9 _% K6 B" i& |, w# j下面是4线光敏电阻实物图- u% I4 O! Y/ [ d! z1 z0 }
8 z/ s1 _7 E4 X9 a: A' a8 S4 S
K0 Z. G6 y, w: r0 a产品接线说明:7 r2 s! V1 e* Z$ G9 ~5 o4 u
1、VCC 接电源正极 3.3-5V
. @+ n5 V- M* ^* i: J2、GND 接电源负极
2 Z2 E0 j X3 A7 w& e! S3、DO TTL 开关信号输出 (配置为输出模式)& }0 v3 t: m( G: Y6 E' P `2 Q
4、AO 模拟信号输出(ADC采样通道)
/ b7 @; }. w) F2 |! ]0 ]! j' r4 `6 G9 c0 H
光敏电阻主要用于检测周围的光照强度,光照强度发生变化那么ADC采样的值也会发送变化。
4 L. J* [8 b& a0 y! O7 j! W
/ E* y8 N, x4 d9 U5 V; q) `. }二、cubeMX配置! n" C1 T$ B2 m0 Y* `
简单的配置我们就不多说了主要是ADC采样的配置
) x( v) Z& Y! ^ U) x# ~这里我采用的是ADC1通道4所以光敏电阻的A0就应该接在对应的ADC通道上。+ @7 \$ z W2 z
# J( }% G3 c+ v7 S7 e. n
- J5 | o- R. \2 Q4 g/ S/ G2 d
/ r# L) K# q4 F/ @' [顺便配置一下D0为输出模式用于简单检测光照强度。
& w7 Y3 {3 ?0 A' A5 f. D/ b$ ]: V1 d+ ~
: k* e* N( a4 o" H" D; P: S
" b' K& a" B' E* K1 A三、代码说明8 K" s; s& `7 g" ?7 N. n+ {
- //IO口定义
! G) W8 P! U; | - #define D0_SET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin, GPIO_PIN_SET)
7 R, ~3 L, j9 G1 \ - #define D0_RESET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin,GPIO_PIN_RESET)
" p) q$ {7 S1 O - 3 h2 g* `/ W2 C' W' N
- - Q* k/ M/ g) R+ y, a; |
- //ADC采样数值
3 c% H. K% \( T7 f1 q- W - typedef struct# M$ L( H7 F4 f/ c, J6 Q; c; j, J. h
- {. O: D8 F G' y9 @) a2 p
- u32 adc_vol;//ADC测量的值
8 B5 R! J! T# a - float vol;//实际电压值
! x' L- }2 q3 y8 @7 V, ~ l
$ J0 N4 K& ]/ d; Z. Q) i# E& Z" R- }RESIST;$ |: ~- X* l# q- i' J7 W
* B% u6 u4 ~6 N( n- HAL_ADC_Start_IT(&hadc1);//中断方式开启ADC' N+ H4 I" T# Y# |
- //ADC回调函数* f F5 A+ W+ b" R: A. Z2 A
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)# `5 X2 ~3 x# M. O# v
- {* T7 s! x7 u" {7 |& o: D4 Y
- resist_data.adc_vol=HAL_ADC_GetValue(hadc);//获取ADC转换结果. G: Y+ |- v1 p9 z# m
- resist_data.vol=resist_data.adc_vol*5/4095;//转换为电压值& a: a7 Z1 M0 O) f- t
- }
0 V5 U8 g0 Q, P" N: P
3 Z+ Z. D' F/ Z7 S# Y: E- //测试函数当电压大于2.5时D0输出低电平光敏电阻上的LED指示灯被点亮8 o) \4 L/ p$ Y0 }
- void Resist_Test(void)
" G- U0 e8 m$ N9 L: F" P ^3 {: ? - {
# ~! G, c/ S3 D; C+ G( U9 R8 O - if(resist_data.vol>2.5): g1 S5 k7 B* B% s
- {( `- E& s$ J8 _/ C" m3 g1 W
- D0_RESET();/ @+ M! _% B4 e& r5 I7 P# G* D
- }5 F& B# W6 X5 q
- else
7 Z1 E* W; t1 r X8 S5 x - {5 E6 f% _* _. T' _
- D0_SET();
$ ^. H6 J. _8 X6 `1 s+ R& I! ]4 S - }
* ^! `% w) `, t+ m* K y - }" T8 J- d+ w, {3 v9 h' S/ V. J" o
- * z6 z3 y) b0 n4 a7 Q7 D$ y
- while(1)8 @! a- N! e+ M4 |
- {, q' K& f& r7 q% C7 B+ N" Y m, N
- Resist_Test();& ~8 t+ P8 Y" j# }8 A
- }
复制代码
$ T/ }- ?& a ]& a+ j" q- C' S- J总结
^, \. C1 ~' i l# a( h! D光敏电阻的使用其实就是ADC采样的使用,大家如果不熟悉ADC采样的话可以看我前面的文章:ADC采样
) G8 q' w G3 q, Y
v M: ~9 H& S: R. W! ]2 |# }1 t- U
/ `; @3 Q% }8 m N! `( A3 d1 e
|