无论你走到哪里,检查周围的温度和湿度,这是一个紧凑的无电池设计!
智能手机虽然功能齐全,功能强大,但由于其设计和主要用途,它并不是理想的温度计。它们的内部温度传感器是用来监测设备性能的,而不是环境条件,它们会受到手机本身和周围环境产生的热量的影响,导致读数不准确。然而,了解环境温度和湿度在许多情况下都是必不可少的,从确保生活空间的舒适性到优化敏感材料的存储条件。对于户外爱好者来说,了解这些参数可以提高安全性和准备程度,而房主和业余爱好者则可以通过监测他们的环境来保持健康或特定项目的最佳条件。因此,由智能手机USB-C端口供电并使用NFC的便携式温度计成为获取准确、实时环境数据的宝贵工具。
触摸和轻拍:测量和读取
它是如何工作的?
为了给设备供电,它需要用USB-C电缆连接到智能手机上。绿色LED灯将会亮起。
然后,只需触摸连接到QT PY电容触摸的母针头即可触发测量。SHT40测量温度和湿度,读数存储在NFC标签存储器中。绿色LED将切换以指示新的读数可用。
要获取最新的测量值,请在智能手机上启用NFC功能并触摸设备。
技术的使用
QT Py SAMD21的优点之一是它有6个引脚,可以是电容触摸引脚,而不需要单独的驱动引脚。它允许我在需要时添加一个按钮功能来触发测量,而无需添加其他组件。电容式触摸引脚是一种通过测量电容的变化来检测触摸的传感器。它的工作原理是产生一个小电场,在不触碰时具有基线电容。当手指或导电物体靠近或接触引脚时,由于增加了导电表面,电容增加。这种变化是由QT Py微控制器检测到的,它将其处理为触摸输入。
NFC双标签是一种具有两个接口的设备:用于无线通信的NFC接口和用于连接主机系统的有线接口(如I²C或SPI)。它允许支持nfc的设备,如智能手机,无线读写存储在标签中的数据,而主机设备同时通过有线连接访问相同的内存。在这种情况下,QT Py微控制器通过I2C将来自SHT40传感器的数据写入标签,智能手机通过无线方式检索数据。
结果与结论
这是一款售价低于25美元的好设备。我带着它,在不同的地点拍照,这些地方我们通常无法获得当前的环境温度和湿度:机场、超市、星巴克和购物中心。
机场的便携式温度计
这种便携式温度计还可以帮助检查办公室或建筑物的温度,以支持物业管理团队调节暖通空调系统,而无需在每个房间安装监控设备。
定制零件和外壳
外壳
我3D打印了一个外壳,上面有一个用于电源插头的孔,一个用于突出母头的孔,以及一个靠近温湿度传感器的孔,以便更好地进行环境耦合。白色可以让led发光。
外壳内部件
这是一个图片的组件在外壳
图表
组件装配
组装完成了!由于Adafruit板的STEMMA QT连接器,所有组件都在几秒钟内连接。我还焊接了1个母引脚头,以方便在外壳中到达电容触摸引脚。
代码
代码初始化LED, SHT40和NFC标签。它检查电容触摸引脚,如果检测到触摸,它触发SHT40测量并将数据存储到NFC标签中。如果启动成功,绿色LED灯闪烁。如果有一个错误,LED将是红色。
#include
#include
#include
#include "Adafruit_FreeTouch.h"
#include "ST25DVSensor.h"
Adafruit_FreeTouch qt_1 = Adafruit_FreeTouch(A0, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE);
// create a pixel strand with 1 pixel on PIN_NEOPIXEL
Adafruit_NeoPixel pixels(1, PIN_NEOPIXEL);
// create a SHT40 sensor object
SensirionI2cSht4x sensor;
float aTemperatureC, aTemperatureF = 0.0;
float aHumidity = 0.0;
static int16_t error;
int base_touch;
//NFC dual tag
ST25DV st25dv(1, 2, &Wire);
void measure(){
error = sensor.measureHighPrecision(aTemperatureC, aHumidity);
if (error != 0) {
// set the first pixel #0 to red
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
}else{
//Temperature conversion to Fahrenheit
aTemperatureF = aTemperatureC*9/5+32;
pixels.setPixelColor(0, pixels.Color(0, 255, 0));
}
//turn on led pixel
pixels.show();
delay(1000);
// turn off the led pixel
pixels.clear();
pixels.show();
}
void write_NFC(){
char buffer[50];
sprintf(buffer, "The temperature and humidity are:\n %.2fC %.2fF %.2f%%RH", aTemperatureC,aTemperatureF,aHumidity);
if(st25dv.writeUnabridgedURI(buffer, "")) {
// Write NFC failed
while(1);
}
}
void setup() {
// initialize the pixel led
pixels.begin();
//NFC init
st25dv.begin();
//SHT40 init
sensor.begin(Wire, SHT40_I2C_ADDR_44);
sensor.softReset();
delay(10);
//Capacitive touch init
if (! qt_1.begin())
{
// Failed to begin qt on pin A0, turn on red led
pixels.setPixelColor(0, pixels.Color(0, 255, 0));
}
base_touch = qt_1.measure();
}
void loop() {
int result = 0;
result = qt_1.measure();
if(result > (base_touch+10))
{
measure();
write_NFC();
}
delay(500);
}
本文编译自hackster.io