Inhoudsopgave:

DIY-temperatuursensor met één diode - Ajarnpa
DIY-temperatuursensor met één diode - Ajarnpa

Video: DIY-temperatuursensor met één diode - Ajarnpa

Video: DIY-temperatuursensor met één diode - Ajarnpa
Video: Как сделать схему датчика температуры на диоде #1n4007 #bc547 #temperaturesensor #circuit 2024, Juli-
Anonim
DIY-temperatuursensor met één diode
DIY-temperatuursensor met één diode
DIY-temperatuursensor met één diode
DIY-temperatuursensor met één diode

Dus omdat een van de feiten over PN-juncties is dat hun voorwaartse spanningsval verandert volgens de passerende stroom en ook met de junctietemperatuur, gaan we dit gebruiken om een eenvoudige goedkope temperatuursensor te maken.

Deze opstelling wordt vaak gebruikt in veel geïntegreerde schakelingen om de interne temperatuur en veel temperatuursensoren te meten, zoals de beroemde LM35 die op deze eigenschap is gebaseerd.

Gewoon de voorwaartse spanningsval van een diode (die een enkele PN-junctie is) verandert naarmate de hoeveelheid stroom die er doorheen gaat verandert, ook als de temperatuur van de diode verandert, zal de spanningsval veranderen (naarmate de temperatuur stijgt, zal de voorwaartse daling neemt af met een waarde van (1,0 milliVolt tot 2,0 milliVolt voor siliciumdiodes en 2,5 milliVolt voor germaniumdiodes).

Dus door een constante stroom door de diode te laten lopen, zou de voorwaartse spanningsval nu alleen moeten variëren afhankelijk van de temperatuur van de diode. We hoeven nu alleen de voorwaartse spanning van de diode te meten, enkele eenvoudige vergelijkingen toe te passen en voilà, hier is je temperatuursensor !!!

Benodigdheden

1 - 1n4007 diode #12 - 1 Kohm weerstand #13 - Arduino board

Stap 1: Schakelschema

Schakelschema
Schakelschema

Zoals je in het schema kunt zien, is het heel eenvoudig. door de diode in serie te schakelen met een stroombegrenzende weerstand en een stabiele spanningsbron kunnen we een ruwe constante stroombron verkrijgen, zodat de gemeten spanning over de diode alleen zal variëren als gevolg van de temperatuurverandering. Zorg ervoor dat de weerstandswaarde niet te laag dat er veel stroom door de diode gaat en een merkbare zelfverhitting in de diode veroorzaakt, ook niet een erg hoge weerstand, dus de stroom die gaat is niet genoeg om een lineair verband tussen de voorwaartse spanning en de temperatuur te behouden.

een weerstand van 1 kilo Ohm met een voeding van 5V moet resulteren in een diodestroom van 4 milliAmpere, wat voor dit doel voldoende is. I(diode) = VCC / (Rseries + Rdiode)

Stap 2: Coderen

We moeten in gedachten houden dat er enkele waarden zijn die in de code moeten worden aangepast om betere resultaten te krijgen, zoals:

1 - VCC_Voltage: aangezien de waarde van analogRead() afhangt van de VCC van de ATmega-chip, moeten we deze toevoegen aan de vergelijking nadat we deze op het Arduino-bord hebben gemeten.

2 - V_OLD_0_C: de voorwaartse spanningsval van de gebruikte diode bij een stroom van 4 mA en een temperatuur van 0 Celsius

3 - Temperature_Coefficient: de temperatuurgradiënt van uw diode (beter uit de datasheet te halen) of u kunt deze meten met behulp van deze vergelijking: Vnew - Vold = K (Tnew - Told)

waar:

Vnew = nieuw gemeten valspanning na verwarming van de diode

Vold = gemeten druppelspanning bij een bepaalde kamertemperatuur

Tnieuw = de temperatuur waarbij de diode is opgewarmd tot

Told = de oude kamertemperatuur waarbij Vold werd gemeten

K = Temperature_Coefficient (een negatieve waarde variërend tussen -1,0 tot -2,5 milliVolt) Eindelijk kun je nu de code uploaden en je temperatuurresultaten krijgen.

#define Sens_Pin A0 //PA0 voor STM32F103C8 bord

dubbele V_OLD_0_C = 690,0; //690 mV Voorwaartse spanning bij 0 Celsius bij 4 mA teststroom

dubbel V_NEW = 0; // Nieuwe doorlaatspanning bij kamertemperatuur bij 4 mA teststroom dubbele temperatuur = 0,0; //Kamer berekende temperatuur dubbele Temperature_Coefficient = -1,6; //-1,6 mV verandering per graad Celsius (-2,5 voor germaniumdiodes), beter te halen uit de diodedatasheet dubbele VCC_Voltage = 5010.0; // Spanning aanwezig op de 5V-rail van de arduino in milliVolts (vereist voor betere nauwkeurigheid) (3300,0 voor stm32)

ongeldige setup() {

// plaats hier uw setup-code om een keer uit te voeren: pinMode(Sens_Pin, INPUT); Serieel.begin(9600); }

lege lus() {

// plaats hier uw hoofdcode om herhaaldelijk uit te voeren: V_NEW = analogRead (Sens_Pin) * VCC_Voltage/1024.0; // deel door 4,0 als u een 12-bits ADC-temperatuur gebruikt = ((V_NEW - V_OLD_0_C)/Temperature_Coefficient);

Serial.print("Temp = ");

Seriële.afdruk (Temperatuur); Serieel.println("C");

vertraging (500);

}

Stap 3: Betere waarden verkrijgen

Betere waarden verkrijgen
Betere waarden verkrijgen
Betere waarden verkrijgen
Betere waarden verkrijgen

Ik denk dat het raadzaam is om een vertrouwd temperatuurmeetapparaat naast je te hebben bij het uitvoeren van dit project.

je kunt zien dat er een merkbare fout in de metingen zit die kan oplopen tot 3 of 4 graden Celsius, dus waar komt deze fout vandaan?

1 - het kan zijn dat u de variabelen die in de vorige stap zijn genoemd, moet aanpassen

2 - de ADC-resolutie van de Arduino is lager dan wat we nodig hebben om het kleine spanningsverschil te detecteren

3 - de spanningsreferentie van de arduino (5V) is te hoog voor deze kleine spanningsverandering over de diode

Dus als u deze opstelling als temperatuursensor gaat gebruiken, moet u zich ervan bewust zijn dat, hoewel het goedkoop en handig is, het niet nauwkeurig is, maar het kan u een heel goed idee geven van de temperatuur van uw systeem, of het is op een PCB of gemonteerd op draaiende motor enz …

Deze instructable is bedoeld om zo min mogelijk componenten te gebruiken, maar als u de meest nauwkeurige resultaten van dit idee wilt krijgen, kunt u enkele wijzigingen aanbrengen:

1 - voeg enkele versterkingen en filtertrappen toe met behulp van op-amps zoals in deze link2 - gebruik een lagere interne analoge referentiecontroller zoals de STM32F103C8-kaarten met 3,3 volt analoge referentiespanning (zie punt 4)3 - gebruik de interne 1,1 V analoge referentie in de arduino, maar houd er rekening mee dat je niet meer dan 1,1 volt kunt aansluiten op een van de analoge pinnen van arduino.

je kunt deze regel toevoegen in de setup-functie:

analogeReferentie (INTERN);

4 - Gebruik een microcontroller met ADC met een hogere resolutie zoals STM32F103C8 met een 12-bits ADC-resolutie. Kortom, deze op arduino gebaseerde opstelling kan een mooi overzicht geven van de temperatuur van uw systeem, maar niet zo nauwkeurige resultaten (ongeveer 4,88 mV/aflezing)

de STM32F103C8-setup zou je een behoorlijk nauwkeurig resultaat geven, omdat het een hogere 12-bits ADC en een lagere analoge referentiewaarde van 3,3 V heeft (ongeveer 0,8 mV / uitlezing)

Nou, dat is het dan !!:NS

Aanbevolen: