Flerkanalstermostat på arduino uno. Fläkt med Arduino, vilket beror på temperaturen. Komponenter i en PID-regulator

Det schematiska diagrammet över en hemmagjord fyrkanalstermostat med temperaturdisplay, byggd på basis av Arduino UNO, LM325 och med en 1602A display, låter dig styra fyra separata laster.

Här beskriver vi en uppgraderad version av enheten, som förutom att passivt mäta och indikera temperatur även kan styra fyra värmare för att hålla en inställd temperatur på fyra olika platser, där i den första versionen endast temperaturmätning var möjlig.

Driften av en fyrkanalstermometer och dess program beskrivs i detalj i den tidigare artikeln (L.1), så här kommer vi bara att prata om förändringar för att implementera driften av en fyrkanalstermostat.

Schematiskt diagram

Det schematiska diagrammet visas i fig. 1.

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

Till skillnad från den första kretsen (L.1) finns här fyra transistoromkopplare laddade på relälindningarna K1-K4, som styr fyra olika värmeenheter (H1-H4). Kontrollkommandon för dessa tangenter kommer från fyra digitala portar D9-D12 på ARDUINO UNO-kortet.

Program

Programmet visas i tabell 1.

Bord 1.

Den första skillnaden är att portar finns för att styra värmarna. Dessa är portarna D9-D12, de specificeras här:

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);

pinMode(10, OUTPUT);

pinMode(9, OUTPUT);

Du kan välja andra lediga digitala portar; efter att ha anslutit indikatorn finns det fortfarande D8 och D13 kvar. Men författaren valde dessa: D9, D10, D11, D12. Den andra skillnaden är att funktionen if komparator används för att styra värmarna. I rader:

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

if(temp > -15)digitalWrite(12, LÅG);

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

if(tempi > ​​1)digitalWrite(11, LÅG);

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

if(temp2 > 20)digitalWrite(10, LÅG);

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

if(temp3 > 10)digitalWrite(9, LÅG);

Dessa linjer indikerar vid vilken temperatur, vilken logisk nivå som ska vara på motsvarande port. Till exempel, om temperaturen på den första sensorn (T1) är under -15°C, kommer det att finnas en logisk temperatur vid port D12. När temperaturen på den andra sensorn (T2) är under 1°C kommer det att finnas en logisk temperatur vid port D11.

När temperaturen på den tredje sensorn (TZ) är under 20°C kommer det att finnas en logisk temperatur vid port D10. När temperaturen på den fjärde sensorn (T4) är under 10°C kommer det att finnas en logisk temperatur vid port D9. Naturligtvis kan du ställa in helt olika temperaturer - alla som behövs för den specifika tillämpningen av denna enhet.

Dessutom, redan i den färdiga enheten, kan de enkelt ändras vid behov. För att göra detta måste du ansluta en persondator till USB-porten på ARDUINO UNO-kortet och ladda ett program med andra data om temperaturtrösklar. I princip kan du för detta tillhandahålla en USB-kontakt på kroppen av den färdiga enheten.

Vanligtvis finns det i en "typisk" termostat en hysteresloop, det vill säga en krets som skapar en skillnad mellan temperaturen vid vilken värmaren slås på och temperaturen vid vilken den stängs av. Detta är nödvändigt för att värmaren inte ska slås på/stänga av särskilt ofta. Detta är särskilt viktigt om värmaren styrs av ett elektromagnetiskt relä.

Eftersom reläkontakterna inte är designade för detta driftsätt och kan snabbt misslyckas från att brinna på grund av gnistor. Men hysteres introducerar ett fel i termostatens drift. Här beslutades att inte skapa hysteres, utan för att säkerställa att reläkontakterna inte växlar för ofta, sakta helt enkelt ner enhetens drift. För att göra detta i raden:

Visningstiden har utökats till tre sekunder. Som ett resultat upprepas mätningarna med en period av tre sekunder, och i alla fall kan reläet inte växla mer än en gång var tredje sekund.

Detaljer

Alla elektromagnetiska reläer K1-K4 kan användas med 12V-lindningar och kontakter som är tillräckligt kraftfulla för att styra specifika värmare.

Slutsteg kan göras med andra kretsar, till exempel med opto-mistorer. I detta fall är lysdioderna på optosimitorer eller så kallade "solid-state reläer" anslutna till motsvarande portar på ARDUINO UNO-kortet via strömbegränsande motstånd.

Karavkin V. RK-08-17.

Litteratur: 1. Karavkin V. - Fyrkanalstermometer på ARDUINO UNO, RK-06-17.

Kylskåpsstyrenhetens huvuduppgift är att upprätthålla den inställda temperaturen i kammaren. Temperaturregulatorn kommer att göra detta genom att ändra den elektriska effekten på Peltier-modulen.

I föregående lektion utvecklade vi en effektregulator. Kopplingen mellan effekt- och temperaturregulatorer ser ut så här.

  • Temperaturregulatorn tar emot den uppmätta temperaturen, jämför den med den inställda temperaturen och beräknar det inställda effektvärdet för effektregulatorn.
  • Effektregulatorn genererar PWM motsvarande den specificerade effekten.

Vi byggde effektregulatorn enligt lagen om integrerad reglering. För att stabilisera temperaturen kommer vi att använda en mer komplex styralgoritm - en proportionell-integral-derivata (PID) styrenhet.

PID-regulator.

I förra lektionen pratade jag i detalj om . Han betonade dess fördelar och nackdelar.

En regulator som arbetar enligt denna princip har hög noggrannhet. De återstående kriterierna för regleringens kvalitet - hastighet och stabilitet - är inte i nivå.

För att uppnå hög prestanda för alla kriterier är det nödvändigt att använda en regulator som kombinerar olika regulatoriska lagar.

Styrenheten för proportionell integralderivata (PID) är just en sådan enhet. Den genererar en utsignal som är summan av tre komponenter med olika överföringsegenskaper. Tack vare detta ger PID-regulatorn hög kvalitet reglering och låter dig optimera förvaltningen enligt individuella kriterier.

Följande är involverade i genereringen av utsignalen från PID-regulatorn:

  • Proportionell komponent– värdet är proportionellt mot felmatchningsfelet (skillnaden mellan de angivna och verkliga värdena för den kontrollerade parametern).
  • Integrerande komponent– integral av felöverensstämmelse.
  • Differentierande komponent– derivata av missmatchningsfelet.

Den matematiska formen för att skriva PID-regulatorlagen är:

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

  • o(t) – utsignal;
  • P – proportionell komponent;
  • I – integrerande komponent;
  • D – differentierande komponent;
  • Kp, Ki, Kd – koefficienter för proportionella, integrerande, differentierande länkar;
  • e(t) – missmatchningsfel.

I schematisk form kan PID-regulatorn representeras enligt följande.

Blockschemat för PID-spänningsregulatorn U ser ut så här.

  • Den uppmätta spänningen Ureal(t) subtraheras från den givna Uset.
  • Det resulterande missanpassningsfelet e(t) matas till de proportionella, integrerande och differentierande länkarna.
  • Som ett resultat av summan av komponenterna erhålls styråtgärden o(t), som appliceras på styrelementet.

Vid implementering av en PID-regulator i mjukvara sker beräkningar av utsignalen med jämna mellanrum. De där. Regulatorn är diskret i tid. Därför kommer jag vidare att använda uttryck: föregående signaltillstånd, föregående värde, etc. Vi talar om systemets tillstånd vid föregående tidpunkt för provtagning.

Komponenter i en PID-regulator.

Igen. Utsignalen från PID-regulatorn är summan av tre komponenter:

  • proportionell;
  • integrera;
  • differentiera.

Proportionell komponent.

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

Har inget minne, d.v.s. värdet på utsignalen beror inte på systemets tidigare tillstånd. Helt enkelt följande fel, multiplicerat med en faktor, överförs till utgången. Utsignalen kompenserar för avvikelsen för den kontrollerade parametern. Ju större missmatchningsfel, desto större signal. Om felet är 0 är utsignalen också 0.

Den proportionella komponenten kan inte helt kompensera för felet. Detta kan ses från formeln. Utsignalen är Kp gånger felet. Om missmatchningsfelet är 0, så är styrenhetens utsignal 0. Och då finns det inget att kompensera med.

Därför finns det alltid ett så kallat statiskt fel i proportionella regulatorer. Den kan minskas genom att öka Kp-koefficienten, men detta kan leda till en minskning av systemets stabilitet och till och med till självsvängningar.

Nackdelarna med proportionella kontroller inkluderar:

  • förekomst av statiskt regleringsfel;
  • låg stabilitet med ökande koefficient.

Det finns en betydande fördel:

  • Höghastighetsreglering. Svaret från en proportionell styrenhet på ett efterföljande fel begränsas endast av systemets samplingstid.

Regulatorer som endast fungerar enligt proportionell lag används sällan.

Huvuduppgiften för den proportionella komponenten i PID-regulatorn är att öka prestandan.

Integrerande komponent.

I(t) = Ki ∫e(t)dt

Proportionell mot integralen av felmatchningsfelet. Med hänsyn till kontrollenhetens tidsdiskret kan vi skriva detta:

I(t) = I(t -1) + Ki * e(t)

  • I(t-1) – värdet av I vid föregående tidpunkt för provtagning.

Missmatchningsfelet multipliceras med en koefficient och adderas till det tidigare värdet på den integrerande länken. De där. utsignalen ackumuleras hela tiden och ökar dess påverkan på objektet över tiden. Således kompenseras felmatchningsfelet helt även för små värden på felet och koefficienten Ki. I ett stationärt tillstånd tillhandahålls styrenhetens utsignal helt av den integrerande komponenten.

Nackdelarna med den inbyggda regulatorn inkluderar:

  • låg prestanda;
  • medelmåttig stabilitet.

Värdighet:

  • Möjlighet att fullt ut kompensera för missmatchningsfel vid vilken vinst som helst.

I praktiken används ofta integrerande styrenheter (endast integrerande komponent) och proportionellt integrerande styrenheter (integrerande och proportionella komponenter).

Huvuduppgiften för den integrerande länken i PID-regulatorn är att kompensera för det statiska felet och säkerställa hög styrnoggrannhet.

Differentierande komponent.

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

Proportionell mot förändringstakten för följande fel. En sorts indikator på acceleration av missmatchningsfel. Den differentierande komponenten förutsäger avvikelser av den kontrollerade parametern i framtiden och motverkar denna avvikelse. Som regel kompenserar den för förseningar i regulatorns inverkan på objektet och ökar systemets stabilitet.

Med hänsyn till regulatorns tidsdiskretitet kan den differentierande komponenten beräknas enligt följande:

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

Den visar hur mycket felvärdet för felöverensstämmelse har ändrats under en tidsenhet för styrenhetens diskretitet.

Det finns inga regulatorer som består av en enda differentierande länk.

Huvuduppgiften för den differentierande länken i PID-regulatorn är att öka stabiliteten.

Inställning av PID-regulatorn.

Kvaliteten på styrningen av PID-regulatorer beror till stor del på hur optimalt koefficienterna väljs. Koefficienterna för PID-regulatorn bestäms i praktiken i ett system med ett verkligt objekt genom val. Det finns olika inställningsmetoder. Jag kommer bara att tala om allmänna principer.

Kvaliteten på regleringen bedöms av regulatorns transienta respons. De där. enligt grafen över förändringar i den kontrollerade parametern över tiden.

Till de traditionella punkterna i PID-regulatorns inställningssekvens vill jag tillägga att det först och främst är nödvändigt att bestämma vilka kontrollkvalitetskriterier som är att föredra.

I den föregående lektionen, när vi designade en effektregulator, var vi främst intresserade av noggrannhet och stabilitet. Och vi reducerade till och med artificiellt prestandan. Vissa regulatorer fungerar under förhållanden med betydande buller och stabilitet är viktigare för dem, medan andra kräver hög prestanda även på bekostnad av noggrannhet. Optimeringskriterierna kan variera. I allmänhet är PID-regulatorer konfigurerade för att säkerställa att alla kontrollkvalitetskriterier är på en hög nivå.

Komponenterna i PID-regulatorn konfigureras separat.

  • De integrerande och differentierande länkarna stängs av och koefficienten för den proportionella länken väljs. Om styrenheten är proportionellt integrerande (det finns ingen differentierande länk), så uppnås en fullständig frånvaro av svängningar i det transienta svaret. När regulatorn ställs in på hög hastighet kan svängningar kvarstå. Den differentierande länken kommer att försöka kompensera för dem.
  • Den differentierande länken är ansluten. Dess koefficient syftar till att eliminera fluktuationer i kontrollparametern. Om detta misslyckas, minska proportionalkoefficienten.
  • På grund av den integrerande länken tas det kvarvarande missmatchningsfelet bort.

Inställning av PID-regulatorn är iterativ till sin natur. De där. poäng för val av koefficienter kan upprepas många gånger tills ett acceptabelt resultat uppnås.

På grund av deras höga prestanda och mångsidighet används PID-regulatorer i stor utsträckning i industriella automationssystem.

I nästa lektion kommer vi att utveckla en PID temperaturregulator.

Han kommer att dela med dig av sin erfarenhet av att skapa en smart fläktrotationskontroller, med hjälp av en termisk sensor, en LCD-skärm och, naturligtvis, Arduino.

För några månader sedan läste jag ett antal artiklar om Arduino och blev väldigt intresserad av den här enheten och bestämde mig snart för att köpa den. Det bör noteras att jag är långt ifrån mikroelektronik, så jag gillade kortet främst på grund av dess relativa lätthet att använda. Efter att ha pysslat med lysdioder och "Hello world"-system ville jag göra något praktiskt och samtidigt bli mer bekant med Arduinos möjligheter. Med tanke på den onormalt varma sommaren 2010 uppstod idén att montera en svalare hastighetsregulator beroende på temperaturen med alla relaterade egenskaper som visas på LCD-skärmen. Jag hoppas att det här schemat eller dess variationer kommer att vara användbart för någon, så jag bestämde mig för att lägga upp mina skisser.

För detta schema behöver vi:

  • Egentligen själva tavlan Arduino eller liknande;
  • Brödbräda för montering av kretskomponenter;
  • Display WH1601A-NGG-CT med trimmotstånd på 20 kOhm eller liknande;
  • Motstånd – 220 Ohm, 10 kOhm, 4,7 kOhm;
  • Bipolär transistor SS8050D eller liknande;
  • Digital temperaturgivare DS18B20;
  • Diod 1N4148 eller likvärdig;
  • Fläkt axiell tretråd (12V), till exempel - dator;
  • Jackkontakt näring 2,1/5,5 mm.

Datorkylaren har tre trådar, varav två - röd (+12V) och svart (GND) används för strömförsörjning, och den tredje (gul) är ansluten till en varvräknare byggd på ett Hall-element. Tyvärr är 5V från kortet helt klart inte tillräckligt för oss, men 6 Arduino digitala utgångar kan fungera i PWM-läge (de är markerade på själva kortet med vita rutor eller bokstäverna PWM), så vi kan reglera signaltillförseln från kortet till reläet, som kommer att ansvara för ändringsspänningen som tillförs fläkten.

Vi kommer att få information om varv från den tredje tråden från varvräknaren, med en modifierad metod baserad på implementeringen avbryter, som för de flesta Arduinos kan komma till digitala stift 2 (avbrott 0) och 3 (avbrott 1). Arduino Mega har förresten 4 extra stift med möjlighet att ta emot avbrott.

Nu måste du positionera digital temperatursensor, vars data vi kommer att använda för att reglera spänningen som levereras till den digitala utgången med PWM, och därför för att "öppna" fläktspänningskanalen. Dallas-sensorer har ett eget Arduino-bibliotek - DallasTemperature, som vi senare kommer att koppla ihop i skissen. Biblioteket måste packas upp i arduino-0018/libraries/-katalogen.

