图1 各式传感器模块

其实一些简单的传感器模块使用的都是同一个电路,就比如光敏模块、热敏模块以及红外接收管等,用的都是图2的电路,改变的也就是电路中N1的属性,如果将热敏电阻放到N1位置上,那么就可以组成一个热敏模块。

图2 内部电路图

引脚和器件说明

VCC:电源正极 3.3V—5V

GND:电源负极

DO(Digital Output):数字量输出接口

AO(Analog Output):模拟量输出接口

LED1:电源指示灯

LED2:数字量输出指示灯

LM393:在此用作电压比较器

R2:电位器(用于调节模块的灵敏度)

电路原理(以NTC热敏模块为例)

1,模拟量输出原理

由图可知,模拟输出口通过网路标签接到了R1与热敏电阻中间,此时AO口的电压为

,当NTC热敏电阻( NTC是英文Negative Temperature Coefficient的缩写。 其含义为负温度系数 。它的电阻值随温度的升高而降低。)的温度上升后,其阻值将会下降,因此热敏电阻分的电压会降低,AO口的电压也随之降低,同理可得,当热敏电阻的温度降低后,AO口的电压将会上升,其赋值将在VCC至GND之间变化。

下面给大家在STM32下接受AO口模拟量的代码

void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);              //开启时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);                       //ADC分频器(CLOCK信号),72MHz/6=12MHzGPIO_InitTypeDef GPIO_InitStruture;GPIO_InitStruture.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStruture.GPIO_Pin = GPIO_Pin_0;GPIO_InitStruture.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruture);                    //配置模拟数据输入通道ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);    //配置多路开关ADC_InitTypeDef ADC_InitStruture;ADC_InitStruture.ADC_Mode = ADC_Mode_Independent;                    //模数转换方式,ADC_Mode_Independent(独立模式):ADC1与ADC2互不干扰ADC_InitStruture.ADC_DataAlign = ADC_DataAlign_Right;                //数据对齐方式ADC_InitStruture.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;   //触发源选择,ADC_ExternalTrigConv_None(内部软件触发)ADC_InitStruture.ADC_ContinuousConvMode = DISABLE;                   //连续转换模式选择,DISABLE(单次转换)ADC_InitStruture.ADC_ScanConvMode = DISABLE;                         //扫描模式选择,DISABLE(非扫描模式)ADC_InitStruture.ADC_NbrOfChannel = 1;                               //需要几个通道,非扫描模式只有1位有效,此时此参数无效ADC_Init(ADC1,&ADC_InitStruture);ADC_Cmd(ADC1,ENABLE);                                  //开关控制ADC_ResetCalibration(ADC1);while((ADC_GetResetCalibrationStatus(ADC1)) == SET);    //复位校准ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1) == SET);           //开始校准
}uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //软件触发while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //检测标志位return ADC_GetConversionValue(ADC1);                   //AD转换后得到的数值:0-4096
}

只要不断调用uint16_t AD_GetValue(void)函数,就可以接受到AO口的模拟量的值,但是这个函数返回的数值是一个整数,其数值变化范围为0—4096,如果返回为0,则代表AO的电压为0,如果为4096,则代表AO的电压为VCC,所以想要精确得到AO的电压,还需加上。

ADValue = AD_GetValue();
Voltage = (float)ADValue / 4095 * VCC;      //VCC需自己定义

此时Voltage就为AO口的模拟电压值。

2、数字量输出原理

先给大家介绍一下,电压比较器工作过程,当用LM393电压比较器时,如果阳极电压大于阴极电压,那么输出将会使高电平,如果阴极电压大于阳极电压,将会输出低电平。

由图2可知,DO是LM393电压比较器的输出端,其阳极连接到了R1电阻与N1电阻之间,作被比较电压,而阴极接到了一个电位器上,作校准电压,所以当阳极的电压大于校准电压时,LM393电压比较器DO端口输出高电位,反之亦然,但是DO口本就通过电阻连接VCC,所以DO口默认输出高电位,只有当被比较电压低于校准电压时,DO口才输出低电压,此时LED2灯发光。

灵敏度调节:灵敏度调节是通过R2电位器进行调节的,当电位器端的电压调的较小时,也就是电压比较器的阴极电压比较小时,NTC热敏电阻将需要承受更高的温度,才能使阳极电压小于阴极电压,从而输出低电位。

下面给大家在STM32下接受DO口数字量的代码

void LightSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);          //开启时钟GPIO_InitTypeDef GPIO_InitStruture;GPIO_InitStruture.GPIO_Mode = GPIO_Mode_IPU;                  //上拉输入模式GPIO_InitStruture.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruture.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruture);
}uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);             //读取端口电平
}

调用uint8_t LightSensor_Get(void)函数,将返回端口的值,高电位时返回1,低电位返回0.

在这里提醒一下,因为DO口默认为高电位,因此读取时,设置IO端口为上拉输入模式是最好的。

要是觉得文章对你有帮助,那就给一个小小的赞吧。

传感器模块(光敏电阻/热敏电阻/红外接收管等)介绍及使用相关推荐

  1. IoT物联网嵌入式设备中30种常见传感器模块简介及原理讲解

    IoT物联网嵌入式设备中30种常见传感器模块简介及原理讲解 0.前言 一.光学传感器模块: 1. 光敏传感器模块: 2. 红外避障模块 3. 循迹传感器模块 4. U型光电传感器模块 5. 红外接收模 ...

  2. 室内监控项目之红外传感器模块

    室内监控项目之红外传感器模块 知识积累: 红外线传感器是用红外线的物理性质来进行测量的传感器.红外线又称红外光,它具有反射.折射.散射.干涉.吸收等性质.它是一种不可见光,其光谱位于可见光中红色以外, ...

  3. stm32f4红外传感器模块 和人体感应模块HCSR501

    也同时买了个红外传感器模块 还买了一个长这样的 这个好容易随便写写了 初始化一下gpioB引脚 __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_Initure.Pin=GPIO_ ...

  4. arduino红外热释电传感器_【Arduino】108种传感器系列实验(17)-热释电传感器模块-Arduino中文社区 - Powered by Discuz!...

    本帖最后由 eagler8 于 2019-8-24 22:13 编辑 37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器 ...

  5. STM32之光敏电阻传感器模块的使用

    本实验配合2.2寸TFT液晶屏显示,当光弱的时候显示"昏暗",光强时显示"明亮". 实验使用的是下图所示的3线光敏电阻传感器模块,用途:光线亮度检测,光线亮度传 ...

  6. MLX90640 红外热成像仪测温传感器模块PC端操作教程

    河北稳控科技MLX90640 红外热成像仪测温传感器模块PC端操作教程 1.驱动程序安装 本设备没有自带显示设备(屏幕),若要进行实时图像查看或者参数修改需要连接到计算机或者手机,并由对应的工具软件完 ...

  7. MLX90640 红外热成像仪测温传感器模块开发笔记(九)

    MLX90640 红外热成像仪测温传感器模块开发笔记(九) EEPROM. RAM.寄存器说明 EEPROM 地址范围为 0x2400~0x273F,共 832 个字(1664 字节), 前 16 个 ...

  8. MLX90640 红外热成像仪测温传感器模块开发笔记(十) 成果展示-红眼睛相机

    MLX90640 红外热成像仪测温传感器模块开发笔记(十) 成果展示-红眼睛相机 现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了 AMG8833(8*8 像素 ...

  9. MLX90640 红外热成像仪测温传感器模块

    河北稳控科技MLX90640 红外热成像仪测温传感器模块PC端操作教程 MLX90640 热红外成像仪 热源检测 电子检修 热水管探测 点此查看具体详情!点此查看具体详情!点此查看具体详情!点此查看具 ...

  10. MLX90640 红外热成像仪测温传感器模块开发笔记(六)

    MLX90640 红外热成像仪测温传感器模块开发笔记(六)红外图像伪彩色编码 什么是红外成像伪彩编码  红外成像的最终目的是用图像来表现温度变化,并且可以通过颜色来区分出不同热量的物体轮廓和形状.那么 ...

最新文章

  1. Java EE学习笔记(四)
  2. not syncing : corrupted stack end detected inside scheduler解决办法 以及高版本的激活码!
  3. 设计模式之工厂模式和抽象工厂
  4. mvn test BUILD FAILURE
  5. 基于XML的IOC案例
  6. codevs原创抄袭题 5960 信使
  7. ArcGIS10.8中如何获取线状、面状数据的折点,并计算折点坐标?
  8. 突破边界局限,阿里云神龙负责人张献涛分享15年虚拟化之路
  9. 2018.9.10.Matlab实验一:熟悉Matlab开发环境
  10. Oracle一些基本术语英汉对照
  11. labview和python哪个易学_如何学好labview?
  12. 默纳克系统服务器怎么查故障,默纳克系统NICE3000和NICE3000new故障历史记录查询方法...
  13. 算法快学笔记(十五):贪婪算法与NP完全问题
  14. 深入学习IOZone【转】
  15. 关于 Nginx 0day 漏洞,需要采取哪些措施?
  16. 行政人员需要了解的基本企业财务知识
  17. 休假申请单位取消分钟、小时,增加“.”。
  18. 数据报表常用excel公式
  19. 做RAID和不做RAID的区别
  20. 如何用Python爬虫爬取网页免费小说

热门文章

  1. 联想主板9针开关接线图_收藏丨34个电气控制接线图、电子元件工作原理图
  2. 恒定湿热试验条件及标准-环境试验中的湿热试验报告
  3. Dotween常用方法详解
  4. Xshell使用教程及WinSCP使用教程
  5. hart协议服务器,基于HART协议智能仪表的在线管理系统的设计与实现
  6. Java数组对象排序
  7. 【Python】 _tkinter.TclError: bitmap xzw.ico not defined
  8. 结构梁配筋最牛插件_国内外好用的Revit插件汇总
  9. matlab 回调函数,在Matlab中将实际值传递给回调函数
  10. 11.微信小程序图片操作总结