通过Raspberry Pi闪烁LED项目学习欧姆定律、GPIO和晶体管知识

这篇文章来源于DevicePlus.com英语网站的翻译稿。

本文最初发布在deviceplus.jp网站上,而后被翻译成英语。

Devices Plus的电子制作系列文章已经形成了一个庞大的体系。读者们也很喜欢根据我们的文章制作一些自己的作品。

然而,最近一位读者表示,“虽然我可以做出作品,但是我并没有真正掌握背后的原理。”确实,谈到电力、电子、电路和程序等内容,有些东西并不是那么简单,有时很难理解背后的基本原理。甚至我们编辑部的人员有时也会感到头疼!

此次的分享嘉宾是伊藤尚未先生,一位媒体艺术家和作家,以讲解“更深层次的原理”而闻名。本文将以闪烁LED灯项目为例讲述一些基本原理。要学的东西很多,所以我们直接学习最为重要的部分。当然,学完原理之后,我们还要理论联系实际,学以致用。

[目录]

  • 前言
  • 从闪烁LED学起
  • 欧姆定律
  • Raspberry Pi的GPIO
  • 通过晶体管控制LED
  • 关于闪烁LED的更多知识
  • 闪烁LED项目开发
  • 如何应用我们的设计?

前言

在过去几年中,随着电子行业的发展,微控制器变得非常流行。现在,我们可以使用紧凑的小型器件来感知和控制各种事物,包括光、声音、运动和图像,这感觉很神奇。我小时候的未来梦想正在慢慢实现,这令我感慨万千。

电子制作的内容已经发生了变化,早已不再是用晶体管制作收音机的时代了。进入媒体艺术领域以后,我把电子作品视为工具和材料,就像画笔和颜料,帮助我在艺术领域更充分地表现自己。艺术的表达方式有很多种,而另一方面,爱好动手制作的这类人被称为“创客”。当我看到很多地方都在举办相关活动时,我感慨“兴趣爱好”作为一种亚文化的概念已经发生了变化。

现在,我喜欢用Raspberry Pi进行电子设计,人们可以轻松访问该系统的各种资源。其操作系统还安装了多种应用程序,而且简单易用。

本文使用的Raspberry Pi 3 Model B+

从闪烁LED学起

“闪烁LED”,顾名思义,您会在电路中看到LED灯交替点亮和熄灭。当然,让LED灯闪烁很简单,我们可以利用晶体管和电容等元件重现电路的构建。顺便说一下,下图这个电路是在我的电子作品中经常使用的一种电路,叫做非稳态多谐振荡器电路。该电路由两个晶体管、两个电容、四个电阻和一个LED组成。这些器件焊接在电路板上,用干电池供电。

电路示例:非稳态多谐振荡器

作品示例:铁路标志

在该电路中,LED灯会以大约一秒的间隔闪烁。如果想改变灯的闪烁速度,我们得改变电容的容值和电阻值。要加快闪烁速度,就要减小的电容容值。

我们可以通过微控制器实现这个调整。
通过Raspberry Pi的GPIO输出点亮LED非常简单且易于处理。这方面内容很多书籍中都有介绍,而且市面上有许多功能模块化的专用扩展板,都能提供相关详细信息。但是,他们并没有深入探讨构建电子电路所需的一些最基本的重要知识,所以让我们在这里回顾一下。请回忆一下小学和初中科技课本上学到的知识。

欧姆定律

欧姆定律的描述为:电流=电压/电阻。我学习这个定律的时候,该公式被写成I = E/R。现在的公式是A = V/Ω,对吧?

貌似现在的教科书用的基本都是这个公式,“A(安培)= V(伏特)/Ω(欧姆)”强调的是单位本身,可能更直观易懂。

您可能会在参考书中看到这样的图,但是请注意自己对这个公式的记忆方法。对了,我有一个动物园的朋友,他是这样记忆这个公式的:

“地平线将地球分为上下两部分,天空中有海鸥,海中有鱿鱼和章鱼”

现在,我们就以电池点亮LED为例来说明欧姆定律的实际应用。您可以将LED连接到电源(此处为电池),但由于LED是一种二极管,因此电流有一个方向:将A(阳极)连接到电源正极,将K(阴极)连接到电源负极。

这个连接方向虽然正确,但实际上如果这样直接连接,LED可能会损坏。为避免损坏器件,流过器件的电流大小必须正确。

正确的电流值请参考器件的额定参数表(技术规格书)。我们以一个参数为3.5V/20mA的白光LED为例,这种电参数可以解释为“如果电压电流位于这个安全范围内,那么不会损坏”。换句话说,“如果电参数超出这个范围,它可能会损坏。”

因此,适用于该LED的最佳电压为3.5V,流过的最佳电流为0.02A。

