0°

Arduino内置教程-模拟-模拟输入

在这个例子里我们用一个变化电阻(一个电位计或者光敏电阻),我们通过Arduino或者Genuino开发板的一个模拟输入引脚读取它的值,并且根据这个值改变内置LED灯闪烁的速率。这个电阻的模拟值是作为电压读取,因为这是模拟输入的工作方式。

简介

在这个例子里我们用一个变化电阻(一个电位计或者光敏电阻),我们通过Arduino或者Genuino开发板的一个模拟输入引脚读取它的值,并且根据这个值改变内置LED灯闪烁的速率。这个电阻的模拟值是作为电压读取,因为这是模拟输入的工作方式。

硬件要求

  • Arduino or Genuino 开发板
  • 电位计 或者 10KΩ 光敏电阻和 10KΩ 电阻
  • pin13引脚的内置LED灯 或者 220Ω 电阻和红色LED灯

电路

带电位计:
Arduino内置教程-模拟-模拟输入

带光敏电阻:
Arduino内置教程-模拟-模拟输入

  • 连接三根线到开发板。第一根从地到电位计的一个引脚。第二根从5V到电位计的另一个引脚。第三跟从模拟输入引脚A0到电位计的中间引脚。
  • 这个例子里,可以使用开发板的连接到pin13的内置LED灯。如果用外加的LED灯,把它的长脚(正极或者阳极)串联一个220 ohm电阻,再连接到数字引脚pin13,而它的短脚(负极或者阴极)连接到pin13旁边的GND引脚(地)
  • 这个电路基于光敏电阻,用一个分压器来使高阻抗模拟输入引脚来测量电压值。这些输入引脚不吸取任何电流,因而根据欧姆定律,这些在电阻的一端连接到5V的被测量的电压等于5V,而不管这些电阻值。为了获得按光敏电阻值匹配的电压值,一个电阻分压器是很有必要的。这个电路用一个可变电阻器,一个固定电阻,而测量点是在这些电阻值的中间。测量的电压(VOUT)符合以下公式:
Vout=Vin*(R2/(R1+R2)) 

其中Vin为5V,R2为10kohm和R1为光敏电阻值(范围从在黑暗的1M ohm到在亮处(10lumen)的10k ohm,再到光亮处(>100lumen)的1k ohm)。

原理图

电位计:
Arduino内置教程-模拟-模拟输入

光敏电阻:
Arduino内置教程-模拟-模拟输入

样例代码

  • 在程序开始部分,变量感应引脚被设置为模拟引脚A0,那个地方连接着电位计。ledPin被设置为数字引脚pin13.你也可以创建另外的变量,sensorValue来保存从你传感器里读到的值。
  • 用 analogRead() 命令转化输入电压范围(0-5V)到数字值(0-1023)。这个可以用叫模拟数字转换器或者ADC的微控制器来实现。
  • 通过转动电位计的轴,你可以改变电位计的电阻值。这会改变在中间引脚和其他两个外接引脚之间的电阻值,在模拟输入引脚处产生一个电压差。当轴转向一个方向,中间引脚和地引脚没有阻抗。中间引脚的电压值为0V,并且analogRead()返回0.当轴转向另一个方向,中间引脚和5V引脚没有阻抗。中间引脚的电压值为5V,并且analogRead()返回1023。转轴在之间时,analogRead()返回0-1023之间的一个数。

这个值,保存到sensorValue,用来为你的闪烁周期设置 delay() 。这个值越高,周期越长;越低,周期越短。在周期循环之前读取这个值,因此每次开/关的时间总是一样的。

int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);
  // turn the ledPin off:
  digitalWrite(ledPin, LOW);
  // stop the program for for <sensorValue> milliseconds:
  delay(sensorValue);
}
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论