Inhoudsopgave:

ESP32 NTP temperatuursonde kookthermometer met Steinhart-Hart correctie en temperatuuralarm - Ajarnpa
ESP32 NTP temperatuursonde kookthermometer met Steinhart-Hart correctie en temperatuuralarm - Ajarnpa

Video: ESP32 NTP temperatuursonde kookthermometer met Steinhart-Hart correctie en temperatuuralarm - Ajarnpa

Video: ESP32 NTP temperatuursonde kookthermometer met Steinhart-Hart correctie en temperatuuralarm - Ajarnpa
Video: Arduino Tutorial 24 - Measuring Temperature using NTC & LCD | SunFounder's ESP32 IoT Learnig kit 2024, Juli-
Anonim
Image
Image
ESP32 NTP temperatuursonde kookthermometer met Steinhart-Hart correctie en temperatuuralarm
ESP32 NTP temperatuursonde kookthermometer met Steinhart-Hart correctie en temperatuuralarm

Nog steeds op weg om een "aankomend project" te voltooien, is "ESP32 NTP-temperatuursonde-kookthermometer met Steinhart-Hart-correctie en temperatuuralarm" een Instructable die laat zien hoe ik een NTP-temperatuursonde, piëzo-zoemer en software toevoeg aan mijn capacitieve aanraking Instructable " ESP32 Capacitieve aanraakinvoer Met behulp van "Metallic Hole Plugs" voor knoppen" om een eenvoudige maar nauwkeurige kookthermometer te creëren met een programmeerbaar temperatuuralarm.

Met de drie capacitieve aanraaktoetsen kan het temperatuuralarmniveau worden ingesteld. Als u op de middelste knop drukt, wordt het scherm "Set Alarm Temperature" weergegeven, zodat u met de linker- en rechterknop de alarmtemperatuur respectievelijk kunt verlagen of verhogen. Door op de linkerknop te drukken en deze weer los te laten, wordt de alarmtemperatuur met één graad verlaagd, terwijl het ingedrukt houden van de linkerknop de alarmtemperatuur continu verlaagt totdat deze wordt losgelaten. Evenzo zal het indrukken en loslaten van de rechterknop de alarmtemperatuur met één graad verhogen, terwijl het ingedrukt houden van de rechterknop de alarmtemperatuur continu verhoogt totdat deze wordt losgelaten. Wanneer u klaar bent met het aanpassen van de alarmtemperatuur, raakt u gewoon nogmaals de middelste knop aan om terug te keren naar de temperatuurweergave. Op elk moment dat de temperatuur gelijk is aan of hoger is dan de alarmtemperatuur, klinkt de piëzo-zoemer.

En zoals vermeld, wordt in het ontwerp een NTP-temperatuursonde gebruikt, samen met de Steinhart-Hart-vergelijkingen en -coëfficiënten die nodig zijn voor nauwkeurige temperatuurmetingen. Ik heb een overdreven uitgebreide beschrijving van de Steinhart-Hart-vergelijking, de Steinhart-Hart-coëfficiënten, spanningsdelers en algebra in stap 1 opgenomen (als bonus val ik elke keer dat ik het lees in slaap, dus misschien wil je sla stap 1 over en ga direct naar stap 2: de elektronica monteren, tenzij je natuurlijk een dutje nodig hebt).

Als je besluit deze kookthermometer te bouwen, heb ik voor maatwerk en 3D-printen de volgende bestanden bijgevoegd:

  • Arduino-bestand "AnalogInput.ino" met de software voor het ontwerp.
  • Autodesk Fusion 360 CAD-bestanden voor de hoes die laten zien hoe de hoes is ontworpen.
  • Cura 3.4.0 STL-bestanden "Case, Top.stl" en "Case, Bottom.stl" klaar voor 3D-printen.

Je hebt ook bekendheid met de Arduino-omgeving nodig, evenals soldeervaardigheden en -apparatuur, en daarnaast heb je mogelijk toegang nodig tot nauwkeurige digitale ohmmeters, thermometers en temperatuurbronnen voor kalibratie.

En zoals gewoonlijk ben ik waarschijnlijk een bestand of twee vergeten of wie weet wat nog meer, dus als je vragen hebt, aarzel dan niet om ze te stellen, want ik maak veel fouten.

