一、物料
二、接线
三、原理图
上图中,RL是光敏电阻,R1是串联的分压电阻,Vout=RLR1+RL∗VinVout=RLR1+RL∗Vin ,在黑暗中,RL的阻值会很大很大,所以Vout也就很大,接近5V。一旦有光线照射的话,RL的值就会迅速减小,所以Vout也就随之减小。通过上面这个公式可以看出, R1选取不能太小,最好在1k~10k左右,否则比值变化不明显。
四、说明
光敏电阻是光亮越强,电阻越小。光亮越小,电阻越大。
在本实验中 analogRead(idrpin) 读取到的模拟信号范围是0-1023。光越强值越小,光越弱该值越大。原理请看第七、八节
五、源码
const int ledPin = 6;
const int idrpin = A5;
const int low = 0;
const int high = 1023;
void setup() {
Serial.begin(9600); //打开串口,波特率9600
}
void loop() {
int guangmin = analogRead(idrpin); //读入光敏电阻产生的模拟信号(范围:0~1023)
Serial.print("value= ");
Serial.print(guangmin);
guangmin = map(guangmin, 0, 1023, 255, 0); //map函数 将0~1023范围映射到255~0
//这里反着写255,0;因为想实现随着光强增加LED变亮
Serial.print("--");
Serial.println(guangmin);
//analogWrite(ledPin, guangmin); //让6号引脚发出PWM波
delay(1000); //延时100ms
}
六、输出效果
七、原理解析
在实验过程中我们去掉光敏电阻RL,此时5v与针脚A5 形成回路,串口打印
value= 1023--0
此时电阻R1 分的电压位5V,故此推测R1的作用主要用于分压,当RL阻值变大,R1分的电压变小analogRead 值变小,当RL阻值 变小(光照变强),R1分得电压变大analogRead值变大
八、函数应用
本指令用于从Arduino的模拟输入引脚读取数值。Arduino控制器有多个10位数模转换通道。这意味着Arduino可以将0-5伏特的电压输入信号映射到数值0-1023。
换句话说,我们可以将5伏特等分成1024份。0伏特的输入信号对应着数值0,而5伏特的输入信号对应着1023
例:
当模拟输入引脚的输入电压为2.5伏特的时候,该引脚的数值为512。
(2.5伏特 / 5伏特 = 0.5, 1024 X 0.5 ?=512)
引脚的输入范围以及解析度可以使用analogReference()指令进行调整。
Arduino控制器读取一次模拟输入需要消耗100微秒的时间(0.0001秒)。控制器读取模拟输入的最大频率是每秒10,000次。
注意:在模拟输入引脚没有任何连接的情况下,用analogRead()指令读取该引脚,这时获得的返回值为不固定的数值。这个数值可能受到多种因素影响,如将手靠近引脚也可能使得该返回值产生变化。
将一个模拟数值写进Arduino引脚。这个操作可以用来控制LED的亮度, 或者控制电机的转速. Arduino每一次对引脚执行analogWrite()指令,都会给该引脚一个固定频率的PWM信号。PWM信号的频率大约为490Hz.
在Arduino UNO控制器中,5号引脚和6号引脚的PWM频率为980Hz。在一些基于ATmega168和ATmega328的Arduino控制器中,analogWrite()函数支持以下引脚: 3, 5, 6, 9, 10, 11。
在Arduino Mega控制其中,该函数支持引脚 2 – 13 和 44 – 46。使用ATmega8的Arduino控制器中,该函数只支持引脚 9, 10, 11.
在调用analogWrite()函数前,您无需使用pinMode()函数来设置该引脚。
在本次实验中 注释掉代码中的这一句 analogWrite(ledPin, guangmin) ,并使用6号针脚接入一个发光二极管的长脚(正极),短脚接G可以实现光线越强,二极管越亮。光线越弱,二极管越暗的效果
本文链接:https://blog.nnwk.net/article/138
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论