Innholdsfortegnelse:

ESP32 NTP temperaturprobe koketermometer med Steinhart-Hart-korreksjon og temperaturalarm .: 7 trinn (med bilder)
ESP32 NTP temperaturprobe koketermometer med Steinhart-Hart-korreksjon og temperaturalarm .: 7 trinn (med bilder)

Video: ESP32 NTP temperaturprobe koketermometer med Steinhart-Hart-korreksjon og temperaturalarm .: 7 trinn (med bilder)

Video: ESP32 NTP temperaturprobe koketermometer med Steinhart-Hart-korreksjon og temperaturalarm .: 7 trinn (med bilder)
Video: ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction 2024, Juli
Anonim
Image
Image
ESP32 NTP temperaturprobe koketermometer med Steinhart-Hart-korreksjon og temperaturalarm
ESP32 NTP temperaturprobe koketermometer med Steinhart-Hart-korreksjon og temperaturalarm

Fortsatt på reisen for å fullføre et "kommende prosjekt", er "ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction and Temperature Alarm" en instruks som viser hvordan jeg legger til en NTP-temperatursonde, piezo-summer og programvare til min kapasitive berøring Instructable " ESP32 kapasitiv berøringsinngang ved hjelp av "Metallic Hole Plugs" for Buttons "for å lage et enkelt, men nøyaktig koketermometer med en programmerbar temperaturalarm.

De tre kapasitive berøringsknappene lar temperaturalarmnivået stilles inn. Ved å trykke på midtknappen vises displayet "Still alarmtemperatur", slik at venstre og høyre knapp kan redusere eller øke alarmtemperaturen. Ved å trykke og slippe den venstre knappen reduseres alarmtemperaturen en grad, mens du holder inne venstre knapp for å redusere alarmtemperaturen kontinuerlig til den slippes. På samme måte vil trykk og slipp av høyre knapp øke alarmtemperaturen med én grad, mens du holder inne den høyre knappen for å øke alarmtemperaturen kontinuerlig til den slippes. Når du er ferdig med å justere alarmtemperaturen, berører du bare midtknappen igjen for å gå tilbake til temperaturdisplayet. Når som helst temperaturen er lik eller høyere enn alarmtemperaturen, vil piezo -summeren høres.

Og som nevnt, brukes en NTP-temperatursonde i designet sammen med Steinhart-Hart-ligningene og koeffisientene som er nødvendige for nøyaktige temperaturavlesninger. Jeg har inkludert en overdrevent omfattende beskrivelse av Steinhart-Hart-ligningen, Steinhart-Hart-koeffisientene, spenningsdelere og algebra i trinn 1 (som en bonus får jeg meg til å sove hver gang jeg leser den, så du vil kanskje hopp over trinn 1 og gå rett til trinn 2: Montering av elektronikken, med mindre du selvfølgelig trenger en lur).

Hvis du bestemmer deg for å bygge dette koketermometeret, har jeg inkludert følgende filer for tilpasning og 3D -utskrift:

  • Arduino -fil "AnalogInput.ino" som inneholder programvaren for designet.
  • Autodesk Fusion 360 cad -filer for saken som viser hvordan saken ble designet.
  • Cura 3.4.0 STL -filer "Case, Top.stl" og "Case, Bottom.stl" klar for 3D -utskrift.

Du trenger også kjennskap til Arduino -miljøet samt loddeferdigheter og utstyr, og i tillegg trenger du tilgang til nøyaktige digitale ohmmetre, termometre og temperaturkilder for kalibrering.

Og som vanlig har jeg sannsynligvis glemt en eller to filer, eller hvem vet hva annet, så ikke nøl med å spørre hvis du har spørsmål. Jeg gjør mange feil.

Elektronikken ble designet med blyant, papir og en Radio Shack EC-2006a (kat. 65-962a) soldrevet kalkulator.

Programvaren ble designet med Arduino 1.8.5.

Etuiet ble designet med Autodesk Fusion 360, skåret i skiver med Cura 3.4.0 og skrevet ut i PLA på en Ultimaker 2+ Extended og en Ultimaker 3 Extended.

Og en siste merknad, jeg mottar ingen kompensasjon i noen form, inkludert men ikke begrenset til gratis prøver, for noen av komponentene som brukes i dette designet

Trinn 1: Matematikk, matematikk og mer matematikk: Steinhart - Hart, koeffisienter og motstandsdividers

Math, Math and More Math: Steinhart - Hart, Coefficients and Resistor Dividers
Math, Math and More Math: Steinhart - Hart, Coefficients and Resistor Dividers

Mine tidligere design som inneholdt en NTC -temperatursonde brukte en tabelloppslagsteknikk for å konvertere den innkommende spenningen fra en motstandsdeler til temperatur. Siden ESP32 er i stand til tolv bits analog inngang, og siden jeg designet for økt nøyaktighet, bestemte jeg meg for å implementere "Steinhart-Hart" -ligningen i koden for spenning til temperaturkonvertering.

Steinhart-Hart-ligningen ble først utgitt i 1968 av John S. Steinhart og Stanley R. Hart, og definerer motstanden mot temperaturforholdet til 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-koeffisientene (mer om det om et øyeblikk).
  • Og termistor er temperaturmålerens termistormotstandsverdi ved gjeldende temperatur.

Så hvorfor er denne tilsynelatende kompliserte Steinhart-Hart-ligningen nødvendig for et enkelt NTC-temperatursondebasert digitalt termometer? En "ideell" NTC -temperatursonde ville gi en lineær motstandsrepresentasjon av den faktiske temperaturen, og dermed ville en enkel lineær ligning som involverer spenningsinngang og skalering resultere i en nøyaktig temperaturpresentasjon. Imidlertid er NTC-temperatursonder ikke lineære, og når de kombineres med den ikke-lineære analoge inngangen til praktisk talt alle rimelige enkeltkortprosessorer som WiFi Kit 32, produserer de ikke-lineære analoge innganger og dermed unøyaktige temperaturavlesninger. Ved å bruke en ligning som Steinhart-Hart sammen med forsiktig kalibrering, kan man oppnå svært nøyaktige temperaturavlesninger ved bruk av NTC-temperatursonder med en rimelig enkeltkortprosessor ved å generere en veldig nær tilnærming til den faktiske temperaturen.

Så tilbake til Steinhart-Hart-ligningen. Ligningen bruker de tre koeffisientene A, B og C for å bestemme temperaturen som en funksjon av termistormotstanden. Hvor kommer disse tre koeffisientene fra? Noen produsenter gir disse koeffisientene sine NTC -temperatursonder, og andre ikke. Videre er det mulig at produsenten har gitt koeffisienter for den nøyaktige temperatursonden du kan kjøpe, og er sannsynligvis koeffisienter som er representative for en stor prøve av alle temperaturprober de produserer over en periode. Og til slutt kunne jeg ganske enkelt ikke finne koeffisientene for sonden som ble brukt i dette designet.

Uten de nødvendige koeffisientene opprettet jeg Steinhart-Hart Spreadsheet, en kalkulatorbasert kalkulator som hjelper til med å generere de nødvendige koeffisientene for en NTC-temperatursonde (jeg mistet lenken til en lignende nettbasert kalkulator jeg brukte for mange år siden, så jeg opprettet denne). For å bestemme koeffisientene for en temperatursonde, begynner jeg med å måle verdien av 33k -motstanden som brukes i spenningsdeleren med et digitalt ohmmeter, og angi verdien i det gule området på regnearket merket "Resistor". Deretter plasserer jeg temperatursonden i tre miljøer; første romtemperatur, andre isvann og tredje kokende vann, sammen med et kjent nøyaktig digitalt termometer, og gi tid til at temperaturen på termometeret og termistorinngangstallet vises på WiFi Kit 32 -skjermen (mer om dette senere) for å stabilisere seg. Med både temperaturen og termistorinngangstellingen stabilisert, angir jeg temperaturen angitt av det kjente nøyaktige termometeret og termistortellingen som vises på displayet til WiFi -settet 32 i det gule området i regnearket merket "grader F fra termometer" og "AD Tell fra henholdsvis WiFi Kit 32 "for hvert av de tre miljøene. Når alle målinger er angitt, gir det grønne området i regnearket A-, B- og C-koeffisientene som kreves av Steinhart-Hart-ligningen, som deretter enkelt kopieres og limes inn i kildekoden.

Som tidligere nevnt er produksjonen av Steinhart-Hart-ligningen i grader Kelvin, og denne designen viser grader Fahrenheit. Konvertering fra grader Kelvin til grader Fahrenheit er som følger:

Konverter først grader Kelvin til grader Celsius ved å trekke fra 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 andre, konverter grader Celsius til grader Fahrenheit som følger:

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

