嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

这篇文章翻译自ChelseaBack的 A Fabulous Festive Raspberry Pi Thermometer

title

使用树莓派来制作一支具有下雪警报的冬季温度计

最近我一直在做更多与树莓派相关的项目,通过学习 在树莓派上的Python基本知识 ,我 创建了一个树莓派单线恒温计

接下来,我决定,考虑到节日即将到来了,所以我想用树莓派制作一些更加有用的东西。使用树莓派和DS18B20温度传感器来设计一支节庆温度计,这好像是一个不错的主意,因为我不久前才使用过这两个设备。

计划

我计划将LED连接到树莓派的GPIO引脚上,从而用LED显示来自DS18B20 温度传感器上 不同的温度读数。这些LED可以显示从-5ºC到+5ºC 的温度。在很有可能下雪温度达到零度的时候, 6个额外的LED灯会开始闪烁一段时间。

由于这是一个节庆温度计,我考虑把它设计成雪花的样子比较合适。我手画了一张它的草图,并且我已经想好要怎么将它连接起来。

我必须确保树莓派的位置非常靠近亚克力材料的雪花模板,并且我决定把树莓派安装在雪花的背后,这应该是最好的方法。然而,我们需要隐藏树莓派的位置,这样才可以让雪花的设计变得更加美观。为了实现这个目标,我采用了一块中间面积很大的雪花模板,这样我才可以从背面安装一个圆形的面板,并将这块圆形面板直立起来。

我已经想好需要用到树莓派的13个GPIO引脚; 我考虑的因素包括11个显示温度的LED,6个当很大机会下雪时会照亮的LED,以及温度传感器。

这个项目的主要部分就是要编写Python代码。对于那些很少用Python语言编写代码的人来讲, 让他们还要编写几个函数,这将是一种挑战!

代码

我编写的第一个函数是最容易的,因为我只需要用这个函数来读取来自DS18B20温度传感器上的读数。在这之前,在我建立树莓派单线恒温器的时候,我已经编写过这个代码了。所以这次我直接用之前相同的代码,作为我第一个函数的基础。

title

然后,在我开始编写下个代码之前,我先测试了这个函数。为了测试它,我在while循环程序里,我使用了print()这个函数, 将getTemp()所得到的温度打印输出,由于它正确地显示了来自DS18B20温度传感器的温度读数,这说明了这个函数是可以使用的,所以我很放心。因此,所以我开始编写下一个函数。

title

我第二个想要编写的函数是updateThermometer ( ) ,它可以用来读取来自温度传感器的读数,然后使用这个读数来决定哪些LED灯会亮。在我编写这个函数之前,我需要设置所有的GPIO 引脚。

这花了相当长一段时间,因为我想要做的是,当温度在非0ºC的时候,我不想只有一个LED 亮,而是我想让从0ºC到实时温度之间所对应的所有的LED 都亮。

title

上面显示的列表变量定义了在每个不同温度时,各个LED的亮暗情况。当我调用updateThermometer ()函数的时候,将不同的参数与实际温度相比较,从而决定哪些LED需要打开,哪些LED会关掉。

title

一旦update thermometer 这个函数测试完后,我可以开始编写第三个还有最后一个函数, snowAlert()。

title

这个函数读取一个参数,并且当这个参数是在正确的范围之内,它就会被调用,下雪警报指示就会打开,下雪警报LED就会闪烁五次,然后停止闪烁,并一直保持亮着。当读取的是任何其他的参数,下雪警报LED就会关掉。

title

主程序一直在进行while 循环程序中运行,调用getTemp() 函数来获取温度,然后打印输出温度。接下里,调用updateThermometer()函数,并把将之前打印输出的温度进行更新。然后,检查先前的温度是不是0 ºC,如果不是,但它现在的温度是0 ºC,那么它就会调用snowAlert ()函数, 然后下雪警报打开,LED就会亮了。反之,下雪警报关闭,LED就会暗掉。然后,主程序会将更新最新的温度,休息0.5秒,然后开始从头再来。

机械结构

在激光切割白色的亚克力板之前,用中密度纤维板制造出雪花原型,你们可以在文章的最上方看到完整的设计。在雪花板背后,有4个六边形螺柱和1个圆形板,树莓派和面包板都将固定在这块圆形板上面。最后,用尼龙螺钉将其固定。

由于DS18B20 温度传感器需要放在户外,所以我们把它放在了一个金属容器中。这个容器有一个盖子,我们用螺丝将其拧紧,并在盖子上钻孔,从而使电缆穿过去。随后用冷凝胶密封这个孔。

title

接线

title

将每个温度刻度表上的LED 灯的正极连接一个电阻,之后把它们连接到一个GPIO引脚上。它们的负极都连接在一起然后接地。

将6个警报LED的正极各自连接到一个电阻,然后将这些电阻的另外一端连接在一起,将6个警报LED的负极全部接地。由于这六个灯 全部是并联的,这会带来很大的电流,而这个电流值远远超过了一个GPIO 引脚所能提供的安全值,所以我将下雪警报GPIO引脚连接到1K 欧的电阻上面,并将电阻连接到PNP型三极管的基极上。PNP型三极管的发射极连接到3.3V 的电压上。三极管的集电极连接到电阻上面。而这些电阻在之前已经连接了LED的正极。

测试

将传感器放在一个充满冰的试管中,我们进行温度计的测试。通过观察Python 代码的输出值,我们可以监控温度。首先,所有从0 ºC到5 ºC 对应的LED会亮,当温度低过-5 ºC,灯全部暗掉。当温度到达0ºC,在刻度表上只有一个灯亮然后6个下雪警报LED闪烁。

塑胶雪花的设计和Python 代码都可以在 GitHub 找到。

DesignSpark Electrical Logolinkedin