D11 - 「数位×IN×OUT」:数位功能

数位 I/O 视窗当然是要有数位讯号相关功能啦。

数位 I/O 功能

Supported Modes 中,可以看到所有支援功能:

DIGITAL_INPUT      (0x00)
DIGITAL_OUTPUT     (0x01)
ANALOG_INPUT       (0x02)
PWM                (0x03)
SERVO              (0x04)
SHIFT              (0x05)
I2C                (0x06)
ONEWIRE            (0x07)
STEPPER            (0x08)
ENCODER            (0x09)
SERIAL             (0x0A)
INPUT_PULLUP       (0x0B)

SPI                (0x0C)
SONAR              (0x0D)
TONE               (0x0E)
DHT                (0x0F)

其中与数位 I/O 相关功能为:

DIGITAL_INPUT      (0x00)
DIGITAL_OUTPUT     (0x01)
INPUT_PULLUP       (0x0B)

以下依序介绍功能。

数位输入(Digital Input)

D11 - 数位输入(Digital Input).png

Uno 的每一只脚位都可以作为数位输入使用,也就是每一只脚位都可以接收 0 至 5V 的电压。

数位输出(Digital Output)

和输入相反,Uno 的每一只脚位也可以作为数位输出使用,也就是可以输出 0 至 5V 的电压。

上拉输入(Input Pullup)

基本上和数位输入相同,都是输入数位讯号,差别在 Uno 会在内部启用上拉电阻,

甚麽是上拉电阻?我们可以先来谈讨以下问题。

D11 - 上拉电阻.png

电子助教:「一定是 0 吧」

鳕鱼:「答案是『不一定』。」

电子助教:「怎麽那麽多不一定 (´・ω・`) ... 」

鳕鱼:「就像人生一样嘛」

电子助教:「... 」

当 Uno 脚位为数位输入时会进入高阻抗状态,此时如果输入脚位断路,没有任何电压接入,就会处於「浮接(Floating)」状态。

这个时候脚位非常容易受到外部磁场干扰,变成像天线一般的存在,为了避免这种情况,就需要「上拉电阻」登场了。

上拉电阻会在开关断开後,将电压固定至指定电压(Uno 为 5V),而下拉电阻则是固定至 GND(0V)。

D11 - 上、下拉电阻 (1).png

想阅读更详细说明的朋友可以参考以下连结:
浮接 Floating 是甚麽? 电路的不确定因素

硬体实作

终於要来实际接电路了!

首先需要准备以下设备与零件:

  • 三用电表 * 1

  • 面包板 * 1

  • 按钮 * 1

    推荐使用这种两只脚的按钮。

    2021-09-12 17.44.27-1.jpg

    D11 - 开关原理 (1).png

  • LED * 1

    全名「发光二极体(light-emitting diode)」,功能与灯泡相同,通电就会发亮。

    准备甚麽颜色都可以。

    2021-09-12 17.51.28.jpg

    D11 - LED 原理.png

  • 电阻 220 欧姆 * 1

    用来分配电路中的电压、电流。

    2021-09-12 17.51.04.jpg

    D11 - 电阻原理.png

检查硬体

开始连接电路前必须先确认每一个硬体都能正常运作,让除错更有效率,如同单元测试的概念一般。

按钮

利用三用电表确认按钮是否能够正常通导。

D11 - 确认按钮正常.png

如果电表都没有发出哔哔声,那就换一个按钮试试看。

LED

利用三用电表确认 LED 是否能够正常发光。

D11 - 确认 LED 正常.png

LED 没有亮的话,可以试试看:

  • 探棒交换连结长短脚
  • 确保金属接触良好
  • 换一个 LED

电阻

利用三用电表确认电阻选用是否正确且功能正常。

D11 - 确认电阻正常.png

如果数值都一直显示 1,可以试试看:

  • 确认量测档位正确
  • 确保金属接触良好
  • 换一个电阻

电子助教:「为甚麽量出来和 220 差有点多?」

鳕鱼:「因为是便宜货嘛 ╮(′~‵〞)╭」

电子助教:(怜悯的眼神 (´● ω ●`))

鳕鱼:「亮个 LED 用不着精密电阻啦 ⎝(・ω´・⎝),才不是因为我买不起好嘛!」

电阻依其品质有其允许误差范围,具体判读方式可以参考连结:电阻色码

连接电路

以下为参考接线方式,可以不用完全相同,只要效果相同即可。

使用 Uno 板子上的 5V 为 +、GND 为 -。

数位输入

我们希望讯号平常状态为「低电位(0)」,按下状态为「高电位(1)」,所以这里采用下拉电阻。

D11 - 数位输入电路.png

上拉输入

因为 Uno 启动内部上拉,所以不需要任何上下拉电阻。

D11 - 上拉输入电路.png

数位输出

长脚一定要接在与 Pin 连接的位置,因为我们要由 Uno 输出高电压推动 LED 灯,所以 Pin 需要连接 LED 的正极。

D11 - 数位输出电路.png

补充说明

为何 LED 需要串联电阻

如果流经 LED 的电流过大,会导致 LED 过热烧毁,所以需要电阻进行「限流」,不要让电流过大。

换个比喻,电阻就像是河流中的石头,可以减缓水流(减少电流),保护水车(LED)不会被冲坏(烧坏)。

D11 - LED 为何需要电阻 (1).png

更好的元件驱动方式

其实驱动元件最好的方式应为「透过额外的电晶体(BJT 或 MOSDET 等等)驱动,Uno 只负责提供控制讯号」。

根据官方资料 Uno 所有 I/O 脚位输出总电流不能超过 200mA,若超过容易造成 Uno 损坏,但为了简单呈现效果且只有 1 个 LED 也不会超载,所以在此使用脚位驱动。

D11 - 更好的元件驱动方式.png

总结

  • 了解 Firmata 支援的基本数位功能
  • 完成数位输入、输出电路

<<:  D19 使用分页(Paginator) - 首页跟个人文件页

>>:  [10] 撰写自己的 console.log

{DAY 24} Pandas 学习笔记part.10

前言 前面学习了很多pandas的功能 在标签的处理上还有资料的分析上也有进行介绍跟实际资料的演练 ...

Day 27 CSS3 < 动画 animation>

动画 (animation) 可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。...

Day10:程序码编辑器的实用扩充套件(2)

一、前言   上一篇文章介绍了 VSCode 好用的快捷键,此篇开始介绍其他扩充之实用功能罗。没意外...

白话文Excel#30-呼~~~终於最後一篇了

因应这次的挑战赛, 活生生的挤了好多Excel的主题出来, 回想这个挑战的初衷, 主要是因为我有发现...

教练,我想创业...

近期接触到了这本书:「麻省理工 MIT 黄金创业课」 透过六大面向以及二十四个步骤来系统性地提升创业...