前面给大家介绍了传感器的开关输出的使用,今天给大家介绍一下常见传感器的模拟输出的用法,用到了STM32的ADC(模数转换)模块和USART串口通信模块。代码就是正点原子的ADC实验的代码。今天只聊传感器,ADC与USART模块可以自行查找资料或者等我过几天更新,一定简单易懂。

先给大家介绍两个新的传感器,由上至下为声音检测模块和红外对管。声音检测可以用于检测是否有声音,并不能识别内容,常用于做声控灯。红外对管常用于做循迹小车,一个发射红外,一个接受红外,在光照强度大的情况下会失灵。DO是开关输出,本次使用模拟输出端口,DO端可以不用连接。

接线方式

VCC——单片机3.3V

GND——单片机GND

OUT/AO——单片机PA1

模块工作环境

  1. 工作电压:3.3V至5V
  2. 电平输出:0~3.3V

话不多说上代码,ADC的代码可以直接使用正点原子的,ADC模块:

#include "adc.h"
#include "delay.h"
//   void  Adc_Init(void)
{   ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );  RCC_ADCCLKConfig(RCC_PCLK2_Div6);  //PA1 ×÷ΪģÄâͨµÀÊäÈëÒý½Å                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;     GPIO_Init(GPIOA, &GPIO_InitStructure);  ADC_DeInit(ADC1);  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  ADC_InitStructure.ADC_ScanConvMode = DISABLE;  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1;    ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE);  ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1));   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}                 u16 Get_Adc(u8 ch)
{ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); ADC_SoftwareStartConvCmd(ADC1, ENABLE);     while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));return ADC_GetConversionValue(ADC1);
}u16 Get_Adc_Average(u8 ch,u8 times)
{u32 temp_val=0;u8 t;for(t=0;t<times;t++){temp_val+=Get_Adc(ch);delay_ms(5);}return temp_val/times;
}    

主函数的主要代码是:

while(1){1、  adcx=Get_Adc_Average(ADC_Channel_1,10);2、  temp=(float)adcx*(3.3/4096);3、 adcx=temp;4、   printf("%5.3f     ",temp);5、  delay_ms(2500); }                                   

1、取出ADC读取传感器输出的平均值到adcx,每十次做一次平均值,确保数值准确。

2、ADC每次取值只会取12位,所以他可以表达最大值是4096,把每次输出的值先除4096再乘以3.3就可以使得到的值范围在0~3.3,可以看做是0~3.3V。

4、此处在USART函数里用了printf函数重定义,使printf可以直接用串口输出数据到上位机。函数重定义代码如下:


int fputc(int ch, FILE *f)
{      while((USART1->SR&0X40)==0); USART1->DR = (u8) ch;      return ch;
}

下图是我用四角光敏传感器做的模拟输出实验,展示一下结果:

1.给光敏电阻遮光,输出电压为1.294V

2.给光敏电阻照光,输出电压为0.436V

总结

传感器方面并不难,难的是ADC模块的使用,但是如果不看原理的话也不是很难,首先会用,用熟了之后就可以深究原理了,初步学习过程中不要给自己挖坑,先将各模块用起来。有什么新的问题可以私聊,一起学习。

光敏,红外,人体红外检测模块的模拟输出(ADC)实验——入门相关推荐

  1. Arduino实现智能交通信号灯(软串口、压力传感器hx711、光敏、人体红外、led等)

    Senor文件: /** @Author: hzf* @Date: 2019-12-22 18:57:43*/ #include<HX711.h> #include<Servo.h& ...

  2. 红外人体感应传感器SR602模块使用说明

    ​一.HC-SR602模块 红外人体感应传感器HC-SR602是基于红外线技术的自动控制模块,专用于感应周围人体的存在.该模块相较于HC-SR501,灵敏度较高,抗干扰能力大,且简单易用. 二.HC- ...

  3. cubemx stm32 lu90614模块 人体温度检测模块 可以替代温枪 驱动代码

    lu90614 使用串口通信在,指值得注意的是,他的TX接单片机的TX,RX接单片机的RX,和其他的串口设备不一样. 模式切换包 lu90614有两种模式, 一个是物温模式,一个是体温模式(检测人体温 ...

  4. 气体检测模块第708篇:红外成像天然气(甲烷)气体检测模块

    红外成像天然气(甲烷)气体检测模块 一.产品简介 红外成像气体检测模块基于气体在红外吸收光谱的"指纹"特征,采用红外成像技术实现危险区域中气体泄漏的成像检测,能够及时对气体泄漏区域 ...

  5. 基于K210与STM32的人脸识别门禁 实现掉地仓储,人体雷达检测

    本系统设计以Kendryte K210为人脸图像识别的核心芯片,以STM32为系统逻辑控制芯片,OLED显示控制信息,蓝牙通讯实现命令控制.人体雷达检测模块,当有人来时自动开启人脸识别.同时也可以使用 ...

  6. HC-SR501 人体红外感应模块

    资料下载:http://pan.baidu.com/s/1bnkxeoR 完美版HC-SR501是基于红外线技术的自动控制模块,采用德国原装进口LHI778探头设计,灵敏度高,可靠性强,超低电压工作模 ...

  7. 人体红外传感模块原理分析

    数字热释电传感器是将传统热释电传感器的敏感元与信号处理芯片集成化设计,将敏感元与 IC 芯片集成封装到传感器屏蔽罩内部,敏感元通过感应外界人体移动产生的红外信号,以差分输入的方式传送到高精度的数字智能 ...

  8. [转载]HC-SR501 人体红外感应模块

    热释电红外感应模块 原文地址:HC-SR501 人体红外感应模块作者:XingHeStudio 技术参数: 1.工作电压:DC5V至20V 2.静态功耗:65微安 3.电平输出:高3.3V,低0V 4 ...

  9. 人体红外模块对比评测,是你的话怎么选

    需要做课设或者DIY实验等用途的同学,这两款人体红外模块应该是大家见到最多的,也是最常被大家用来比较的,那如何选择适合自己的模块就成了一件头疼的事.莫慌!我来帮您对比下它们有何不同~ 这两款模块都是用 ...

最新文章

  1. 不追逐标准化产品,360数科的一站式风控体系有何不同?
  2. 给定两个数r和n_输出r的n次方 java_滴滴出行2018编程题
  3. mkswap,swapon, swapoff命令:创建交换分区
  4. 剑指 Offer 43. 1~n 整数中 1 出现的次数(可能是最简洁易懂的)
  5. 【计算机网络】三次握手与四次挥手
  6. LVS学习笔记之三种模式的特点概括
  7. linux操作系统怎么修改时区,Linux操作系统修改时区的方法
  8. 图像金字塔:高斯金字塔vs拉普拉斯金字塔
  9. 自动化测试——unittest生成HTML测试报告
  10. 第一次作业_U201410737 _万学远
  11. 2021-10-08梦笔记
  12. Command(命令)
  13. 计算机一级考试模拟软件安装方法,计算机一级考试软件怎么使用_计算机一级考试软件安装使用教程...
  14. 岂曰无衣 与子同袍——解析月狂病amp;壳之少女的世界
  15. C++ 头文件「ctype.h」里的:isalpha、islower、isupper、isalnum等函数
  16. 个人财务管理系统beancount-gs
  17. python学习笔记分享(四十)网络爬虫(7)反爬虫问题,解决中文乱码,登陆和验证码处理
  18. 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组
  19. 一师兄的面试经历:对于销售职位来…
  20. matlab 计算变异系数,变异系数法求权重matlab 代码

热门文章

  1. 大学物理第十三章复习笔记:波动光学基础
  2. 福州室外婚纱摄影哪家好?
  3. 两电源之间接0.1UF的电容起什么作用?
  4. 计算区间素数和,杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序
  5. 使用 Authing + Lambda 替代 AWS Cognito
  6. 使用javascript和jquery获取类方法
  7. 关于不能用莱布尼兹准则判别级数敛散性时的其中一种方法示例
  8. 广州未成年子女落户政策需要什么申请条件和申办材料
  9. MySql的CURRENT_TIMESTAMP
  10. Word在试图打开文件时遇到错误请尝试下列方法 *检查文档或驱动器的文件权限*确保有足够的内存和磁盘空间,...