Innehållsförteckning:

ESP32 NTP temperaturprobe matlagningstermometer med Steinhart-Hart-korrigering och temperaturlarm .: 7 steg (med bilder)
ESP32 NTP temperaturprobe matlagningstermometer med Steinhart-Hart-korrigering och temperaturlarm .: 7 steg (med bilder)

Video: ESP32 NTP temperaturprobe matlagningstermometer med Steinhart-Hart-korrigering och temperaturlarm .: 7 steg (med bilder)

Video: ESP32 NTP temperaturprobe matlagningstermometer med Steinhart-Hart-korrigering och temperaturlarm .: 7 steg (med bilder)
Video: ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction 2024, Juli
Anonim
Image
Image
ESP32 NTP temperaturprobe matlagningstermometer med Steinhart-Hart-korrigering och temperaturlarm
ESP32 NTP temperaturprobe matlagningstermometer med Steinhart-Hart-korrigering och temperaturlarm

Fortfarande på resan för att slutföra ett "kommande projekt", "ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction and Temperature Alarm" är en instruerbar som visar hur jag lägger till en NTP-temperatursond, piezo-summer och programvara till min kapacitiva touch Instructable " ESP32 kapacitiv beröring med "Metalliska hålpluggar" för knappar "för att skapa en enkel men exakt matlagningstermometer med ett programmerbart temperaturlarm.

De tre kapacitiva touchknapparna gör att temperaturlarmnivån kan ställas in. Genom att trycka på mittknappen visas displayen "Ställ in larmtemperatur", vilket gör att vänster och höger knapp kan sänka eller öka larmtemperaturen. Genom att trycka på och släppa den vänstra knappen sänks larmtemperaturen med en grad, medan du håller ned den vänstra knappen för att kontinuerligt minska larmtemperaturen tills den släpps. På samma sätt ökar larmtemperaturen en grad genom att trycka på och släppa den högra knappen, medan högerknappen hålls intryckt tills alarmet släpps. När du har justerat larmtemperaturen trycker du bara på mittknappen igen för att återgå till temperaturdisplayen. När som helst temperaturen är lika med eller högre än larmtemperaturen kommer piezo -summern att ljuda.

Och som nämnts används en NTP-temperatursond i konstruktionen tillsammans med Steinhart-Hart ekvationer och koefficienter som är nödvändiga för noggranna temperaturavläsningar. Jag har inkluderat en alldeles för detaljerad beskrivning av Steinhart-Hart-ekvationen, Steinhart-Hart-koefficienterna, spänningsdelare och algebra i steg 1 (som en bonus får jag mig att sova varje gång jag läser den, så du kanske vill hoppa över steg 1 och gå direkt till steg 2: Montera elektroniken, såvida du naturligtvis inte behöver en tupplur).

Om du bestämmer dig för att bygga denna matlagningstermometer har jag för anpassning och 3D -utskrift inkluderat följande filer:

  • Arduino -fil "AnalogInput.ino" som innehåller programvaran för designen.
  • Autodesk Fusion 360 cad -filer för fodralet som visar hur fodralet var utformat.
  • Cura 3.4.0 STL -filer "Case, Top.stl" och "Case, Bottom.stl" redo för 3D -utskrift.

Du behöver också bekanta dig med Arduino -miljön samt lödningskunskaper och utrustning, och dessutom kan du behöva tillgång till exakta digitala ohmmetrar, termometrar och temperaturkällor för kalibrering.

Och som vanligt har jag förmodligen glömt en eller två filer eller vem vet vad mer, så om du har några frågor, tveka inte att fråga eftersom jag gör många misstag.

Elektroniken konstruerades med blyertspenna, papper och en Radio Shack EC-2006a (kat. Nr. 65-962a) soldriven miniräknare.

Programvaran designades med Arduino 1.8.5.

Fodralet är designat med Autodesk Fusion 360, skivat med Cura 3.4.0 och tryckt i PLA på en Ultimaker 2+ Extended och en Ultimaker 3 Extended.

Och en sista notering, jag får ingen kompensation i någon form, inklusive men inte begränsat till gratisprover, för någon av komponenterna som används i denna design

Steg 1: Matematik, matematik och mer matematik: Steinhart – Hart, koefficienter och motståndsdelare

Matematik, matematik och mer matematik: Steinhart – Hart, koefficienter och motståndsdelare
Matematik, matematik och mer matematik: Steinhart – Hart, koefficienter och motståndsdelare

Mina tidigare mönster med en NTC -temperatursond använde en tabelluppslagningsteknik för att konvertera inkommande spänning från en motståndsdelare till temperatur. Eftersom ESP32 kan tolv bitars analog ingång och eftersom jag konstruerade för ökad noggrannhet bestämde jag mig för att implementera "Steinhart-Hart" -ekvationen i koden för spänning till temperaturomvandling.

Steinhart-Hart-ekvationen, som först publicerades 1968 av John S. Steinhart och Stanley R. Hart, definierar motståndet mot temperaturförhållandet hos en NTC-temperatursond enligt följande:

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

var:

  • T är grader Kelvin.
  • A, B, C är Steinhart-Hart-koefficienterna (mer om det om ett ögonblick).
  • Och termistorn är temperaturmätarens termistormotståndsvärde vid den aktuella temperaturen.

Så varför är denna till synes komplicerade Steinhart-Hart-ekvation nödvändig för en enkel NTC-temperatursondbaserad digital termometer? En "idealisk" NTC -temperatursond skulle tillhandahålla en linjär motståndsrepresentation av den verkliga temperaturen, sålunda skulle en enkel linjär ekvation som involverar spänningsinmatning och skalning resultera i en noggrann temperaturpresentation. NTC-temperatursonder är emellertid inte linjära och i kombination med den icke-linjära analoga ingången för praktiskt taget alla billiga enkelkortsprocessorer som WiFi Kit 32, producerar de olinjära analoga ingångar och därmed felaktiga temperaturavläsningar. Genom att använda en ekvation som Steinhart-Hart tillsammans med noggrann kalibrering kan mycket exakta temperaturavläsningar med hjälp av NTC-temperatursonder med en enkelprocessor med låg kostnad uppnås genom att generera en mycket nära approximation av den verkliga temperaturen.

Så tillbaka till Steinhart-Hart-ekvationen. Ekvationen använder de tre koefficienterna A, B och C för att bestämma temperaturen som en funktion av termistormotståndet. Var kommer dessa tre koefficienter ifrån? Vissa tillverkare förser dessa koefficienter med sina NTC -temperatursonder, och andra inte. Dessutom har tillverkaren tillhandahållit koefficienter för den exakta temperatursonden du kanske köper, och är sannolikt koefficienter som är representativa för ett stort urval av alla temperatursonder de tillverkar under en tidsperiod. Och slutligen kunde jag helt enkelt inte hitta koefficienterna för sonden som används i denna design.

Utan de nödvändiga koefficienterna skapade jag Steinhart-Hart Spreadsheet, en kalkylarkbaserad kalkylator som hjälper till att generera de nödvändiga koefficienterna för en NTC-temperatursond (jag tappade länken till en liknande webbaserad miniräknare som jag använde för många år sedan, så jag skapade den här). För att bestämma koefficienterna för en temperatursond börjar jag med att mäta värdet på 33k -motståndet som används i spänningsdelaren med en digital ohmmeter och ange värdet i det gula området på kalkylbladet märkt "Resistor". Därefter placerar jag temperatursonden i tre miljöer; första rumstemperatur, andra isvatten och tredje kokande vatten, tillsammans med en känd exakt digital termometer, och ge tid för temperaturen på termometern och termistorens ingångsantal på WiFi Kit 32 -displayen (mer om detta senare) för att stabilisera. Med både temperaturen och termistorens ingångsantal stabiliserade anger jag den temperatur som anges av den kända exakta termometern och termistorräkningen som visas på displayen på WiFi -kit 32 i det gula området på kalkylbladet märkt "grader F från termometer" och "AD Räkna från WiFi Kit 32 "respektive för var och en av de tre miljöerna. När alla mätningar har matats in ger det gröna området i kalkylbladet A-, B- och C-koefficienterna som krävs av Steinhart-Hart-ekvationen som sedan enkelt kopieras och klistras in i källkoden.

Som tidigare nämnts är utsignalen från Steinhart-Hart-ekvationen i grader Kelvin, och denna design visar grader Fahrenheit. Omvandlingen från grader Kelvin till grader Fahrenheit är följande:

Konvertera först grader Kelvin till grader Celsius genom att subtrahera 273,15 (grader Kelvin) från Steinhart-Hart-ekvationen:

Grader C = (A + (B * (log (termistor))) + (C * log (termistor) * log (termistor) * log (termistor))) - 273,15

Och för det andra, konvertera grader Celsius till grader Fahrenheit enligt följande:

Grader F = ((grader C * 9) / 5) + 32

Med Steinhart-Hart-ekvationen och koefficienterna färdiga krävs en andra ekvation för att läsa utmotståndsdelarens utmatning. En modell av motståndsdelaren som används i denna design är:

vRef <--- Termistor <--- vOut <--- Motstånd <--- Jord

var:

  • vRef i denna design är 3.3vdc.
  • Termistor är NTC -temperatursonden som används i motståndsdelaren.
  • vOut är spänningsutgången från motståndsdelaren.
  • Motstånd är 33k -motståndet som används i motståndsdelaren.
  • Och marken är, väl, mark.

vUt från motståndsdelaren i denna design är ansluten till WiFi Kit 32 analoga ingång A0 (stift 36), och spänningsutgången från motståndsdelaren beräknas enligt följande:

vOut = vRef * Motstånd / (motstånd + termistor)

Som nämnts i Steinhart-Hart-ekvationen krävs dock termistorresistansvärdet för att erhålla temperatur, inte spänningsutgången från motståndsdelaren. Så att ordna om ekvationen för att mata ut termistorvärdet kräver användning av en liten algebra enligt följande:

Multiplicera båda sidor med "(Resistor + Thermistor)" vilket resulterar i:

vOut * (motstånd + termistor) = vRef * motstånd

Dela båda sidorna med "vOut" vilket resulterar i:

Motstånd + termistor = (vRef * motstånd) / vOut

Subtrahera "Resistor" från båda sidor vilket resulterar i:

Termistor = (vRef * Resistor / vOut) - Motstånd

Och slutligen, med hjälp av den distributiva egenskapen, förenkla:

Termistor = Motstånd * ((vRef / vOut) - 1)

Genom att ersätta WiFi Kit 32 A0 analoga ingångsantal från 0 till 4095 för vOut och ersätta värdet 4096 med vRef blir motståndsdelningsekvationen som ger termistorresistansvärdet som krävs av Steinhart-Hart-ekvationen:

Termistor = motstånd * ((4096 / analogt ingångsantal) - 1)

Så med matematiken bakom oss, låt oss montera lite elektronik.

Steg 2: Montering av elektroniken

Montering av elektroniken
Montering av elektroniken
Montering av elektroniken
Montering av elektroniken
Montering av elektroniken
Montering av elektroniken

