0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 毕业设计 基于Arduino工业温度计
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:4分
🧿 选题指导, 项目分享:
1 简介
使用MAX6675热电偶传感器和Arduino开发板制作一个工业温度计,并在LCD显示屏上显示温度。使用MAX6675分线板模块和K型热电偶,我们可以使用任意微控制器实现轻松测量0°C至1024°C的温度范围。芯片通过SPI接口输出数据。本项目将通过SPI接口将MAX6675与Arduino Nano开发板连接。
本项目将使用MAX6675芯片以及K型热电偶一起设计。该芯片具有内部温度测量功能,只需连接热电偶并读取SPI引脚的输出即可。所以,让我们使用MAX6675热电偶、Arduino开发板和LCD显示屏制作一个工业温度计。
2 主要器件
- Arduino Nano开发板
- 1602 LCD显示屏
- MAX6675热电偶温度传感器
- 连接跳线
- 面包板
3 实现效果
4 硬件设计
MAX7765 K型热电偶温度传感器
这款MAX6675模块+K 型热电偶传感器使用 Maxim的K型热电偶转数字转换器MAX6675。它提供了一个与微控制器兼容的数字串行接口(SPI 兼容),用于对温度进行精确的温度补偿测量。
该芯片具有12位的分辨率,可将温度解析为0.25°C,读数高达+1024°C,并且在0°C至+700°C的温度范围内具有8LSB的热电偶精度。螺钉式端子允许连接到热电偶铲形连接器,与微控制器的连接采用5针标准2.54mm间距的插头。
规格参数
- 工作电压:DC 5V
- 工作电流:50mA
- 测量温度范围:0°C – 1024°C
- 测量精度:+/-1.5C
- 分辨率:0.25C
- 输出方式:SPI数字信号
热电偶设计原理(塞贝克效应)
热电偶测量两种不同金属的热端和冷端的电位差。金属的一端保持在高温下,另一端保持在冷冰上。如果这样做,则热电偶线两端的温差会导致产生与温差成比例的电压(塞贝克效应,Seebeck Effect)。
塞贝克效应产生的电压很小,通常每开尔文结温差只有几微伏(百万分之一伏)。如果温差足够大,一些塞贝克效应器件可以产生几毫伏(千分之一伏)。要了解可用于热电偶设计的不同类型的金属,您可以查看这篇文章:金属和合金。
冷端补偿和MAX6675芯片
产生的电压非常小,因此需要一个放大器才能将读数转换为可用的形式。因此使用了一种称为冷端补偿 (CJC) 的技术。
这就是MAX6675的用武之地,因为它具有内置放大器、冷端补偿器 (CJC) 和ADC等所有功能。事实上,该芯片使使用K型热电偶变得微不足道,您甚至不必检索模拟值,ADC会生成一个数字输出,该输出作为12位串口序列传输。
MAX6675热电偶传感器与Arduino的硬件连接
现在让我们将MAX6675热电偶温度传感器连接到Arduino Nano开发板,并在1602 LCD显示屏上显示温度读数。硬件连接原理图如下。
Arduino开发板和MAX6675之间的连接很简单,采用SPI接口。将MAX6675热电偶传感器的D0、CS和CLK引脚分别连接至Arduino开发板的12、10和13引脚。
同样,按照电路图连接1602 LCD显示屏。将 LCD的1、5、16引脚连接到GND,将2、15引脚连接到VCC 5V。在引脚3上使用10K电位器来调整LCD对比度。将引脚4、6、11、12、13、14分别连接到Arduino开发板的数字引脚7、6、5、4、3和2 。您还可以在面包板上组装这些组件。
5 软件说明
6 部分核心代码
/********************************************
主控芯片:STM32 Controller
模块型号:MAX6675
通讯方式:SPI串口通信
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
//MAX6675温度采样间隔最好不要小于0.2秒
#include "max6675.h"
#define SCK_H (HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET))
#define SCK_L (HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET))
#define NCE_H (HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET))
#define NCE_L (HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET))
#define SDA_R (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5))
void MAX6675_Init(void)//MAX6675初始化
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIO时钟
GPIO_Initure.Pin=GPIO_PIN_3|GPIO_PIN_4; //PB3/PB4
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_5; //PB5
GPIO_Initure.Mode=GPIO_MODE_INPUT; //输入
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
u16 MAX6675_SoftSpi_Read(void)//MAX6675软件SPI读取
{
u8 i;
u16 value;
NCE_L;
SCK_L;
delay_us(1);
for(i=0;i<16;i++)
{
SCK_H;
delay_us(1);
value<<=1;
if(SDA_R)value++;
SCK_L;
delay_us(1);
}
delay_us(1);
NCE_H;
return value;
}
u16 MAX6675_Read_Temp(void)//MAX6675读取转换温度
{
u16 value;
u8 flag;
value = MAX6675_SoftSpi_Read();
flag = (value&0x04);
value = value<<1; //读出来的数据的D3~D14是温度值
value = value>>4;
return value/4; //测得的温度单位是0.25
}