Det sista som återstår är ansluta LCD, där vi kommer att visa all aktuell information om temperatur och fläkthastighet. Eftersom jag använde WH1601A-skärmen för bygget kan det finnas kända problem med att visa linjer. För att eliminera dem kommer vi att använda LiquidCrystalRus-biblioteket, som också måste packas upp i arduino-0018/libraries/-katalogen.

//Anslut biblioteket för temperatursensorn#omfatta //Anslut biblioteket för LCD#omfatta #define PowerPin 9 // stift för styrning av fläkteffekt#define HallSensor 2 // stift för fläkthastighetssensor (avbrott)#define TempPin 7 // stift för temperatursensor LiquidCrystalRus lcd(12, 11, 10, 6, 5, 4, 3); //Anslut LCD DallasTemperature tempSensor; int NbTopsFan, Calc, fadeValue; //heltalsvariabler för beräkningar flytande humör; //real variabel för att lagra temperatur typedef struct( // Introducera en ny typ av variabler för fläktar char fantype; osignerad int fandiv; )fanspec; //Array av nya typvariabler fanspec fanspace=((0,1),(1,2),(2,8)); //Variabel ansvarig för att välja typ av fläktsensor (1 – unipolär Hall-sensor, 2 – bipolär Hall-sensor) kolfläkt = 2; //Denna funktion kommer att anropas varje gång vi avbryter void rpm() (NbTopsFan++;) // Funktion för att beräkna den applicerade spänningen till ett digitalt stift med PWM void temp() ( fadeValue = min(int(temper*7),255); // Multiplicera temperaturen med koefficienten, // ta ett heltal från produkten } // Därför att det maximala PWM-värdet är 255, då är det ingen mening att leverera mer - ta minst två tomhet uppstart() (tempSensor.begin(TempPin); //Starta temperatursensorn lcd.begin(16, 2); //Ställ in LCD-egenskaper lcd.setDRAMModel(LCD_DRAM_WH1601); //Och skärmtyp pinMode (HallSensor, INPUT ); // Konfigurera pin för att ta emot avbrott attachInterrupt(0, rpm, RISING); //Vi binder avbrottsnummer 0 till vår funktion, och det kommer att beräknas varje gång signalen ändras) tomhet slinga() (temp = tempSensor.getTemperature(); // Få temperaturen temp(); // Beräkna den tillförda spänningen till PWM analogWrite(PowerPin, fadeValue); // Mata den NbTopsFan = 0; // Återställ variabeln som innehåller varven till noll fördröjning(1000); //Vänta 1 sekund Calc = ((NbTopsFan * 60)/fanspace.fandiv); //Beräkna RPM-värdet i 60 sekunder dividerat med fläktmultiplikatorn lcd.print(Calc, DEC); //Skriv ut det beräknade värdet i decimalform lcd.print(" rpm - " ); lcd.print(temperering); //Utgångstemperatur lcd.home(); )

När du läste den första delen av titeln tänkte säkert många av er - ännu en termostat på den långlidande Arduino. Och... Det är sant - ja, det här är en annan termostat för en annan panna, ett annat hus, men detta är bara delvis sant - i artikeln vill jag inte koncentrera mig på själva enheten - det finns verkligen gott om dem (artiklar ). Naturligtvis kommer jag att beskriva termostaten, men jag skulle vilja prata mer om hur jag kopplade själva mikrokontrollern till pannan. Så för den som är intresserad...

Hur allt började

Först och främst vill jag säga att jag inte är en programmerare alls och aldrig har sysslat med en riktig mikrokontroller tidigare. Min första bekantskap med AVR MK (och med MK i allmänhet) var tillbaka på gymnasiet, då jag ville veta hur denna mystiska sak faktiskt fungerar. Jag läste flera artiklar och sedan dess har jag bara fragment i minnet som kan beskrivas med bara två ord - DDR och PORT - och det var där min kunskap slutade. Sedan var det universitet, 5:e året - "Programmering av mikrokontroller" där vi alla bekantade oss med MSC51 i en virtuell miljö. Det fanns redan avbrott, timers och allt annat. Tja, med denna mängd kunskap kom jag till problemet. Låt oss avsluta med denna självbiografiska anteckning och gå vidare till den mer intressanta delen.

Så, faktiskt, var började skapandet av termostaten? Efter att ha installerat ett autonomt värmesystem med en gaspanna, stötte jag, som många, på de vanliga problemen - temperaturen i huset var väldigt beroende av vädret utanför - frost - det är kallt i lägenheten måste du öka temperaturen på kylvätskan i batterier, det blev varmare - tvärtom. Sådana danser med en tamburin passade mig inte särskilt mycket, för... justeringen av pannan komplicerades av att den var installerad bakom en dörr, och dörren stöddes av en mikrovågsugn, på vilken låg en massa skräp. Tja, du förstår idén - en nål i ett ägg, ett ägg i en anka, etc.

Detta problem löstes mycket enkelt - med en OTC-sensor (Outside Temperature Compensation) som är ansluten till pannan och låter den automatiskt justera kylvätsketemperaturen beroende på utetemperaturen. Problemet verkade vara löst, men att läsa servicemanualen för pannan (Ferolli Domiproject C24D) trampade snabbt mina förhoppningar - att ansluta en extern temperaturgivare är inte förutsatt i denna modell. Allt? Allt. Och nu kunde vi antagligen ha avslutat det, men på sommaren, under ett åskväder, brinner fortfarande styrtavlan ut i pannan på ett sätt som fortfarande är oklart för mig, och när man pratar med servicemannen (styrelsen var senare reparerad), frågade jag om det var möjligt att ansluta OTC till min panna? Han svarade att de ansluter med hjälp av externa termostater. Detta fastnade i mitt minne, men jag koncentrerade mig inte riktigt på det förrän det kalla vädret satte in, och då var det fortfarande samma problem.

När jag bläddrade igenom samma serviceinstruktioner, men med målet att se hur termostaten är ansluten, märkte jag att "OpenTherm-regulatorn" är ansluten till samma plintar. Det var då jag insåg - det här är DET! En Google-sökning efter "OpenTherm Arduino" gjorde mig besviken igen - inget särskilt vettigt. Det fanns en meddelandemonitor, men det är inte det – jag har inget att lyssna på – jag behöver bara en termostat.

Låt oss bygga något enkelt på Arduino först. I kapitel 12 vi har redan uppfunnit termostater som använder rent analoga komponenter. Låt oss nu se hur vi kan involvera digital teknik i denna användbara verksamhet.

Vi har redan nämnt (se kapitel 18), att AVR-kontroller inkluderar en 10-bitars flerkanalig ADC. På Arduino-kort är dess stift speciellt märkta som analoga ingångar (med bokstaven A med siffror från noll till fem). Observera att de även kan användas som vanliga digitala med nummer från 14 till 18, och vi kommer att använda dem i denna egenskap. Vi kommer att använda en av dessa ingångar för att mäta temperatur, och vi kommer att styra lastanslutningen från en av de digitala utgångarna.

Totalt behöver vi:

□ Arduino Uno-bräda (vilket som helst annat duger);

Jag har en termistor som temperaturgivare. Lämplig till exempel befintlig

□ “Amperke” В57164‑К 103‑J med ett nominellt motstånd på 10 kOhm vid 25 °C - dess egenskaper anges i kapitel 13 som en illustration av egenskaperna hos termistorer;

□ variabelt motstånd 10 kOhm, konstant motstånd 620 Ohm;

□ executive relä – elektromagnetiskt (nödvändigtvis med en förstärkande transistoromkopplare, se nedan) eller halvledarläge.