För elektroniken hade jag tidigare monterat ESP32 Capacitive Touch-demonstratorn https://www.instructables.com/id/ESP32-Capacitive… Med den monteringen krävs följande ytterligare komponenter:

  • Fem, 4 "bitar av 28awg tråd (en röd, en svart, en gul och två grön).
  • En, Maverick "ET-72 Temperature Probe" -prob (https://www.maverickthermometers.com/product/pr-003/).
  • En 2,5 mm "telefon" -kontakt, panelmonterad (https://www.mouser.com/ProductDetail/502-TR-2A).
  • Ett, 33k ohm 1% 1/8 watt motstånd.
  • En, piezo -summer https://www.adafruit.com/product/160. Om du väljer en annan piezo -summer, se till att den stämmer överens med specifikationerna för denna (fyrkantvåg driven, <= strömutgång för ESP32).

För att montera ytterligare komponenter utförde jag följande steg:

  • Avskalade och förtinnade ändarna på varje 4 "trådlängd som visas.
  • Lödde ena änden av den gula tråden och ena änden av 33k ohm -motståndet till "Tips" -stiftet på telefonkontakten.
  • Lödde ena änden av den svarta tråden till den fria änden av 33k ohm -motståndet och trimmade bort överskottsmotståndstråden.
  • Applicerad värmekrympslang över ledningarna och motståndet.
  • Lödde ena änden av den röda tråden till "Sleeve" -nålen på telefonkontakten.
  • Lödde den fria änden av den gula tråden till stift 36 på WiFi -kitet 32.
  • Lödde den fria änden av den svarta ledningen till GND -stiftet på WiFi Kit 32.
  • Lödde den fria änden av den röda tråden till 3V3 -stiftet på WiFi -kit 32.
  • Lödde en grön tråd till en ledning i piezo -summern.
  • Lödde den återstående gröna tråden till piezo -summerns återstående ledning
  • Lödde den fria änden av en av de gröna piezotrådarna till stift 32 på WiFi -kitet 32.
  • Lödde den fria änden av de återstående gröna piezotrådarna till GND -stiftet på WiFi Kit 32.
  • Anslut temperatursonden till telefonkontakten.

När alla ledningar var klara kontrollerade jag mitt arbete.

Steg 3: Installera programvaran

Installera programvaran
Installera programvaran

Filen "AnalogInput.ino" är en Arduino -miljöfil som innehåller programvaran för designen. Förutom den här filen behöver du grafikbiblioteket "U8g2lib" för WiFi Kit32 OLED -skärmen (se https://github.com/olikraus/u8g2/wiki för ytterligare information om detta bibliotek).

Med U8g2lib -grafikbiblioteket installerat i din Arduino -katalog och "AnalogInput.ino" inläst i Arduino -miljön, kompilera och ladda ner programvaran till WiFi Kit 32. När den har laddats ner och körs, är den översta raden på OLED -skärmen på WiFi Kit 32 bör läsa "Temperatur" med den aktuella temperaturen i stor text i mitten av displayen.

Tryck på mittknappen (T5) för att visa "Ställ in larmtemperatur" -skärmen. Justera larmtemperaturen genom att trycka på antingen vänster knapp (T4) eller höger knapp (T6) enligt beskrivningen i inledningen. För att testa larmet, justera larmtemperaturen så att den är lika med eller lägre än den aktuella temperaturen och larmet ska låta. När du har ställt in larmtemperaturen trycker du på mittknappen för att återgå till temperaturdisplayen.

Värdena dProbeA, dProbeB, dProbeC och dResistor i programvaran är de värden som jag bestämde under kalibrering av sonden som jag använde i denna konstruktion och bör generera temperaturavläsningar som är exakta inom några grader. Om inte, eller om högre noggrannhet önskas, är kalibreringen nästa.

Steg 4: Kalibrering av NTP -temperatursonden

Kalibrering av NTP -temperatursonden
Kalibrering av NTP -temperatursonden

Följande poster krävs för att kalibrera temperatursonden:

  • En digital ohmmeter.
  • En känd exakt digital termometer som kan 0 till 250 grader F.
  • Ett glas isvatten.
  • En kruka med kokande vatten (var mycket, mycket försiktig!).

Börja med att få det verkliga 33k -motståndsvärdet:

  • Ta bort strömmen från WiFi Kit 32 -kortet.
  • Ta bort temperatursonden från telefonkontakten (det kan också vara nödvändigt att avlödda den svarta ledningen från WiFi Kit 32, beroende på din digitala ohmmeter).
  • Öppna Steinhart-Hart-kalkylbladet.
  • Mät värdet på 33k ohm -motståndet med den digitala ohmmetern och ange det i den gula "Resistor" -rutan i kalkylarket och i variabeln "dResistor" i programvaran. Även om detta kan verka överdrivet, kan en 33k ohm 1% resistor verkligen påverka temperaturvisningen.
  • Anslut temperatursonden till telefonkontakten.

Skaffa därefter Steinhart-Hart-koefficienterna:

  • Slå på den kända exakta digitala termometern.
  • Anslut en USB -strömkälla till WiFi -kit 32.
  • Håll samtidigt vänster (T4) och höger (T6) -knapp intryckt tills displayen "Thermistor Counts" visas.
  • Låt både den digitala termometern och termistorräknarna stabiliseras.
  • Ange temperatur- och termistorräkningarna i de gula kolumnerna "grader F från termometer" och "AD -räkningar från ESP32" på raden "rum".
  • Sätt in både den digitala termometern och termistorsonderna i isvatten och låt båda skärmarna stabiliseras.
  • Ange temperatur- och termistorräkningarna i de gula kolumnerna "grader F från termometer" och "AD -räkningar från ESP32" på raden "kallt vatten".
  • Sätt in både den digitala termometern och termistorsonderna i kokande vatten och låt båda bildskärmarna stabiliseras.
  • Ange temperatur- och termistorräkningarna i de gula kolumnerna "grader F från termometer" och "AD -räkningar från ESP32" på raden "kokande vatten".
  • Kopiera den gröna "A:" -koefficienten till variabeln "dProbeA" i källkoden.
  • Kopiera den gröna "B:" -koefficienten till variabeln "dProbeB" i källkoden.
  • Kopiera den gröna "C:" -koefficienten till variabeln "dProbeC" i källkoden.

Kompilera och ladda ner programvaran till WiFi Kit 32.

Steg 5: 3D -utskrift av fodral och slutmontering

3D -utskrift av fodral och slutmontering
3D -utskrift av fodral och slutmontering
3D -utskrift av fodral och slutmontering
3D -utskrift av fodral och slutmontering
3D -utskrift av fodral och slutmontering
3D -utskrift av fodral och slutmontering

Jag skrev ut både "Case, Top.stl" och "Case, Bottom.stl" på.1 mm lagerhöjd, 50% infill, utan stöd.

Med fodralet tryckt monterade jag elektroniken och fodralet enligt följande:

  • Jag avlödde trådarna från de tre hålspluggarna, tryckte in hålpropparna på plats i "Case, Top.stl", och lodde sedan om trådarna till hålpropparna och notera noggrant vänster (T4), mitt (T5) och höger (T6) -kablar och respektive knappar.
  • Fäst telefonkontakten i det runda hålet i "Case, Bottom.stl" med den medföljande muttern.
  • Placerade piezo -summern i fodralets undersida bredvid telefonkontakten och fästs på plats med dubbelsidig tejp.
  • Skjut in WiFi -kit 32 på plats i fodralets undersida och se till att USB -porten på WiFi -kit 32 är i linje med det ovala hålet i fodralet (tryck INTE på OLED -displayen för att placera WiFi -kit 32 i fodralets botten församling, lita på mig på den här, bara gör det inte!).
  • Pressade höljet övre enheten på höljet botten enhet och säkras på plats med små prickar av tjockt cyanoakrylat lim på hörnen.

Steg 6: Om programvaran

Om programvaran
Om programvaran

Filen "AnalogInput.ino" är en ändring av filen "Buttons.ino" från min tidigare instruerbara "https://www.instructables.com/id/ESP32-Capacitive-Touch-Buttons/". Jag har ändrat de tre ursprungliga kodsektionerna "setup ()", "loop ()" och "InterruptService ()" för att inkludera programvara för sonden och larmet, och jag har lagt till ytterligare tre kodsektioner "Analog ()", "Knappar ()" och "Display ()" för att städa upp "loop ()" och lägga till nödvändig programvara för sonden och larmet.

"Analog ()" innehåller koden som är nödvändig för att läsa termistorräkningen i en array, medelvärde arrayen med räkningar, använda spänningsdelaren för att generera termistorvärdet och slutligen använda Steinhart-Hart-ekvationerna och temperaturomvandlingsekvationerna för att generera grader Fahrenheit.

"Buttons ()" innehåller den kod som krävs för att bearbeta knapptryckningar och redigera larmtemperaturen.

"Display ()" innehåller koden som är nödvändig för att presentera informationen på OLED -skärmen.

Om du har några frågor eller kommentarer om koden, eller någon annan aspekt av denna instruktionsbok, är du välkommen att fråga och jag kommer att göra mitt bästa för att svara på dem.

Jag hoppas att du tyckte om det (och fortfarande är vaken)!

Steg 7: "Kommande projekt"

De
De

Det kommande projektet, "Intelligrill® Pro", är en rökare -monitor med dubbla temperaturer med:

  • Steinhart-Hart temperatursondberäkningar (i motsats till tabeller med "uppslagning") för ökad noggrannhet som ingår i denna instruktionsbok.
  • Prediktiv tid till slutförande på sond 1 med den ökade noggrannheten som härrör från Steinhart-Hart-beräkningarna.
  • En andra sond, sond 2, för övervakning av rökningstemperatur (begränsad till 32 till 399 grader).
  • Kapacitiva touch -ingångskontroller (som i föregående Instructable).
  • WIFI -baserad fjärrövervakning (med en fast IP -adress, möjliggör övervakning av rökarens framsteg var som helst en internetuppkoppling är tillgänglig).
  • Utökat temperaturområde (32 till 399 grader).
  • Larm för slutförande av ljud både i Intelligrill® -sändaren och på de flesta WiFi -kompatibla övervakningsenheter.
  • Temperaturvisning i antingen grader F eller grader C.
  • Tidsformat i antingen HH: MM: SS eller HH: MM. Batteridisplay i antingen volt eller % laddad.
  • Och PID -utgång för skruvbaserade rökare.

"Intelligrill® Pro" testar fortfarande för att bli den mest exakta, funktionsförpackade och pålitliga HTML -baserade Intelligrill® jag har designat. Det är fortfarande under test, men med måltiderna hjälper det att förbereda under testet, jag har gått upp mer än några kilo.

Återigen, jag hoppas att du gillar det!

Rekommenderad: