Indholdsfortegnelse:

ESP32 NTP temperaturprobe madlavningstermometer med Steinhart-Hart-korrektion og temperaturalarm .: 7 trin (med billeder)
ESP32 NTP temperaturprobe madlavningstermometer med Steinhart-Hart-korrektion og temperaturalarm .: 7 trin (med billeder)

Video: ESP32 NTP temperaturprobe madlavningstermometer med Steinhart-Hart-korrektion og temperaturalarm .: 7 trin (med billeder)

Video: ESP32 NTP temperaturprobe madlavningstermometer med Steinhart-Hart-korrektion og temperaturalarm .: 7 trin (med billeder)
Video: ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction 2024, Juli
Anonim
Image
Image
ESP32 NTP temperaturprobe tilberedningstermometer med Steinhart-Hart-korrektion og temperaturalarm
ESP32 NTP temperaturprobe tilberedningstermometer med Steinhart-Hart-korrektion og temperaturalarm

Stadig på rejsen for at fuldføre et "kommende projekt" er "ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction and Temperature Alarm" en instruerbar, der viser, hvordan jeg tilføjer en NTP-temperatursonde, piezo-summer og software til min kapacitive berøring Instructable " ESP32 kapacitiv berøringsindgang ved hjælp af "Metalliske hulpropper" til knapper "til at oprette et simpelt, men præcist madlavningstermometer med en programmerbar temperaturalarm.

De tre kapacitive berøringsknapper gør det muligt at indstille temperaturalarmniveauet. Ved at trykke på den midterste knap vises displayet "Indstil alarmtemperatur", så venstre og højre knap kan reducere eller øge alarmtemperaturen. Ved at trykke på og slippe den venstre knap sænkes alarmtemperaturen en grad, mens der holdes nede på den venstre knap for konstant at reducere alarmtemperaturen, indtil den frigives. På samme måde øges alarmtemperaturen med én grad ved at trykke på og slippe den højre knap, mens tryk og holdning af den højre knap konstant øger alarmtemperaturen, indtil den slippes. Når du er færdig med at justere alarmtemperaturen, skal du blot trykke på centerknappen igen for at vende tilbage til temperaturdisplayet. Når som helst temperaturen er lig med eller højere end alarmtemperaturen, vil piezo -summeren lyde.

Og som nævnt bruges en NTP-temperatursonde i designet sammen med Steinhart-Hart-ligninger og koefficienter, der er nødvendige for nøjagtige temperaturmålinger. Jeg har inkluderet en overdrevent omfattende beskrivelse af Steinhart-Hart-ligningen, Steinhart-Hart-koefficienterne, spændingsdelere og algebra i trin 1 (som en bonus får jeg mig til at sove hver gang jeg læser den, så du vil måske spring trin 1 over og gå direkte til trin 2: Montering af elektronikken, medmindre du naturligvis har brug for en lur).

Hvis du beslutter dig for at bygge dette tilberedningstermometer, har jeg inkluderet følgende filer til tilpasning og 3D -udskrivning:

  • Arduino -fil "AnalogInput.ino", der indeholder softwaren til designet.
  • Autodesk Fusion 360 cad -filer til sagen, der viser, hvordan sagen er designet.
  • Cura 3.4.0 STL -filer "Case, Top.stl" og "Case, Bottom.stl" klar til 3D -udskrivning.

Du skal også have kendskab til Arduino -miljøet samt loddefærdigheder og -udstyr, og derudover skal du have adgang til nøjagtige digitale ohmmetre, termometre og temperaturkilder til kalibrering.

Og som sædvanlig har jeg sandsynligvis glemt en eller to filer, eller hvem ved hvad mere, så hvis du har spørgsmål, tøv ikke med at spørge, da jeg laver masser af fejl.

Elektronikken blev designet ved hjælp af blyant, papir og en Radio Shack EC-2006a (kat. Nr. 65-962a) soldrevet regnemaskine.

Softwaren blev designet ved hjælp af Arduino 1.8.5.

Etuiet er designet ved hjælp af Autodesk Fusion 360, skåret i skiver med Cura 3.4.0 og trykt i PLA på en Ultimaker 2+ Extended og en Ultimaker 3 Extended.

Og en sidste note, jeg modtager ingen kompensation i nogen form, inklusive men ikke begrænset til gratis prøver, for nogen af de komponenter, der bruges i dette design

Trin 1: Matematik, matematik og mere matematik: Steinhart – Hart, koefficienter og modstandsdividere

