Arduino 第六章:模拟输入和模拟输出(电位器和led灯亮度演示)
Arduino 第六章:模拟输入和模拟输出(电位器和led灯亮度演示)
引言
在前面的章节中,我们已经熟悉了 Arduino 的数字输入输出以及串口通信等功能。然而,现实世界中的许多信号都是连续变化的模拟信号,如温度、光照强度、声音强度等。为了让 Arduino 能够与这些模拟信号进行交互,我们就需要掌握模拟输入和模拟输出的相关知识。在这一章里,我们将深入探讨 Arduino 的模拟输入和模拟输出功能,了解其原理、硬件连接以及代码实现。
模拟输入
原理
Arduino 开发板上的模拟输入引脚可以将连续变化的模拟电压信号转换为数字值。这个过程是通过模拟 - 数字转换器(ADC)来完成的。在 Arduino Uno 中,ADC 是 10 位的,这意味着它可以将输入的模拟电压范围(通常是 0 - 5V)划分为 2^10 = 1024 个离散的数字值,范围从 0 到 1023。其中,0 对应 0V,1023 对应 5V。
硬件连接
以读取电位器的模拟值为例,电位器是一种常见的模拟输入设备,它可以通过旋转旋钮改变其输出的电压值。将电位器的一个固定引脚连接到 Arduino 的 5V 引脚,另一个固定引脚连接到 GND 引脚,中间的可变引脚连接到 Arduino 的模拟输入引脚(如 A0)。
代码实现
// 定义模拟输入引脚
const int analogPin = A0;
void setup() {
// 初始化串口通信,设置波特率为 9600
Serial.begin(9600);
}
void loop() {
// 读取模拟输入引脚的值
int sensorValue = analogRead(analogPin);
// 将读取的值发送到串口监视器
Serial.print("Analog value: ");
Serial.println(sensorValue);
// 延迟 100 毫秒
delay(100);
}
代码解释
变量定义:
const int analogPin = A0;
定义了模拟输入引脚为 A0。setup() 函数:使用
Serial.begin(9600)
初始化串口通信,以便将读取的模拟值发送到计算机的串口监视器。loop() 函数:
analogRead(analogPin)
用于读取模拟输入引脚 A0 的值,并将其存储在sensorValue
变量中。Serial.print()
和Serial.println()
将读取的值发送到串口监视器。delay(100)
使程序暂停 100 毫秒,避免过于频繁地读取数据。
测试与观察
将上述代码上传到 Arduino 后,打开 Arduino IDE 的串口监视器,将波特率设置为 9600。旋转电位器的旋钮,你会看到串口监视器中显示的模拟值会随之变化。
模拟输出
原理
Arduino 本身并没有真正意义上的模拟输出引脚,但可以通过脉冲宽度调制(PWM)技术来模拟模拟输出。PWM 是一种通过快速开关信号来控制平均电压的技术。在 Arduino Uno 中,引脚 3、5、6、9、10 和 11 支持 PWM 功能。通过改变 PWM 信号的占空比(即高电平时间与一个周期时间的比值),可以模拟不同的电压输出。
硬件连接
以读取电位器的模拟值为例,电位器是一种常见的模拟输入设备,它可以通过旋转旋钮改变其输出的电压值。将电位器的一个固定引脚连接到 Arduino 的 5V 引脚,另一个固定引脚连接到 GND 引脚,中间的可变引脚连接到 Arduino 的模拟输入引脚(如 A0)。
以控制 LED 灯的亮度为例,将 LED 灯的负极连接到 Arduino 的 GND 引脚,正极通过一个 220Ω 的电阻连接到支持 PWM 的引脚(如引脚 9)。
代码实现
// 定义 PWM 输出引脚
const int pwmPin = 5;
const int analogPin = A0;
void setup() {
// 初始化串口通信,设置波特率为 9600
Serial.begin(9600);
// 将 PWM 输出引脚设置为输出模式
pinMode(pwmPin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(analogPin);
analogWrite(pwmPin, sensorValue/4);
}
代码解释
变量定义:
const int analogPin = A0;
定义了模拟输入引脚为 A0。setup() 函数:使用
Serial.begin(9600)
初始化串口通信,以便将读取的模拟值发送到计算机的串口监视器。使用pinMode(pwmPin, OUTPUT)
将引脚 9 设置为输出模式。loop() 函数:
analogWrite(pwmPin, sensorValue/4)
用于设置 PWM 输出的占空比。brightness
的范围从 0 到 255。由于sensorValue
的范围是 0 到 1023,所以将其除以 4 后得到一个 0 到 255 之间的值,analogRead(analogPin)
用于读取模拟输入引脚 A0 的值,并将其存储在sensorValue
变量中。delay(100)
使程序暂停 100 毫秒,避免过于频繁地读取数据。
测试与观察
将上述代码上传到 Arduino 后,你会看到连接在引脚 9 的 LED 灯亮度会逐渐增加,然后逐渐降低,不断循环。
总结
通过本章的学习,我们了解了 Arduino 的模拟输入和模拟输出功能。模拟输入可以让我们读取现实世界中的模拟信号,而模拟输出则可以通过 PWM 技术模拟不同的电压输出。掌握这些知识后,我们可以实现更多复杂的项目,如根据环境光照强度控制灯光亮度、根据温度控制风扇转速等。在后续的学习中,我们可以进一步探索这些功能的应用,开发出更有趣的 Arduino 项目。