对于医学或临床应用,测量人体温度是确定任何人的健康状况的重要参数。但是,有很多方法可以感测温度,但并非所有方法都具有满足临床测温规范的准确性。MAX30205温度传感器是专门为该应用而设计的。请注意,该传感器不是非接触式温度传感器,如果您正在寻找非接触式红外温度测量,请查看我们之前设计的MLX90614温度计。
在该项目中,我们将连接一个MAX30205人体温度传感器,该传感器可轻松连接健身带或用于医疗目的。我们将使用Arduino Nano作为主要的微控制器单元,还将使用7段显示器来显示华氏温度。一旦您知道如何使用传感器,就可以在任何喜欢的应用程序中使用它,您还可以查看Arduino Smartwatch项目,该项目与MAX30205结合在一起可用于监视个人的温度。
所需组件
- Arduino的纳米
- 7段显示器共阴极-3个
- 74HC595-3个
- 680R电阻器-24个
- MAX30205模块板
- 5V电源
- 面包板
- 很多连接线
- Arduino IDE
- 微型USB电缆
带有Arduino的MAX30205 –电路图
连接Arduino与体温传感器MAX30205的完整电路图如下所示。电路非常简单,但是由于我们使用了7段显示器,因此看起来有点复杂。Arduino的7段显示器是一种以非常低的成本大而明亮地显示您的价值的好方法。但是,您也可以根据需要在OLED或LCD上显示这些值。
Arduino Nano连接了三个74HC595。三个74HC595级联在一起,以节省来自Arduino Nano的额外输出引脚,用于连接三个7段显示器。我们以前在许多其他项目(例如Arduino Clock,LED Board Display,Arduino蛇游戏等)中将74HC595与Arduino一起使用。
MAX30205模块板与I2C协议通信,因此需要额外的上拉电阻。但是,很少有模块板不需要额外的上拉,因为模块内部已经提供了上拉电阻。因此,需要确认模块板上是否具有内部上拉电阻,或者是否需要额外的外部上拉电阻。该项目中使用的板上已经在模块板上内置了上拉电阻。
Arduino与MAX30205体温传感器接口
此处使用的传感器是maxim Integrated的MAX30205。MAX30205温度传感器以0.1°C的精度(37°C至39°C)准确测量温度。该传感器使用I2C协议。
该模块板可以在5V或3.3V电压下工作。但是,该板配置为在5V工作电压下使用。它还具有逻辑电平转换器,因为传感器本身支持最大3.3V的电压(与电源或数据通信相关)。
在输出上,三个74HC595、8位移位寄存器用于将三个7段显示器与Arduino NANO接口。引脚图如下图所示:
下表中列出了74HC595的引脚说明-
QA至QH是与7段显示器连接的数据输出引脚。由于三个74HC595级联在一起,因此第一个移位寄存器的数据输入引脚(PIN14)将与Arduino NANO连接,而串行数据输出引脚将向下一个移位寄存器提供数据。此串行数据连接将一直持续到第三个74HC595。
用Arduino编程MAX30205
本教程的完整程序可以在本页底部找到。该代码的说明如下。首先,我们包含标准的Arduino I2C库头文件。
#包括
上一行将包含来自protocentral的Arduino贡献的库。该库具有与MAX30205传感器通信的重要功能。该库来自以下GitHub链接-
https://github.com/protocentral/ProtoCentral_MAX30205
导入库后,我们定义MAX30205对象数据,如下所示-
#include“ Protocentral_MAX30205.h” MAX30205 tempSensor;
接下来的两行对于设置参数很重要。如果设置为真,则下一行将以华氏温度提供温度。为了以摄氏度显示结果,需要将该行设置为false。
const bool fahrenheittemp = true; //我以华氏温度显示温度,如果要以摄氏温度显示,请将此变量设置为false。
如果硬件中使用了共阴极7段显示器,则需要配置以下行。如果使用共阳极,则使其为假。
const bool commonCathode = true; //如果您使用公共阳极,则使用公共阴极7段,然后将该值更改为false。const byte digit_pattern = {// 74HC595带7段显示器的Outpin连接。// Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 // abcdefg DP 0b11111100,// 0 0b01100000,// 1 0b11011010,// 2 0b11110010,// 3 0b01100110,// 4 0b10110110,// 5 0b10111110,// 6 0b11100000 ,// 7 0b11111110,// 8 0b11110110,// 9 0b11101110,// A 0b00111110,// b 0b00011010,// C 0b01111010,// d 0b10011110,// E 0b10001110,// F 0b00000001 //。};
上面的数组用于存储7段显示器的数字模式。
在设置功能中,设置74HC595引脚的引脚模式后,将初始化I2C协议和温度传感器读数。
void setup(){//将您的安装代码放在此处,以运行一次://将串行端口设置为9600 Serial.begin(9600); 延迟(1000); //将74HC595控制引脚设置为输出pinMode(latchPin,OUTPUT); // 74HC595的ST_CP pinMode(clkPin,OUTPUT); // 74HC595的SH_CP pinMode(dtPin,OUTPUT); // 74HC595的DS //初始化I2C库Wire.begin(); //以连续模式,活动模式tempSensor.begin();启动MAX30205温度读取 }
在循环中,温度由函数 tempSensor.getTemperature() 读取,并存储在名为 temp 的浮点变量中。之后,如果选择了华氏温度模式,则将数据从摄氏温度转换为华氏温度。然后,将来自转换后的感测温度数据的三位数字进一步分成三位单独的数字。为此,使用下面的代码行-
//从当前温度取3位数字(例如temp = 31.23c,) int dispDigit1 =(int)temp / 10; // digit1 3 int dispDigit2 =(int)temp%10; // digit2 1 int dispDigit3 =(temp * 10)-((int)temp * 10); // digit3 2
现在,使用74HC595移位寄存器将分隔的三位数字发送到7段显示器。由于LSB首先通过第三74HC595显示在第三7段显示器中,因此首先发送了第三位数字。为此,将锁存引脚拉低,并通过 shiftOut() 函数将数据提交到74HC595 。
同样,剩余的第二位和第一位数字也被发送到相应的74HC595,从而剩下两个7段显示器。发送完所有数据后,释放锁存引脚并将其拉高以确认数据传输结束。各个代码可以在下面看到-
//将数字显示为3、7段显示。digitalWrite(latchPin,LOW); if(commonCathode == true){shiftOut(dtPin,clkPin,LSBFIRST,digit_pattern); shiftOut(dtPin,clkPin,LSBFIRST,digit_pattern-digit_pattern); // 1.(Digit + DP)shiftOut(dtPin,clkPin,LSBFIRST,digit_pattern); } else {shiftOut(dtPin,clkPin,LSBFIRST,〜(digit_pattern)); shiftOut(dtPin,clkPin,LSBFIRST,〜(digit_pattern-digit_pattern)); // 1.(Digit + DP)shiftOut(dtPin,clkPin,LSBFIRST,〜(digit_pattern)); } digitalWrite(latchPin,HIGH);
Arduino体温计–测试
电路由两组面包板构成,如下所示。当我们将手指放在传感器上时,将感测温度,并且输出将显示在7段显示器中,此处的值为92.1 * F。
您可以在下面的视频中找到该项目的完整工作。希望您喜欢构建项目并学到一些有用的东西。如果您有任何疑问,请将其留在下面的评论部分或使用我们的论坛。