《Arduino实战》——第3章 简单项目:输入和输出 3.1 认识模拟电路

简介:

本节书摘来自异步社区《Arduino实战》一书中的第3章,第3.1节,作者 【美】Martin Evans , Joshua Noble , Jordan Hochenbaum ,译者 况琪,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第3章 简单项目:输入和输出

本章涵盖的内容

  • 着眼于模拟世界
  • 读取一个模拟输入
  • 使用扬声器发声
  • 搭建一架五声音阶电子琴

在前一章中,我们了解了Arduino数字化的一面,循序渐进地搭建了一系列项目,展示了Arduino的输入、输出和中断等特性。在本章,我们将着眼于Arduino的另一面,看看它如何与我们周围的世界交流。

基本上,我们周边的世界可以分成两部分——模拟和数字——在这一章我们将研究与模拟世界的交互。让我们再从一个简单的元件开始,电位器,它可以为Arduino提供模拟量的输入。接下来,我们要尝试添加一个传感器——压电换能器,它既可以提供模拟输入,也可以进行模拟输出。我们接下来会再添加4个压电换能器和一个小型扬声器来制作一架五声音阶电子琴。

以下是完成本章所需的元件:

  • 1片Arduino板卡
  • 1块面包板和一些跳线
  • 1个小型电位器(最好用微调型电位器,因为它很容易插进面包板)
  • 5个稳压二极管,0.5 W 5.1 V(我们使用的是BZX55C5V)
  • 5个带线的无外壳的压电换能器(敲击传感器)。
  • 5个1 MΩ(100万欧姆)电阻。
  • 1个1 kΩ电阻。
  • 1个8Ω的小型扬声器。

下面让我们开始学习模拟电路的基础知识吧。

3.1 认识模拟电路

在前一章中,已尝试使用了可以闭合和断开的按键,但如果你想测定一个模拟量的输入,比如一张照片或者一个力敏电阻,那又该怎么办呢?如果Arduino是一个纯数字的设备,那你将无法测定这些量,这也就限定了你所能制作的作品的范围。幸运的是,Arduino也已经具备了与模拟世界交互的能力。

Arduino可以调节一个LED的亮度,却不改变施加在LED上的电压,这是利用了一种专门的技术,称为脉冲宽度调制(PWM),或者简称脉宽调制(后面会详细讲解)。除了可以利用脉宽调制进行模拟输出以外,Arduino还可以接受0~5 V的模拟输入。

标准的Arduino有6个模拟输入引脚,标注为ANALOG IN A0、A1、A2、A3、A4、A5;另外,还有6个模拟输出引脚。

在本章,我们将集中精力讲解analogRead函数,而analogWrite函数我们留到以后的章节再讲解。

让我们来了解一下数字设备和模拟设备有什么区别吧。

3.1.1 模拟和数字有什么区别

那模拟世界与数字世界的区别是什么呢?在数字世界中,所有的事物都只有两个状态,开关只能是开或关,LED只能是亮或灭,你要么是醒着的,要么是睡着的。这些状态可以用多种方式表示,0或1,开或关,高或低。Arduino的数字引脚也以与之相同的方式工作,当设置为输出时,它们要么输出0 V,要么输出5 V,0 V就是逻辑零,5 V就是逻辑一。在模拟世界中,事物都有很多种取值。音乐中的音符涵盖了很多个频率,汽车加速的过程达到了很多个速度,一束正弦波在最大最小值之间平滑过渡,温度在最大最小值之间连续变化。

我们时常想要探索模拟的世界,Arduino有6个模拟输入引脚可以帮我们完成这个愿望。但Arduino仍然是一个数字设备,所以你需要一种方法,将输入的信号转换为数字表示。这项工作是由模数转换器(analog-to-digital convertor,ADC)完成的。表3-1列出了Arduino和Arduino Mega中模拟输入和模拟输出引脚的分辨率、电压范围和引脚编号。

在下一节中,要用电位器来提供一个手动可调的模拟输入,你可以通过串口监视器的显示,即时地观察到这些改变带来的效果。


screenshot

3.1.2 读取电位器

为了观察Arduino的模拟输入功能是如何工作的,使用一个电位器是最简单的方法。电位器有各种不同的形状和尺寸,如图3-1所示,它们广泛应用于我们身边的各种设备中。如果你拥有一套带有音量旋钮的立体声音响,那它的音量调节很可能就是基于对一个电位器的旋转实现的。其他的例子包括使用电位器控制灯光的亮度,控制电炉或其他电热炊具的温度等。无论电位器的形状和尺寸如何,都可以通过某种方法改变它的电阻,无论是以线性方式还是以对数方式。


screenshot

大多数电位器有3个引脚,中间的那个通常称为滑片,它通过移动接触器在一个固定电阻上的位置来改变电阻。对于本章,你需要一个电阻线性可调的电位器,而且要方便插接到面包板上,微调型电位器通常是一个理想的选择。