首先,如果电压为3.5V,就得考虑使用电压更高的电源,比如一个由四节干电池组成的6V电源。严格来说,一节新电池的电压可能接近1.6V。当然,目前我们先按照四节电池总电压为6V进行讨论,稍后再介绍全新电池的电压情况。

我想把6V中的3.5V电压施加到LED上,那么剩下的2.5V就得施加到另一个元器件上。这可以通过分压来实现,因此LED需要串联一个负载,一个简单的电阻器即可。

我们来回想一下微型灯泡串联和并联的实验情况,它们的亮度不一样。负载(微型灯泡)串联时,电路电压分配到两个微型灯泡上,负载加倍,所以流过电路的电流为1/2,微型灯泡较暗。

微型灯泡存在个体差异(比如疲劳程度),这会导致负载有所不同

分压之后,每个元件得到一部分电压。现在,我们返回来讨论LED。由于LED是半导体,我们不将其视为负载。因此即使是分压电路,电路中的电流也得通过除LED以外的元件进行计算。

流过电路的电流应该是20mA,那么我们应该使用多大的电阻呢?这可以使用欧姆定律计算。因为“电阻=电压/电流”,2.5V/0.02A=125Ω,所以LED应串联一个125Ω的电阻。电路电压由LED和电阻器分压。

然而,市场上并没有阻值是125Ω的电阻。最接近的电阻阻值为120Ω和130Ω。如果选用120Ω,那么根据欧姆定律,电路的电流为25/120 = 0.0208333。这个值超过了20mA,因此我们应选用130Ω的电阻。电流不超过20mA就可以了。

现在,我们讨论使用全新干电池的情况。如果每节电池的电压是1.6V,那么总电压就是6.4V。如果电阻上的电压为2.9V,那么经过计算其阻值为145Ω。所以,选用一个150Ω的电阻足够了。当然,电阻越大电路越安全,但是LED会变的更暗。请根据自己的设计环境选择适当的阻值。该电阻被称为限流电阻,因为它的作用就是控制流过电路的电流。

Raspberry Pi的GPIO

Raspberry Pi有许多称为GPIO的输入/输出端口,可用于控制外部设备。我没有描述这方面的细节,那我该如何解释电信号是如何产生的呢?

比如,用这个端子能否点亮LED?

当然可以!然而,如前所述,不同LED的额定参数不同。比如,如果我们要点亮一个红色2.0V 20mA的LED,需要使用一个限流电阻。GPIO的输出电压为3.3V,那么分给限流电阻的电压为1.3V,通过的电流为20mA。不过,Raspberry Pi的GPIO最大只能提供16mA的电流,根据欧姆定律,限流电阻应为“1.3V/0.016 = 81.25Ω”,所以我使用了100Ω电阻。虽然这样无法达到该LED的额定性能,但是足以点亮它。您可以很容易地在面包板上做一下这个实验。

实现LED灯闪烁最好的方法还是使用Scratch。

声明GPIO,将GPIO4设为输出,然后向GPIO4输出ON (Hi)。
如果使用左图程序,LED会一直处于点亮状态所以要用OFF(low)来关闭它

如果按照上面的左图程序组装,每秒最多可开关10次

现在,我们已经设法制作出了闪烁的LED灯,但是,如前所述,Raspberry Pi的GPIO的输出电流存在限制。如果您想使用白光或蓝光3.5V LED,或者连接多个LED(想要更亮一些),或者使用大功率、超亮LED,怎么办呢?此时,单个GPIO输出很难实现这种功能。因此,我们需要使用另一个电源供电,并构建一个单独的电路来驱动LED。LED可以使用专用LED驱动器进行驱动,但是本节介绍一种使用晶体管的简单驱动方法。

通过晶体管控制LED

本文使用的是NPN型晶体管2SC1815(目前与2SC1815L、KSC1815等兼容)。晶体管的作用是放大和开关。

我们给基极一个输入,电流就会从集电极流向发射极。此时,基极的输入信号就被放大成一个较大的电流信号。这个过程称为开关。换句话说,模拟处理的过程是放大,数字处理的过程是开关。由于这是通过Raspberry Pi操作的,我们可以将其看成是一个开关功能。

NPN晶体管符号及外形示例

NPN晶体管的基极得到一个正输入后,集电极和发射极就会导通。如果是PNP型晶体管,就需要一个负输入。

根据2SC1815的额定参数表,流过集电极的电流可达150mA。晶体管产品是根据放大系数分级的,在Y级别中,放大系数为120至240。我们假设放大系数为200,要达到150mA的集电极电流,那么流过基极的电流应该为0.75mA。这意味着GPIO只需要输出一个很小的电流。

