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

【经验分享】stm32项目实战 光敏电阻的介绍和使用

[复制链接]
STMCU小助手 发布时间:2022-5-22 22:00
前言: 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
9QP]VKT$K1GD{1_CWM[(B.png
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
54)N1]0CDTWN}`~Y4}J5M~M.png / 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 |
{MM9AAB%2]N5F50T5S{BU~3.png 4 S- ^- \' f* {! m) y

+ x/ D" Y$ E/ c$ I2 \7 O/ ~$ Z三、代码说明
$ s0 b0 T( d4 E% W: v, B+ t: D
  1. //IO口定义
    % l+ d. V) t' o! E% `4 _& ^
  2. #define D0_SET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin, GPIO_PIN_SET)# {0 R9 k6 ]  E+ }
  3. #define D0_RESET() HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin,GPIO_PIN_RESET)% H, u5 V; t/ R: ^% q& p; y
  4. & K$ m% H0 A- @2 B

  5. 1 s9 F2 v* L& U( `3 _* h. J
  6. //ADC采样数值
    : K7 ^  Y+ p, G8 Y4 x5 P- I
  7. typedef struct
    , ^: m) y* A8 A5 n4 M
  8. {
    - m  d/ u* p' R* F- q' P
  9.   u32 adc_vol;//ADC测量的值2 O  {( n' B8 j! d2 @# o
  10.   float vol;//实际电压值( Y- }! {3 c" k! i' C

  11. ! R: [# j" A! S  a# O* t
  12. }RESIST;
    * q( N9 O6 g+ f+ h. \% E3 R
  13. . B! [: ?6 W" r" t) w1 j
  14. HAL_ADC_Start_IT(&hadc1);//中断方式开启ADC
    ! Z& t; u( S; ^+ W
  15. //ADC回调函数
    $ L1 \6 J8 A" Z9 E5 m4 u3 j+ K
  16. void  HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
    6 E2 e/ x$ w  I9 P4 T2 s
  17. {0 s: o# d& E7 x  [3 O
  18.             resist_data.adc_vol=HAL_ADC_GetValue(hadc);//获取ADC转换结果, @& Y. }+ I) y# T# \  o% ?
  19.      resist_data.vol=resist_data.adc_vol*5/4095;//转换为电压值5 `/ o8 k5 H! S" u
  20. }
    # |5 _3 a2 |" i2 u) U2 ^& h

  21. / L' |0 Z' B0 b' ^0 n( ?6 h3 Q1 L# c
  22. //测试函数当电压大于2.5时D0输出低电平光敏电阻上的LED指示灯被点亮
    & i! Y/ D9 a. K+ n2 }. W
  23. void Resist_Test(void)- a$ B3 w9 [0 s/ h9 ~) o. G$ Y
  24. {2 q4 [0 S/ _! M" `5 [3 v
  25.   if(resist_data.vol>2.5)
    % {8 S* `# L/ y8 L8 M. b  v- f
  26.   {
    : Z0 _* F$ O& f7 {: ]5 ]7 R- B. x
  27.     D0_RESET();5 q( d; w  j$ ?1 I# W
  28.   }
    5 R% t2 P/ g9 B, Q4 ~
  29.   else" ~# h+ ~) n3 f$ H# d
  30.   {" `7 V) @! E- Z4 U* s
  31.     D0_SET();
    5 r: x5 _8 G  @, }
  32.   }, I7 s& T4 @& U2 u" R
  33. }
    ! {% L" Y: a+ R4 h! A
  34. ! Q+ |$ y$ C* R) b
  35. while(1)
    & d" y' Y3 k6 b& D3 u' o+ r
  36. {
      i5 s' _4 |' K
  37.         Resist_Test();
    + Y9 J# Q7 {4 a% ?1 S+ C3 V
  38. }
复制代码
/ 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
收藏 评论0 发布时间:2022-5-22 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版