图3-2给出了电位器的电路符号。中部的箭头,也就是滑片,叠加在标准的电阻符号之上,用来表示这个电阻是可变的。


screenshot

下面让我们动手将一个电位器连接到Arduino上。

3.1.3 连接硬件

现在你已经知道要用哪一种电位器了,让我们将它安装好吧。电路图如图3-3所示,电位器标记为R1,连接在5 V和地(GND)之间,滑片连接到模拟输入引脚A0。当你顺时针或逆时针旋转电位器的时候,就会将A0的电压在0~5 V之间调节。

将电位器插接到面包板上。中间的引脚通常是滑片,也就是你要连接到模拟输入端A0的引脚。组装完成后的电路如图3-4所示。


screenshot

图3-4所示的电位器没有旋转柄,但可以插入一个微调工具来转动。如果没有电位器微调工具,你可以使用一个小型的一字型螺丝刀代替。

电位器连接好后,就可以开始写程序来读取它的数值了。

3.1.4 读取电位器的程序

下列代码清单给出了用于读取A0模拟引脚上0~5 V模拟数值的程序。

代码清单3-1 读取电位器


screenshot

你并不需要在初始化函数中将sensotPin配置为输入,因为所有的模拟输入引脚已经默认配置成了输入。变量sensorValue存储了由analogRead函数读取到的数值,这个数值在0~1 023(含)之间,0表示0 V,1 023表示5 V。

两次读取之间10 ms的延时使得Arduino的模数转换器有时间来稳定并捕获到一个准确的数值。在Serial.println(sensorValue, DEC);这一行中的DEC指示println以十进制方式输出数据。其他的选项还包括HEX(十六进制)、BIN(二进制)和OCT(八进制)。

3.1.5 烧写和测试

将程序输入IDE之后,校验使之通过编译,然后将Arduino连接到你的计算机并将程序写入其中。打开IDE中的串口监视器,然后从头到尾地顺时针和逆时针旋转电位器。你应该可以看到串口监视器输出的数值随电位器的旋转而改变。示例输出如图3-5所示。

你现在知道了如何将一个值读入一个模拟输入引脚。下一节中,你要将Arduino连接到一个压电换能器。为此,你需要一些额外的元件,因为压电换能器可以产生非常高的电压,这可能会损坏Arduino。


screenshot

相关文章
|
存储 芯片 iOS开发
格式化内存卡的方法有哪些?这几种很好用
本文介绍了内存卡常见问题的解决方法——格式化,并详细讲解了使用Windows磁盘管理器、Mac磁盘工具及第三方软件(如DiskGenius、SD Card Formatter)进行格式化的步骤。同时提醒用户:操作前务必备份数据并检查卡体是否完好,合理选择文件系统以确保兼容性。
|
10月前
|
供应链 JavaScript Java
基于springboot的半成品配菜管理系统
本研究基于SpringBoot框架构建半成品配菜管理系统,旨在解决行业库存、订单与供应链管理难题。系统实现库存预警、订单自动化与供应链协同,提升企业效率与客户满意度,推动行业信息化、智能化发展,具有重要现实意义与应用价值。(238字)
|
12月前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
1062 17
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
467 33
|
人工智能 JavaScript 前端开发
白嫖 DeepSeek ,低代码竟然会一键作诗?
宜搭低代码平台接入 DeepSeek AI 大模型能力竟然这么方便!本教程将揭秘宜搭如何快速接入 DeepSeek API,3 步打造专属作诗机器人,也许你还能开发出更多有意思的智能玩法,让创意在代码间自由生长。
3007 14
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
1122 0
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
|
JavaScript 前端开发 网络协议
从理论到实践:全面剖析Python Web应用中的WebSocket实时通信机制
【7月更文挑战第17天】WebSocket在实时Web应用中扮演重要角色,提供全双工通信,减少延迟。本文详述了Python中使用`websockets`库创建服务器的步骤,展示了一个简单的echo服务器示例,监听8765端口,接收并回显客户端消息。客户端通过JavaScript与服务器交互,实现双向通信。了解WebSocket的握手、传输和关闭阶段,有助于开发者有效利用WebSocket提升应用性能。随着实时需求增长,掌握WebSocket技术至关重要。
1133 6
|
安全 Java API
【新手必看】服务端集成网易云信IM 即时通讯
【新手必看】服务端集成网易云信IM 即时通讯
1224 0
|
消息中间件 网络协议 安全
TCP/IP 应用层常用协议
TCP/IP 应用层常用协议
1044 0
|
机器学习/深度学习 算法 搜索推荐
抖音快手小视频推荐算法之--协同过滤算法剖析
抖音快手小视频推荐算法之--协同过滤算法剖析