风筝
发表于: 2018-8-11 22:16:03 | 显示全部楼层

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信号输出的占空比。

arduino-analog-io-fritzing-1.png


代码

  1. const int pwm = 2 ;                 //initializing pin 2 as ‘pwm’ variable
  2. void setup()
  3. {
  4.      pinMode(pwm,OUTPUT) ;         //Set pin 2 as output
  5. }
  6. void loop()
  7. {
  8.      analogWrite(pwm,25) ;                  //setting pwm to 25
  9.      delay(50) ;                         //delay of 50 ms
  10.      analogWrite(pwm,50) ;         
  11.      delay(50) ;
  12.      analogWrite(pwm,75) ;
  13.      delay(50) ;
  14.      analogWrite(pwm,100) ;
  15.      delay(50) ;
  16.      analogWrite(pwm,125) ;
  17.      delay(50) ;
  18.      analogWrite(pwm,150) ;
  19.      delay(50) ;
  20.      analogWrite(pwm,175) ;
  21.      delay(50) ;
  22.      analogWrite(pwm,200) ;
  23.      delay(50) ;
  24.      analogWrite(pwm,225) ;
  25.      delay(50) ;
  26.      analogWrite(pwm,250) ;
  27. }
复制代码

实验2:使用电位器控制LED亮度

在本实验中,我们将使用电位器控制LED的亮度。 我们将使用analogRead()函数读取电压,然后使用analogWrite()函数输出PWM信号,其占空比与模拟电压成正比。


需要的硬件

●    电位器

●    LED指示灯

●    电阻

●    Arduino Uno R3开发板

●    面包板

●    连接导线


接线图

如下图所示连接电路。 旋转电位器时,引脚A0上的电压会发生变化。 然后,程序将改变引脚2上PWM信号的占空比,从而改变LED的亮度。

arduino-analog-io-fritzing-2.png

代码

  1. const int pwm = 2 ;          //naming pin 2 as ‘pwm’ variable
  2. const int adc = 0 ;         //naming pin 0 of analog input side as ‘adc’
  3. void setup()
  4. {
  5.      pinMode(pwm,OUTPUT) ;         //setting pin 2 as output
  6. }
  7. void loop()
  8. {
  9.      int adc  = analogRead(0) ;          //reading analog voltage and storing it in an integer
  10.      adc = map(adc, 0, 1023, 0, 255);  
  11. /*
  12. ----------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
  13. */
  14.      analogWrite(pwm,adc) ;
  15. }
复制代码
跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-8 08:44 , Processed in 0.077968 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表