arduino最大电压_Arduino精品学习课程之八-模拟量输入检测及控制试验

d3029f6de335296013aff0f4975d0235.png

课程简介

在本课中,您将首先使用串口监视器来显示模拟量读数,然后使用第4课中的8个led来扩展测试项目,这样您就可以通过旋转可变电阻器上的旋钮来控制点亮的led数量。

7d2b4b11b0c46e589ea11ad3745f5e06.png

概念解释

在开始课程之前,我们先来了解一下什么是模拟量。

模拟量是指变量在一定范围连续变化的量;也就是在一定范围(定义域)内可以取任意值(在值域内)。数字量是分立量,而不是连续变化量,只能取几个分立值,如二进制数字变量只能取两个值。如下图所示:

795039d09ae7f11c11ea426c4d2b0ba1.png

在本课程中,是通过一只可变电阻器分压来改变电压,从而产生连续变化的模拟量。

要学习本课中描述的项目,您需要以下东西。

材料 数量

694c8325c9d34e9ea20045c96899cd00.png

5mm 红色Led灯 8只

4954c54c31de4da0b51b9fd864f9f364.png

270Ω电阻(红色,紫色,棕色条纹)

f0e07680dc0475fb28af46ce61aac429.png

74 hc595移位寄存器芯片 1片

b6bea58b8c6c647cab44dc6a64053669.png

10 kΩ可变电阻器 1只

2095eda95a5dc6453c030aeebab1d8e4.png

面包板 1块

f7300df9676b95cdcc7d59ba78896aa8.png

Arduino Uno 开发板 1块

f5052c7d8397b4ca2e5e2d3fb6007716.png

跳线包 1

第一个实验

在我们继续使用led之前,您可以尝试做一个小实验,只使用可变电阻器(也称为电位计(通常简称为pot))和Arduino串口监视器。

按下图所示在面包板上连线:

1fcf4ad79f5dc570305a81e8b8c636b2.png

将以下程序加载到Arduino开发板上。

/*

Adafruit Arduino - Lesson 8. Analog Inputs

*/

int potPin = 0;

void setup()

{

Serial.begin(9600);

}

void loop()

{

int reading = analogRead(potPin);

Serial.println(reading);

delay(500);

}

现在打开串口监视器,您将看到出现打印的数字值。

9ce9bc4d68df6595b98917b289ce24b5.png

转动可变电阻器上的旋钮,你会看到数字在0到1023之间变化。

串行监视器显示数从A0引脚读到的模拟量数据:

int reading = analogRead(potPin);

A0端口的电压被转换成0到1023之间的数字。

可变电阻(电位器)

由于历史原因,可变电阻器英语通常被称为“pots”,是“potentiometers”的缩写。

在我们使用串行监视器的实验,电位器以某种方式改变A0处的电压,而这个小测试程序将该电压转换为0到1023之间的数字。

1625cd51b664c185b9123c21d4819cf4.png

你的电位器有圆形的“旋钮”,充当一个电阻,在我们的例程中是10 kΩ电阻器。然而,与电阻的不同之处在于,还有一个中间连接称为“滑块”。当你旋转电位器时,这个滑块就会旋转。所以如果你把电位器的一端连接到5V,另一端连接到GND,那么当你旋转的时候,滑动端上的电压就会在0到5V之间变化。

面包板布局

让我们用这个电位器来做一些更有趣的事情。我们可以用它来控制点亮的led灯的数量。

这个面包板的布局是基于第4课,有一些跳线移动,和电位器和其它的连接到Arduino板。

42df67073a291180bbeafb99b00785a2.png

Arduino代码

将以下程序下载到Arduino开发板上。

/*

Adafruit Arduino - Lesson 8. Analog Inputs - LEDs

*/

int potPin = 0;

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

int leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

}

void loop()

{

int reading = analogRead(potPin);

int numLEDSLit = reading / 114; //1023 / 9

leds = 0;

for (int i = 0; i < numLEDSLit; i++)

{

bitSet(leds, i);

}

updateShiftRegister();

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

您应该从第4课中了解到这段代码的大部分内容。所以请参考第4课,了解更多关于led如何控制的信息。

代码解读

程序的关键部分,就模拟输入而言,是我们定义的输入引脚,我们将连接到电位器的滑动端到模拟量输入引脚:

int potPin = 0;

请注意,我们不需要在'Setup'设置模拟输入的引脚模式。

在loop函数中,我们这样读取模拟值:

int reading = analogRead(potPin);

但是这个0到1023之间的读数需要转换成控制led灯所需数值,在0到8之间的数字范围,0到8实际上是9个值。所以我们需要把读数乘以1023除以9或者114。

为了点亮正确数量的led灯,我们使用for循环来从0数到LED灯最大数量值,并将该位设置在相应位置。

leds = 0;

for (int i = 0; i < numLEDSLit; i++)

{

bitSet(leds, i);

}

最后,我们更新移位寄存器更新函数:

updateShiftRegister();

其它练习

实际上,点亮一个LED灯来指示旋钮的位置更简单。你可以自己试着修改你的程序来实现到这一点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值