新闻中心

技术丨天选打工人避“阳”神器,教你DIY一个测温枪

时间:2022-12-19 08:33:20 类型:技术知识

随着我国防疫政策的放宽,各地抗疫也掀起了一波新浪潮。


例如在神学方面,诸多平时不打赏,直播就白嫖的网友纷纷转发起郭襄、杨迪(阳敌)等名人的人名,祈祷自己一辈子没“阳过”。

天选打工人避“阳”神器,教你DIY一个测温枪


以及但凡大灾大难,必然顶风作案的朋友圈,除却众口铄金的某某清瘟胶囊不谈,各类防疫物资也成了各个朋友圈疯转抢购的热销品。核酸检测长队难排,抗原试剂一剂难求,民声鼎沸,看得我们这些孤寡打工人瑟瑟发抖。


那么作为天选打工人,成功避过三年危险期,怎么封都封不住打工路的我们,如何在这最后时期维持自己仅存不多的尊严(工资)呢。


今天云恒制造就带大家一起动手DIY一款红外测温扫描仪,没事就biu biu测一测咱未老先衰的大脸,提前知晓并抵御新冠的危险!


【一、准备材料】

红外测温扫描仪准备材料


  • FireBeetle ESP32主板——1只

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

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

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

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

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

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



【二、制作步骤】


▼1.如上图所示焊接好各个部件。

红外测温扫描仪制作步骤


▼2.使用PCtoLCD2002液晶取模软件将需要用到的图片和16X24字体转换为16进制代码,按照上图模式来进行设置和取模。

转换为16进制代码

转换为16进制代码


▼3.使用uPyCraft  MicroPython IDE 进行编程,烧写代码到FireBeetleESP32主板上,并测试程序是否可以工作。

烧写代码到FireBeetleESP32主板上

代码内容:


  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.   else:

  68.   temp1 = ObjectInt//1000

  69.   temp2 = (ObjectInt%1000)//100

  70.   if temp1 == 0:

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

  72.   else:

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

  74.   if temp1 == 0 and temp2 == 0:

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

  76.   else:

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

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

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

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

  81.   if AmbientInt < 0:

  82.   ObjectInt = abs(AmbientInt)

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

  84.   temp1 = (AmbientInt%1000)//100

  85.   if temp1 == 0:

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

  87.   else:

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

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

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

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

  92.   else:

  93.   temp1 = AmbientInt//1000

  94.   temp2 = (AmbientInt%1000)//100

  95.   if temp1 == 0:

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

  97.   else:

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

  99.   if temp1 == 0 and temp2 == 0:

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

  101.   else:

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

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

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

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

  106.   lcd.show()



▼4.根据部件尺寸设计外壳。

红外扫描仪设计外壳


▼5.使用使用价值6999元的Overlord 3D打印机把测温枪的外壳打印出来。

3D打印机把测温枪的外壳打印出来


▼6.使用热熔胶和胶水将部件安装到打印的外壳内。

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

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

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


大功告成!

可以去人多的场合嘚瑟了!


云恒制造



云恒地址:南京江宁区诚信大道509号
©2024 云恒制造(SMT贴片加工、PCBA打样) 版权所有  苏ICP备18056041号-11