Flerkanalstermostat på arduino uno. Vifte med Arduino, som avhenger av temperaturen. Komponenter i en PID-kontroller

Det skjematiske diagrammet av en hjemmelaget fire-kanals termostat med temperaturvisning, bygget på grunnlag av Arduino UNO, LM325 og med en 1602A-skjerm, lar deg kontrollere fire separate belastninger.

Her beskriver vi en oppgradert versjon av apparatet, som i tillegg til å passivt måle og angi temperatur, også kan styre fire varmeovner for å opprettholde en innstilt temperatur på fire forskjellige steder, hvor det i den første versjonen kun var mulig å måle temperatur.

Driften av et fire-kanals termometer og dets program er beskrevet i detalj i forrige artikkel (L.1), så her vil vi bare snakke om endringer for å implementere driften av en fire-kanals termostat.

Skjematisk diagram

Det skjematiske diagrammet er vist i fig. 1.

Ris. 1. Skjematisk diagram av en termostat på Arduino UNO, LM325 med 1602A display.

I motsetning til den første kretsen (L.1), er det her fire transistorbrytere lastet på reléviklingene K1-K4, som styrer fire forskjellige varmeenheter (H1-H4). Kontrollkommandoer for disse tastene kommer fra fire digitale porter D9-D12 på ARDUINO UNO-kortet.

Program

Programmet er vist i tabell 1.

Tabell 1.

Den første forskjellen er at det finnes porter for å kontrollere varmeovnene. Dette er portene D9-D12, de er spesifisert her:

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);

pinMode(10, OUTPUT);

pinMode(9, OUTPUT);

Du kan velge andre ledige digitale porter; etter tilkobling av indikatoren er det fortsatt D8 og D13 igjen. Men forfatteren valgte disse: D9, D10, D11, D12. Den andre forskjellen er at if-komparator-funksjonen brukes til å kontrollere varmeovnene. I linjer:

hvis (temp< -15)digitalWrite(12, HIGH);

if(temp > -15)digitalWrite(12, LOW);

hvis(tempi< 1)digitalWrite(11, HIGH);

if(tempi > ​​1)digitalWrite(11, LOW);

if(temp2< 20)digitalWrite(10, HIGH);

if(temp2 > 20)digitalWrite(10, LAV);

if(temp3< 10)digitalWrite(9, HIGH);

if(temp3 > 10)digitalWrite(9, LOW);

Disse linjene indikerer ved hvilken temperatur, hvilket logisk nivå som skal være på den tilsvarende porten. For eksempel, hvis temperaturen til den første sensoren (T1) er under -15°C, vil det være en logisk temperatur ved port D12. Når temperaturen på den andre sensoren (T2) er under 1°C, vil det være en logisk temperatur ved port D11.

Når temperaturen på den tredje sensoren (TZ) er under 20°C, vil det være en logisk temperatur ved port D10. Når temperaturen på den fjerde sensoren (T4) er under 10°C, vil det være en logisk temperatur ved port D9. Selvfølgelig kan du stille inn helt forskjellige temperaturer - alle som er nødvendige for den spesifikke bruken av denne enheten.

Dessuten, allerede i den ferdige enheten, kan de enkelt endres om nødvendig. For å gjøre dette må du koble en personlig datamaskin til USB-porten på ARDUINO UNO-kortet og laste et program med andre data om temperaturterskler. I prinsippet kan du for dette gi en USB-kontakt på kroppen til den ferdige enheten.

Vanligvis er det i en "typisk" termostat en hysteresesløyfe, det vil si en krets som skaper en forskjell mellom temperaturen der varmeren slås på og temperaturen den slår seg av. Dette er nødvendig for at varmeren ikke skal slå seg på/av veldig ofte. Dette er spesielt viktig hvis varmeren styres av et elektromagnetisk relé.

Fordi relékontaktene ikke er designet for denne driftsmodusen, og kan raskt svikte fra å brenne på grunn av gnister. Men hysterese introduserer en feil i driften av termostaten. Her ble det besluttet å ikke lage hysterese, men for å sikre at relékontaktene ikke veksler for ofte, bare senke driften av enheten. Slik gjør du dette i linjen:

Visningstiden er økt til tre sekunder. Som et resultat gjentas målingene med en periode på tre sekunder, og reléet kan i alle fall ikke bytte mer enn en gang hvert tredje sekund.

Detaljer

Alle elektromagnetiske reléer K1-K4 kan brukes med 12V viklinger og kontakter kraftige nok til å kontrollere spesifikke varmeovner.

Utgangstrinn kan lages ved å bruke andre kretser, for eksempel ved bruk av opto-mistorer. I dette tilfellet er lysdiodene til optosimitorer eller såkalte "solid-state reléer" koblet til de tilsvarende portene på ARDUINO UNO-kortet gjennom strømbegrensende motstander.

Karavkin V. RK-08-17.

Litteratur: 1. Karavkin V. - Fire-kanals termometer på ARDUINO UNO, RK-06-17.

Hovedoppgaven til kjøleskapskontrolleren er å opprettholde den innstilte temperaturen i kammeret. Temperaturregulatoren vil gjøre dette ved å endre den elektriske effekten på Peltier-modulen.

I forrige leksjon utviklet vi en strømregulator. Koblingen mellom strøm- og temperaturregulatorer ser slik ut.

  • Temperaturregulatoren mottar den målte temperaturen, sammenligner den med innstilt temperatur og beregner innstilt effektverdi for effektregulatoren.
  • Strømregulatoren genererer PWM tilsvarende den angitte effekten.

Vi bygde strømregulatoren i henhold til loven om integrert regulering. For å stabilisere temperaturen vil vi bruke en mer kompleks kontrollalgoritme - en proporsjonal-integral-derivert (PID) kontroller.

PID-kontroller.

I forrige leksjon snakket jeg i detalj om . Han understreket fordeler og ulemper.

En regulator som opererer etter dette prinsippet har høy nøyaktighet. De resterende kriteriene for reguleringskvalitet - hastighet og stabilitet - er ikke på nivå.

For å oppnå høy ytelse for alle kriterier, er det nødvendig å bruke en regulator som kombinerer ulike regulatoriske lover.

Den proporsjonal-integral-derivative (PID) kontrolleren er nettopp en slik enhet. Den genererer et utgangssignal som er summen av tre komponenter med forskjellige overføringsegenskaper. Takket være dette gir PID-kontrolleren høy kvalitet regulering og lar deg optimalisere styringen i henhold til individuelle kriterier.

Følgende er involvert i å generere utgangssignalet til PID-kontrolleren:

  • Proporsjonal komponent– Verdien er proporsjonal med mismatchfeilen (forskjellen mellom spesifiserte og reelle verdier for den kontrollerte parameteren).
  • Integrerende komponent– mismatch feilintegral.
  • Differensierende komponent– avledet av mismatchfeilen.

Den matematiske formen for å skrive PID-kontrollerloven er:

o(t) = P + I + D = K p e(t) + K i ∫e(t)dt + K d de(t)/dt

  • o(t) – utgangssignal;
  • P - proporsjonal komponent;
  • I – integrerende komponent;
  • D – differensierende komponent;
  • Kp, Ki, Kd - koeffisienter for proporsjonale, integrerende, differensierende lenker;
  • e(t) – mismatch feil.

I skjematisk form kan PID-regulatoren representeres som følger.

Blokkskjemaet til PID-spenningsregulatoren U ser slik ut.

  • Den målte spenningen Ureal(t) trekkes fra den gitte bruken.
  • Den resulterende mistilpasningsfeilen e(t) mates til de proporsjonale, integrerende og differensierende lenkene.
  • Som et resultat av summen av komponentene oppnås en kontrollhandling o(t), som påføres kontrollelementet.

Ved implementering av en PID-regulator i programvare, skjer beregninger av utgangssignalet med jevne mellomrom. De. Kontrolleren er diskret i tid. Derfor vil jeg videre bruke uttrykk: forrige signaltilstand, forrige verdi, etc. Vi snakker om tilstanden til systemet ved forrige tidspunkt for prøvetaking.

Komponenter i en PID-kontroller.

En gang til. Utgangssignalet til PID-kontrolleren er summen av tre komponenter:

  • proporsjonal;
  • integrere;
  • differensiere.

Proporsjonal komponent.

P(t) = K p * e(t)

Har ingen hukommelse, dvs. verdien av utgangssignalet avhenger ikke av den forrige tilstanden til systemet. Bare følgende feil, multiplisert med en koeffisient, overføres til utgangen. Utgangssignalet kompenserer for avviket til den kontrollerte parameteren. Jo større mismatchfeil, jo større signal. Hvis feilen er 0, er utgangssignalet også 0.

Den proporsjonale komponenten er ikke i stand til å kompensere for feilen fullstendig. Dette kan sees fra formelen. Utgangssignalet er Kp ganger feilen. Hvis misforholdsfeilen er 0, så er utgangssignalet til kontrolleren 0. Og da er det ingenting å kompensere med.

Derfor er det i proporsjonale regulatorer alltid en såkalt statisk feil. Den kan reduseres ved å øke Kp-koeffisienten, men dette kan føre til en reduksjon i stabiliteten til systemet og til og med til selvsvingninger.

Ulempene med proporsjonale kontrollere inkluderer:

  • tilstedeværelse av statisk reguleringsfeil;
  • lav stabilitet med økende koeffisient.

Det er en betydelig fordel:

  • Høyhastighetsregulering. Responsen til en proporsjonal kontroller på en følgende feil er bare begrenset av systemets samplingstid.

Regulatorer som kun opererer i henhold til proporsjonalloven brukes sjelden.

Hovedoppgaven til proporsjonalkomponenten i PID-regulatoren er å øke ytelsen.

Integrerende komponent.

I(t) = K i ∫e(t)dt

Proporsjonal med integralet av mismatchfeilen. Med tanke på tidsdiskretiteten til kontrolleren, kan vi skrive dette:

I(t) = I(t -1) + K i * e(t)

  • I(t-1) – verdien av I ved forrige tidspunkt for prøvetaking.

Mismatchfeilen multipliseres med en koeffisient og legges til den forrige verdien av den integrerende lenken. De. utgangssignalet akkumuleres hele tiden og øker innvirkningen på objektet over tid. Dermed blir mismatchfeilen fullt ut kompensert selv for små verdier av feilen og koeffisienten Ki. I stabil tilstand leveres utgangssignalet til kontrolleren fullstendig av den integrerende komponenten.

Ulempene med den integrerte regulatoren inkluderer:

  • lav ytelse;
  • middelmådig stabilitet.

Verdighet:

  • Evne til å kompensere fullt ut for mismatchfeil ved enhver gevinst.

I praksis brukes ofte integrerende kontrollere (bare integrerende komponent) og proporsjonalintegrerende kontrollere (integrerende og proporsjonale komponenter).

Hovedoppgaven til integreringsleddet i PID-kontrolleren er å kompensere for den statiske feilen og sikre høy kontrollnøyaktighet.

Differensierende komponent.

D(t) = Kd de(t)/dt

Proporsjonal med endringshastigheten for følgende feil. En slags indikator på akselerasjon av feiltilpasning. Den differensierende komponenten forutsier avvik av den kontrollerte parameteren i fremtiden og motvirker dette avviket. Som regel kompenserer den for forsinkelser i regulatorens påvirkning på objektet og øker stabiliteten til systemet.

Tatt i betraktning tidsdiskretiteten til kontrolleren, kan den differensierende komponenten beregnes som følger:

D(t) = K d * (e(t) - e(t -1))

Den viser hvor mye mistilpasningsfeilverdien har endret seg over én tidsenhet av kontrollerens diskretitet.

Det er ingen regulatorer som består av en enkelt differensierende lenke.

Hovedoppgaven til differensieringsleddet i PID-regulatoren er å øke stabiliteten.

Sette opp PID-kontrolleren.

Kvaliteten på kontroll av PID-regulatorer avhenger i stor grad av hvor optimalt koeffisientene velges. Koeffisientene til PID-regulatoren bestemmes i praksis i et system med et reelt objekt ved valg. Det finnes forskjellige oppsettsmetoder. Jeg vil bare snakke om generelle prinsipper.

Kvaliteten på reguleringen bedømmes av regulatorens forbigående respons. De. i henhold til grafen over endringer i den kontrollerte parameteren over tid.

Til de tradisjonelle punktene i PID-kontroller-innstillingssekvensen, vil jeg legge til at det først og fremst er nødvendig å bestemme hvilke kontrollkvalitetskriterier som er å foretrekke.

I forrige leksjon, da vi designet en strømregulator, var vi først og fremst interessert i nøyaktighet og stabilitet. Og vi reduserte til og med ytelsen kunstig. Noen regulatorer opererer under forhold med betydelig støy og stabilitet er viktigere for dem, mens andre krever høy ytelse selv på bekostning av nøyaktighet. Optimaliseringskriteriene kan variere. Generelt er PID-kontrollere konfigurert for å sikre at alle kontrollkvalitetskriterier er på et høyt nivå.

Komponentene til PID-kontrolleren er konfigurert separat.

  • De integrerende og differensierende lenkene slås av og koeffisienten til den proporsjonale lenken velges. Hvis kontrolleren er proporsjonal-integrerende (det er ingen differensierende kobling), oppnås et fullstendig fravær av oscillasjoner i transientresponsen. Når du setter kontrolleren til høy hastighet, kan svingninger forbli. Den differensierende lenken vil prøve å kompensere for dem.
  • Den differensierende lenken er koblet til. Dens koeffisient tar sikte på å eliminere svingninger i kontrollparameteren. Hvis dette mislykkes, reduser proporsjonal koeffisient.
  • På grunn av integreringskoblingen fjernes den gjenværende mismatchfeilen.

Innstilling av PID-kontrolleren er iterativ. De. poeng for valg av koeffisienter kan gjentas mange ganger til et akseptabelt resultat er oppnådd.

På grunn av deres høye ytelse og allsidighet, er PID-kontrollere mye brukt i industrielle automasjonssystemer.

I neste leksjon skal vi utvikle en PID temperaturregulator.

Han vil dele med deg sin erfaring med å lage en smart vifterotasjonskontroller, ved hjelp av en termisk sensor, en LCD-skjerm og, selvfølgelig, Arduino.

For noen måneder siden leste jeg en rekke artikler om Arduino og ble veldig interessert i denne enheten, og bestemte meg snart for å kjøpe den. Det skal bemerkes at jeg er langt fra mikroelektronikk, så jeg likte brettet først og fremst på grunn av dets relative brukervennlighet. Etter å ha drevet med lysdioder og «Hello world»-systemer, ønsket jeg å gjøre noe praktisk, og samtidig bli mer kjent med egenskapene til Arduino. Med tanke på den unormalt varme sommeren 2010, oppsto ideen om å sette sammen en kjøligere hastighetsregulator avhengig av temperaturen med alle relaterte egenskaper vist på LCD-skjermen. Jeg håper at denne ordningen eller dens varianter vil være nyttig for noen, så jeg bestemte meg for å legge ut skissene mine.

For denne ordningen trenger vi:

  • Egentlig styret selv Arduino eller liknende;
  • Brødbrett for montering av kretskomponenter;
  • Skjerm WH1601A-NGG-CT med trimmotstand på 20 kOhm eller liknende;
  • Motstander – 220 Ohm, 10 kOhm, 4,7 kOhm;
  • Bipolar transistor SS8050D eller liknende;
  • Digital temperatursensor DS18B20;
  • Diode 1N4148 eller tilsvarende;
  • Fan aksial tre-leder (12V), for eksempel - datamaskin;
  • Jack-kontakt ernæring 2,1/5,5 mm.

Datakjøleren har tre ledninger, hvorav to - rød (+12V) og svart (GND) brukes til strømforsyning, og den tredje (gul) er koblet til en turteller bygget på et Hall-element. Dessverre er 5V fra brettet helt klart ikke nok for oss, men 6 Arduino digitale utganger kan fungere i PWM-modus (de er merket på selve brettet med hvite firkanter eller bokstavene PWM), slik at vi kan regulere signaltilførselen fra brettet til reléet, som vil være ansvarlig for endringsspenningen som tilføres viften.

Vi vil motta informasjon om omdreininger fra den tredje ledningen fra turtelleren, ved hjelp av en modifisert metode basert på implementeringen avbryter, som for de fleste Arduinoer kan komme til digitale pinner 2 (avbrudd 0) og 3 (avbrudd 1). Arduino Mega har forresten 4 ekstra pinner med mulighet til å motta avbrudd.

Nå må du posisjonere digital temperatursensor, dataene som vi vil bruke til å regulere spenningen som leveres til den digitale utgangen med PWM, og derfor for å "åpne" viftespenningskanalen. Dallas-sensorer har sitt eget Arduino-bibliotek – DallasTemperature, som vi senere skal koble til i skissen. Biblioteket må pakkes ut i arduino-0018/libraries/-katalogen.

Det siste som gjenstår er koble til LCD, hvor vi vil vise all gjeldende informasjon om temperatur og viftehastighet. Siden jeg brukte WH1601A-skjermen for byggingen, kan det være kjente problemer med å vise linjer. For å eliminere dem vil vi bruke LiquidCrystalRus-biblioteket, som også må pakkes ut i arduino-0018/libraries/-katalogen.

//Koble til biblioteket for temperatursensoren#inkludere //Koble til biblioteket for LCD#inkludere #define PowerPin 9 // pinne for å kontrollere vifteeffekten#define HallSensor 2 // pin for viftehastighetssensor (avbrudd)#define TempPin 7 // pinne for temperatursensor LiquidCrystalRus lcd(12, 11, 10, 6, 5, 4, 3); //Koble til LCD DallasTemperature tempSensor; int NbTopsFan, Calc, fadeValue; //heltallsvariabler for beregninger flyte temperament; //real variabel for å lagre temperatur typedef struct( // Introduser en ny type variabler for fans char fantype; usignert int fandiv; )fanspesifikasjoner; //Array av nye typevariabler fanspec fanspace=((0,1),(1,2),(2,8)); //Variabel ansvarlig for valg av type viftesensor (1 – unipolar Hall-sensor, 2 – bipolar Hall-sensor) røyevifte = 2; //Denne funksjonen kalles opp hver gang vi avbryter void rpm() (NbTopsFan++;) // Funksjon for beregning av påført spenning til en digital pinne med PWM void temp() ( fadeValue = min(int(temper*7),255); // Multipliser temperaturen med koeffisienten, // ta et heltall fra produktet } // Fordi den maksimale PWM-verdien er 255, da gir det ingen mening å levere mer - ta minimum to tomrom oppsett() (tempSensor.begin(TempPin); //Start temperatursensoren lcd.begin(16, 2); //Angi LCD-karakteristikker lcd.setDRAMModel(LCD_DRAM_WH1601); //Og skjermtype pinMode (HallSensor, INPUT ); // Konfigurer pin for å motta avbrudd attachInterrupt(0, rpm, RISING); //Vi binder avbrudd nummer 0 til funksjonen vår, og det vil bli beregnet hver gang signalet endres) tomrom Løkke() ( temperatur = tempSensor.getTemperature(); // Få temperaturen temp(); // Beregn den tilførte spenningen til PWM analogWrite(PowerPin, fadeValue); // Mat den NbTopsFan = 0; // Tilbakestill variabelen som inneholder omdreiningene til null forsinkelse(1000); //Vent 1 sekund Calc = ((NbTopsFan * 60)/fanspace.fandiv); //Beregn RPM-verdien i 60 sekunder delt på viftemultiplikatoren lcd.print(Calc, DEC); //Skriv ut den beregnede verdien i desimalform lcd.print(" rpm - " ); lcd.print(temperering); //Utgangstemperatur lcd.home(); )

Når du leste den første delen av tittelen, tenkte sikkert mange av dere - nok en termostat på den langmodige Arduinoen. Og ... Det er sant - ja, dette er en annen termostat for en annen kjele, et annet hus, men dette er bare delvis sant - i artikkelen vil jeg ikke konsentrere meg om selve enheten - det er virkelig mange av dem (artikler ). Jeg vil selvfølgelig beskrive termostaten, men jeg vil gjerne snakke mer om hvordan jeg koblet selve mikrokontrolleren til kjelen. Så for de som er interessert, vennligst...

Hvordan det hele begynte

Først av alt vil jeg si at jeg ikke er en programmerer i det hele tatt og aldri har jobbet med en ekte mikrokontroller før. Mitt første bekjentskap med AVR MK (og med MK generelt) var tilbake på videregående, da jeg ønsket å vite hvordan denne mystiske tingen faktisk fungerer. Jeg leste flere artikler og siden den gang har jeg bare fragmenter i minnet som kan beskrives med bare to ord - DDR og PORT - og det var der kunnskapen min endte. Så var det universitet, 5. år - “Programmering av mikrokontrollere” hvor vi alle ble kjent med MSC51 i et virtuelt miljø. Det var allerede avbrudd, tidtakere og alt annet. Vel, med denne mengden kunnskap kom jeg til problemet. La oss avslutte med dette selvbiografiske notatet og gå videre til den mer interessante delen.

Så, faktisk, hvor begynte etableringen av termostaten - etter å ha installert et autonomt varmesystem med en gasskjele, møtte jeg, som mange, de vanlige problemene - temperaturen i huset var veldig avhengig av været utenfor - frost - det er kaldt i leiligheten, må du øke temperaturen på kjølevæsken i batterier, det ble varmere - tvert imot. Slike danser med en tamburin passet ikke meg mye, fordi... justering av kjelen ble komplisert av det faktum at den var installert bak en dør, og døren ble støttet opp av en mikrobølgeovn, som lå en haug med søppel på. Vel, du skjønner ideen - en nål i et egg, et egg i en and, etc.

Dette problemet ble løst veldig enkelt - med en OTC (Outside Temperature Compensation) sensor, som er koblet til kjelen og lar den automatisk justere kjølevæsketemperaturen avhengig av utetemperaturen. Problemet så ut til å være løst, men å lese servicemanualen for kjelen (Ferolli Domiproject C24D) tråkket raskt mine forhåpninger - tilkobling av en ekstern temperatursensor er ikke tilrettelagt i denne modellen. Alle? Alle. Og nå kunne vi sannsynligvis ha fullført det, men om sommeren, under et tordenvær, brenner fortsatt kontrolltavlen ut i kjelen på en måte som fortsatt er uklar for meg, og mens han snakker med servicemannen (styret var senere reparert), spurte jeg om det var mulig å koble OTC til kjelen min? Han svarte at de kobler til ved hjelp av eksterne termostater. Dette satt fast i hukommelsen, men jeg konsentrerte meg ikke helt om det før det kalde været satte inn, og da var det fortsatt det samme problemet.

Bla gjennom de samme serviceinstruksjonene, men med mål om å se hvordan termostaten er koblet til, la jeg merke til at "OpenTherm-regulatoren" er koblet til de samme terminalene. Det var da jeg innså - dette er DET! Et Google-søk etter "OpenTherm Arduino" skuffet meg igjen - ikke noe særlig fornuftig. Det var en meldingsmonitor, men det er ikke det – jeg har ikke noe å høre på – jeg trenger bare en termostat.

La oss bygge noe enkelt på Arduino først. I kapittel 12 vi har allerede oppfunnet termostater som bruker rene analoge komponenter. La oss nå se hvordan vi kan involvere digital teknologi i denne nyttige virksomheten.

Vi har allerede nevnt (se kapittel 18), at AVR-kontrollere inkluderer en 10-bits flerkanals ADC. På Arduino-kort er pinnene spesielt merket som analoge innganger (med bokstaven EN med tall fra null til fem). Vær oppmerksom på at de også kan brukes som vanlige digitale med tall fra 14 til 18, og vi vil bruke dem i denne egenskapen. Vi skal bruke en av disse inngangene til å måle temperatur, og vi skal styre lastforbindelsen fra en av de digitale utgangene.

Til sammen trenger vi:

□ Arduino Uno-brett (alle andre vil gjøre det);

Jeg har en termistor som temperatursensor. Egnet for eksempel eksisterende

□ “Amperke” В57164‑К 103‑J med en nominell motstand på 10 kOhm ved 25 °C - dens egenskaper er gitt i kapittel 13 som en illustrasjon av egenskapene til termistorer;

□ variabel motstand 10 kOhm, konstant motstand 620 Ohm;

□ executive relé – elektromagnetisk (nødvendigvis med en forsterkende transistorbryter, se nedenfor) eller solid-state.

Moduler basert på 5-volts elektromagnetiske reléer, spesielt skreddersydd for styring fra Arduino-utganger, er tilgjengelig for salg. Elektromagnetiske releer krever i seg selv en ganske stor styrestrøm (og jo kraftigere reléet er, jo kraftigere er det; bare reed-reléene med lavest effekt kan operere direkte fra logikk), derfor må alle slike relémoduler ha en transistorforsterkerbryter. For eksempel selger Amperka en slik modul basert på HLS8L‑DC5V‑S‑C-reléet. Hvis du ikke er fornøyd med et elektromagnetisk relé, og du streber etter ekstrem enkelhet i kretsen, kan du se etter solid-state reléer - for eksempel CX240D5R fra Crydom eller lignende med en driftsspenning på 3-15 V er egnet Styrestrømmen deres er omtrent 15 mA ved 5 volt ved inngangen, noe som er akseptabelt for AVR-er, fordi deres kontrollinngang kan kobles direkte til Arduinos digitale utgang. Riktignok kan ikke CX240D5R bytte en last med en effekt på mer enn en kilowatt med en spenning på 220 volt, men for denne oppgaven trenger vi ikke mer.

Termostatkretsen på Arduino Uno er vist i fig. 21.2.

Ris. 21.2. Termostatdiagram på Arduino Uno

I diagrammet er reléviklingen K1 (med normalt åpne kontakter) konvensjonelt koblet direkte til den digitale utgangen til Arduino - det antas at dette enten er det tidligere nevnte solid-state reléet med de nødvendige egenskapene, eller rett og slett kontrollinngangen til et ferdig relémodulkort. For å overvåke tilstanden til kretsen aktiveres en LED samtidig med varmeren. Termostatprogrammet i samsvar med dette skjemaet er ekstremt enkelt:

Motstandsverdiene er justert til den spesifiserte termistoren B57164-K med en nominell motstand på 10 kOhm ved 25 °C (103-J). I samsvar med programmet vil reléet fungere nær ADC-utgangsverdien på 500. Dette er omtrent midten av 10-bitsområdet (hele skalaen er 1024 graderinger), dvs. denne verdien vil bli etablert når øvre og nedre motstandene er omtrent like i forhold til AO-inngangen (spenningen ved denne inngangen vil da være ca. 2,5 volt).

Vær oppmerksom på at begge funksjonene hvis ikke slutt med det vanlige ellers. For å forhindre skravling er hysterese introdusert i programmet: reléet slås på når kodeverdien overstiger 510, og slås av når den faller til 490. I mellomtiden vil den opprettholde den forrige tilstanden. Tjue enheter med kode (hva er i kapittel 12 vi ringte dødsone) tilsvarer omtrent 10 millivolt, dvs. at hysterese ved en temperatur i området 30–40 grader vil være litt mindre enn en tiendedel av en grad (sjekk det selv ved å bruke tabell 13.1 fra kapittel 13).

Innstilling av responstemperaturen med motstand R2 med disse parameterne er mulig i området fra ca. 22 til 96 °C. Selvfølgelig er det i praksis ikke nødvendig med et så bredt justeringsområde, så det er tilrådelig å redusere R2-verdien. Verdien av R1 velges slik at R1 og den nominelle verdien av R2 summeres til termistormotstanden ved den nedre verdien av ønsket temperaturområde (i henhold til tabell 13.1). For en mer nøyaktig passform kan du kalibrere og endre terskelverdiene i programmet ved å måle den etablerte temperaturen med et vanlig termometer.

Hvis du bruker andre sensorer i denne kretsen, ikke glem tegnet på temperaturkoeffisienten. En vanlig diode eller transistor i diodeforbindelse (som i kretser fra kapittel 13) har også en negativ helning på karakteristikken, derfor for dem i programmet trenger du bare å endre de numeriske verdiene for responsterskelen. Men halvledersensorer som TMP35 (se. kapittel 13) eller rett og slett metallmotstandstermometre (som i designet laget av kapittel 17) har en positiv temperaturkoeffisient, så driftsforholdene må reverseres. Og ikke bare endre "mer" til "mindre" og omvendt, men endre også forholdet mellom terskelene for hysterese - i den nye situasjonen må varmeren slå på hvis verdien er mindre enn den mindre terskelen, og slå på av hvis den er mer enn den større.


Topp