De elektronica is ontworpen met potlood, papier en een Radio Shack EC-2006a (Cat. No. 65-962a) rekenmachine op zonne-energie.

De software is ontworpen met Arduino 1.8.5.

De behuizing is ontworpen met Autodesk Fusion 360, gesneden met Cura 3.4.0 en geprint in PLA op een Ultimaker 2+ Extended en een Ultimaker 3 Extended.

En een laatste opmerking, ik ontvang geen enkele vergoeding, inclusief maar niet beperkt tot gratis monsters, voor een van de componenten die in dit ontwerp worden gebruikt

Stap 1: wiskunde, wiskunde en meer wiskunde: Steinhart-Hart, coëfficiënten en weerstandsverdelers

Wiskunde, wiskunde en meer Wiskunde: Steinhart-Hart, coëfficiënten en weerstandsverdelers
Wiskunde, wiskunde en meer Wiskunde: Steinhart-Hart, coëfficiënten en weerstandsverdelers

Mijn eerdere ontwerpen met een NTC-temperatuursonde gebruikten een tabelzoektechniek om de inkomende spanning van een weerstandsdeler om te zetten in temperatuur. Aangezien de ESP32 in staat is tot twaalf bits analoge invoer en aangezien ik aan het ontwerpen was voor een grotere nauwkeurigheid, besloot ik de "Steinhart-Hart"-vergelijking in de code voor de conversie van spanning naar temperatuur te implementeren.

Voor het eerst gepubliceerd in 1968 door John S. Steinhart en Stanley R. Hart, definieert de Steinhart-Hart-vergelijking de relatie tussen weerstand en temperatuur van een NTC-temperatuursonde als volgt:

1 / T = A + (B * (log(Thermistor))) + (C * log(Thermistor) * log(Thermistor) * log(Thermistor))

waar:

  • T is graden Kelvin.
  • A, B, C zijn de Steinhart-Hart-coëfficiënten (daarover straks meer).
  • En Thermistor is de thermistorweerstandswaarde van de temperatuursonde bij de huidige temperatuur.

Dus waarom is deze schijnbaar gecompliceerde Steinhart-Hart-vergelijking nodig voor een eenvoudige, op NTC-temperatuursonde gebaseerde digitale thermometer? Een "ideale" NTC-temperatuursonde zou een lineaire weerstandsweergave van de werkelijke temperatuur bieden, dus een eenvoudige lineaire vergelijking met spanningsinvoer en schaling zou resulteren in een nauwkeurige temperatuurpresentatie. NTC-temperatuursondes zijn echter niet lineair en produceren, in combinatie met de niet-lineaire analoge ingang van vrijwel alle goedkope singleboard-processors zoals de WiFi Kit 32, niet-lineaire analoge ingangen en dus onnauwkeurige temperatuurmetingen. Door een vergelijking zoals Steinhart-Hart te gebruiken in combinatie met zorgvuldige kalibratie, kunnen zeer nauwkeurige temperatuurmetingen met NTC-temperatuursondes met een goedkope single-board processor worden bereikt door een zeer nauwkeurige benadering van de werkelijke temperatuur te genereren.

Dus terug naar de Steinhart-Hart vergelijking. De vergelijking gebruikt de drie coëfficiënten A, B en C om de temperatuur te bepalen als een functie van de thermistorweerstand. Waar komen deze drie coëfficiënten vandaan? Sommige fabrikanten leveren deze coëfficiënten bij hun NTC-temperatuursondes en andere niet. Bovendien kunnen de door de fabrikant verstrekte coëfficiënten al dan niet voor de exacte temperatuursonde zijn die u kunt kopen, en zijn het hoogstwaarschijnlijk coëfficiënten die representatief zijn voor een groot aantal van alle temperatuursondes die ze gedurende een bepaalde periode vervaardigen. En tot slot kon ik de coëfficiënten voor de sonde die in dit ontwerp werd gebruikt eenvoudigweg niet vinden.

Zonder de benodigde coëfficiënten heb ik Steinhart-Hart Spreadsheet gemaakt, een spreadsheetgebaseerde rekenmachine die helpt bij het genereren van de benodigde coëfficiënten voor een NTC-temperatuursonde (ik verloor de link naar een vergelijkbare webgebaseerde rekenmachine die ik vele jaren geleden gebruikte, dus ik heb deze gemaakt). Om de coëfficiënten voor een temperatuursonde te bepalen, begin ik met het meten van de waarde van de 33k-weerstand die in de spanningsdeler wordt gebruikt met een digitale ohmmeter, en voer de waarde in het gele gebied van het werkblad met het label "Weerstand" in. Vervolgens plaats ik de temperatuursonde in drie omgevingen; eerste kamertemperatuur, tweede ijswater en derde kokend water, samen met een bekende nauwkeurige digitale thermometer, en laat de temperatuur op de thermometer en de thermistor-ingangstelling die op het WiFi Kit 32-display verschijnen (hierover later meer) even stabiliseren. Met zowel de temperatuur als de thermistorinvoer gestabiliseerd, voer ik de temperatuur in die wordt aangegeven door de bekende nauwkeurige thermometer en de thermistortelling die op het display van de WiFi Kit 32 verschijnt in het gele gebied van de spreadsheet met het label "Graden F van Thermometer" en "AD Tel vanaf WiFi Kit 32" respectievelijk voor elk van de drie omgevingen. Nadat alle metingen zijn ingevoerd, geeft het groene gebied van de spreadsheet de A-, B- en C-coëfficiënten weer die vereist zijn door de Steinhart-Hart-vergelijking, die vervolgens eenvoudig worden gekopieerd en in de broncode worden geplakt.

Zoals eerder vermeld, is de uitvoer van de Steinhart-Hart-vergelijking in graden Kelvin, en dit ontwerp geeft graden Fahrenheit weer. Omrekening van graden Kelvin naar graden Fahrenheit is als volgt:

Converteer eerst graden Kelvin naar graden Celsius door 273,15 (graden Kelvin) af te trekken van de Steinhart-Hart-vergelijking:

Graden C = (A + (B * (log(Thermistor))) + (C * log(Thermistor) * log(Thermistor) * log(Thermistor))) - 273,15

En ten tweede, converteer graden Celsius als volgt naar graden Fahrenheit:

Graden F = ((Graden C * 9) / 5) + 32

Als de Steinhart-Hart-vergelijking en coëfficiënten zijn voltooid, is een tweede vergelijking vereist om de uitgang van de weerstandsdeler te lezen. Een model van de weerstandsdeler die in dit ontwerp wordt gebruikt, is:

vRef<---Thermistor<---vOut<---Weerstand<---Grond

waar:

  • vRef in dit ontwerp is 3.3vdc.
  • Thermistor is de NTC-temperatuursonde die wordt gebruikt in de weerstandsdeler.
  • vOut is de uitgangsspanning van de weerstandsdeler.
  • Weerstand is de 33k-weerstand die wordt gebruikt in de weerstandsdeler.
  • En grond is, nou ja, grond.

vUit de weerstandsdeler in dit ontwerp is aangesloten op de WiFi Kit 32 analoge ingang A0 (pin 36), en de uitgangsspanning van de weerstandsdeler wordt als volgt berekend:

vOut = vRef * Weerstand / (Weerstand + Thermistor)

Zoals opgemerkt in de Steinhart-Hart-vergelijking, is de weerstandswaarde van de thermistor vereist om de temperatuur te verkrijgen, niet de uitgangsspanning van de weerstandsdeler. Dus het herschikken van de vergelijking om de thermistorwaarde uit te voeren, vereist het gebruik van een kleine algebra als volgt:

Vermenigvuldig beide zijden met "(Weerstand + Thermistor)", wat resulteert in:

vOut * (Weerstand + Thermistor) = vRef * Weerstand

Deel beide zijden door "vOut" wat resulteert in:

Weerstand + Thermistor = (vRef * Weerstand) / vOut

Trek "Weerstand" van beide kanten af, wat resulteert in:

Thermistor = (vRef * Weerstand / vOut) - Weerstand

En tot slot, met behulp van de distributieve eigenschap, vereenvoudig:

Thermistor = Weerstand * ((vRef / vOut) - 1)

Door de WiFi Kit 32 A0 analoge ingangstelling van 0 tot en met 4095 te vervangen door vOut, en door de waarde van 4096 te vervangen door vRef, wordt de weerstandsdelervergelijking die de thermistorweerstandswaarde levert die vereist is door de Steinhart-Hart-vergelijking:

Thermistor = Weerstand * ((4096 / Aantal analoge inputs) - 1)

Dus met de wiskunde achter ons, laten we wat elektronica in elkaar zetten.

Stap 2: Montage van de elektronica

Montage van de elektronica
Montage van de elektronica
Montage van de elektronica
Montage van de elektronica
Montage van de elektronica
Montage van de elektronica

Voor de elektronica had ik eerder de ESP32 Capacitive Touch-demonstrator geassembleerd https://www.instructables.com/id/ESP32-Capacitive… Bij die montage zijn de volgende extra componenten vereist:

  • Vijf, 4 "stukken van 28awg draad (een rode, een zwarte, een gele en twee groene).
  • Eén, Maverick "ET-72 Temperature Probe"-sonde (https://www.maverickthermometers.com/product/pr-003/).
  • Eén 2,5 mm "telefoon"-connector, paneelmontage (https://www.mouser.com/ProductDetail/502-TR-2A).
  • Eén weerstand van 33k ohm 1% 1/8 watt.
  • Eén, piëzo-zoemer https://www.adafruit.com/product/160. Als u een andere piëzo-zoemer selecteert, zorg er dan voor dat deze overeenkomt met de specificaties van deze (blokgolf aangedreven, <= stroomuitgang van de ESP32).

Om de extra componenten te monteren, heb ik de volgende stappen uitgevoerd:

  • Gestript en vertind de uiteinden van elke 4 "draadlengte zoals afgebeeld.
  • Een uiteinde van de gele draad en een uiteinde van de 33k ohm-weerstand gesoldeerd aan de "Tip" -pin van de telefoonconnector.
  • Het ene uiteinde van de zwarte draad aan het vrije uiteinde van de 33k ohm-weerstand gesoldeerd en de overtollige weerstandsdraad afgesneden.
  • Krimpkous aangebracht over de draden en weerstand.
  • Het ene uiteinde van de rode draad is gesoldeerd aan de "Sleeve"-pin op de telefoonconnector.
  • Soldeer het vrije uiteinde van de gele draad aan pin 36 op de WiFi Kit 32.
  • Soldeer het vrije uiteinde van de zwarte draad aan de GND-pin op de WiFi Kit 32.
  • Soldeer het vrije uiteinde van de rode draad aan de 3V3-pin op de WiFi Kit 32.
  • Een groene draad aan een draad van de piëzo-zoemer gesoldeerd.
  • Soldeerde de resterende groene draad aan de resterende leiding van de piëzo-zoemer
  • Soldeer het vrije uiteinde van een van de groene piëzo-draden aan pin 32 op de WiFi Kit 32.
  • Soldeer het vrije uiteinde van de resterende groene piëzo-draden aan de GND-pin op de WiFi Kit 32.
  • Steek de temperatuursonde in de telefoonconnector.

Met alle bedrading voltooid, heb ik mijn werk dubbel gecontroleerd.

Stap 3: De software installeren

De software installeren
De software installeren

Het bestand "AnalogInput.ino" is een Arduino-omgevingsbestand dat de software voor het ontwerp bevat. Naast dit bestand hebt u de grafische bibliotheek "U8g2lib" nodig voor het WiFi Kit32 OLED-scherm (zie https://github.com/olikraus/u8g2/wiki voor meer informatie over deze bibliotheek).

Met de U8g2lib grafische bibliotheek geïnstalleerd in uw Arduino-directory en "AnalogInput.ino" geladen in de Arduino-omgeving, compileer en download de software in de WiFi Kit 32. Eenmaal gedownload en actief, verschijnt de bovenste regel van het OLED-display op de WiFi Kit 32 moet "Temperatuur" weergeven met de huidige temperatuur in grote tekst in het midden van het display.

Raak de middelste knop (T5) aan om het scherm "Alarmtemperatuur instellen" weer te geven. Pas de alarmtemperatuur aan door op de linkerknop (T4) of de rechterknop (T6) te drukken, zoals beschreven in de inleiding. Om het alarm te testen, stelt u de alarmtemperatuur in zodat deze gelijk is aan of lager is dan de huidige temperatuur en het alarm moet afgaan. Als u klaar bent met het instellen van de alarmtemperatuur, raakt u de middelste knop aan om terug te keren naar de temperatuurweergave.

De waarden dProbeA, dProbeB, dProbeC en dResistor in de software zijn de waarden die ik heb bepaald tijdens de kalibratie van de sonde die ik in dit ontwerp heb gebruikt en zouden temperatuurmetingen moeten genereren die tot op enkele graden nauwkeurig zijn. Als dit niet het geval is, of als een hogere nauwkeurigheid gewenst is, is kalibratie de volgende.

Stap 4: Kalibreren van de NTP-temperatuursonde

Kalibreren van de NTP-temperatuursonde
Kalibreren van de NTP-temperatuursonde

De volgende items zijn nodig om de temperatuursonde te kalibreren:

  • Een digitale ohmmeter.
  • Een bekende nauwkeurige digitale thermometer die in staat is van 0 tot 250 graden F.
  • Een glas ijswater.
  • Een pan kokend water (wees heel, heel voorzichtig!).

Begin met het verkrijgen van de werkelijke 33k-weerstandswaarde:

  • Haal de voeding van de WiFi Kit 32-kaart.
  • Verwijder de temperatuursonde van de telefoonconnector (het kan ook nodig zijn om de zwarte draad van de WiFi Kit 32 los te solderen, afhankelijk van uw digitale ohmmeter).
  • Open het Steinhart-Hart-spreadsheet.
  • Meet de waarde van de 33k ohm-weerstand met behulp van de digitale ohmmeter en voer deze in het gele vak "Weerstand" in de spreadsheet en in de variabele "dResistor" in de software in. Hoewel dit overdreven lijkt, kan een weerstand van 1% van 33k ohm inderdaad de nauwkeurigheid van de temperatuurweergave beïnvloeden.
  • Steek de temperatuursonde in de telefoonconnector.

Verkrijg vervolgens de Steinhart-Hart-coëfficiënten:

  • Zet de bekende nauwkeurige digitale thermometer aan.
  • Sluit een USB-stroombron aan op de WiFi Kit 32.
  • Houd tegelijkertijd de linker (T4) en rechter (T6) knoppen ingedrukt totdat het display "Thermistor Counts" verschijnt.
  • Sta toe dat zowel de digitale thermometer als de thermistortellingen worden gestabiliseerd.
  • Voer de temperatuur en het aantal thermistor in de gele kolommen "Graden F van thermometer" en "AD telt van ESP32" in de rij "Kamer".
  • Steek zowel de digitale thermometer als de thermistorsondes in ijswater en laat beide displays stabiliseren.
  • Voer de temperatuur en het aantal thermistor in de gele kolommen "Graden F van thermometer" en "AD telt van ESP32" in de rij "Koud water".
  • Steek zowel de digitale thermometer als de thermistorsondes in kokend water en laat beide displays stabiliseren.
  • Voer de temperatuur en het aantal thermistor in de gele kolommen "Graden F van thermometer" en "AD telt van ESP32" in de rij "Kokend water".
  • Kopieer de groene "A:"-coëfficiënt naar de variabele "dProbeA" in de broncode.
  • Kopieer de groene "B:"-coëfficiënt naar de variabele "dProbeB" in de broncode.
  • Kopieer de groene coëfficiënt "C:" naar de variabele "dProbeC" in de broncode.

Compileer en download de software in de WiFi Kit 32.

Stap 5: 3D-printen van de behuizing en de eindmontage

3D-printen van de behuizing en de uiteindelijke montage
3D-printen van de behuizing en de uiteindelijke montage
3D-printen van de behuizing en de uiteindelijke montage
3D-printen van de behuizing en de uiteindelijke montage
3D-printen van de behuizing en de eindmontage
3D-printen van de behuizing en de eindmontage

Ik heb zowel "Case, Top.stl" als "Case, Bottom.stl" afgedrukt op een laaghoogte van 0,1 mm, 50% vulling, zonder steunen.

Met de behuizing afgedrukt, heb ik de elektronica en de behuizing als volgt in elkaar gezet:

  • Ik heb de draden van de pluggen met drie gaten losgemaakt, de pluggen op hun plaats gedrukt in "Case, Top.stl", en vervolgens de draden opnieuw aan de pluggen gesoldeerd, waarbij ik zorgvuldig de linker (T4), het midden (T5) en de rechterkant noteerde (T6) draden en de respectievelijke knoppen.
  • Bevestig de telefoonconnector aan het ronde gat in "Case, Bottom.stl" met behulp van de meegeleverde moer.
  • Plaatste de piëzo-zoemer in de onderkant van de behuizing naast de telefoonconnector en op zijn plaats vastgezet met dubbelzijdig plakband.
  • Schuif de WiFi Kit 32 op zijn plaats in de behuizing aan de onderkant en zorg ervoor dat de USB-poort op de WiFi Kit 32 is uitgelijnd met het ovale gat in de onderkant van de behuizing (druk NIET op het OLED-scherm om de WiFi Kit 32 in de onderkant van de behuizing te plaatsen montage, geloof me op deze, doe het gewoon niet!).
  • Druk de bovenkant van de behuizing op de onderkant van de behuizing en bevestig deze op zijn plaats met kleine stippen dikke cyanoacrylaatlijm op de hoeken.

Stap 6: Over de software

Over de software
Over de software

Het bestand "AnalogInput.ino" is een wijziging van het bestand "Buttons.ino" van mijn vorige Instructable "https://www.instructables.com/id/ESP32-Capacitive-Touch-Buttons/". Ik heb de oorspronkelijke drie codesecties "setup()", "loop()" en "InterruptService()" gewijzigd om software voor de sonde en alarm op te nemen, en ik heb drie extra codesecties "Analog()" toegevoegd., "Buttons()" en "Display()" om "loop()" op te schonen en de benodigde software voor de sonde en het alarm toe te voegen.

"Analog()" bevat de code die nodig is om het aantal thermistors in een array te lezen, het gemiddelde van het aantal tellingen te nemen, de spanningsdeler te gebruiken om de thermistorwaarde te genereren en tenslotte de Steinhart-Hart-vergelijkingen en temperatuurconversievergelijkingen te gebruiken om graden Fahrenheit te genereren.

"Buttons()" bevat de code die nodig is om het indrukken van een knop te verwerken en de alarmtemperatuur te bewerken.

"Display()" bevat de code die nodig is om de informatie op het OLED-scherm weer te geven.

Als je vragen of opmerkingen hebt over de code, of een ander aspect van deze Instructable, stel ze dan gerust en ik zal mijn best doen om ze te beantwoorden.

Ik hoop dat je ervan genoten hebt (en nog wakker bent)!

Stap 7: Het "aanstaande project"

De
De

Het aanstaande project, "Intelligrill® Pro", is een rookmonitor met dubbele temperatuursonde, met:

  • Steinhart-Hart temperatuursonde berekeningen (in tegenstelling tot "look-up" tabellen) voor verhoogde nauwkeurigheid zoals opgenomen in deze Instructable.
  • Voorspellende tijd tot voltooiing op sonde 1 met de verhoogde nauwkeurigheid die is afgeleid van de Steinhart-Hart-berekeningen.
  • Een tweede sonde, sonde 2, voor het bewaken van de rokertemperatuur (beperkt tot 32 tot 399 graden).
  • Capacitieve aanraakinvoerbedieningen (zoals in de vorige Instructable).
  • Op wifi gebaseerde bewaking op afstand (met een vast IP-adres, maakt het mogelijk om de voortgang van de roker overal te volgen waar een internetverbinding beschikbaar is).
  • Uitgebreid temperatuurbereik (32 tot 399 graden).
  • Hoorbare voltooiingsalarmen zowel binnen de Intelligrill®-zender als op de meeste WiFi-compatibele bewakingsapparaten.
  • Temperatuurweergave in graden F of graden C.
  • Tijdnotatie in ofwel UU:MM:SS of UU:MM. Batterijweergave in volt of % opgeladen.
  • En PID-uitgang voor rokers op basis van vijzel.

"Intelligrill® Pro" is nog steeds aan het testen om de meest nauwkeurige, veelzijdige en betrouwbare op HTML gebaseerde Intelligrill® te worden die ik heb ontworpen. Het wordt nog getest, maar met de maaltijden die het helpt te bereiden tijdens het testen, ben ik meer dan een paar kilo aangekomen.

Nogmaals, ik hoop dat je ervan geniet!

Aanbevolen: