【Arduino官方教程第一辑】示例程序 3-5 模拟信号的校准
2016-05-10 13:12
561 查看
模拟信号的校准
本例向你展示校准传感器的一个技巧:在启动时先读取传感器值5秒钟,然后寻找其最大、最小值。校准后的最大、最小值将在map函数有用。完成本例所需的硬件设备
Arduino板或Genuino板LED 模拟信号的传感器(光敏电阻就OK)
10kΩ电阻
220Ω电阻
跳线
面包板
杜邦线/面包板线
电路搭建
模拟信号传感器(例如:电位器/光线传感器等)连接到A2,LED连接到9号引脚。
用220Ω限流电阻串联LED到9号引脚。将光敏电阻一脚连接到5V,另一个脚连接到A0,并加一个10kΩ下拉电阻。
原理图
例程代码
在setup前,你应像这样定义初始的最大最小值:int sensorMin = 1023; // 最小值 int sensorMax = 0; // 最大值
这种方式可能看起来有点初级,先学习下吧。
最开始,你设置一个最小值初始值。如果读取到任何小于它的值,就用这个更小的数字更新最小值。与此类似,最开始,你设置一个最大值初始值,如果读取到任何大它的值,就用这个更大的数字更新最大值。像这样写:
// 用最初五秒进行校准 while (millis() < 5000) { sensorValue = analogRead(sensorPin); // 记录传感器最大值 if (sensorValue > sensorMax) { sensorMax = sensorValue; } // 记录传感器最小值 if (sensorValue < sensorMin) { sensorMin = sensorValue; } }
通过这种方式,传感器的值就能够被成功映射到一个范围(因为最大、最小值确定了):
// 将校准结果应用到传感器读取中 sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
下面是整个代码:
/*
模拟信号的校准
展示校准传感器的一种方式。在程序执行前五秒时会找到传感器值的最大、最小值。
这种方式可能看起来有点初级,先学习下吧。
最开始你设置一个最大值和最小值的初始值,然后在执行过程中寻找更小的值和更大的值并且不断更新最开始设置的值。
电路搭建:
* 模拟信号传感器(光敏电阻就可以)连接到A0
* LED连接9号引脚到GND
代码是公开的.
*/
// 常量:
const int sensorPin = A0; // 传感器引脚
const int ledPin = 9; // LED引脚
// 变量:
int sensorValue = 0; // 传感器值
int sensorMin = 1023; // 最小值 int sensorMax = 0; // 最大值
void setup() {
// 打开LED以表示校准开始:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// 在最初五秒进行校准
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
// 记录最大值
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// 记录最小值
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
// 关闭LED表示校准完成
digitalWrite(13, LOW);
}
void loop() {
// 读取传感器:
sensorValue = analogRead(sensorPin);
// 将校准后的最大最小值用进去:
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
// 防止sensorValue超过范围
sensorValue = constrain(sensorValue, 0, 255);
// 用校准后的值来给LED调光:
analogWrite(ledPin, sensorValue);
}
相关资料
while()
millis()
constrain()
map()
If
模拟信号与串口: 从模拟信号输入引脚读取一个值,然后用这个值控制LED小灯
模拟信号输入: 使用电位器来控制LED的闪烁。
模拟信号输出[Mega]: 使用Arduino Mega板让12个LED一个接一个亮度逐渐减弱。
模拟信号的校准: 设置传感器输出模拟信号的最大、最小值来达到预期效果。
LED亮度渐隐:使用脉宽引脚(PWM pin)来让一个LED的亮度渐弱。
信号平滑:让多个模拟引脚的输入值变得更加均匀平滑。
更新进程
日期 | 日志 | 译者 |
---|---|---|
2016年5月10日 | 创建并翻译文档 | 唐家勋 |
邮箱:mrsteventang@gmail.com
QQ:649196486
转载请注明出处,一切只因为热爱。
希望您能指出宝贵意见,谢谢。
相关文章推荐
- PAT1007 Maximum Subsequence Sum (25)
- UIAlertViewController
- Android更新主线程UI的两种方式handler与runOnUiThread()
- UE4 Pak包加载
- kbuild的makefile模板
- UITabBarController使用
- String,StringBuffer与StringBuilder的区别??
- build 并deploy saiku-query0.1到nexus
- UINavigation和UIScorllView自适应的高度问题
- Xmppframework could not build module dnssd或者libxml
- UIButton常见属性和方法
- iOS去掉UITableView分组时上方空白区域的方法
- J-UI框架踩过的坑
- 延展--用UIView+ViewController
- VK Cup 2015 - Qualification Round 2 C. Name Quest
- Thinging in Java学习笔记之continue,break和标签
- POJ 1904 King's Quest强连通分量+二分图完美匹配
- iOS开发 - 第01篇 - UI基础 - 01 - 从Storyboard开始学习
- 更改UITableView左边编辑图片
- android stuido build 慢的解决办法