如何設(shè)計(jì)一個(gè)便攜式溫度計(jì)- NFC/ QT PY/ SHT40
無(wú)論你走到哪里,檢查周?chē)臏囟群蜐穸?,這是一個(gè)緊湊的無(wú)電池設(shè)計(jì)!
智能手機(jī)雖然功能齊全,功能強(qiáng)大,但由于其設(shè)計(jì)和主要用途,它并不是理想的溫度計(jì)。它們的內(nèi)部溫度傳感器是用來(lái)監(jiān)測(cè)設(shè)備性能的,而不是環(huán)境條件,它們會(huì)受到手機(jī)本身和周?chē)h(huán)境產(chǎn)生的熱量的影響,導(dǎo)致讀數(shù)不準(zhǔn)確。然而,了解環(huán)境溫度和濕度在許多情況下都是必不可少的,從確保生活空間的舒適性到優(yōu)化敏感材料的存儲(chǔ)條件。對(duì)于戶(hù)外愛(ài)好者來(lái)說(shuō),了解這些參數(shù)可以提高安全性和準(zhǔn)備程度,而房主和業(yè)余愛(ài)好者則可以通過(guò)監(jiān)測(cè)他們的環(huán)境來(lái)保持健康或特定項(xiàng)目的最佳條件。因此,由智能手機(jī)USB-C端口供電并使用NFC的便攜式溫度計(jì)成為獲取準(zhǔn)確、實(shí)時(shí)環(huán)境數(shù)據(jù)的寶貴工具。
觸摸和輕拍:測(cè)量和讀取
它是如何工作的?
為了給設(shè)備供電,它需要用USB-C電纜連接到智能手機(jī)上。綠色LED燈將會(huì)亮起。
然后,只需觸摸連接到QT PY電容觸摸的母針頭即可觸發(fā)測(cè)量。SHT40測(cè)量溫度和濕度,讀數(shù)存儲(chǔ)在NFC標(biāo)簽存儲(chǔ)器中。綠色LED將切換以指示新的讀數(shù)可用。
要獲取最新的測(cè)量值,請(qǐng)?jiān)谥悄苁謾C(jī)上啟用NFC功能并觸摸設(shè)備。
技術(shù)的使用
QT Py SAMD21的優(yōu)點(diǎn)之一是它有6個(gè)引腳,可以是電容觸摸引腳,而不需要單獨(dú)的驅(qū)動(dòng)引腳。它允許我在需要時(shí)添加一個(gè)按鈕功能來(lái)觸發(fā)測(cè)量,而無(wú)需添加其他組件。電容式觸摸引腳是一種通過(guò)測(cè)量電容的變化來(lái)檢測(cè)觸摸的傳感器。它的工作原理是產(chǎn)生一個(gè)小電場(chǎng),在不觸碰時(shí)具有基線電容。當(dāng)手指或?qū)щ娢矬w靠近或接觸引腳時(shí),由于增加了導(dǎo)電表面,電容增加。這種變化是由QT Py微控制器檢測(cè)到的,它將其處理為觸摸輸入。
NFC雙標(biāo)簽是一種具有兩個(gè)接口的設(shè)備:用于無(wú)線通信的NFC接口和用于連接主機(jī)系統(tǒng)的有線接口(如I2C或SPI)。它允許支持nfc的設(shè)備,如智能手機(jī),無(wú)線讀寫(xiě)存儲(chǔ)在標(biāo)簽中的數(shù)據(jù),而主機(jī)設(shè)備同時(shí)通過(guò)有線連接訪問(wèn)相同的內(nèi)存。在這種情況下,QT Py微控制器通過(guò)I2C將來(lái)自SHT40傳感器的數(shù)據(jù)寫(xiě)入標(biāo)簽,智能手機(jī)通過(guò)無(wú)線方式檢索數(shù)據(jù)。
結(jié)果與結(jié)論
這是一款售價(jià)低于25美元的好設(shè)備。我?guī)е?,在不同的地點(diǎn)拍照,這些地方我們通常無(wú)法獲得當(dāng)前的環(huán)境溫度和濕度:機(jī)場(chǎng)、超市、星巴克和購(gòu)物中心。
機(jī)場(chǎng)的便攜式溫度計(jì)
這種便攜式溫度計(jì)還可以幫助檢查辦公室或建筑物的溫度,以支持物業(yè)管理團(tuán)隊(duì)調(diào)節(jié)暖通空調(diào)系統(tǒng),而無(wú)需在每個(gè)房間安裝監(jiān)控設(shè)備。
定制零件和外殼
外殼
我3D打印了一個(gè)外殼,上面有一個(gè)用于電源插頭的孔,一個(gè)用于突出母頭的孔,以及一個(gè)靠近溫濕度傳感器的孔,以便更好地進(jìn)行環(huán)境耦合。白色可以讓led發(fā)光。
外殼內(nèi)部件
這是一個(gè)圖片的組件在外殼
圖表
組件裝配
組裝完成了!由于Adafruit板的STEMMA QT連接器,所有組件都在幾秒鐘內(nèi)連接。我還焊接了1個(gè)母引腳頭,以方便在外殼中到達(dá)電容觸摸引腳。
代碼
代碼初始化LED, SHT40和NFC標(biāo)簽。它檢查電容觸摸引腳,如果檢測(cè)到觸摸,它觸發(fā)SHT40測(cè)量并將數(shù)據(jù)存儲(chǔ)到NFC標(biāo)簽中。如果啟動(dòng)成功,綠色LED燈閃爍。如果有一個(gè)錯(cuò)誤,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