• 【毕业设计】 基于STM32的人体红外测温枪温度采集系统



    1 简介

    Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目

    基于STM32的人体红外测温枪温度采集系统

    大家可用于 课程设计 或 毕业设计

    2 主要器件

    • STM32

    • GY-906 温度传感器

    • OLED 显示器

    • 红外热释电传感器

    • TP4056 充电器模块

    • 18650 电池

    • 18650 电池座

    • 5 V DC-DC 升压转换器

    • 翘板开关 -15 × 21 毫米

    • 5 毫米绿色 LED

    • 5 毫米红色 LED

    工具清单:

    • 烙铁

    • 线切割机

    • 剥线钳

    3 实现效果

    在这里插入图片描述

    4 设计原理

    在这里插入图片描述
    工作原理很简单,红外测温传感器MLX90614在额头与传感器之间的距离(由红外传感器测量)匹配设定值时读取人体温度。传感器读数发送到 Arduino 进行处理,处理后的值显示在 0.96" OLED 显示屏上。

    除了 OLED 显示屏外,还使用了两个 LED 和一个蜂鸣器来指示输出。

    1. 当体温正常时,绿色LED(LED1)亮,蜂鸣器鸣叫。

    2. 当体温高于 104 华氏度时,红色 LED ( LED2 ) 会亮起,蜂鸣器会发出较长时间的哔哔声。

    MLX90614 红外温度传感器

    MLX90614 是一款用于非接触式温度测量的红外测温仪,能够测量 -70 至 380°C 之间的温度。该传感器采用红外敏感热电堆探测器芯片和信号调节ASIC集成在一个芯片中。它基于 Stefan-Boltzmann 定律工作,该定律指出所有物体都会发射 IR 能量,并且该能量的强度将与该物体的温度成正比。传感器中的传感单元测量目标物体发射了多少红外能量,计算单元使用 17 位内置 ADC 将其转换为温度值,并通过 I2C 通信协议输出数据。

    传感器测量物体温度和环境温度以校准物体温度值。MLX 90614 传感器可以读取 -40 到 125 ˚C(-40 到 257 °F)范围内的环境温度和 -70 到 380 ˚C(-94 到 716 °F)范围内的物体温度。

    红外测温仪与 Arduino 的连接非常简单,因为它像许多其他组件一样使用 I2C 通信接口。
    MLX90614 温度计有 4 个引脚:VIN、GND、SCL 和 SDA。

    连接应如下所示:

    stm32–> MLX 90614

    5V —> VIN
    地 --> 地
    gpio2 ----> SCL
    gpio3 ----> SDA

    其他器件就不展示了

    最后接线如下:
    在这里插入图片描述

    5 部分实现代码

    读取温度代码

    u16 SMBus_ReadMemory(u8 slaveAddress, u8 command)
    {
        u16 data;
        u8 Pec;	
        u8 DataL=0;
        u8 DataH=0;	
        u8 arr[6];
        u8 PecReg;
        u8 ErrorCounter;
        ErrorCounter=0x00;// Initialising of ErrorCounter
    	slaveAddress <<= 1;	//2-7位表示从机地址 从机地址左移一位,把读写位空出来	
        do
        {
    repeat:
            SMBus_StopBit();
            --ErrorCounter;	
            if(!ErrorCounter) //ErrorCounter=0?
            {
                break;	//如果为0就跳出do-while{}循环
            }
            SMBus_StartBit();
            if(SMBus_SendByte(slaveAddress))//发送从机地址最低位Wr=0表示接下来写命令
            {
                goto	repeat; 
            }
            if(SMBus_SendByte(command))//发送命令
            {
                goto	repeat;
            }
            SMBus_StartBit();
            if(SMBus_SendByte(slaveAddress+1))	//发送从机地址+1最低位Rd=1表示接下来读数据
            {
                goto	repeat; 
            }
            DataL = SMBus_ReceiveByte(ACK);	//读低位数据保存到DataL 
            DataH = SMBus_ReceiveByte(ACK); //读高位数据保存到DataH
            Pec = SMBus_ReceiveByte(NACK);	//读校验数据保存到Pec  
            SMBus_StopBit();
            arr[5] = slaveAddress;	
            arr[4] = command;
            arr[3] = slaveAddress+1;
            arr[2] = DataL;	
            arr[1] = DataH;	
            arr[0] = 0;	
            PecReg=PEC_Calculation(arr);//Calculate CRC 数据校验
        }
        while(PecReg != Pec);
    	data = (DataH<<8) | DataL;
        return data;
    }
    
    • 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
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    6 最后

  • 相关阅读:
    25岁实现财富自由,戴志康告诉你什么样的技术人适合创业
    聊天机器人框架Rasa资源整理
    Windows环境安装dmPython(WHL方式)
    基于知识图谱的职位推荐系统的设计与实现
    JMeter笔记7 | JMeter脚本回放
    阿里云存储解决方案,助力轻舟智航“将无人驾驶带进现实”
    深入理解Linux2.6内核中sys_mmap系统调用
    前端将二维数组转换成树形格式数组
    丁腈橡胶油封有哪些优点?
    Vue项目 -- 解决Eslint导致的console报错问题
  • 原文地址:https://blog.csdn.net/m0_71572576/article/details/125406512