文章就当学习笔记了,还是萌新,如有错误还请大佬多多指正。

前段时间一直在学校做项目,想给开发的机器人平台做个自动环境感应灯控,然后就想起来了光敏传感器,网上淘了一圈就买了一个亚博的光敏模块(主要是外观不错,比较好用)。就决定搞一块回来(-¥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对于光敏电阻传感器的光控应用相关推荐

  1. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计

    目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...

  2. K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示

    K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 STM32 ...

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

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

  4. 基于STM32的姿态传感器电路设计与使用

    文章目录 引言 程序设计描述 编写串口通信的驱动程序 编写系统延时程序 对于MPU6050姿态传感器进行初始化 编写定时中断程序 电路设计描述 具体设计分析 代码部分详细说明 设计实现效果 MPU60 ...

  5. 基于STM32的颜色传感器TCS3472

    文章目录 前言 一.TCS3472是什么? 二.RGB 颜色传感器分析 三.驱动TCS3472 3.1读取R,G,B 四.测试TCS3472 4.1参数测试 总结 前言 最近由于课程设计要求,用到了一 ...

  6. 基于STM32实现的普通灯泡调光控制器

    最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发.下面分享一个ZhengN大二时候的一个小玩具,软硬件都分享给大家,有需要的小伙伴,文末获取. 这个小作品设计到了强电,不建议没经验的小伙伴 ...

  7. 基于stm32的mpu6050传感器实验

    @TOCMPU6050+STM32学习笔记 学习了差不多两天的mpu6050,参考了很多篇博客还有看一些资料,今晚终于把这个东西在我的串口显示出来了,下面就废话不多说,开始我的笔记啦. 开发环境:uv ...

  8. STM32 | 基于STM32实现的普通灯泡调光控制器

    1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 最近没有什么产出,吓得ZhengN翻箱倒柜倒出一些小东西来发. ...

  9. 实验19:光敏传感器+继电器=光控智能灯实验

    欧克 在讲实验前 先讲讲安全教育 我们做弱电实验是不是会买一些电池,如果电池随意丢 如果电池的+和-被导体连通,就会导电发热,最后可能引起火灾,所以大家一定重视合理放置电池哈,这也是我今天做实验突然想 ...

最新文章

  1. ES 的分布式架构原理能说一下么?
  2. C++虚函数的实现方式
  3. cache目录没有权限
  4. java内部类文件,Java内部类学习
  5. 计算机二级access什么时候报名_全国计算机等级考试什么时候报名
  6. 信息学奥赛一本通C++语言——1078:求分数序列和
  7. [存档]xx-09210xxx-2010-ACM-ICPC竞赛总结
  8. dwr框架java解析excel_dwr poi java 将excel 导出到客户端
  9. java单核多线程与多核多线程_多线程的程序在多核CPU与单核CPU运行效率有何不同 | 学步园...
  10. python解析visio_再见,Visio!
  11. 数字证书是什么原理,有什么作用?
  12. yuv422转rgb565
  13. python设置单元格宽度_【部分解决】openpyxl的excel设置列宽自适应+设置行高
  14. 选修课程期末作业 : 大象基金交易信息系统分析与设计报告
  15. 台式电脑点关闭计算机关不了,台式电脑关机关不了怎么办
  16. 儿童保温杯市场前景分析及行业研究报告
  17. SOP SO SOIC TSSOP SSOP 封装直观比较图 [转载]
  18. nnet3-chain-copy-egs用于chain模型输入数据
  19. 企业微信和个人微信区别到底有哪些
  20. hualinux 1.25:Web开发技术发展史

热门文章

  1. usb驱动的基本结构和函数简介【转】
  2. GIF’ted 1.3 GIF动画制作工具
  3. Java、JSP便利商店库存管理系统
  4. linux发邮件到126,Linux上,用bash通过126邮箱发邮件。
  5. WinForm(C#)应用程序之(破)脱壳和修改
  6. 什么是DCDC电源电涌,来源是哪里
  7. platform设备驱动全透析(转自宋宝华老师)
  8. python画星环_TranswarpDataHubTDH企业级一站式大数据综合平台白皮书-星环.PDF
  9. Java学习笔记--Java中必记常见异常
  10. 高通QCM2290平台组合键进9008