Matematik, matematik og mere matematik: Steinhart – Hart, koefficienter og modstandsdividere
Matematik, matematik og mere matematik: Steinhart – Hart, koefficienter og modstandsdividere

Mine tidligere designs med en NTC -temperatursonde brugte en tabelopslagsteknik til at konvertere den indgående spænding fra en modstandsdeler til temperatur. Da ESP32 er i stand til tolv bit analog input, og da jeg designede for øget nøjagtighed, besluttede jeg at implementere "Steinhart-Hart" -ligningen i koden for spænding til temperaturkonvertering.

Steinhart-Hart-ligningen blev først udgivet i 1968 af John S. Steinhart og Stanley R. Hart og definerer modstanden mod temperaturforholdet mellem en NTC-temperatursonde som følger:

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

hvor:

  • T er grader Kelvin.
  • A, B, C er Steinhart-Hart-koefficienterne (mere om det om et øjeblik).
  • Og Thermistor er temperatursonden termistor modstandsværdi ved den aktuelle temperatur.

Så hvorfor er denne tilsyneladende komplicerede Steinhart-Hart ligning nødvendig for et simpelt NTC temperaturfølerbaseret digitalt termometer? En "ideel" NTC -temperatursonde ville tilvejebringe en lineær modstandsrepræsentation af den faktiske temperatur, således ville en simpel lineær ligning, der involverer spændingsindgang og skalering, resultere i en nøjagtig temperaturpræsentation. NTC-temperatursonder er imidlertid ikke lineære, og når de kombineres med den ikke-lineære analoge indgang på stort set alle billige enkeltkortprocessorer, såsom WiFi Kit 32, producerer de ikke-lineære analoge indgange og dermed unøjagtige temperaturmålinger. Ved at bruge en ligning som Steinhart-Hart sammen med omhyggelig kalibrering kan meget nøjagtige temperaturmålinger ved hjælp af NTC-temperatursonder med en billig enkeltkortprocessor opnås ved at generere en meget tæt tilnærmelse af den faktiske temperatur.

Så tilbage til Steinhart-Hart ligningen. Ligningen udnytter de tre koefficienter A, B og C til at bestemme temperaturen som en funktion af termistormodstanden. Hvor kommer disse tre koefficienter fra? Nogle producenter giver disse koefficienter deres NTC -temperatursonder, og andre ikke. Desuden har producenten givet koefficienter til eller ikke til den nøjagtige temperatursonde, du kan købe, og er sandsynligvis koefficienter repræsentative for en stor prøve af alle temperaturprober, de fremstiller over en periode. Og endelig kunne jeg simpelthen ikke lokalisere koefficienterne til sonden, der blev brugt i dette design.

Uden de nødvendige koefficienter oprettede jeg Steinhart-Hart-regneark, en regnearksbaseret lommeregner, der hjælper med at generere de nødvendige koefficienter til en NTC-temperatursonde (jeg mistede linket til en lignende webbaseret lommeregner, jeg brugte for mange år siden, så jeg lavede denne). For at bestemme koefficienterne for en temperatursonde starter jeg med at måle værdien af den 33k modstand, der bruges i spændingsdeleren med et digitalt ohmmeter, og indtaster værdien i det gule område af regnearket mærket "Modstand". Dernæst placerer jeg temperatursonden i tre miljøer; første stuetemperatur, andet isvand og tredje kogende vand sammen med et kendt nøjagtigt digitalt termometer, og give tid til at temperaturen på termometeret og termistorindgangstællingen vises på WiFi Kit 32 -displayet (mere om dette senere) til at stabilisere sig. Med både temperatur og termistorindgangstæller stabiliseret, indtaster jeg den temperatur, der er angivet af det kendte nøjagtige termometer, og termistortællingen, der vises på displayet på WiFi Kit 32, i det gule område af regnearket mærket "grader F fra termometer" og "AD Tæl fra henholdsvis WiFi Kit 32 "for hvert af de tre miljøer. Når alle målinger er indtastet, giver det grønne område af regnearket de A-, B- og C-koefficienter, der kræves af Steinhart-Hart-ligningen, som derefter simpelthen kopieres og indsættes i kildekoden.

Som tidligere nævnt er output fra Steinhart-Hart ligningen i grader Kelvin, og dette design viser grader Fahrenheit. Konvertering fra grader Kelvin til grader Fahrenheit er som følger:

Konverter først grader Kelvin til grader Celsius ved at trække 273,15 (grader Kelvin) fra Steinhart-Hart ligningen:

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

