你有看过《Rick and Morty》吗?是什么让Rick能够在宇宙间翱翔,在时空中穿梭?没错,是这个神奇的传送枪!只需输入平行宇宙的坐标,再按下按钮神秘的绿色圆形传送门就会在你面前出现,开启了在不同空间之间创造实时连接的传送门。仿佛置身于虚拟世界的夹缝中。纵身一跃,你就能来到一个全新的宇宙
虽然现实世界无法实现这个神奇的技术,但我每天做梦都在想,如果有一天我能时空穿梭我要跳到哪里。可能瞬间去见千里之外的朋友,可能转身去到伦敦桥。
介绍道具也是一个满足心愿的事情。兼具功能实用性、再加上这个fancy的外形。
Rick的这个动作好像瞬间让我想到了刚过去的口罩事件,‘稍等量一下体温’。这熟悉的场景浮现眼前。
首当其冲我要给它先加一个测温功能。同时我还需要它可以保持供电,有屏幕可以显示它的数值。我找到了行空板和红外测温模块,满足可以快速、准确地测量目标物体的表面温度的需要,不论是测量室内温度、食物温度,甚至是机械设备的温度,它都能轻松采集。以此满足了我的便携采集数据并显示的需求。
二、
硬件
行空板是一个可以使用Python学习和编程的单板微型计算机。它不仅集成了LCD触摸彩屏,让你可以直观地查看数据,还具备WiFi和蓝牙功能,方便与其他设备连接和交互。此外,行空板内置了各种常用传感器,还可以连接IIC、uart、usb串口的硬件,感知周围的环境。
红外测温模块与一般的测温传感器不同,它是根据被测物体的红外辐射能量来确定物体的温度,不与被测物体接触,不影响被测物体温度场,并且温度分辨率高、响应速度快、稳定性好等特点。其视场为(FOV)35°。其他的温度测量传感器可分为接触式和非接触式,接触式测温只能测量被测物体与测温传感器达到热平衡后的温度,所以响应时间长,且极易受环境温度的影响。
当我们使用锂电池来作为我们的电源方案时,首先要解决的两个技术难点就是电池的升压和充电。而MP2636充电升压模块,可以把3.7v电池升压到5v以支持行空板的供电。同时这个升压模块支持充电功能。完美支持便携的锂电池供电的diy需求。
选好硬件后建了一个可以直接3D打印、能够匹配行空板和其他硬件的模型。如果想增加其他模块的话可以在这个基础上修改。
https://www.thingiverse.com/thing:6234661
三、
代码
我们直接使用python编程控制硬件时,需要用到pinpong库,这是一个可以控制几百种开源硬件主控板的Python库,满足我们用Python控制开源硬件。
1.读取红外温度传感器数值并打印
加载红外温度传感器模块的库:
from pinpong.libs.dfrobot_mlx90614 import MLX90614
加载行空板pinpong库:
from pinpong.board import Board
红外温度传感器使用I2C通信,地址默认为0x5A:
irt = MLX90614(0x5A)
from pinpong.libs.dfrobot_mlx90614 import MLX90614from pinpong.board import Board Board().begin()irt = MLX90614(0x5A) while True: print(irt.obj_temp_c())
2. 读取数值成功了,现在我们尝试绘制UI界面和把数值打印到行空板的显示屏上。
加载行空板的GUI:from unihiker import GUI
from pinpong.libs.dfrobot_mlx90614 import MLX90614from pinpong.board import Boardfrom unihiker import GUIimport time
背景图使用robot.png,从(0,0)像素的位置显示,图片宽度为240(全屏显示):img1=u_gui.draw_image(image="robot.png",x=0,y=0,w=240)
实时温度显示使用数码管数字显示,字号120,在(25,85)像素坐标的位置。
Board().begin()u_gui=GUI()irt = MLX90614(0x5A)img1=u_gui.draw_image(image="robot.png",x=0,y=0,w=240)txt=u_gui.draw_digit(text="0",x=25,y=85,font_size=120, color="#FF6666")
运行程序
设定当温度小于等于38度时,刷新温度数字显示。
当温度大于38度时,刷新数字显示的同时,颜色显示变为正红色。
while True: my_variable = irt.obj_temp_c() if (my_variable <= 38): txt.config(text=my_variable, color="#FF6666") if (my_variable > 38): txt.config(text=my_variable, color="#FF0000") time.sleep(0.1)
3.所有代码
from pinpong.libs.dfrobot_mlx90614 import MLX90614from pinpong.board import Boardfrom unihiker import GUIimport time Board().begin()u_gui=GUI()irt = MLX90614(0x5A)img1=u_gui.draw_image(image="robot.png",x=0,y=0,w=240)txt=u_gui.draw_digit(text="0",x=25,y=85,font_size=120, color="#FF6666") while True: my_variable = irt.obj_temp_c() if (my_variable <= 38): txt.config(text=my_variable, color="#FF6666") if (my_variable > 38): txt.config(text=my_variable, color="#FF0000") time.sleep(0.1)
现在我们就完成了一个可以测温的portal gun的原型,更多的diy还可以添加其他测量的模块。比如使用光谱模块制作一个光谱仪,nfc读卡识别模块。