Hi,大家好!上一次,我们给大家介绍了一位新成员,代号叫Arduino Mega2560,在这里跟大家提个醒儿,在以后的学习中,只要Arduino UNO能完成的实验,用Mega2560也一定能完成。好,就酱!下面继续我们今天新的内容。
在实际使用中,我们很有可能会遇到一种情况,将模拟信号接口获取到的数值进行重新校准,以方便我们在项目中接下来的实际操作中,使用起来更加便捷。今天我们就来一起看看,关于这个问题,到底是如何解决的。
首先,还是先来看看,我们都需要哪些硬件吧。
硬件方面
图片来源:Arduino电路硬件
具体如下:
- Arduino UNO(1块)
- 面包板(1块)
- 220Ω电阻(1个)
- 10KΩ电阻(1个)
- LED神灯(1个)
- 光敏电阻(1个)
- 面包线(若干)
嗯,看起来没有陌生的面孔,之前我们都见过的。好,继续。
软件方面Arduino官方提供的IDE
连接电路
图片来源:Arduino电路连接
还好还好,电路连接也不是特别复杂。在之前的学习中,我们已经对光敏电阻学习过,所以对它的电路连接应该也比较熟悉了。如果一切顺利,让我们进行最后一步。
添加几行代码首先,还是新建一个项目窗口。
图片来源:Arduino官方IDE
然后向其中添加几行代码:
- // 定义光敏电阻模拟信号引脚常量
- const int sensorPin = A0;
- // 定义LED神灯数字信号引脚常量
- const int ledPin = 9;
- // 定义接收光敏电阻模拟信号数值变量
- int sensorValue = 0;
- // 定义光敏电阻模拟信号最小数值变量,
- // 初始化为最大常见整数值1023。
- int sensorMin = 1023;
- // 定义光敏电阻模拟信号最大数值变量,
- // 初始化为最小常见整数值0。
- int sensorMax = 0;
- // 对Arduino电路板或相关状态进行初始化方法
- void setup() {
- // 定义13号数字引脚为输出类型引脚
- pinMode(13, OUTPUT);
- // 将13号引脚的状态初始化为高电压,
- // 也即将Arduino UNO电路板上自带的
- // 那盏LED神灯点亮。
- // 点亮此LED神灯的目的是为了清晰的指示
- // 接下来要进行的5秒钟操作。
- digitalWrite(13, HIGH);
- // 在最开始的5秒钟,不停地获取光敏电阻的
- // 数值,以此在这5秒钟内得到其中的最大和
- // 最小数值。
- while (millis() < 5000) {
- sensorValue = analogRead(sensorPin);
- // 比较获取到的数值,
- // 如果比sensorMax数值大,
- // 则赋值给sensorMax,以此记录最终得到
- // 的最大值。
- if (sensorValue > sensorMax) {
- sensorMax = sensorValue;
- }
- // 比较获取到的数值,
- // 如果比sensorMin数值小,
- // 则赋值给sensorMin,以此记录最终得到
- // 的最小值。
- if (sensorValue < sensorMin) {
- sensorMin = sensorValue;
- }
- }
- // 5秒钟过后,将13号数字引脚的数值
- // 设置为低电压,以此熄灭Arduino UNO
- // 电路板自带的那盏LED神灯。
- digitalWrite(13, LOW);
- }
- // 系统调用,无限循环方法
- void loop() {
- // 读取光敏电阻的数值
- sensorValue = analogRead(sensorPin);
- // 使用map()方法,将获取到的sensorValue数值,
- // 从sensorMin~sensorMax的数值范围内,
- // 映射到0~255数值范围内的某个数值。
- sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
- // 保证映射完成之后的sensorValue数值在0~255范围内。
- // 第一个参数是输入值,
- // 第二个参数和第三个参数是数值的取值范围。
- // 返回值被限定在0~255之间。
- sensorValue = constrain(sensorValue, 0, 255);
- // 将最终校准后的数值设置给LED神灯
- analogWrite(ledPin, sensorValue);
复制代码
好!代码一共就这几行,只有一个新面孔,那就是constrain()方法。这个方法的使用也很简单,代码的注释里已经说明了使用方法,这里不再啰嗦。
图片来源:Arduino官方IDE的文件编辑菜单选项
点击上图中标有向右指向的箭头图标,将编写完成的代码烧入Arduino电路板。如果一切顺利,LED神灯的亮度会随着光敏电阻的光线强弱进行变化。
总结通过这次学习,我们知道了如何校准数值。这对于主要以模拟信号的传感器而言,有时候是非常必要的,可以过滤掉忽高忽低的数值,并将最终数值强制变换到指定的某个数值范围内,对于数值的稳定起到很关键的作用。在我们做的这个实验中,光敏电阻越亮,产生的数值越大,相应的LED神灯也就越亮。那如果想让光敏电阻越暗,LED神灯变的越亮应该怎么办呢?如果改装一下,就可以变身一款时髦的应急灯喽!可以开动脑筋想一想!
下期预告对于模拟信号的传感器,产生的数值有可能不是非常的稳定,或者说偶尔有可能会产生忽高忽低的数值,那如何让获取到的模拟数值变的连贯平滑呢?好!下一次我们就解决这个问题!
|