Og for det andet, konverter grader Celsius til grader Fahrenheit som følger:

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

Når Steinhart-Hart-ligningen og koefficienterne er fuldført, kræves en anden ligning for at aflæse modstandsdelingens output. En model af modstandsdeleren, der bruges i dette design, er:

vRef <--- Termistor <--- vOut <--- Modstand <--- Jord

hvor:

  • vRef i dette design er 3.3vdc.
  • Termistor er NTC -temperatursonden, der bruges i modstandsdivideren.
  • vOut er spændingsoutputtet fra modstandsdeleren.
  • Modstand er den 33k modstand, der bruges i modstandsdeleren.
  • Og jorden er, ja, jorden.

vUd af modstandsdeleren i dette design er knyttet til WiFi Kit 32 analog indgang A0 (pin 36), og spændingsudgangen fra modstandsdeleren beregnes som følger:

vOut = vRef * Modstand / (Modstand + termistor)

Som bemærket i Steinhart-Hart-ligningen er termistormodstandsværdien imidlertid påkrævet for at opnå temperatur, ikke spændingsudgangen fra modstandsdeleren. Så omlægning af ligningen for at udsende termistorværdien kræver brug af en lille algebra som følger:

Gang begge sider med "(Resistor + Thermistor)", hvilket resulterer i:

vOut * (modstand + termistor) = vRef * modstand

Opdel begge sider med "vOut", hvilket resulterer i:

Modstand + termistor = (vRef * modstand) / vOut

Træk "Resistor" fra begge sider, hvilket resulterer i:

Termistor = (vRef * Resistor / vOut) - Modstand

Og endelig, ved at bruge den distribuerende ejendom, forenkle:

Termistor = Modstand * ((vRef / vOut) - 1)

Ved at erstatte WiFi Kit 32 A0 analoge inputindtastninger fra 0 til 4095 for vOut og erstatte værdien på 4096 med vRef, bliver modstandsdelingsligningen, der giver termistormodstandsværdien, der kræves af Steinhart-Hart-ligningen:

Termistor = Modstand * ((4096 / Analog Input Count) - 1)

Så med matematikken bag os, lad os samle noget elektronik.

Trin 2: Montering af elektronikken

Montering af elektronikken
Montering af elektronikken
Montering af elektronikken
Montering af elektronikken
Montering af elektronikken
Montering af elektronikken

Til elektronikken havde jeg tidligere samlet ESP32 Capacitive Touch demonstrator https://www.instructables.com/id/ESP32-Capacitive… Med denne samling kræves følgende yderligere komponenter:

  • Fem, 4 "stykker 28awg ledning (en rød, en sort, en gul og to grøn).
  • En Maverick "ET-72 Temperature Probe" sonde (https://www.maverickthermometers.com/product/pr-003/).
  • Et 2,5 mm "telefon" -stik, panelmontering (https://www.mouser.com/ProductDetail/502-TR-2A).
  • En, 33k ohm 1% 1/8 watt modstand.
  • Den ene piezo -summer https://www.adafruit.com/product/160. Hvis du vælger en anden piezo -summer, skal du sørge for, at den matcher specifikationerne for denne (firkantbølgedrevet, <= strømudgang fra ESP32).

For at samle de ekstra komponenter udførte jeg følgende trin:

  • Fjernet og fortinnet enderne af hver 4 "trådlængde som vist.
  • Loddet den ene ende af den gule ledning og den ene ende af 33k ohm modstanden til telefonens "tip" -stift.
  • Loddet den ene ende af den sorte ledning til den frie ende af 33k ohm modstanden og trimmede den overskydende modstandstråd af.
  • Påført varmekrympeslange over ledningerne og modstanden.
  • Loddet den ene ende af den røde ledning til "Sleeve" pin på telefonens stik.
  • Loddet den frie ende af den gule ledning til pin 36 på WiFi Kit 32.
  • Loddet den frie ende af den sorte ledning til GND -stiften på WiFi Kit 32.
  • Loddet den frie ende af den røde ledning til 3V3 pin på WiFi Kit 32.
  • Loddet en grøn ledning til en ledning af piezo -summeren.
  • Loddet den resterende grønne ledning til den resterende bly i piezo -summeren
  • Loddet den frie ende af en af de grønne piezotråde til pin 32 på WiFi Kit 32.
  • Loddet den frie ende af de resterende grønne piezotråde til GND -stiften på WiFi Kit 32.
  • Satte temperatursonden i telefonstikket.

Da alle ledninger var færdige, tjekkede jeg mit arbejde.

Trin 3: Installation af softwaren

Installation af softwaren
Installation af softwaren

Filen "AnalogInput.ino" er en Arduino -miljøfil, der indeholder softwaren til designet. Ud over denne fil skal du bruge "U8g2lib" -grafikbiblioteket til WiFi Kit32 OLED -skærmen (se https://github.com/olikraus/u8g2/wiki for yderligere oplysninger om dette bibliotek).

Med U8g2lib -grafikbiblioteket installeret i dit Arduino -bibliotek og "AnalogInput.ino" indlæst i Arduino -miljøet, skal du kompilere og downloade softwaren til WiFi Kit 32. Når den er downloadet og kører, er den øverste linje i OLED -skærmen på WiFi Kit 32 skal læse "Temperatur" med den aktuelle temperatur vist i stor tekst i midten af displayet.

Tryk på den midterste knap (T5) for at få vist displayet "Indstil alarmtemperatur". Juster alarmtemperaturen ved at trykke på enten den venstre knap (T4) eller den højre knap (T6) som beskrevet i indledningen. For at teste alarmen skal alarmtemperaturen justeres til at være lig med eller lavere end den aktuelle temperatur, og alarmen skal lyde. Når du er færdig med at indstille alarmtemperaturen, skal du trykke på centerknappen for at vende tilbage til temperaturdisplayet.

Værdierne dProbeA, dProbeB, dProbeC og dResistor i softwaren er de værdier, jeg bestemte under kalibrering af sonden, jeg brugte i dette design, og skulle generere temperaturmålinger nøjagtige inden for få grader. Hvis ikke, eller hvis der ønskes større nøjagtighed, er kalibrering den næste.

Trin 4: Kalibrering af NTP -temperatursonden

Kalibrering af NTP -temperatursonden
Kalibrering af NTP -temperatursonden

Følgende punkter er nødvendige for at kalibrere temperatursonden:

  • Et digitalt ohmmeter.
  • Et kendt præcist digitalt termometer i stand til 0 til 250 grader F.
  • Et glas isvand.
  • En gryde kogende vand (vær meget, meget forsigtig!).

Start med at få den faktiske 33k modstandsværdi:

  • Fjern strømmen fra WiFi Kit 32 -kortet.
  • Fjern temperatursonden fra telefonstikket (det kan også være nødvendigt at aflodde den sorte ledning fra WiFi Kit 32, afhængigt af dit digitale ohmmeter).
  • Åbn Steinhart-Hart-regnearket.
  • Mål værdien af 33k ohm modstanden ved hjælp af det digitale ohmmeter og indtast den i den gule "Resistor" -boks i regnearket og i variablen "dResistor" i softwaren. Selvom dette kan virke overdrevent, kan en 33k ohm 1% resister faktisk påvirke nøjagtigheden af temperaturdisplayet.
  • Sæt temperatursonden i telefonstikket.

Få derefter Steinhart-Hart-koefficienterne:

  • Tænd det kendte nøjagtige digitale termometer.
  • Tilslut en USB -strømkilde til WiFi Kit 32.
  • Tryk samtidigt på venstre (T4) og højre (T6) -knapperne, indtil displayet "Termistor tæller" vises.
  • Lad både det digitale termometer og termistortællere vise sig at stabilisere sig.
  • Indtast temperaturen og termistortællinger i de gule kolonner "Grader F fra termometer" og "AD -tællinger fra ESP32" på rækken "Rum".
  • Sæt både det digitale termometer og termistorproberne i isvand, og lad begge skærme stabilisere sig.
  • Indtast temperaturen og termistortællinger i de gule kolonner "Grader F fra termometer" og "AD -tællinger fra ESP32" på rækken "Koldt vand".
  • Sæt både det digitale termometer og termistorproberne i kogende vand, og lad begge skærme stabilisere sig.
  • Indtast temperaturen og termistortællinger i de gule kolonner "Grader F fra termometer" og "AD -tællinger fra ESP32" på rækken "Kogende vand".
  • Kopier den grønne "A:" koefficient til variablen "dProbeA" i kildekoden.
  • Kopier den grønne "B:" koefficient til variablen "dProbeB" i kildekoden.
  • Kopier den grønne "C:" koefficient til variablen "dProbeC" i kildekoden.

Kompilér og download softwaren til WiFi Kit 32.

Trin 5: 3D -udskrivning af sagen og den sidste samling

3D -udskrivning af sagen og den sidste samling
3D -udskrivning af sagen og den sidste samling
3D -udskrivning af sagen og den sidste samling
3D -udskrivning af sagen og den sidste samling
3D -udskrivning af sagen og den sidste samling
3D -udskrivning af sagen og den sidste samling

Jeg printede både "Case, Top.stl" og "Case, Bottom.stl" i.1 mm laghøjde, 50% fyldning, uden understøtninger.

Med sagen trykt, samlede jeg elektronikken og sagen som følger:

  • Jeg afloddet ledningerne fra de tre hulpropper, pressede hulpropperne på plads i "Case, Top.stl" og lodde derefter ledningerne igen til hulpropperne og lagde forsigtigt mærket til venstre (T4), i midten (T5) og til højre (T6) ledninger og de respektive knapper.
  • Fastgør telefonstikket til det runde hul i "Case, Bottom.stl" ved hjælp af den medfølgende møtrik.
  • Placerede piezo -summeren i bunden af kabinettet ved siden af telefonstikket og fastgjort med dobbeltsidet tape.
  • Skub WiFi -kittet 32 på plads i bunden af kabinettet, og sørg for, at USB -porten på WiFi -sættet 32 flugter med det ovale hul i kabinettets bund (tryk IKKE på OLED -displayet for at placere WiFi -sættet 32 i kabinettets bund forsamling, stol på mig på denne, bare gør det ikke!).
  • Pressede kabinetets topmontering på kabinets bundenhed og fastgøres på plads ved hjælp af små prikker af tyk cyanoacrylatlim på hjørnerne.

Trin 6: Om softwaren

Om softwaren
Om softwaren

Filen "AnalogInput.ino" er en ændring af filen "Buttons.ino" fra min tidligere instruerbare "https://www.instructables.com/id/ESP32-Capacitive-Touch-Buttons/". Jeg har ændret de originale tre kodesektioner "setup ()", "loop ()" og "InterruptService ()" til at omfatte software til sonden og alarmen, og jeg har tilføjet yderligere tre kodesektioner "Analog ()", "Knapper ()" og "Display ()" for at rydde op i "loop ()" og tilføje den nødvendige software til sonden og alarmen.

"Analog ()" indeholder den kode, der er nødvendig for at aflæse termistortællingen i en matrix, gennemgå rækken af tællinger, bruge spændingsdeleren til at generere termistorværdien og til sidst bruge Steinhart-Hart-ligningerne og temperaturomdannelsesligningerne til at generere grader Fahrenheit.

"Buttons ()" indeholder den kode, der er nødvendig for at behandle knappetryk og redigere alarmtemperaturen.

"Display ()" indeholder den kode, der er nødvendig for at præsentere oplysningerne på OLED -displayet.

Hvis du har spørgsmål eller kommentarer til koden eller et andet aspekt af denne instruktionsbog, er du velkommen til at stille, og jeg vil gøre mit bedste for at besvare dem.

Jeg håber, at du nød det (og stadig er vågen)!

Trin 7: Det "kommende projekt"

Det
Det

Det kommende projekt, "Intelligrill® Pro", er en rygermonitor med dobbelttemperatur sonde med:

  • Steinhart-Hart temperaturfølerberegninger (i modsætning til "opslag" -tabeller) for øget nøjagtighed som indarbejdet i denne instruktionsbog.
  • Forudsigelig tid til færdiggørelse på probe 1, der inkorporerer den øgede nøjagtighed, der stammer fra Steinhart-Hart-beregningerne.
  • En anden sonde, sonde 2, til overvågning af rygtemperatur (begrænset til 32 til 399 grader).
  • Kapacitive berøringsindgangskontroller (som i den tidligere instruerbare).
  • WIFI -baseret fjernovervågning (med en fast IP -adresse, muliggør overvågning af rygerens fremskridt, hvor som helst en internetforbindelse er tilgængelig).
  • Udvidet temperaturområde (32 til 399 grader).
  • Hørbare fuldførelsesalarmer både i Intelligrill® -senderen og på de fleste WiFi -kompatible overvågningsenheder.
  • Temperaturvisning i enten grader F eller grader C.
  • Tidsformat i enten HH: MM: SS eller HH: MM. Batteridisplay i enten volt eller % opladet.
  • Og PID -output til sneglebaserede rygere.

"Intelligrill® Pro" tester stadig for at blive den mest præcise, funktionsfyldte og pålidelige HTML -baserede Intelligrill®, jeg har designet. Det er stadig under test, men med måltiderne hjælper det med at forberede under testen, jeg har taget mere end et par kilo på.

Igen, jeg håber du nyder det!

Anbefalede: