基于STM32对于光敏电阻传感器的光控应用
文章就当学习笔记了,还是萌新,如有错误还请大佬多多指正。
前段时间一直在学校做项目,想给开发的机器人平台做个自动环境感应灯控,然后就想起来了光敏传感器,网上淘了一圈就买了一个亚博的光敏模块(主要是外观不错,比较好用)。就决定搞一块回来(-¥4.9)。
根据店家提供的资料,知道了传感器端输出的是电压值(即模拟信号),但是不能直接使用,百般查询,了解到了STM32中ADC,即为模数转换器。
可在STM的中文参考手册中第11章了解ADC的知识。
亚博智能-光敏传感器
数值的采样
首先知道的是STM32的ADC是12位的逐次逼近型模拟数字转换器,这说明ADC模块读到的数据是12位数据。由此可知:STM32读到的ADC值,就是从0到4095(4095即为1111 1111 1111)。
eg:当把ADC引脚接了GND,读到的就是0;当把ADC引脚接了VDD,读到的就是4095。
所以,在设计的时候,根据(0,0)(4095,3.3)坐标,列一个一元一次方程 y=kx+b,就知道数值是多少了。之后再拿数值做限定条件,你就能根据机制,设计不同光照强度下的触发动作了。
配置led
#include "stm32f10x.h"
#include "led.h"void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitSture;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitSture.GPIO_Pin=GPIO_Pin_8;GPIO_InitSture.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitSture.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitSture);GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
头文件.h自己配置就行。
配置灯光控制程序(配置ADC)
#include "stm32f10x.h"
#include "Light Sensitive Module.h"
#include "led.h"
#include "delay.h"void Light_Sensitive_Module(void)
{ ADC_InitTypeDef ADC_InitStructure; //ADCGPIO_InitTypeDef GPIO_InitSture; //GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE ); //使能ADC1通道时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M//配置GPIOGPIO_InitSture.GPIO_Mode=GPIO_Mode_AIN; //GPIO配置模式为模拟量输入GPIO_InitSture.GPIO_Pin=GPIO_Pin_4; //配置GPIO串口数GPIO_Init(GPIOC,&GPIO_InitSture); //根据GPIO_InitSture中指定的参数初始化外设GPIO的寄存器ADC_DeInit(ADC1); //复位-ADC1 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC的工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作模式在单次转换模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作模式在单通道模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而非外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据采用右对齐方式ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目(根据使用情况调整)ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器 ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1ADC_ResetCalibration(ADC1); //使能复位校准 while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束ADC_StartCalibration(ADC1); //开启AD校准while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束} //获得ADC值
u16 Get_Adc(u8 ch)
{//设置ADC的规则组通道,一个序列,采样时间(程序使用ADC12_IN14,根据手册数据自我调整数值)ADC_RegularChannelConfig(ADC1, 14, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期//(周期越大采样越精准,时间越长。具体周期数值请GO to definition) ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //等待转换结束return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果值
}u16 Get_Adc_AV(u8 ch,u8 times)
{u32 value=0;u8 t;for(t=0;t<times;t++){value+=Get_Adc(ch);delay_ms(5);}return value/times;
}
想配置不同通道的,先查阅芯片手册,找到可以使用ADC的引脚。
eg:ADC123_INx (123是ADC1/ADC2/ADC3的合并写法,x是通道数)。
int main
#include "stm32f10x.h"
#include "led.h"
#include "Light Sensitive Module.h"
#include "delay.h"int main(void)
{ u16 adc1; delay_init(); //延时函数初始化 LED_Init(); //LED配置Light_Sensitive_Module(); //控制配置NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级while(1){adc1=Get_Adc_AV(ADC_Channel_1,14); //adc1就是提取到的数值,用数值做条件即可 delay_ms(250);if(adc1>2800){GPIO_SetBits(GPIOA,GPIO_Pin_8);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_8);}}
}
最终效果
光线强度强,led灯亮
光线强度弱,led灯灭
部分资料学习内容来自【STM32】ADC库函数、一般步骤详解(实例:内部温度传感器实验)_Yngz_Miao的博客-CSDN博客_stm32adc校准函数https://blog.csdn.net/qq_38410730/article/details/80080660?ops_request_misc=&request_id=&biz_id=102&utm_term=ADC%E7%9A%84%E9%85%8D%E7%BD%AE%E5%BA%93%E5%87%BD%E6%95%B0%E6%96%B9%E5%BC%8F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-80080660.142^v67^control,201^v3^control_1,213^v2^t3_control2&spm=1018.2226.3001.4187
基于STM32对于光敏电阻传感器的光控应用相关推荐
- 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...
- K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示
K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 STM32 ...
- STM32之光敏电阻传感器模块的使用
本实验配合2.2寸TFT液晶屏显示,当光弱的时候显示"昏暗",光强时显示"明亮". 实验使用的是下图所示的3线光敏电阻传感器模块,用途:光线亮度检测,光线亮度传 ...
- 基于STM32的姿态传感器电路设计与使用
文章目录 引言 程序设计描述 编写串口通信的驱动程序 编写系统延时程序 对于MPU6050姿态传感器进行初始化 编写定时中断程序 电路设计描述 具体设计分析 代码部分详细说明 设计实现效果 MPU60 ...
- 基于STM32的颜色传感器TCS3472
文章目录 前言 一.TCS3472是什么? 二.RGB 颜色传感器分析 三.驱动TCS3472 3.1读取R,G,B 四.测试TCS3472 4.1参数测试 总结 前言 最近由于课程设计要求,用到了一 ...
- 基于STM32实现的普通灯泡调光控制器
最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发.下面分享一个ZhengN大二时候的一个小玩具,软硬件都分享给大家,有需要的小伙伴,文末获取. 这个小作品设计到了强电,不建议没经验的小伙伴 ...
- 基于stm32的mpu6050传感器实验
@TOCMPU6050+STM32学习笔记 学习了差不多两天的mpu6050,参考了很多篇博客还有看一些资料,今晚终于把这个东西在我的串口显示出来了,下面就废话不多说,开始我的笔记啦. 开发环境:uv ...
- STM32 | 基于STM32实现的普通灯泡调光控制器
1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发. ...
- 实验19:光敏传感器+继电器=光控智能灯实验
欧克 在讲实验前 先讲讲安全教育 我们做弱电实验是不是会买一些电池,如果电池随意丢 如果电池的+和-被导体连通,就会导电发热,最后可能引起火灾,所以大家一定重视合理放置电池哈,这也是我今天做实验突然想 ...
最新文章
- ES 的分布式架构原理能说一下么?
- C++虚函数的实现方式
- cache目录没有权限
- java内部类文件,Java内部类学习
- 计算机二级access什么时候报名_全国计算机等级考试什么时候报名
- 信息学奥赛一本通C++语言——1078:求分数序列和
- [存档]xx-09210xxx-2010-ACM-ICPC竞赛总结
- dwr框架java解析excel_dwr poi java 将excel 导出到客户端
- java单核多线程与多核多线程_多线程的程序在多核CPU与单核CPU运行效率有何不同 | 学步园...
- python解析visio_再见,Visio!
- 数字证书是什么原理,有什么作用?
- yuv422转rgb565
- python设置单元格宽度_【部分解决】openpyxl的excel设置列宽自适应+设置行高
- 选修课程期末作业 : 大象基金交易信息系统分析与设计报告
- 台式电脑点关闭计算机关不了,台式电脑关机关不了怎么办
- 儿童保温杯市场前景分析及行业研究报告
- SOP SO SOIC TSSOP SSOP 封装直观比较图 [转载]
- nnet3-chain-copy-egs用于chain模型输入数据
- 企业微信和个人微信区别到底有哪些
- hualinux 1.25:Web开发技术发展史
热门文章
- usb驱动的基本结构和函数简介【转】
- GIF’ted 1.3 GIF动画制作工具
- Java、JSP便利商店库存管理系统
- linux发邮件到126,Linux上,用bash通过126邮箱发邮件。
- WinForm(C#)应用程序之(破)脱壳和修改
- 什么是DCDC电源电涌,来源是哪里
- platform设备驱动全透析(转自宋宝华老师)
- python画星环_TranswarpDataHubTDH企业级一站式大数据综合平台白皮书-星环.PDF
- Java学习笔记--Java中必记常见异常
- 高通QCM2290平台组合键进9008