在前面的教程中,我们已经了解了串行通信的概念,以及如何使用一些预定义的函数在Arduino UNO和计算机之间传输数据。在本教程中,我们将讨论一个名为PWM的新概念,以及如何将这个概念用于控制不同的设备,如led,电机等。
为了本教程的目的,我们需要构建一个小电路。此电路所需的元件如下所示。
- Arduino UNO [在这里买]
- 领导
- 1 KΩ电阻器
- 100 KΩ电位计
- 案板(原型)
- 连接电线
在这个项目中,我们将通过PWM技术来控制连接到Arduino UNO板上的LED的亮度。项目实施所需的示意图如下图所示。
在这个电路中,LED的阳极必须连接到Arduino UNO的任何一个PWM引脚。因此,它通过1 KΩ限流电阻连接到Arduino的引脚11。LED的阴极与面包板上的地面相连。
Arduino UNO的5V电源和接地连接到面包板的正负轨上。
电位器的末端端子分别接在面包板上的5V和接地端子上。电位器的雨刷端必须连接到Arduino UNO的任何模拟输入引脚。
通过调节电位器的任意方向(顺时针或逆时针),Arduino的模拟输入引脚将得到一个可变电压,即0到5V之间的电压。的模拟到数字Arduino UNO的转换功能用于将这些电压转换为0到1023的数字范围(因为Arduino有一个10位ADC)。借助这个转换值,我们可以控制LED的亮度。
既然我们已经成功地设计了电路,下一步就是为电路编写一个合适的程序。在进入编程部分之前,我们需要了解什么是PWM信号。
脉冲宽度调制
脉宽调制(简称PWM)是一种数字技术,通过这种技术可以改变设备的功率。它提供了一种用数字信号提供模拟结果的方法。
在PWM技术中,方波在开和关状态之间切换。通过改变信号花在“开”状态上的时间与花在“关”状态上的时间,我们可以模拟0V到5V之间的电压范围。当这种开关在开和关状态之间非常快时,那么结果就好像输出信号处于0V和5V之间的稳定电压水平。
在处理PWM时,我们需要讨论的一个重要术语是占空比。定义为信号处于HIGH状态的时间(on time)与信号总时间段(on time + off time)的比值。
在Arduino中,有6个引脚能够产生这样的PWM信号。下图显示了不同占空比及其对应电压水平的比较。
从图中可以清楚地看出,当占空比增加时,输出电压(或输出功率)也会增加。对于100%占空比,可用电压为5V,对于50%占空比,可用电压为2.5V。
进入我们的教程,为了生成PWM信号,我们需要学习Arduino库中的两个函数:analogRead和analogWrite。
analogRead是一个函数,用于从Arduino的模拟引脚读取模拟值。Arduino UNO板有6通道,10位模拟数字转换器(ADC)。这意味着Arduino UNO中的ADC将把0 - 5V之间的输入电压映射为0到1023之间的整数值。
因此,analogRead函数将返回0到1023之间的任何值。类比函数的语法是模拟引脚号;
由于我们正在从A0引脚上的电位器读取模拟电压,我们需要写入analog (A0);在草图。当它返回一个整型值时,就会用它创建一个整型数据类型的临时变量。
下一个函数是analogWrite。它是一个函数,用于为任何给定的PWM引脚设置PWM信号的占空比。
类比写函数的语法是类比写(PWM引脚编号,值);
占空比,取值范围为0 (0V) ~ 255 (5V)。
接下来是LED亮度控制电路的实际草图。最终的草图如下图所示。
从上面的示意图中,我们可以很容易地理解analogRead函数返回的值存储在temp变量中。该值将用于使用类比写功能控制PWM信号的占空比。
但是类比写函数接受的值范围在0到255之间。因此,我们需要执行一些数学计算,以便在analogWrite函数中放入合适的值。
最后,将计算值与PWM引脚一起放入类比写函数中产生PWM信号。
当电路搭建好并将草图上传到Arduino上,我们可以看到通过改变电位器的位置,LED的亮度也会发生变化。
2反应
我有10k电位器。
所以,我应该用哪个电阻与led?
还有,代码有什么变化吗
请提及所有…
提前谢谢。
非常感谢,非常容易跟随,真的帮助我开始了
(我使用了一个10k的电位器,LED和PIN 11之间有一个10k的电阻。)