Za medicinsko ali klinično uporabo je merjenje človeške telesne temperature pomemben parameter za ugotavljanje zdravstvenega stanja vsakega posameznika.
Circuit Digest
2022-304-38
Obstaja veliko načinov za merjenje temperature, vendar ni vse dovolj natančno, da bi ustrezalo specifikacijam klinične termometrije. Temperaturni senzor MAX30205 je posebej zasnovan za to aplikacijo. Upoštevajte, da ta senzor ni brezkontaktni temperaturni senzor. Če iščete brezkontaktno IR merjenje temperature, si oglejte termometer MLX90614.
V tem projektu bomo povezali senzor človeške telesne temperature MAX30205, ki ga je mogoče enostavno namestiti na fitnes trak ali uporabiti v medicinske namene. Uporabili bomo Arduino Nano kot glavno mikrokontrolersko enoto in uporabljali tudi 7-segmentne displeje za prikaz zaznane temperature. Ko enkrat veste, kako uporabljati senzor, ga lahko uporabite v kateri koli aplikaciji, ki vam je všeč, lahko si ogledate tudi projekt pametne ure narejene z Arduino [1], ki se v kombinaciji z MAX30205 lahko uporablja za spremljanje temperature posameznikov.
Ta vsebina je samo za naročnike
Komponente, ki jih potrebujemo za izdelavo:
- Arduino NANO
- 7-segmentni displeji s skupno katodo – 3 kos
- 74HC595 – 3 kos
- 680R upor – 24 kos
- MAX30205 modul
- 5V napajanje
- Razvojna plošča
- Veliko priključnih žic
- Arduino IDE
- Kabel mikro-USB
Povezava MAX30205 z Arduinom
Celotna shema vezja za povezavo Arduino s senzorjem telesne temperature MAX30205 je prikazana na sliki 1. Vezje je zelo preprosto, a ker smo uporabili 7-segmentne displeje, je videti nekoliko zapleteno. 7-segmentni displeji z Arduinom so odličen način, kako prikazati vrednosti neke spremenljivke na veliko in svetlo z zelo nizkimi stroški. Seveda pa lahko te vrednosti prikažete tudi na OLED ali LCD, če želite.
Arduino Nano je povezan s tremi 74HC595. Trije 74HC595 so kaskadno vezani zato, da se prihranijo dodatni izhodni priključki na Arduino Nano za povezavo treh 7-segmentnih displejev. 74HC595 z Arduinom sem uporabil še v številnih drugih projektih [2], kot so Arduino Clock, LED Board Display, Arduino kača igra, itd.
Tiskano vezje modula MAX30205 zahteva dodatne »pull-up« upore, saj komunicira preko I2C protokola. Vendar pa nekaj vrst modulov ne potrebuje dodatnih »pull-up« uporov, saj so že vgrajeni na modulu. Zato se je treba prepričati, ali ima modul vgrajene »pull-up« upore ali pa jih je treba dodati posebej. Modul, ki je uporabljen v tem projektu, ima že vgrajene »pull-up« upore znotraj modula.
Povezava Arduino s senzorjem telesne temperature MAX30205
Senzor, ki se tukaj uporablja, je MAX30205 podjetja Maxim (zdaj Analog Devices). Temperaturni senzor MAX30205 meri temperaturo z natančnostjo 0,1°C (37°C do 39°C). Senzor se poveže z mikrokontrolerjem preko I2C vodila.
Plošča modula lahko deluje z napajalno napetostjo 5 ali 3,3 V. Vendar je plošča konfigurirana za uporabo z 5V delovno napetostjo. Vključuje tudi prilagodilnik logičnih nivojev, saj senzor sam podpira največ 3,3 V za napajanje ali podatkovno komunikacijo.
Na izhodu se nahajajo trije 74HC595, 8-bitni premični registri, ki se uporabljajo za povezovanje treh 7-segmentnih displejev z Arduino NANO. Diagram priključkov lahko vidite na sliki 2.
QA do QH so priključki za izhod podatkov, ki so povezani s 7-segmentnimi displeji. Ker so trije 74HC595 kaskadno povezani skupaj, bo podatkovni vhodni pin (PIN14) prvega premičnega registra povezan z Arduino NANO, izhodni priključek serijskih podatkov pa bo zagotovil podatke v naslednji premični register. Ta serijska podatkovna povezava se bo nadaljevala do tretjega 74HC595.
Programiranje MAX30205 v Arduino okolju
Celoten program za to vadnico je na voljo na povezavi na dnu tega članka. Razlaga kode je naslednja. Najprej vključimo standardno naslovno datoteko Arduino I2C knjižnice.
#include <Wire.h>
Zgornja vrstica bo vključevala knjižnico, ki jo prispeva Arduino iz protocentrala. Ta knjižnica ima pomembne funkcije za komunikacijo s senzorjem MAX30205. Knjižnica je vzeta z GitHub povezave [3].
Naslednji dve vrstici sta pomembni za nastavitev parametrov. Spodnja vrstica bo zagotovila temperaturo v Fahrenheitih, če je nastavljena na »True«. Za prikaz rezultata v stopinjah Celzija je treba vrstico nastaviti na »False«.
const bool fahrenheittemp = true;
// I’m showing the temperature
in Fahrenheit, If you want to
show the temperature in Celsius
the make this variable false.
Spodnjo vrstico je treba konfigurirati, če se v strojni opremi uporabljajo 7-segmentni zasloni s skupno katodo. Naj bo nastavitev »False«, če se uporablja skupna anoda.
const bool commonCathode = true;
// I’m using common Cathode
7segment if you use common
Anode then change the value
into false.
const byte digit_pattern[17] =
{
// 74HC595 Outpin Connection with 7segment display.
// Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
// a b c d e f g 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 // .
};
Zgornji niz se uporablja za shranjevanje vzorca številk za 7-segmentne zaslone.
V funkciji nastavitve se po nastavitvi priključkov 74HC595 inicializira protokol I2C in odčitavanje temperaturnega senzorja.
void setup() {
// put your setup code here, to run once:
// set the serial port at 9600
Serial.begin(9600);
delay(1000);
// set the 74HC595 Control pin as output
pinMode(latchPin, OUTPUT); //ST_CP of 74HC595
pinMode(clkPin, OUTPUT); //SH_CP of 74HC595
pinMode(dtPin, OUTPUT); //DS of 74HC595
// initialize I2C Libs
Wire.begin();
// start MAX30205 temperature read in continuos mode, active mode
tempSensor.begin();
}
V glavni zanki temperaturo bere funkcija tempSensor.getTemperature() in jo shrani v float spremenljivko z imenom temp. Po tem, če je izbran Fahrenheit temperaturni način, se podatki pretvorijo iz stopinj Celzija v stopinje Fahrenheit. Nato se tri številke iz pretvorjenih zaznanih temperaturnih podatkov nadalje ločijo v tri posamezne številke oziroma digite. Za to se uporabljajo vrstice kode (// separate 3 digits…).
// separate 3 digits from the current temperature (like if 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
Sedaj ločene tri digite pošljemo na 7-segmentne displeje s pomočjo 74HC595 premičnih registrov. Ker se je LSB prvič prikazal v tretjem 7-segmentnem prikazovalniku prek tretjega 74HC595, se najprej prenese 3. številka. Da bi to naredili, se priključek Latch potegne nizko in podatki se posredujejo 74HC595 s funkcijo shiftOut();
Na enak način se pošljeta preostala dva digita na ustrezni 74HC595 in tako ostaneta dva 7-segmentna displeja. Po pošiljanju vseh podatkov se Latch priključek sprosti in potegne visoko, da potrdi konec prenosa podatkov. Ustrezne kode si lahko ogledate v kodi (// display digits into 3,…).
// display digits into 3, 7segment display.
digitalWrite(latchPin, LOW);
if(commonCathode == true){
shiftOut(dtPin, clkPin, LSBFIRST, digit_
pattern[dispDigit3]);
shiftOut(dtPin, clkPin, LSBFIRST, digit_
pattern[dispDigit2]|digit_pattern[16]);
// 1. (Digit+DP)
shiftOut(dtPin, clkPin, LSBFIRST, digit_
pattern[dispDigit1]);
}else{
shiftOut(dtPin, clkPin, LSBFIRST, ~(digit_
pattern[dispDigit3]));
shiftOut(dtPin, clkPin, LSBFIRST, ~(digit_
pattern[dispDigit2]|digit_pattern[16]));
// 1. (Digit+DP)
shiftOut(dtPin, clkPin, LSBFIRST, ~(digit_
pattern[dispDigit1]));
}
digitalWrite(latchPin, HIGH);
Arduino merilnik telesne temperature – testiranje
Vezje je sestavljeno iz dveh sklopov razvojnih plošč, kot lahko vidite na sliki. Ko položimo prst na senzor, senzor zazna temperaturo in vrednost temperature se prikaže na 7 segmentnem displeju, na sliki je prikazana vrednost 98,5*F.
Celotno delovanje projekta si lahko ogledate v videoposnetku na povezavi [4]. Upam, da boste uživali pri gradnji projekta in ste se naučili kaj koristnega. Če imate kakršna koli vprašanja, jih pustite v razdelku za komentarje ali uporabite naše forume.
Povzeto po:
https://circuitdigest.com/microcontroller-projects/arduino-max30205-human-body-temperature-measurement
Viri:
https://bit.ly/3HbApNw
https://bit.ly/3qrKRKg
https://bit.ly/3qWvHww
https://bit.ly/3nciRJI
https://circuitdigest.com