- Vereiste componenten
- MAX30205 met Arduino - schakelschema
- Koppeling Arduino met MAX30205 lichaamstemperatuursensor
- MAX30205 programmeren met Arduino
- Arduino lichaamstemperatuurmeter - testen
Voor medische of klinische toepassingen is het meten van de lichaamstemperatuur een belangrijke parameter om de gezondheidstoestand van elk individu te bepalen. Er zijn echter veel manieren om temperatuur te meten, maar niet alles heeft de nauwkeurigheid om aan de klinische thermometriespecificaties te voldoen. De temperatuursensor MAX30205 is speciaal voor deze toepassing ontworpen. Houd er rekening mee dat deze sensor geen contactloze temperatuursensor is, als u op zoek bent naar een contactloze IR-temperatuurmeting, bekijk dan de MLX90614 Thermometer die we eerder hebben ontworpen.
In dit project zullen we een MAX30205 menselijke lichaamstemperatuursensor koppelen die gemakkelijk kan worden gekoppeld aan een fitnessband of kan worden gebruikt voor medische doeleinden. We zullen Arduino Nano gebruiken als de belangrijkste microcontrollereenheid en ook 7-segment-displays gebruiken om de waargenomen temperatuur in Fahrenheit weer te geven. Als u eenmaal weet hoe u de sensor moet gebruiken, kunt u deze elke gewenste toepassing gebruiken, u kunt ook dit Arduino Smartwatch-project bekijken dat in combinatie met MAX30205 kan worden gebruikt om de temperatuur van personen te bewaken.
Vereiste componenten
- Arduino NANO
- 7-Seg displays gemeenschappelijke kathode - 3st
- 74HC595 - 3 stuks
- 680R-weerstand - 24st
- MAX30205 modulekaart
- 5V voeding
- Breadboard
- Veel aansluitdraden
- Arduino IDE
- Een micro-USB-kabel
MAX30205 met Arduino - schakelschema
Het volledige schakelschema om Arduino te verbinden met lichaamstemperatuursensor MAX30205 wordt hieronder weergegeven. De schakeling is heel simpel, maar aangezien we 7-segment displays hebben gebruikt, ziet het er wat ingewikkeld uit. 7-segment displays met Arduino is een geweldige manier om uw waarde groot en helder weer te geven tegen zeer lage kosten. Maar je kunt deze waarden ook weergeven op een OLED of LCD als je dat wilt.
De Arduino Nano is verbonden met drie 74HC595. Drie 74HC595 zijn aan elkaar gekoppeld om extra uitgangspennen van de Arduino Nano op te slaan voor het aansluiten van drie 7-Seg-displays. We hebben 74HC595 eerder met Arduino gebruikt in veel andere projecten zoals de Arduino Clock, LED Board Display, Arduino snake game, etc. om er maar een paar te noemen.
Het MAX30205-modulebord vereist extra pull-up-weerstanden omdat het communiceert met het I2C-protocol. Er zijn echter weinig moduleborden die geen extra pull-up nodig hebben, omdat de pull-up-weerstanden al in de module aanwezig zijn. Daarom moet men bevestigen of het modulebord interne pull-up weerstanden heeft of dat het extra extern pull-up vereist. Het bord dat in dit project wordt gebruikt, heeft al de ingebouwde pull-up weerstanden in het modulebord.
Koppeling Arduino met MAX30205 lichaamstemperatuursensor
De sensor die hier wordt gebruikt is de MAX30205 van Maxim Integrated. MAX30205 temperatuursensor meet nauwkeurig de temperatuur met 0,1 ° C nauwkeurigheid (37 ° C tot 39 ° C). De sensor werkt met het I2C-protocol.
Het modulebord kan werken met 5 of 3.3V. Het bord is echter geconfigureerd om te worden gebruikt met een bedrijfsspanning van 5V. Het bevat ook een logische niveau-shifter, aangezien de sensor zelf maximaal 3,3 V ondersteunt als stroom- of datacommunicatiedoeleinden.
Aan de uitgang worden drie 74HC595, 8-bit schuifregisters gebruikt om drie 7-segment displays te koppelen aan de Arduino NANO. Het pin-diagram kan worden weergegeven in de onderstaande afbeelding-
De pinbeschrijving van de 74HC595 is te zien in de onderstaande tabel-
De QA tot QH zijn de data output pinnen die zijn verbonden met de 7-Seg displays. Aangezien drie 74HC595 aan elkaar zijn gekoppeld, wordt de gegevensinvoerpen (PIN14) van het eerste schuifregister verbonden met de Arduino NANO en zal de seriële gegevensuitvoerpen de gegevens aan het volgende schuifregister leveren. Deze seriële dataverbinding wordt voortgezet tot de derde 74HC595.
MAX30205 programmeren met Arduino
Het complete programma voor deze tutorial vind je onderaan deze pagina. De uitleg van deze code is als volgt. Ten eerste nemen we het standaard Arduino I2C-bibliotheekkopbestand op.
# omvatten
De bovenstaande regel bevat de door Arduino bijgedragen bibliotheek van protocentral. Deze bibliotheek heeft belangrijke functies om te communiceren met de MAX30205-sensor. De bibliotheek is afkomstig van de onderstaande GitHub-link-
https://github.com/protocentral/ProtoCentral_MAX30205
Na het importeren van de bibliotheek definiëren we MAX30205-objectgegevens zoals hieronder weergegeven:
#inclusief "Protocentral_MAX30205.h" MAX30205 tempSensor;
De volgende twee regels zijn belangrijk om de parameters in te stellen. De onderstaande regel geeft de temperatuur in Fahrenheit weer als deze waar is ingesteld. Om het resultaat in graden Celsius weer te geven, moet de regel op false staan.
const bool fahrenheittemp = true; // Ik laat de temperatuur in Fahrenheit zien. Als je de temperatuur in Celsius wilt weergeven, maak deze variabele dan onwaar.
De onderstaande regel moet worden geconfigureerd als 7-segment-displays van het gewone kathodetype worden gebruikt in de hardware. Maak het onwaar als een gemeenschappelijke anode wordt gebruikt.
const bool commonCathode = true; // Ik gebruik common Cathode 7segment als je gewone anode gebruikt en verander de waarde in false. const byte digit_pattern = {// 74HC595 Outpin-verbinding met 7-segment display. // 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 //. };
De bovenstaande array wordt gebruikt om het cijferpatroon voor de 7-segment displays op te slaan.
In de setup-functie, na het instellen van de pin-modi van 74HC595-pinnen, wordt het I2C-protocol en de temperatuursensor-uitlezing geïnitialiseerd.
void setup () {// plaats je setup-code hier, om een keer uit te voeren: // stel de seriële poort in op 9600 Serial.begin (9600); vertraging (1000); // stel de 74HC595-besturingspin in als output pinMode (latchPin, OUTPUT); // ST_CP van 74HC595 pinMode (clkPin, OUTPUT); // SH_CP van 74HC595 pinMode (dtPin, OUTPUT); // DS of 74HC595 // initialiseer I2C Libs Wire.begin (); // start MAX30205 temperatuur gelezen in continuos-modus, actieve modus tempSensor.begin (); }
In de lus wordt de temperatuur gelezen door de functie tempSensor.getTemperature () en opgeslagen in een float-variabele genaamd temp . Daarna, als de temperatuurmodus Fahrenheit is geselecteerd, worden de gegevens geconverteerd van Celsius naar Fahrenheit. Vervolgens worden drie cijfers van de geconverteerde gemeten temperatuurgegevens verder onderverdeeld in drie afzonderlijke cijfers. Om dit te doen, worden onderstaande regels met codes gebruikt:
// saperate 3 cijfers van de huidige temperatuur (zoals 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); // cijfer3 2
Nu worden de gescheiden drie cijfers naar de 7-segmentdisplays gestuurd met behulp van de 74HC595 schuifregisters. Aangezien de LSB via de derde 74HC595 voor het eerst in het derde 7-segment-display werd getoond, wordt eerst het derde cijfer verzonden. Om dit te doen, wordt de vergrendelde pin naar beneden getrokken en worden de gegevens door de functie shiftOut () naar de 74HC595 gestuurd;
Op dezelfde manier worden de resterende tweede en eerste cijfers ook naar de respectievelijke 74HC595 gestuurd, waardoor er twee 7-segment displays overblijven. Nadat alle gegevens zijn verzonden, wordt de grendelpen losgelaten en omhoog getrokken om het einde van de gegevensoverdracht te bevestigen. De respectievelijke codes zijn hieronder te zien -
// weergave cijfers in 3-, 7-segment display. 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 lichaamstemperatuurmeter - testen
Het circuit is opgebouwd uit twee sets breadboards, zoals je hieronder kunt zien. Wanneer we de vinger op de sensor plaatsen, wordt de temperatuur waargenomen en wordt de output weergegeven in een 7-segmentendisplay, hier is de waarde 92,1 * F.
De volledige werking van het project is te vinden in de onderstaande video. Ik hoop dat je het leuk vond om het project te bouwen en iets nuttigs hebt geleerd. Als je vragen hebt, laat ze dan achter in de commentaarsectie hieronder of gebruik onze forums.