让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32

2017-08-025.3万
精华项目
AI 快速预览详细 收起
本项目介绍如何使用DFRobot的FireBeetle ESP32主板和MLX90614非接触式红外温度传感器制作一款便携式红外测温枪。通过简单的焊接和编程,您可以轻松测量座椅、冰箱等物体的温度。这个项目不仅实用,还能激发孩子对科技的兴趣。
让我们造一把红外测温枪来感受夏天
-使用FireBeetleESP32主板和 MLX90614非接触式红外温度传感器

最近天气太热了,进入汽车车厢秒变烤鸭。去骑个共享单车,我的天,这不是骑车,简直是在烤肉。所以我琢磨是不是搞一个测温枪来检测下座椅的温度。这种小儿科的问题怎么能难倒我这个maker呢。手上正好有DFRobot 出的FireBeetle ESP32主板和 MLX90614非接触式红外温度传感器,自己造一款测温枪出来。
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图1

让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图2


主板选用了DFRobot最新出的FireBeetleESP32主板,体积比传统的Arduino Uno主板小很多,另外FireBeetle ESP32主板自带电池接口和充电电路,非常适合用于低功耗便携设备的制作。

传感器使用了DFRobot出品的MLX90614非接触式红外测温传感器,和传统的LM35、DS18B20这些传统的温度传感器比较,这款传感器可以非接触的方式测量到目标物体的温度。传感器是IIC接口,非常方便连接到主板上使用。

显示部分使用了一块 DFRobot最近新生产的 GravityIIC OLED-2864显示屏,它是一款非常漂亮的蓝色自发光屏幕,这个屏幕有金属边框可以防止屏幕在制作和使用过程中玻璃破裂损坏。软件使用了DFRobot开发的uPyCraftMicroPython IDE,使用python进行编程,降低了软件开发的难度。

让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图8
选用的元件


部件清单:
3.7V 400mAh锂电池          1只
6mm直径红光激光发射器     1只
C&K滑动开关                1只

工具:
401 胶水
热熔胶枪

所用到的软件:
MLX90614.py MLX90614非接触式红外测温传感器 库文件
SSD1306.py  Gravity IIC OLED-2864 显示屏 库文件
piclib.py      项目使用的显示图片和16*24字体 库文件
InfraRedThermometer.py  项目代码源文件
uPyCraftMicroPython IDE  (点击下载
PCtoLCD2002液晶取模软件
3D打印切片软件Cura
3D print- left part.stl   3D打印文件 可直接使用 Overlord Pro 3D打印机 打印
3D print- right part.stl  3D打印文件


制作步骤:
1、  如下图焊接好各个部件
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图9
   接线图

2、  使用PCtoLCD2002液晶取模软件将需要用到的图片和16X24字体转换为16进制代码
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图11
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图10
按照上图模式来进行设置和取模

3、使用uPyCraft  MicroPython IDE 进行编程,烧写代码到FireBeetleESP32主板上
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图12
烧写好代码后测试程序是否可以工作
  1. import MLX90614
  2. from machine import Pin,I2C
  3. import time
  4. import ssd1306
  5. from piclib import *
  6. # This code will show you how to make a Infra Red Thermometer using the MLX90614 sensor.
  7. i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
  8. ir=MLX90614.MLX90614(i2c)
  9. lcd=ssd1306.SSD1306_I2C(128,64,i2c)
  10. #Display a picture 72*64
  11. def DisplayPicture(x,y,picture):
  12.   for line in range(0,64):
  13.     for bytes in range(0,9):
  14.       for bits in range(0,8):
  15.         if picture[9*line+bytes]&0x80>>bits:
  16.           lcd.pixel(x+bytes*8+bits,y+line,1)
  17.         else:
  18.           lcd.pixel(x+bytes*8+bits,y+line,0)
  19.   return
  20. #Display a character 16*24
  21. def DisplayCharacter16X24(x,y,character):
  22.   for line in range(0,24):
  23.     for bytes in range(0,2):
  24.       for bits in range(0,8):
  25.         if character[line*2+bytes]&0x80>>bits:
  26.           lcd.pixel(x+bytes*8+bits,y+line,1)
  27.         else:
  28.           lcd.pixel(x+bytes*8+bits,y+line,0)
  29.   return
  30. #---------------------run here------------------------------------  
  31. #display logo
  32. DisplayPicture(28,0,picture)
  33. lcd.show()
  34. time.sleep(1)
  35. lcd.fill(0)
  36. #display O:123.4C
  37. #        A:123.4C
  38. DisplayCharacter16X24(0,0,charArray[10]) #O
  39. DisplayCharacter16X24(16*1,0,charArray[12]) #:
  40. DisplayCharacter16X24(16*7,0,charArray[13]) #C
  41. DisplayCharacter16X24(0,24,charArray[11]) #A
  42. DisplayCharacter16X24(16*1,24,charArray[12]) #:
  43. DisplayCharacter16X24(16*7,24,charArray[13]) #C
  44. lcd.show()
  45. while True:
  46.   time.sleep(0.2)
  47.   Object = ir.getObjCelsius() #  *C
  48.   Ambient = ir.getEnvCelsius() # *C
  49.   #Object = ir.getObjFahrenheit() # *F
  50.   #Ambient = ir.getEnvFahrenheit() # *F
  51.   #print("Object  %s *C"% Object)
  52.   #print("Ambient %s *C"% Ambient)
  53.   #print()
  54.   ObjectInt = int(Object*10)
  55.   AmbientInt = int(Ambient*10)
  56.   if ObjectInt < 0:
  57.     ObjectInt = abs(ObjectInt)
  58.     DisplayCharacter16X24(16*2,0,charArray[15])# -
  59.     temp1 = (ObjectInt%1000)//100
  60.     if(temp1 == 0):
  61.       DisplayCharacter16X24(16*3,0,charArray[16]) # space
  62.     else:
  63.       DisplayCharacter16X24(16*3,0,charArray[temp1])
  64.     DisplayCharacter16X24(16*4,0,charArray[(ObjectInt%100)//10])
  65.     DisplayCharacter16X24(16*5,0,charArray[14]) # .
  66.     DisplayCharacter16X24(16*6,0,charArray[ObjectInt%10])
  67.    
  68.   else:
  69.     temp1 = ObjectInt//1000
  70.     temp2 = (ObjectInt%1000)//100
  71.     if temp1 == 0:
  72.       DisplayCharacter16X24(16*2,0,charArray[16]) # space
  73.     else:
  74.       DisplayCharacter16X24(16*2,0,charArray[temp1])
  75.     if temp1 == 0 and temp2 == 0:
  76.       DisplayCharacter16X24(16*3,0,charArray[16]) # space
  77.     else:
  78.       DisplayCharacter16X24(16*3,0,charArray[temp2])
  79.     DisplayCharacter16X24(16*4,0,charArray[(ObjectInt%100)//10])
  80.     DisplayCharacter16X24(16*5,0,charArray[14]) # .
  81.     DisplayCharacter16X24(16*6,0,charArray[ObjectInt%10])
  82.   if AmbientInt < 0:
  83.     ObjectInt = abs(AmbientInt)
  84.     DisplayCharacter16X24(16*2,24,charArray[15])# -
  85.     temp1 = (AmbientInt%1000)//100
  86.     if temp1 == 0:
  87.       DisplayCharacter16X24(16*3,24,charArray[16]) # space
  88.     else:
  89.       DisplayCharacter16X24(16*3,24,charArray[temp1])
  90.     DisplayCharacter16X24(16*4,24,charArray[(AmbientInt%100)//10])
  91.     DisplayCharacter16X24(16*5,24,charArray[14]) # .
  92.     DisplayCharacter16X24(16*6,24,charArray[AmbientInt%10])
  93.    
  94.   else:
  95.     temp1 = AmbientInt//1000
  96.     temp2 = (AmbientInt%1000)//100
  97.     if temp1 == 0:
  98.       DisplayCharacter16X24(16*2,24,charArray[16]) # space
  99.     else:
  100.       DisplayCharacter16X24(16*2,24,charArray[temp1])
  101.     if temp1 == 0 and temp2 == 0:
  102.       DisplayCharacter16X24(16*3,24,charArray[16]) # space
  103.     else:
  104.       DisplayCharacter16X24(16*3,24,charArray[temp2])
  105.     DisplayCharacter16X24(16*4,24,charArray[(AmbientInt%100)//10])
  106.     DisplayCharacter16X24(16*5,24,charArray[14]) # .
  107.     DisplayCharacter16X24(16*6,24,charArray[AmbientInt%10])  
  108.   lcd.show()
复制代码

4、  根据部件尺寸设计外壳
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图7

让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图5

5、  使用3D打印切片软件Cura制作3D打印文件
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图6

6、  使用Overlord 3D打印机打印出外壳
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图3

让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图4

7、使用热熔胶和胶水将部件安装到打印的外壳内
让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图15

让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图14

8、测试温度
测量手掌温度


测量摩拜共享单车桌垫温度

让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32图13
测量冰箱冷冻室温度

附件资料下载:
MLX90614.py MLX90614非接触式红外测温传感器 库文件
SSD1306.py  Gravity IIC OLED-2864 显示屏 库文件
piclib.py      项目使用的显示图片和16*24字体 库文件
InfraRedThermometer.py  项目代码源文件
uPyCraftMicroPython IDE  (点击下载
PCtoLCD2002液晶取模软件
3D print- left part.stl   3D打印文件 可直接使用 Overlord Pro 3D打印机 打印
3D print- right part.stl  3D打印文件

至此一个实用的非接触测温枪就制作完成了。大家可以根据自己的实际需求修改程序。例如使用FireBeetle ESP32主板的WiFi和BLE蓝牙将测温数据上传到物联网或者手机上。(我经常出门后想不起来有没有关闭燃气灶,我们可以通过一款物联网的测温枪远程查看是否有关闭燃气灶。)

InfraRedThermometer-download.zip

4.46 MB, 阅读权限: 10, 下载次数: 67

售价: 30 创造力  [记录]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(31)
JOVI
JOVI
学习学习
耘想
耘想
感觉挺不错的
Wsheng
Wsheng
确实,器件好贵
IVE-麦芒
IVE-麦芒
让我们造一把红外测温枪来感受疫情(doge)
ppkgary
ppkgary
我等一下下載試看看
DFS14NaD8GP
DFS14NaD8GP
请问这个激光是怎么测量距离的?
wondering景
wondering景
自带环境温度进行比较,好方便啊 不过不是很懂为什么要激光器
wondering景
wondering景
赠人玫瑰,手留余香,
wondering景
wondering景
知识在于传播,学习在于进步
JHX
JHX
恢复1121212121212
JHX
JHX
厉害哦121212121212121
小慈
小慈
厉害!
快向楼主学习!
auzn
auzn
激光是什么用
BoBo
BoBo
作者
回复auzn
定位测量距离的位置
李Stan
李Stan
谢谢您,大有启发
碧海
碧海
这个确实是很牛的东西,自给自足,赞
山高水流
山高水流
价格高点,但还是可以的,做来玩,学习学习
好莱物
好莱物
好好
lijianjun
lijianjun
好东西,牛叉
Steven1102
Steven1102
楼主,附件资料都在这个压缩包里吗?
aliteamer
aliteamer回复Steven1102
都在这个里面的
断腿的螃蟹
断腿的螃蟹
厉害
学习学习