博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Arduino和C51开发光敏传感器
阅读量:5735 次
发布时间:2019-06-18

本文共 2747 字,大约阅读时间需要 9 分钟。

技术:51单片机、Arduino、光敏传感器、PCF8591、AD/DA转换
 

概述

本文介绍了如何接收传感器的模拟信号和如何使用PCF8591 AD/DA转换模块对光敏传感器的模拟信号进行转换。讲述了51单片机和Arduino如何读取模拟信号,并通过串口实时显示出来。

详细

代码下载:

一、光敏传感器

1545624326555030055.png光敏传感器是利用光敏元件将光信号转换为电信号的传感器,它的敏感波长在可见光波长附近,包括红外线波长和紫外线波长。光传感器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号的变化即可。光敏传感器中最简单的电子器件是光敏电阻,它能感应光线的明暗变化,输出微弱的电信号,通过简单电子线路放大处理,可以控制LED灯具的自动开关。

 

模块使用说明

 

  • 光敏电阻模块对环境光线最敏感,一般用来检测周围环境的光线的亮度,触发单片机或继电器模块等;

  • 模块在环境光线亮度达不到设定阈值时,DO 端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平;

  • DO 输出端可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光线亮度改变;

  • 小板模拟量输出 AO 可以和 AD 模块相连,通过 AD 转换,可以获得环境光强更精准的数值.

二、C51单片机串口显示光照强度

光敏传感器的AO引脚输出的是模拟信号,而51单片机内部没有AD/DA转换器,不能接收模拟信号,只能接收到数字信号,所以我们需要一个能够进行AD/DA转换的模块,这里我选择了PCF8591模块来进行AD转换。

1545625014533085926.pngPCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591 具有 4 个模拟输入、1 个模拟输出和 1个串行 I2C 总线接口。PCF8591 的 3 个地址引脚 A0, A1 和 A2 可用于硬件地址编程,允许在同个 I2C 总线上接入8个PCF8591 器件,而无需额外的硬件。在 PCF8591 器件上输入输出的地址、控制和数据信号都是通过双线双向 I2C 总线以串行的方式进行传输。(简单的说:可以实现4路 模拟输入,1路模拟输出,具体功能看模块使用说明)

硬件连接: 图片3.png

PCF8591的使用会涉及到I2C总线,程序中也要加入对I2C的操作,Pcf8591SendByte()来选择使用PCF8591 模块的哪一路输入(这里选择AIN0)

void Pcf8591SendByte(uchar channel){       I2C_Start();    //开始I2C总线    I2C_SendByte(WRITEADDR);        //发送写器件地址    I2C_SendByte(0x40|channel);     //发送控制寄存器    I2C_Stop();} uchar Pcf8591ReadByte()    //读取值{    uchar num;    I2C_Start();    I2C_SendByte(READADDR);      //发送读器件地址    num=I2C_ReadByte();          //读取数据    I2C_Stop();                  //结束总线    return num;} void main(){    uint adNum;    float value;    UsartInit();     while(1)    {            Pcf8591SendByte(0);      //使用通道0   (可选择通道0-3)光敏传感器A0连接PCF8591传感器的AIN0        /*adNum一定是0到255之间的一个数,因为pcf8591是8位的AD/DA芯片,所以输出的范围为00000000          到11111111,即0到255*/        adNum=Pcf8591ReadByte();   //读出数值        value = adNum;        value=100.0 - value*100.0/255.0; //把光敏值转换为0-100的数值,这里255.0可更改                                         //(根据实际测试value最暗值)        printf("light:");                printf("%.2f\n",value);    //打印数据到串口        delay1s();    }}

打开串口调试助手,获取光照强度值:

1545625249470004185.png

三、Arduino串口显示光照强度

Arduino内部有AD/DA转换器,所以接收模拟信号会变得非常容易操作。

硬件连接: 图片5.png

代码如下:

#define light A5   //定义模拟口A5float Intensity = 0;//光照度数值 void setup()  //初始化{  Serial.begin(9600);//设置波特率9600} void loop()//程序主体循环{  Intensity = analogRead(light);  //读取模拟口AD5的值,存入Intensity变量  //Intensity = 100.0 - Intensity / 6.7;//VCC接3.3V时,Intensity最高为670,最低为0  Intensity = 100.0 - Intensity / 10.23;//VCC接5V时,Intensity最高为1023,最低为0  Serial.print("Intensity = ");  //串口输出"Intensity = "  Serial.print(Intensity);       //串口输出Intensity变量的值  Serial.print("%\n");    delay(1000);     //延时1s}

 

串口读取到的光照强度值如下图:

1545625406996032991.png

四、总结

本文实现51单片机和Arduino串口显示光照强度,介绍了光敏传感器和PCF8591 AD/DA转换模块的使用方法,如果你对模拟信号和数字信号还不怎么了解,我建议你先去学下。学完了这个,建议去读取其他传感器的模拟信号,具体实现方法是一样的。

五、项目结构图

图片7.png

代码下载:

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

转载于:https://www.cnblogs.com/demodashi/p/10503375.html

你可能感兴趣的文章
JPA常用注解
查看>>
我的友情链接
查看>>
Ubuntu下sublime-text3安装步骤
查看>>
autorelease 和垃圾回收制(gc)的区别
查看>>
大型网站技术架构(八)网站的安全架构
查看>>
C++中的基础
查看>>
Windows上用VS Code调试Rust程序
查看>>
AJAX
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
php redis cluster
查看>>
要能够使用putty访问ubuntu,要做如下几步:
查看>>
WebKit阅读起步
查看>>
Android API Levels
查看>>
开源协议比较
查看>>
我使用Asp.net MVC WebAPI支持OData协议进行分页操作的笔记(第一篇)
查看>>
Quartz
查看>>
我的友情链接
查看>>
Filter的介绍及使用
查看>>
JSON 学习(一)
查看>>