作者:Becky Stern
关键词:Arduino,输入输出,原型设计
本文介绍了Arduino基本输入/输出的实现方法及演示,详细阐述了如何使用开关进行数字输入和使用电位计进行模拟输入。文章提供了所需物料清单和详细的电路连接步骤,同时解释了代码的工作原理和关键函数。
Arduino是初学者和专业人士都广泛使用的开发解决方案之一。通过掌握基本的输入和输出,可以建构更多功能,进行更多操作,实现更多不同的设计。通过在Arduino进行编程,可以激发创新思维,一步一步完成更复杂的项目,探索无限的可能性。以下视频将介绍如何使用开关进行数字输入和使用可变电阻进行模拟输入。赶快点开来看吧!
在您掌握了 Arduino 基础知识并能使用代码控制LED灯后,是时候了解 Arduino 输入了,它是用于向 Arduino 开发板提供信息的电信号。Arduino评估板可以被程序设计来接收电信号,并根据这些输入采取相应的操作。
开关是一种机械装置,通常使用杠杆或按钮来连接或断开电路,要构建此电路,您需要一个小型按键,而这个小型按键是众多不同类型的开关中的一员。
建议使用 Arduino Uno (1050-1024-ND),或兼容的开发板,例如 Adafruit Metro (1528-1214-ND)、Sparkfun Redboard (1568-1977-ND) 或 Seeeduino (102010026-ND) 来开始。
想要学习构建本期中的电路,请准备以下物料:
从为新电路制作原型的基本设置开始:先把Arduino UNO评估板和无焊面包板一起组装在一个固定评估板上,将Arduino评估板上的5伏和地线连接到面包评估板上的导轨,再连接到面包板另一侧的导轨。这是制作一个新电路原型的基本设置。
然后,连接一个输出端的LED,将较长的正极连接到引脚 13,将负极通过一个小阻值的电阻 (100 欧姆 – 1K 欧姆) 连接到地线。
接下来将按键添加到面包板上,按键通常被设计成可以跨过面包板的中心分隔线。如果按键没有卡紧,可能需要稍微弯曲它的引脚。
按键的一侧连接到引脚2,同时通过一个较大阻值的电阻 (1万欧姆) 连接到电源,按键的另一侧连接到地线。
这里使用对角引脚而不是其他连接,因为无论开关内部如何布线,这都是确保正确连接的可靠方法。你也可以用万用表来检查,探测开关上的两个针脚,然后按下它以查看哪些是连接的。
电路连接好后,就可以插入USB线并上传新的程序。
打开可下载的 Arduino 软件,点击File > Example > 02.Digital > Button。
将代码上传到 Arduino 评估板后,当按下按键,LED灯就会从亮着变为熄灭。
这个程序的开头有一些常量,它们与变量类似,用于存储信息。然而,正如你所知常量在整个程序中不会改变,因此非常适合用于存储引脚号。它们占用的内存空间比变量少。
第36行将引脚2配置为输入模式,这样就可以接收按键的状态
在主循环中,digitalRead()函数检查引脚2的状态,该状态可能是5伏(即高电平HIGH)或接地(即低电平LOW),并将该状态存储在名为buttonState的变量中
第44行包含一个if()语句,它使用比较运算符执行条件判断,比如大于、小于,或者在这个例子中,是等于,用两个等号表示。如果满足条件,大括号内的代码将被执行,LED灯会亮起(HIGH)。如果不满足条件,else语句内的代码将被执行,LED灯会熄灭(LOW)。
静止状态下,开关的引脚之间没有连接。引脚2通过一个阻值较大的1万欧姆电阻连接到5伏电压上,当按下按键时,开关引线被连接,引脚 2 无需电阻即可接地。由于电流会走最小阻抗的路径,引脚会强烈感知到与地线的连接,并忽略与较弱的1万欧姆电阻与5伏电压的连接。但当没有其他信号时,比如没有按下开关,引脚只能感知到与5伏电压的较弱的连接。
所以这个电阻将引脚上拉到5伏电压,因此,它被称为上拉电阻。如果没有连接上拉电阻,引脚2在按键按下之前将不会连接到任何地方,这被称为浮动引脚,可能会产生来自静电和电磁干扰的随机噪声。
同样地,电阻还可以用来将一个引脚连接到地线,这被称为下拉电阻。然后,你可以将按键的另一侧连接到电源,而不是地线。
所以,要改变按键的功能,可以通过改变电路的布线或者改变代码这两种方式实现,但千万不要同时做这两件事!在这种情况下,后者更简便,但并不总是如此。
接着,编辑第43行和第44行的if()语句和它的注释,将其中的HIGH改为LOW,然后将更新后的代码上传到开发板上,检查按键是否现在可以将LED灯打开而不是关闭。
Arduino的很多引脚都内置了上拉电阻,芯片内的微小电阻就是为了这个目的而设计,在设置中可以启用内置的上拉电阻,这样就不再需要面包板上额外的电阻了。
你也可以使用串口监视器,它是一种通过USB线向计算机报告来检查代码中不同位置信息的方式。要了解其工作原理,请至 Arduino 软件中的File> Examples> 01 Basics> DigitalReadSerial,然后将示例程序上传到您的 Arduino。
为了建立串口连接,你要在设置中使用Serial.begin()函数,9600是波特率,表示每秒传输的数据位数。
在主程序循环内,可以使用Serial.print()函数将信息发送到串口。Serial.println()的作用与Serial.print()类似,但会在新的一行上。
代码中第27行将当前按键状态的值加到串行端口。
所以,当串口监视器打开时,可以实时查看Arduino在引脚2上检测到的值。串口监视器在故障排查时非常有用,可以轻松地对比预期结果和Arduino实际执行情况。
你还可以使用串口通信来在设备之间进行通讯等更多功能,详情请参阅Arduino参考文档。
接下来,将使用模拟输入将信息发送到 Arduino 板。这些A开头的引脚,位于数字输入输出引脚的对面,这些特殊引脚连接到Arduino的模拟数字转换器(ADC)。它能将介于0伏到5伏之间的模拟信号转换为从0到1023范围内的数字。
要创建该模拟信号,可以使用可变电阻器,该电阻器在受到作用时会改变其电阻值。例如,您可以转动电位计上的旋钮,按下或弯曲力敏电阻器 (FSR),或改变光敏电阻器的曝光量。
将一个小型的电位器,插在面包板的三行上,外侧的引脚与电源和地线相连,中间引脚连接到模拟引脚A0。
将一个LED连接到引脚9,这样就可以使用脉宽调制(PWM)来控制LED的亮度。
在 Arduino 软件的 03 Analog> AnalogInOutSerial 可找到该电路的内置示例代码。
上传代码后,打开串口监视器,同时观察LED灯在转动电位器上的旋钮时的状态。模拟输入读取的值将会在第一列,LED灯的亮度值将会在第二列。
这个示例程序在第39行使用了map()函数,它将一个数字范围映射到另一个数值范围。它有五个参数,包括:可改变的值、当前范围的下限、当前范围的上限、目标范围的下限,以及目标范围的上限。因此这行代码将一个名为outputValue的变量,设置为一个0到255之间的数字,具体取决于电位器的位置。
第44到47行的串口打印命令列出文本标签(位于引号内的内容),以及从传感器输入的值和输出到LED的值。
通过同时在串口监视器上查看这些值,可以更好地理解像map()这样的函数是如何工作的。在编写你自己的代码时要牢记这一点!
有许多传感器的工作方式类似数字开关或模拟输入,因此可以使用刚刚讲解的相同代码。比如,你可将按钮替换成红外传感器,或者将电位器替换成光敏电阻。
如果你有看上一期的介绍并且走到了这一步,那么你现在已经掌握了大多数Arduino程序的基本构建模块。当你进行项目设计时,问问自己输入是什么,输出是什么,以及它们是模拟的还是数字的。然后你可以相应地混合使用内置示例,并开始你的原型设计。Arduino 还有更多内置示例,让您慢慢探索,脑洞大开,成就更多创意诞生。
关于本系列视频
电子设计博大精深,对于初学者来说,有一定的难度。本系列视频旨在介绍一些入门级的技术和技巧,包括电路设计基础知识、简单程序设计等,让初学者从基础开始,再一步步向更进阶出发,在电子设计的世界里,发掘更多乐趣,同时也可以让电子设计爱好者温故知新。
关于Becky Stern
Becky Stern是一名创客,拥有多年设计电子项目的经验,创作和分享是她两大爱好。在独立创业之前,她曾担任 Instructables (Autodesk) 的产品经理、Adafruit 的可穿戴电子产品总监等。她的作品曾被 BBC、CNN、Business Insider、Forbes 和 Science Friday 等知名媒体报导过。她创建了数百个关于技术和手工制作的线上DIY教程和视频,旨在分享她的知识,帮助同是电子设计爱好者的同路人学习,以及相互交流。
喜欢【与Becky入门电子世界】系列视频吗? 请关注订阅并点赞和分享,敬请留意下一期的播放!
相关产品:
Arduino |
Adafruit |
SparkFun |
Seeed Technology |
DFRobot |
Adafruit |
Adafruit |
Same Sky |
SparkFun |
Interlink Electronics |
Advanced Photonix |
Adafruit |
小编的话:
掌握Arduino基本输入/输出的方法使设计者能够构建交互式、响应式的系统原型,从而更直观地理解和测试设计概念,并有助于设计者优化原型的功能和性能,提升原型的用户体验,也为原型的后续开发和迭代提供了坚实的基础。看了本期内容,您有哪些想法或疑问?欢迎留言,分享交流!
******
如有任何问题,欢迎联系得捷电子DigiKey客服团队。
中国(人民币)客服
- 400-920-1199
- service.sh@digikey.com
- QQ在线实时咨询 |QQ号:4009201199
中国(美金)/ 香港客服
- 400-882-4440
- 8523104-0500
- china.support@digikey.com
到微信搜寻“digikey”或“得捷电子”
关注我们官方微信
并登记成会员,
每周接收工程师秘技,
赚积分、换礼品、享福利