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

STM32单片机雨滴模块

[复制链接]
STMCU小助手 发布时间:2021-7-22 14:47
一、设备说明3 u0 \, u% j- w& W: L
单片机:STM32f103zet6; m# X3 j1 C8 p4 ~
雨滴模块% J. }& D  e: T9 y$ t
1.png
9 t/ G( x" c9 A
5 `* u" A9 t1 i

+ u# [2 M) Q- Z0 S 2.png ' s) z  C9 y$ |) ]2 J
% }4 {! E! ^* k1 o

  `" J/ Z4 P! z3 C# c) Y9 j3 l; q二、部分关键代码! p! |! h/ p; J2 [) E
1.初始化ADC采集
' g& ]+ ]2 r1 j0 F; N代码如下(示例):
8 R1 F+ c- }  S- L
  1. <font face="微软雅黑" size="3">void  Adc_Init(void). a# P! j" a* |0 r; r' N
  2. {         / E9 k. M9 r4 e- }5 y* k+ h
  3.         ADC_InitTypeDef ADC_InitStructure;
    ' y6 a! C% N: d* T
  4.         GPIO_InitTypeDef GPIO_InitStructure;/ `! [) x/ R4 P8 |7 g& p) w/ e3 o
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1        , ENABLE );          //使能ADC1通道时钟; k8 K1 [# K% H' f1 x$ k
  6.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
    5 V, p& m+ G/ V$ M& r+ f% w- F0 M
  7.         //PA1 作为模拟通道输入引脚                        
    . q, U4 n* J. U/ b
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;, }/ L; L  L- X" U4 J
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模拟输入引脚0 F3 G9 }3 y- x. G0 P1 E) K
  10.         GPIO_Init(GPIOA, &GPIO_InitStructure);        1 l4 q$ ^4 o* Q
  11. //**All notes can be deleted and modified**//, C; r! Z% l/ I3 s* `9 |! Q
  12.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在独立模式
    ( ^8 I( p& @9 Q9 C8 s/ p
  13.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模数转换工作在单通道模式8 D$ ]; g: {0 X; {! H/ ~
  14.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模数转换工作在单次转换模式( Y) M* {6 R5 I/ l) K" M2 J0 `% T% N
  15.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //转换由软件而不是外部触发启动  E1 Q+ r1 C: z; k" S
  16.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC数据右对齐
    # Y. d7 ^" D: v9 {/ J
  17.         ADC_InitStructure.ADC_NbrOfChannel = 1;        //顺序进行规则转换的ADC通道的数目6 V6 Z9 v4 L' O  A+ S" b5 Y& i
  18.         ADC_Init(ADC1, &ADC_InitStructure);        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器    + O( Z3 X' w" \+ l
  19.         ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1        # Q( s- A3 g; u, y2 [
  20.         ADC_ResetCalibration(ADC1);        //使能复位校准           . l/ |7 O! K" N# s$ S6 M
  21.         while(ADC_GetResetCalibrationStatus(ADC1));        //等待复位校准结束       
    ! L: Q& Q5 O7 S) n
  22.         ADC_StartCalibration(ADC1);         //开启AD校准, O" U( O4 |3 ?' P
  23.         while(ADC_GetCalibrationStatus(ADC1));         //等待校准结束
    3 f# J2 ~/ l! k- H. Z* P" Q
  24. </font>
复制代码
2.读入数据
. _+ @. N/ G/ o) X代码如下(示例):
" z' `5 f, k1 U* ~
  1. <font face="微软雅黑" size="3">   adcx=Get_Adc_Average(ADC_Channel_0,5);//读取ad转换值 5次求平均               
    ) ]6 }( ]$ E4 e" S$ `
  2.                         printf(" adcx %d\r\n",adcx);       
    * M1 ~- ~. `* n- n5 z3 @! f
  3.                        
    2 ^' q. R* [/ ~+ o" E
  4.                         sensorVal =99-((float)adcx*3.3/4096)*2*99.0/5.0;// 采集值  *2表示电阻分压        输出最大5v 但是要转化为最大3.3v                ) B" s+ W4 `% K- ]* f! C
  5.                         sensorVal =99-((float)adcx*3.3/4096)*99.0/5.0;* C& \  z/ O! l, m6 _( c# n/ _
  6.                         : X* Q+ g( b" x) D8 t& C8 p
  7.                         printf(" sensorVal %d\r\n",sensorVal);; U0 S5 U& y7 i
  8.                         if(sensorVal<BASICS_VAL)sensorVal = 0;//过滤传感器本身自带电压: K; A# w9 F0 ?) n+ N
  9.                         else! j$ D* J! _5 O" K' e6 J
  10.                         {
    8 k3 z8 p5 w( z9 t/ W6 Y# q' _; W
  11.                                 sensorVal = (sensorVal-BASICS_VAL)*99/(99-BASICS_VAL);//将30-99值转化为0-99的值7 N; [7 U0 f9 L9 m# F; b' H* n# J9 F
  12.                         }
    ! I8 F7 e8 [% v5 e3 q0 R
  13.                         , ?9 v) [8 v7 Y3 f
  14.                         printf(dis0,"nowValue:%d   ",sensorVal);                //打印                                        . i% d5 X6 G$ N. D( Y
  15.                        
      N6 h% X  }4 O
  16.                         if(setMode){
    * P! K1 t! t; f9 i0 _7 _( I
  17.                                 printf(dis1,"setValue:%02d<   ",setNum);                //打印                                9 q( S/ T) P5 j
  18.                         }* V& S4 s6 p! O, I1 l: c
  19.                         else{; t! Y: b* ?$ N
  20.                                 printf(dis1,"setValue:%02d    ",setNum);        + ~4 v( ]* F9 e0 H
  21.                         }- w$ L- ?5 p9 D6 Z3 r
  22. </font>
复制代码
% N, J5 N& ~; Q% W6 I
, x/ L$ X4 s% [4 Y' [7 K* Q
总结
) O5 Z4 ~7 L' [/ [$ x8 Z最后输出的结果:
- x! X7 C3 F7 o根据测试,雨滴模块浸入水的深度不同,返回的电压值转化成的adc值不同:8 O# Z! p+ N7 z' G
完全无水的情况返回的adc值为4096;. E( {" {- h$ Q; ]9 p9 n
完全浸入水中返回值接近400(是因为有模块供电的电压)。! U0 }: q1 e9 @2 w- D' G& t
根据400~4096的区间,按百分比输出,无水情况输出0,完全浸没输出99;; a% F' y2 u6 f4 ^" c- m
: Y) T- @+ T5 R" ?
收藏 评论0 发布时间:2021-7-22 14:47

举报

0个回答

所属标签

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