Moduler baserade på 5-volts elektromagnetiska reläer, speciellt skräddarsydda för styrning från Arduino-utgångar, finns till försäljning. Elektromagnetiska reläer i sig kräver en ganska stor styrström (och ju kraftigare reläet är, desto kraftfullare är det; endast reed-reläer med lägst effekt kan fungera direkt från logiken), därför måste alla sådana relämoduler ha en transistorförstärkaromkopplare. Till exempel säljer Amperka en sådan modul baserad på reläet HLS8L-DC5V-S-C. Om du inte är nöjd med ett elektromagnetiskt relä, och du strävar efter extrem enkelhet i kretsen, kan du leta efter solid-state reläer - till exempel CX240D5R från Crydom eller liknande med en driftspänning på 3-15 V är lämpliga Deras styrström är cirka 15 mA vid 5 volt vid ingången, vilket är acceptabelt för AVR:er, eftersom deras kontrollingång kan anslutas till Arduinos digitala utgång direkt. Det är sant att med en spänning på 220 volt kan CX240D5R inte byta en last med en effekt på mer än en kilowatt, men för denna uppgift behöver vi inte mer.

Termostatkretsen på Arduino Uno visas i Fig. 21.2.

Ris. 21.2. Termostatdiagram på Arduino Uno

I diagrammet är relälindning K1 (med normalt öppna kontakter) konventionellt ansluten direkt till den digitala utgången på Arduino - det antas att detta antingen är det tidigare nämnda halvledarreläet med de erforderliga egenskaperna, eller helt enkelt styringången för ett färdigt relämodulkort. För att övervaka kretsens tillstånd aktiveras en lysdiod samtidigt med värmaren. Termostatprogrammet i enlighet med detta schema är extremt enkelt:

Motståndsvärdena är justerade till den specificerade termistorn B57164-K med en nominell resistans på 10 kOhm vid 25 °C (103-J). I enlighet med programmet kommer reläet att fungera nära ADC-utgångsvärdet på 500. Detta är ungefär mitten av 10-bitarsområdet (hela skalan är 1024 graderingar), dvs. detta värde kommer att fastställas när den övre och nedre resistanserna är ungefär lika i förhållande till AO-ingången (spänningen vid denna ingång blir då ungefär 2,5 volt).

Observera att båda funktionerna om sluta inte med det vanliga annan. För att förhindra prat har hysteres införts i programmet: reläet slås på när kodvärdet överstiger 510 och stängs av när det sjunker till 490. Under tiden kommer det att behålla det tidigare tillståndet. Tjugo enheter kod (vad finns i kapitel 12 vi ringde dödzon) motsvarar ungefär 10 millivolt, d.v.s. hysteres vid en temperatur i intervallet 30–40 grader blir något mindre än en tiondels grad (kontrollera det själv med hjälp av Tabell 13.1 från kapitel 13).

Inställning av reaktionstemperaturen med motstånd R2 med dessa parametrar är möjlig inom området från cirka 22 till 96 °C. Naturligtvis krävs i praktiken inte ett så brett justeringsområde, så det är tillrådligt att minska R2-värdet. Värdet på R1 väljs så att R1 och det nominella värdet på R2 summerar till termistorresistansen vid det lägre värdet av det önskade temperaturområdet (enligt tabell 13.1). För en mer exakt passning kan du kalibrera och ändra tröskelvärdena i programmet genom att mäta den fastställda temperaturen med en vanlig termometer.

Om du använder andra sensorer i den här kretsen, glöm inte tecknet på temperaturkoefficienten. En vanlig diod eller transistor i diodkoppling (som i kretsar från kapitel 13) har också en negativ lutning på karakteristiken, därför för dem i programmet behöver du bara ändra de numeriska värdena för svarströskeln. Men halvledarsensorer som TMP35 (se. kapitel 13) eller helt enkelt metallmotståndstermometrar (som i designen gjord av kapitel 17) har en positiv temperaturkoefficient, så driftsförhållandena måste vändas om. Och ändra inte bara "mer" till "mindre" och vice versa, utan ändra också förhållandet mellan tröskelvärdena för hysteres - i den nya situationen måste värmaren slås på om värdet är mindre än det mindre tröskelvärdet och slå på av om den är mer än den större.


Topp