Etter at Steinhart-Hart-ligningen og koeffisientene er fullført, er det nødvendig med en andre ligning for å lese av motstandsdelerutgangen. En modell av motstandsdeleren som brukes i dette designet er:

vRef <--- Termistor <--- vOut <--- Motstand <--- Jord

hvor:

  • vRef i dette designet er 3.3vdc.
  • Termistor er NTC -temperatursonden som brukes i motstandsdeleren.
  • vOut er spenningsutgangen til motstandsdeleren.
  • Motstand er 33k -motstanden som brukes i motstandsdeleren.
  • Og bakken er, vel, bakken.

vUt av motstandsdeleren i dette designet er koblet til WiFi Kit 32 analog inngang A0 (pin 36), og spenningsutgangen til motstandsdeleren beregnes som følger:

vOut = vRef * Resistor / (Resistor + Thermistor)

Som nevnt i Steinhart-Hart-ligningen, er imidlertid termistormotstandsverdien nødvendig for å oppnå temperatur, ikke spenningsutgangen til motstandsdeleren. Så å omorganisere ligningen for å levere termistorverdien krever bruk av en liten algebra som følger:

Multipliser begge sider med "(Resistor + Thermistor)", noe som resulterer i:

vOut * (motstand + termistor) = vRef * motstand

Del begge sider med "vOut" som resulterer i:

Motstand + termistor = (vRef * motstand) / vOut

Trekk fra "Resistor" fra begge sider, noe som resulterer i:

Termistor = (vRef * Resistor / vOut) - Motstand

Og til slutt, ved å bruke den distribuerende eiendommen, forenkle:

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

Ved å erstatte WiFi Kit 32 A0 analoge inngangstall fra 0 til 4095 for vOut, og erstatte verdien på 4096 med vRef, blir motstandsdelerligningen som gir termistormotstandsverdien som kreves av Steinhart-Hart-ligningen:

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

Så med matematikken bak oss, la oss sette sammen litt elektronikk.

Trinn 2: Montering av elektronikken

Montering av elektronikk
Montering av elektronikk
Montering av elektronikk
Montering av elektronikk
Montering av elektronikk
Montering av elektronikk

For elektronikken hadde jeg tidligere satt sammen ESP32 Capacitive Touch-demonstratoren https://www.instructables.com/id/ESP32-Capacitive … Med denne monteringen kreves følgende tilleggskomponenter:

  • Fem, 4 "biter av 28awg ledning (en rød, en svart, en gul og to grønn).
  • En, Maverick "ET-72 Temperature Probe" sonde (https://www.maverickthermometers.com/product/pr-003/).
  • En 2,5 mm "telefon" -kontakt, panelmontering (https://www.mouser.com/ProductDetail/502-TR-2A).
  • En, 33k ohm 1% 1/8 watt motstand.
  • En, piezo -summer https://www.adafruit.com/product/160. Hvis du velger en annen piezo -summer, må du kontrollere at den samsvarer med spesifikasjonene til denne (firkantbølgedrevet, <= strømutgang fra ESP32).

For å montere tilleggskomponentene utførte jeg følgende trinn:

  • Fjernet og fortinn endene på hver 4 "trådlengde som vist.
  • Loddet den ene enden av den gule ledningen og den ene enden av 33k ohm motstanden til "Tips" -pinnen på telefonkontakten.
  • Loddet den ene enden av den svarte ledningen til den frie enden av 33k ohm motstanden og trimmet av overflødig motstandstråd.
  • Påført varmekrympeslange over ledningene og motstanden.
  • Loddet den ene enden av den røde ledningen til "Sleeve" -pinnen på telefonkontakten.
  • Loddet den frie enden av den gule ledningen til pinne 36 på WiFi -settet 32.
  • Loddet den frie enden av den svarte ledningen til GND -pinnen på WiFi Kit 32.
  • Loddet den frie enden av den røde ledningen til 3V3 -pinnen på WiFi -settet 32.
  • Loddet en grønn ledning til en ledning i piezo -summeren.
  • Loddet den gjenværende grønne ledningen til den gjenværende ledningen til piezo -summeren
  • Loddet den frie enden av en av de grønne piezotrådene til pinne 32 på WiFi -settet 32.
  • Loddet den frie enden av de resterende grønne piezotrådene til GND -pinnen på WiFi -settet 32.
  • Koble temperatursonden til telefonkontakten.

Da alle ledningene var fullført, sjekket jeg arbeidet mitt.

Trinn 3: Installere programvaren

Installere programvaren
Installere programvaren

Filen "AnalogInput.ino" er en Arduino -miljøfil som inneholder programvaren for designet. I tillegg til denne filen trenger du "U8g2lib" grafikkbibliotek for WiFi Kit32 OLED -skjermen (se https://github.com/olikraus/u8g2/wiki for ytterligere informasjon om dette biblioteket).

Med U8g2lib -grafikkbiblioteket installert i Arduino -katalogen din og "AnalogInput.ino" lastet inn i Arduino -miljøet, kompilerer og laster du ned programvaren til WiFi Kit 32. Når den er lastet ned og kjørt, er topplinjen i OLED -skjermen på WiFi Kit 32 skal lese "Temperatur" med gjeldende temperatur vist i stor tekst i midten av displayet.

Trykk på midtknappen (T5) for å vise displayet "Still alarmtemperatur". Juster alarmtemperaturen ved å trykke enten på venstre knapp (T4) eller høyre knapp (T6) som beskrevet i innledningen. For å teste alarmen, juster alarmtemperaturen til å være lik eller lavere enn gjeldende temperatur, og alarmen skal lyde. Når du er ferdig med å stille alarmtemperaturen, trykker du på midtknappen for å gå tilbake til temperaturdisplayet.

Verdiene dProbeA, dProbeB, dProbeC og dResistor i programvaren er verdiene jeg bestemte under kalibrering av sonden jeg brukte i dette designet og skulle generere temperaturavlesninger nøyaktige til noen få grader. Hvis ikke, eller hvis høyere nøyaktighet er ønsket, er kalibrering neste.

Trinn 4: Kalibrering av NTP -temperatursonden

Kalibrering av NTP -temperatursonden
Kalibrering av NTP -temperatursonden

Følgende elementer er nødvendige for å kalibrere temperatursonden:

  • Ett digitalt ohmmeter.
  • Et kjent nøyaktig digitalt termometer som er i stand til 0 til 250 grader F.
  • Ett glass isvann.
  • En gryte med kokende vann (vær veldig, veldig forsiktig!).

Start med å skaffe den faktiske 33k motstandsverdien:

  • Fjern strømmen fra WiFi Kit 32 -kortet.
  • Fjern temperatursonden fra telefonkontakten (det kan også være nødvendig å avlodde den svarte ledningen fra WiFi-settet 32, avhengig av ditt digitale ohmmeter).
  • Åpne Steinhart-Hart-regnearket.
  • Mål verdien av 33k ohm motstanden ved hjelp av det digitale ohmmeteret og skriv det inn i den gule "Resistor" -boksen i regnearket og i variabelen "dResistor" i programvaren. Selv om dette kan virke overdreven, kan en 33k ohm 1% resister faktisk påvirke nøyaktigheten til temperaturdisplayet.
  • Koble temperatursonden til telefonkontakten.

Få deretter Steinhart-Hart-koeffisientene:

  • Slå på det kjente, nøyaktige digitale termometeret.
  • Koble en USB -strømkilde til WiFi -settet 32.
  • Trykk og hold inne venstre (T4) og høyre (T6) -knapp samtidig til displayet "Thermistor Counts" vises.
  • La både det digitale termometeret og termistortellerne stabilisere seg.
  • Skriv inn temperaturen og termistortellene i de gule kolonnene "grader F fra termometer" og "AD -tellinger fra ESP32" på raden "rom".
  • Sett inn både det digitale termometeret og termistorprober i isvann og la begge skjermene stabilisere seg.
  • Skriv inn temperaturen og termistortallene i de gule kolonnene "grader F fra termometer" og "AD -tellinger fra ESP32" på raden "kaldt vann".
  • Sett inn både det digitale termometeret og termistorprober i kokende vann og la begge skjermene stabilisere seg.
  • Skriv inn temperaturen og termistortallene i de gule kolonnene "grader F fra termometer" og "AD -tellinger fra ESP32" på raden "kokende vann".
  • Kopier den grønne "A:" -koeffisienten til variabelen "dProbeA" i kildekoden.
  • Kopier den grønne "B:" -koeffisienten til variabelen "dProbeB" i kildekoden.
  • Kopier den grønne "C:" -koeffisienten til variabelen "dProbeC" i kildekoden.

Kompiler og last ned programvaren til WiFi Kit 32.

Trinn 5: 3D -utskrift av saken og sluttmontering

3D -utskrift av saken og sluttmontering
3D -utskrift av saken og sluttmontering
3D -utskrift av saken og sluttmontering
3D -utskrift av saken og sluttmontering
3D -utskrift av saken og sluttmontering
3D -utskrift av saken og sluttmontering

Jeg trykte både "Case, Top.stl" og "Case, Bottom.stl" i.1 mm laghøyde, 50% utfylling, uten støtter.

Med saken trykt monterte jeg elektronikken og saken slik:

  • Jeg avloddet ledningene fra de tre hullpluggene, presset hullpluggene på plass i "Case, Top.stl", og loddet deretter ledningene på nytt på hullpluggene, og merk nøye venstre (T4), midten (T5) og høyre (T6) ledninger og de respektive knappene.
  • Fest telefonkontakten til det runde hullet i "Case, Bottom.stl" ved å bruke den medfølgende mutteren.
  • Plasserte piezo -summeren i bunnen av saken ved siden av telefonkontakten, og festet på plass med dobbeltsidig tape.
  • Skyv WiFi -settet 32 på plass i bunnmonteringen, og sørg for at USB -porten på WiFi -settet 32 er justert med det ovale hullet i bunnen av beholderen (IKKE trykk på OLED -skjermen for å plassere WiFi -settet 32 i bunnen av esken forsamling, stol på meg på denne, bare ikke gjør det!).
  • Presset kabinettets overdel på bunnen av kabinettet og festet på plass med små prikker tykt cyanoakrylatlim på hjørnene.

Trinn 6: Om programvaren

Om programvaren
Om programvaren

Filen "AnalogInput.ino" er en modifikasjon av filen "Buttons.ino" fra min forrige Instructable "https://www.instructables.com/id/ESP32-Capacitive-Touch-Buttons/". Jeg har endret de tre originale kodeseksjonene "setup ()", "loop ()" og "InterruptService ()" for å inkludere programvare for sonden og alarmen, og jeg har lagt til ytterligere tre kodeseksjoner "Analog ()", "Knapper ()" og "Display ()" for å rydde opp i "loop ()" og legge til nødvendig programvare for sonden og alarmen.

"Analog ()" inneholder koden som er nødvendig for å lese termistortellingen i en matrise, gjennomsnittlig mengden tellinger, bruke spenningsdeleren til å generere termistorverdien og til slutt bruke Steinhart-Hart-ligningene og temperaturkonverteringsligningene for å generere grader Fahrenheit.

"Buttons ()" inneholder koden som er nødvendig for å behandle knappetrykk og redigere alarmtemperaturen.

"Display ()" inneholder koden som er nødvendig for å presentere informasjonen på OLED -skjermen.

Hvis du har spørsmål eller kommentarer om koden, eller andre aspekter av denne instruksjonsboken, kan du gjerne spørre, så skal jeg gjøre mitt beste for å svare på dem.

Jeg håper du likte det (og fortsatt er våken)!

Trinn 7: "Kommende prosjekt"

De
De

Det kommende prosjektet, "Intelligrill® Pro", er en røykermonitor med dobbel temperatur sonde med:

  • Steinhart-Hart temperatursondeberegninger (i motsetning til "oppslag" -tabeller) for økt nøyaktighet som er inkorporert i denne instruksjonsboken.
  • Forutsigbar tid til ferdigstillelse på sonde 1 som inneholder den økte nøyaktigheten fra Steinhart-Hart-beregningene.
  • En andre sonde, sonde 2, for overvåking av røykertemperatur (begrenset til 32 til 399 grader).
  • Kapasitive berøringsinngangskontroller (som i forrige Instructable).
  • WIFI -basert ekstern overvåking (med en fast IP -adresse, gjør det mulig å overvåke røykerfremgangen hvor som helst en internettforbindelse er tilgjengelig).
  • Utvidet temperaturområde (32 til 399 grader).
  • Hørbare fullføringsalarmer både i Intelligrill® -senderen og på de fleste WiFi -kompatible overvåkingsenheter.
  • Temperaturvisning i enten grader F eller grader C.
  • Tidsformat i enten HH: MM: SS eller HH: MM. Batteridisplay i enten volt eller % ladet.
  • Og PID -utgang for sneglebaserte røykere.

"Intelligrill® Pro" tester fortsatt for å bli den mest nøyaktige, funksjonelle og pålitelige HTML -baserte Intelligrill® jeg har designet. Det er fortsatt under test, men med måltider hjelper det å forberede under testing, jeg har gått opp mer enn noen få kilo.

Igjen, jeg håper du liker det!

Anbefalt: