大数跨境
0
0

防防防屁股被烫伤神器,抵抗容易被灼伤的夏天!

防防防屁股被烫伤神器,抵抗容易被灼伤的夏天! DF创客社区
2017-08-03
5
导读:神器在手,愿高温下,再也没有男子骑共享单车屁股被烫伤、大爷中暑倒地烫伤脸这种悲剧发生!!
欢迎来到服“造”的世界


作者:bobo

资料来源:www.dfrobot.com.cn


让我们造一把红外测温枪来感受夏天


最近天气太热了,进入汽车车厢秒变烤鸭

去骑个共享单车

我的天,这不是骑车,简直是在烤肉

所以我琢磨是不是搞一个测温枪来检测下座椅的温度

这种小儿科的问题怎么能难倒我这个maker呢

手上正好有DFRobot出的FireBeetle ESP32主板

和MLX90614非接触式红外温度传感器

自己造一款测温枪出来



 

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


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


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


 



  教程完整视频  




选用的元件


部件清单:

  • FireBeetle ESP32 主板————————————1只 

  • MLX90614非接触式红外测温传感器—————— 1只

  • Gravity IIC OLED-2864 显示屏 ———————— 1只 

  • 3.7V 400mAh锂电池—————————————1只

  • 6mm直径红光激光发射器——————————1只

  • C&K滑动开关———————————————— 1只

  • 3D打印外壳上盖和下盖————————————1套


工具:

  • 安泰信AT936A无铅恒温焊台

  • Overlord Pro 3D打印机

  • 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、  如下图焊接好各个部件


 

▲接线图


2、  使用PCtoLCD2002液晶取模软件将需要用到的图片和16X24字体转换为16进制代码


 
 

▲按照上图模式来进行设置和取模


3、使用uPyCraft  MicroPython IDE 进行编程,烧写代码到FireBeetleESP32主板上


 

烧写好代码后测试程序是否可以工作

import MLX90614

from machine import Pin,I2C

import time

import ssd1306

from piclib import *

# This code will show you how to make a Infra Red Thermometer using the MLX90614 sensor.

 

 

i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)

ir=MLX90614.MLX90614(i2c)

lcd=ssd1306.SSD1306_I2C(128,64,i2c)

 

#Display a picture 72*64 

def DisplayPicture(x,y,picture):

  for line in range(0,64):

    for bytes in range(0,9):

      for bits in range(0,8):

        if picture[9*line+bytes]&0x80>>bits:

          lcd.pixel(x+bytes*8+bits,y+line,1)

        else:

          lcd.pixel(x+bytes*8+bits,y+line,0)

  return

 

#Display a character 16*24 

def DisplayCharacter16X24(x,y,character):

  for line in range(0,24):

    for bytes in range(0,2):

      for bits in range(0,8):

        if character[line*2+bytes]&0x80>>bits:

          lcd.pixel(x+bytes*8+bits,y+line,1)

        else:

          lcd.pixel(x+bytes*8+bits,y+line,0)

  return

 

#---------------------run here------------------------------------  

#display logo

DisplayPicture(28,0,picture) 

lcd.show()

time.sleep(1)

lcd.fill(0)

 

#display O:123.4C

#        A:123.4C 

DisplayCharacter16X24(0,0,charArray[10]) #O

DisplayCharacter16X24(16*1,0,charArray[12]) #:

DisplayCharacter16X24(16*7,0,charArray[13]) #C

 

DisplayCharacter16X24(0,24,charArray[11]) #A

DisplayCharacter16X24(16*1,24,charArray[12]) #:

DisplayCharacter16X24(16*7,24,charArray[13]) #C

lcd.show()

 

 

while True:

  time.sleep(0.2)

  Object = ir.getObjCelsius() #  *C

  Ambient = ir.getEnvCelsius() # *C

  #Object = ir.getObjFahrenheit() # *F

  #Ambient = ir.getEnvFahrenheit() # *F

  #print("Object  %s *C"% Object)

  #print("Ambient %s *C"% Ambient)

  #print()

  ObjectInt = int(Object*10)

  AmbientInt = int(Ambient*10)

  if ObjectInt < 0:

    ObjectInt = abs(ObjectInt)

    DisplayCharacter16X24(16*2,0,charArray[15])# -

    temp1 = (ObjectInt%1000)//100

    if(temp1 == 0):

      DisplayCharacter16X24(16*3,0,charArray[16]) # space

    else:

      DisplayCharacter16X24(16*3,0,charArray[temp1])

    DisplayCharacter16X24(16*4,0,charArray[(ObjectInt%100)//10])

    DisplayCharacter16X24(16*5,0,charArray[14]) # .

    DisplayCharacter16X24(16*6,0,charArray[ObjectInt%10]) 

    

  else:

    temp1 = ObjectInt//1000

    temp2 = (ObjectInt%1000)//100

    if temp1 == 0:

      DisplayCharacter16X24(16*2,0,charArray[16]) # space

    else:

      DisplayCharacter16X24(16*2,0,charArray[temp1])

    if temp1 == 0 and temp2 == 0:

      DisplayCharacter16X24(16*3,0,charArray[16]) # space

    else:

      DisplayCharacter16X24(16*3,0,charArray[temp2])

    DisplayCharacter16X24(16*4,0,charArray[(ObjectInt%100)//10])

    DisplayCharacter16X24(16*5,0,charArray[14]) # .

    DisplayCharacter16X24(16*6,0,charArray[ObjectInt%10]) 

  

  if AmbientInt < 0:

    ObjectInt = abs(AmbientInt)

    DisplayCharacter16X24(16*2,24,charArray[15])# -

    temp1 = (AmbientInt%1000)//100

    if temp1 == 0:

      DisplayCharacter16X24(16*3,24,charArray[16]) # space

    else:

      DisplayCharacter16X24(16*3,24,charArray[temp1])

    DisplayCharacter16X24(16*4,24,charArray[(AmbientInt%100)//10])

    DisplayCharacter16X24(16*5,24,charArray[14]) # .

    DisplayCharacter16X24(16*6,24,charArray[AmbientInt%10]) 

    

  else:

    temp1 = AmbientInt//1000

    temp2 = (AmbientInt%1000)//100

    if temp1 == 0:

      DisplayCharacter16X24(16*2,24,charArray[16]) # space

    else:

      DisplayCharacter16X24(16*2,24,charArray[temp1])

    if temp1 == 0 and temp2 == 0:

      DisplayCharacter16X24(16*3,24,charArray[16]) # space

    else:

      DisplayCharacter16X24(16*3,24,charArray[temp2])

    DisplayCharacter16X24(16*4,24,charArray[(AmbientInt%100)//10])

    DisplayCharacter16X24(16*5,24,charArray[14]) # .

    DisplayCharacter16X24(16*6,24,charArray[AmbientInt%10])  

  lcd.show()



4、  根据部件尺寸设计外壳


 
 

5、  使用3D打印切片软件Cura制作3D打印文件


 

6、  使用Overlord 3D打印机打印出外壳


 
 

7、使用热熔胶和胶水将部件安装到打印的外壳内


 
 

8、测试温度


测量手掌温度




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


 

测量冰箱冷冻室温度




附件资料列表:请至文末左下角点击“阅读原文”下载)

  • 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蓝牙将测温数据上传到物联网或者手机上。(我经常出门后想不起来有没有关闭燃气灶,我们可以通过一款物联网的测温枪远程查看是否有关闭燃气灶。)


  ESP32技术交流QQ群:  

 619558168 




*欢迎转发朋友圈。如需转载,请注明出处和原作者。


更多项目干货戳这里

气温指示项链 | 懂植物情感的机器喵

DIY简易打击垫"LaunchBox"

智能穿戴—能将日记可视化的连衣裙

萌妹纸的体感猫耳朵 | 3D打印银河护卫队萌宠Groot 

企鹅机器人   |  台湾创客的桌面神器 | 调酒机器人

雾霾自救  VR黑科技  |  OTTO  |  宠物机器人


点击“阅读原文”,更多精彩等着你

【声明】内容源于网络
0
0
DF创客社区
我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
内容 1282
粉丝 0
DF创客社区 我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
总阅读2.8k
粉丝0
内容1.3k