|
Arduino开发板可以输入和输出模拟信号以及数字信号。
模拟信号可以采用任意数值来表示,而数字信号只有两个数值:HIGH和LOW。为了测量模拟信号的值,Arduino开发板内置了模数转换器(ADC)。 ADC将模拟电压转换为数字量。用于获取模拟信号值的函数是analogRead(pin)。该函数可以转换模拟输入引脚上的电压值,并返回相对于参考值的从0到1023的数字值。大多数Arduino的参考电压为5V,Arduino Mini和Nano为7V,Arduino Mega为15V。
Arduino没有内置的数模转换器(DAC),但它可以对数字信号进行脉冲宽度调制(PWM),以实现模拟输出的某些功能。用于输出PWM信号的函数是analogWrite(pin,value)。pin指的是PWM输出的引脚号。value是与信号的占空比成比例的数字。当value = 0时,信号始终关闭。当值= 255时,信号始终打开。在大多数Arduino开发板上,PWM功能可以在引脚3、5、6、9、10和11上使用。大多数引脚上PWM信号的频率约为490 Hz。在Arduino Uno开发板上,引脚5和6的频率约为980Hz。Leonardo的第3和第11引脚也以980Hz的频率运行。
要将模拟输入值(范围从0到1023)映射到PWM输出信号(范围从0到255),您可以使用map(value, fromLow, fromHigh, toLow, toHigh)函数。该函数有五个参数,其中一个是存储模拟值的变量,其他参数分别是0、1023、0和255。
实验1:控制LED的亮度 在本实验中,我们将通过模拟输出引脚上的PWM信号控制LED的亮度
需要的硬件 ● LED指示灯 ● 电阻 ● Arduino UNO R3开发板 ● 面包板 ● 连接导线
接线图 如下图所示,LED连接到Arduino的引脚2。为了改变LED的亮度,程序将改变引脚2的PWM信号输出的占空比。
代码 - const int pwm = 2 ; //initializing pin 2 as ‘pwm’ variable
- void setup()
- {
- pinMode(pwm,OUTPUT) ; //Set pin 2 as output
- }
- void loop()
- {
- analogWrite(pwm,25) ; //setting pwm to 25
- delay(50) ; //delay of 50 ms
- analogWrite(pwm,50) ;
- delay(50) ;
- analogWrite(pwm,75) ;
- delay(50) ;
- analogWrite(pwm,100) ;
- delay(50) ;
- analogWrite(pwm,125) ;
- delay(50) ;
- analogWrite(pwm,150) ;
- delay(50) ;
- analogWrite(pwm,175) ;
- delay(50) ;
- analogWrite(pwm,200) ;
- delay(50) ;
- analogWrite(pwm,225) ;
- delay(50) ;
- analogWrite(pwm,250) ;
- }
复制代码
实验2:使用电位器控制LED亮度 在本实验中,我们将使用电位器控制LED的亮度。 我们将使用analogRead()函数读取电压,然后使用analogWrite()函数输出PWM信号,其占空比与模拟电压成正比。
需要的硬件 ● 电位器 ● LED指示灯 ● 电阻 ● Arduino Uno R3开发板 ● 面包板 ● 连接导线
接线图 如下图所示连接电路。 旋转电位器时,引脚A0上的电压会发生变化。 然后,程序将改变引脚2上PWM信号的占空比,从而改变LED的亮度。
代码 - const int pwm = 2 ; //naming pin 2 as ‘pwm’ variable
- const int adc = 0 ; //naming pin 0 of analog input side as ‘adc’
- void setup()
- {
- pinMode(pwm,OUTPUT) ; //setting pin 2 as output
- }
- void loop()
- {
- int adc = analogRead(0) ; //reading analog voltage and storing it in an integer
- adc = map(adc, 0, 1023, 0, 255);
- /*
- ----------map funtion------------the above funtion scales the output of adc, which is 10 bit and gives values btw 0 to 1023, in values btw 0 to 255 form analogWrite funtion which only receives values btw this range
- */
- analogWrite(pwm,adc) ;
- }
复制代码 |