这里我们连接了一个10kΩ电阻,作为基极的输入。LED采用白光3.5V 20mA,并通过外部干电池供电,因此电路的电压为6V。根据前文的讨论,我们还给LED串联了一个150Ω的限流电阻。

我们按照下图连接好各个器件。

现在,我们把晶体管基极连接到Raspberry Pi的GPIO。首先,我们用面包板进行实验。

剩下的就需要写程序了。但是,您可以像在Scratch中一样使用之前的程序。当然,如果所连接的GPIO引脚变了,那么应该在程序中更改引脚编号。

基本步骤如下,声明使用GPIO,设置该引脚输出、输入等,然后输出ON(Hi)或OFF(Low)。由于正输入通过ON (Hi) 输出施加到晶体管的基极,因此集电极和发射极之间导通,LED点亮。

程序中可能会描述PullUp和PullDown,但这里没有必要,因为引脚已经连接了一个10kΩ电阻到晶体管的基极,作为下拉电阻使用。换句话说,这是硬件设置。

关于闪烁LED的更多知识

如何才能让LED灯闪烁呢?这并不难,因为我们可以用程序来控制ON(Hi)输出或OFF(Low)输出。想像一下,第一个输出是OFF (Low),然后输出ON (Hi),并保持1秒,然后输出OFF (Low),也保持1秒,然后再次输出ON(Hi),只要这样反复即可。那么,我们就会看到LED灯在闪烁。这个Scratch程序例子就是前面文中提到的那个示例。

闪烁LED项目开发

我们已经完成了LED灯的闪烁设计,现在,让我们来尝试控制多个LED。让两个LED灯交替闪烁的方法如下。该电路利用了两个GPIO,每个GPIO驱动一个带晶体管的LED。

这是我制作的两个晶体管驱动电路。电路很简单,但是如果您在面包板上组装,电线会很复杂,所以要注意走线情况。Scratch程序的工作原理如下。

我用的是GPIO3和GPIO4。4先点亮,1秒后关闭4,然后3立即点亮,1秒后关闭3,以此类推。重复10次,如果您想一直重复,应该使用“all”模块。

通过此应用,LED的数量可以根据可用GPIO数量增加,4个或10个。它们不仅可以顺序闪烁,而且可以同时全部闪烁,甚至还可以反向闪烁,具体取决于您的程序。

如何应用我们的设计?

顺便说一句,如果说让LED点亮或闪烁只是实验、编程实践和电子制作培训程度的事,那么,最大的问题是如何应用我们的设计。当然,作为圣诞树的装饰或者照明是个不错的选择。然而,光效不仅仅意味着闪亮,还涉及比如投射阴影、混合颜色、反射和折射、光谱和偏振等各种建模元素。

您还可以根据设备使用光效来创作艺术作品。

这是我的作品。


让埴轮【日本的一种陶俑-译注】舞动起来(2010)(C)伊藤尚未

该设备的这一部分依次点亮六个LED。在这里,六个埴轮的影子通过LED灯投射到墙上,但每个影子都投射在同一个位置,所以影子的形状=身体姿势。换句话说,阴影形成了动画。

我用现代技术将静止的陶土造型创作成了一个富有表现力的艺术品,并取名为“舞动的埴轮”。当然,这个作品需要很长时间才能完成。

所有这一切的基础是闪烁LED灯,但是正如您所见,当您知道如何应用它们时,您可以做更多的事情。当然,您不一定非得要创作这种艺术作品,但偶尔发挥创意很有趣,不是吗?

总结

电子设计很有趣,但是除了构建设备,您还可以做些什么?您怎样才能让它更有趣?其实您可以考虑不同的应用场景和表现方式,创作出更加复杂和有趣的内容。然后,您就能百尺竿头更进一步。

DevicePlus 编辑团队
DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

相关文章

  1. raspberry pi projects

    寻找实用的Raspberry Pi项目? 制作一个智能伞架!

  2. arduino code raspberry pi

    如何在Raspberry Pi运行Arduino程序

  3. sense hat

    用于Raspberry Pi的Sense HAT附加板——六种传感器

  4. Raspberry Pi Home Media Storage

    将Raspberry Pi设置为家庭媒体服务器

  5. Bad active CPU cooling

    如何用构建Raspberry Pi驱动的NAS服务器—附加收获:HURRiCANE冷却系统!

  6. Internet of Things DIY

    走进物联网:制备您自己的Wi-Fi开关 !

  7. led christmas decoration

    Raspberry Pi WebIOPi IOT—全彩LED圣诞装饰

  8. 用于Raspberry Pi的Sense HAT扩展板——操纵杆

  9. 利用看门狗板自动重启Raspberry Pi

TECH INFO

  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • 热设计
  • 仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


PICK UP!

  1. 刘铭
  2. ROHM开发出业界先进的第4代低导通电阻
PAGE TOP