• MLX90614红外测温传感器使用arduino采集温度数据OLED显示


    MLX90614 红外测温模块


    在这里插入图片描述

    点击图片购买

    MLX90614 简介

    MLX90614是一款由迈来芯公司提供的低成本,无接触温度计。输出数据和物体温度呈线性比例,具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101(温度是通过PTC或是PTAT元件测量)和信号处理专用集成芯片MLX90302,专门用于处理红外传感器输出信号。用以阻碍可见光和近红外光辐射的光学滤波器(可传播长波)集成在封装内提供对环境和日光的免疫。滤波器的波长通带为5.5到14μm。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理芯片 MLX90302,使得高精度和高分辨度的温度计得以实现。一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,对应的环境温度和物体温度被计算出。计算所得物体温度和环境温度存储在MLX90302的RAM单元,温度分辨率为0.01℃,并可通过两线 SMBus(系统管理总线)兼容协议接口(IIC与之兼容)(0.02℃分辨率)或是10位PWM(脉宽调制)输出模式输出。MLX90614出厂温度范围都进行过校准,传感器测量的温度为视场里所有物体温度的平均值。

    MLX90614 参数

    探头直径8.2mm

    数字接口类型:IIC(从模式)

    温度测量范围:-70℃~382.2℃

    温度测量误差:±0.5℃ (室温下)分辨率0.02℃

    工作电压:3.3V~5V

    使用环境温度-40~125℃

    项目介绍

    本项目将以Arduino作为主控,按键触发,搭配MLX90614红外测温传感器制作一个非接触式,测温距离在1CM左右的人体手腕测温仪,测量到的温度用OLED显示屏打印出来 。

    在这里插入图片描述

    点击图片购买


    在这里插入图片描述
    点击图片购买

    项目搭建

    接线

    ArduinoMLX90614OLED按键
    A4SDA
    A5SCL
    5VVINVCC
    GNDGNDGNDOUT
    D3IN
    D8RES
    D9DC
    D10CS
    D11D1
    D12D2

    在这里插入图片描述

    开发

    为了方便开发本项目会用到MLX90614库和U8g2库

    #include 
    #include 
    
    • 1
    • 2

    项目上电后初始化完成后,在串口和OLED屏幕上打印项目名称"Contactless Temperature Measurement",由于屏幕宽度有限,使用OLED显示器分行打印

      Serial.println("Contactless Temperature Measurement");  //串口打印项目名称
      u8g2.enableUTF8Print();                                 // enable UTF8 support for the Arduino print() function
      u8g2.setFont(u8g2_font_ncenB14_tr);                     //字体选择 
      u8g2.setFontDirection(0);                               //绘制/显示方向
      u8g2.clear();                                           //清空显示和缓冲
      u8g2.setCursor(7, 15);                                  //移动光标位置
      u8g2.print("Contactless");                              //OLED打印内容
      u8g2.setCursor(0, 35);
      u8g2.print("Temperature");
      u8g2.setCursor(0, 55);
      u8g2.print("Measurement");
      u8g2.sendBuffer();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    通过按下按键改变D3引脚电平状态触发测温

    int Start()
    {
      int B=1;
      B=digitalRead(Bottom);
      delay(30);
      return B;
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    获取温度—为了提高温度的可靠性 读取了5次温度存放在一个数组里,数组里的输出通过可靠性判断和处理后就可以打印输出了

    void gTemp()
    {
      for (int i = 0; i < 5; i++)
      {
        t[i] = mlx.readObjectTempC();
        Serial.println(t[i]);
        delay(300);
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    主程序

    void loop(void) {
    
      while(!Start())                                          //测温循环
      {
      u8g2.clear();
      Serial.println("start");                                 //串口打印开始信息
      delay(1000);
      gTemp();                                                 //测温 读取5次温度值 保存再t数组里面
      if(dTemp()>0)                                            // 判断数据有效性
      {
        u8g2.clear();                                          //清屏
        u8g2.setCursor(3, 20);
        u8g2.print("temperature");
        u8g2.setCursor(40, 50);
        u8g2.print(prantTemp());                                //打印温度值
        Serial.println(prantTemp()); -   
        u8g2.sendBuffer();
        }
        else
        {
          Serial.println("read fail");                          //串口打印测温错误信息//五次温度处理后判断为无效数据
          u8g2.clear();                                         //清屏
          u8g2.setCursor(23 ,17);                               //OLED打印位置
          u8g2.print("read fail");                              //OLED打印读取失败信息 OLED打印测温错误信息//五次温度处理后判断为无效数据
          u8g2.setCursor(19, 37);                               //OLED打印位置
          u8g2.print("please try");                             //OLED打印读取失败信息
          u8g2.setCursor(35, 55);                               //OLED打印位置
          u8g2.print("again");                                  //OLED打印读取失败信息
          u8g2.sendBuffer();
          }
      delay(5000);
      u8g2.clear();                                             //清屏
      break;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    项目验证展示

    1. 点击开始测温后被测温目标再进入测温区域,判断为测温失败

    测温失败演示

    1. 正确测温演示

    Arduino - MLX90614非接触式测温


    测得温度为36.25摄氏度

  • 相关阅读:
    【K8S】初探Kubernetes
    推荐 8 个支持 Vue3 的前端 UI 组件库,免费开源、漂亮美观,涵盖常用的业务组件
    【Java】微服务——Gateway网关
    React源码分析1-jsx转换及React.createElement
    什么是单臂路由技术?
    【python】multiprocessing process 多进程程序假死/暂停的解决办法
    Docker安装与简单操作
    MySQL ——单行处理函数实例练习
    【LCD应用编程】绘制点、线、矩形框
    【教3妹学算法-每日3题(2)】通过翻转子数组使两个数组相等
  • 原文地址:https://blog.csdn.net/qq_42250136/article/details/125996623