Monikanavainen termostaatti arduino unossa. Tuuletin Arduinolla, joka riippuu lämpötilasta. PID-säätimen komponentit

Kaavakuva kotitekoisesta nelikanavaisesta lämpötilanäytöllä varustetusta termostaatista, joka on rakennettu Arduino UNO:n, LM325:n pohjalta ja jossa on 1602A näyttö, mahdollistaa neljän erillisen kuorman ohjaamisen.

Tässä kuvataan laitteesta päivitetty versio, joka passiivisen lämpötilan mittaamisen ja osoittamisen lisäksi pystyy ohjaamaan myös neljää lämmitintä ylläpitämään asetettua lämpötilaa neljässä eri paikassa, joissa ensimmäisessä versiossa oli mahdollista vain lämpötilan mittaus.

Nelikanavaisen lämpömittarin toiminta ja sen ohjelma on kuvattu aika yksityiskohtaisesti edellisessä artikkelissa (L.1), joten tässä puhutaan vain muutoksista nelikanavaisen termostaatin toiminnan toteuttamiseksi.

Kaaviokuva

Kaaviokaavio on esitetty kuvassa 1.

Riisi. 1. Kaaviokuva termostaatista Arduino UNO, LM325 1602A näytöllä.

Toisin kuin ensimmäisessä piirissä (L.1), tässä relekäämeissä K1-K4 on ladattu neljä transistorikytkintä, jotka ohjaavat neljää erilaista lämmityslaitetta (H1-H4). Näiden näppäinten ohjauskomennot tulevat ARDUINO UNO -kortin neljästä digitaalisesta portista D9-D12.

Ohjelmoida

Ohjelma näkyy taulukossa 1.

Pöytä 1.

Ensimmäinen ero on, että portit on varustettu lämmittimien ohjaamiseksi. Nämä ovat portit D9-D12, ne on määritelty tässä:

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);

pinMode(10, OUTPUT);

pinMode(9, OUTPUT);

Voit valita muita vapaita digitaalisia portteja, ilmaisimen liittämisen jälkeen on jäljellä D8 ja D13. Mutta kirjoittaja valitsi nämä: D9, D10, D11, D12. Toinen ero on se, että if-vertailutoimintoa käytetään lämmittimien ohjaamiseen. Riveissä:

if(lämp< -15)digitalWrite(12, HIGH);

if(lämpö > -15)digitalWrite(12, LOW);

jos(temp< 1)digitalWrite(11, HIGH);

if(temp > 1)digitalWrite(11, LOW);

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

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

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

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

Nämä rivit osoittavat missä lämpötilassa, minkä loogisen tason vastaavan portin tulisi olla. Esimerkiksi jos ensimmäisen anturin (T1) lämpötila on alle -15°C, portissa D12 on looginen anturi. Kun toisen anturin (T2) lämpötila on alle 1°C, portissa D11 on looginen anturi.

Kun kolmannen anturin (TZ) lämpötila on alle 20°C, portissa D10 on looginen anturi. Kun neljännen anturin (T4) lämpötila on alle 10°C, portissa D9 on looginen anturi. Tietenkin voit asettaa täysin erilaisia ​​lämpötiloja - mitä tahansa, mitä tarvitaan tämän laitteen tiettyyn sovellukseen.

Lisäksi jo valmiissa laitteessa ne voidaan helposti vaihtaa tarvittaessa. Tätä varten sinun on kytkettävä henkilökohtainen tietokone ARDUINO UNO -kortin USB-porttiin ja ladattava ohjelma, joka sisältää muita tietoja lämpötilakynnyksistä. Periaatteessa tätä varten voit tarjota USB-liittimen valmiin laitteen runkoon.

Yleensä "tyypillisessä" termostaatissa on hystereesisilmukka, eli piiri, joka luo eron lämpötilan, jossa lämmitin käynnistyy, ja lämpötilan, jossa se sammuu, välille. Tämä on välttämätöntä, jotta lämmitin ei kytkeydy päälle/pois liian usein. Tämä on erityisen tärkeää, jos lämmitintä ohjataan sähkömagneettisella releellä.

Koska relekoskettimia ei ole suunniteltu tähän toimintatilaan, ja ne voivat nopeasti epäonnistua palamasta kipinöinnin vuoksi. Mutta hystereesi aiheuttaa virheen termostaatin toiminnassa. Täällä päätettiin olla luomatta hystereesiä, vaan varmistaakseen, että relekoskettimet eivät kytkeydy liian usein, yksinkertaisesti hidastaa laitteen toimintaa. Voit tehdä tämän rivillä seuraavasti:

Näyttöaikaa on pidennetty kolmeen sekuntiin. Tämän seurauksena mittaukset toistetaan kolmen sekunnin välein, ja joka tapauksessa rele ei voi kytkeytyä useammin kuin kerran kolmessa sekunnissa.

Yksityiskohdat

Mitä tahansa sähkömagneettisia releitä K1-K4 voidaan käyttää 12 V:n käämeillä ja koskettimilla, jotka ovat riittävän tehokkaita ohjaamaan tiettyjä lämmittimiä.

Lähtöportaat voidaan tehdä käyttämällä muita piirejä, esimerkiksi opto-mistoreita. Tässä tapauksessa optosimittoreiden eli ns. solid-state releiden LEDit on kytketty ARDUINO UNO -kortin vastaaviin portteihin virtaa rajoittavien vastusten kautta.

Karavkin V. RK-08-17.

Kirjallisuus: 1. Karavkin V. - Nelikanavainen lämpömittari ARDUINO UNO:lla, RK-06-17.

Jääkaapin ohjaimen päätehtävä on ylläpitää asetettu lämpötila kammiossa. Lämpötilan säädin tekee tämän muuttamalla Peltier-moduulin sähkötehoa.

Edellisellä oppitunnilla kehitimme tehonsäätimen. Tehon ja lämpötilansäätimien välinen yhteys näyttää tältä.

  • Lämpötilansäädin vastaanottaa mitatun lämpötilan, vertaa sitä asetettuun lämpötilaan ja laskee tehonsäätimelle asetetun tehoarvon.
  • Tehonsäädin tuottaa määritettyä tehoa vastaavan PWM:n.

Rakensimme tehonsäätimen integraalisäätölain mukaan. Lämpötilan stabiloimiseksi käytämme monimutkaisempaa ohjausalgoritmia - PID-säädintä.

PID-säädin.

Edellisellä oppitunnilla puhuin yksityiskohtaisesti . Hän korosti sen etuja ja haittoja.

Tällä periaatteella toimivalla säätimellä on suuri tarkkuus. Sääntelyn laadun muut kriteerit - nopeus ja vakaus - eivät täytä vaatimuksia.

Korkean suorituskyvyn saavuttamiseksi kaikilla kriteereillä on tarpeen käyttää säädintä, joka yhdistää erilaisia ​​​​sääntelylakeja.

Suhteellisen integraalijohdannaisen (PID) säädin on juuri tällainen laite. Se tuottaa lähtösignaalin, joka on kolmen komponentin summa, joilla on erilaiset siirtoominaisuudet. Tämän ansiosta PID-säädin tarjoaa korkealaatuinen säätelyä ja mahdollistaa hallinnan optimoinnin yksittäisten kriteerien mukaan.

Seuraavat osat ovat mukana PID-säätimen lähtösignaalin muodostamisessa:

  • Suhteellinen komponentti– arvo on verrannollinen epäsovitusvirheeseen (ohjatun parametrin määritellyn ja todellisen arvojen ero).
  • Integroiva komponentti– mismatch error integraali.
  • Erottava komponentti– epäsopivuusvirheen johdannainen.

PID-säätimen lain kirjoittamisen matemaattinen muoto on:

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

  • o(t) – lähtösignaali;
  • P – suhteellinen komponentti;
  • I – integroiva komponentti;
  • D – erottava komponentti;
  • Kp, Ki, Kd – suhteellisten, integroivien, erottavien linkkien kertoimet;
  • e(t) – yhteensopimattomuusvirhe.

Kaavamaisessa muodossa PID-säädin voidaan esittää seuraavasti.

PID-jännitteensäätimen U lohkokaavio näyttää tältä.

  • Mitattu jännite Ureal(t) vähennetään annetusta Usetista.
  • Tuloksena oleva epäsovitusvirhe e(t) syötetään suhteellisiin, integroiviin ja erottaviin linkkeihin.
  • Komponenttien summan tuloksena saadaan ohjaustoiminto o(t), joka kohdistetaan ohjauselementtiin.

Toteutettaessa PID-säädintä ohjelmistoon, lähtösignaalin laskelmia tapahtuu säännöllisin väliajoin. Nuo. Ohjain on ajallisesti diskreetti. Siksi käytän edelleen lausekkeita: edellinen signaalin tila, edellinen arvo jne. Puhumme järjestelmän tilasta edellisessä näytteenottopisteessä.

PID-säätimen komponentit.

Uudelleen. PID-säätimen lähtösignaali on kolmen komponentin summa:

  • suhteellinen;
  • integrointi;
  • erottava.

Suhteellinen komponentti.

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

Ei ole muistia, ts. lähtösignaalin arvo ei riipu järjestelmän edellisestä tilasta. Yksinkertaisesti seuraava virhe kerrottuna kertoimella lähetetään ulostuloon. Lähtösignaali kompensoi ohjatun parametrin poikkeaman. Mitä suurempi yhteensopivuusvirhe, sitä suurempi signaali. Jos virhe on 0, lähtösignaali on myös 0.

Suhteellinen komponentti ei pysty kompensoimaan virhettä täysin. Tämä näkyy kaavasta. Lähtösignaali on Kp kertaa virhe. Jos epäsovitusvirhe on 0, ohjaimen lähtösignaali on 0. Eikä silloin ole mitään kompensoitavaa.

Siksi suhteellisissa säätimissä on aina ns. staattinen virhe. Sitä voidaan pienentää lisäämällä Kp-kerrointa, mutta tämä voi johtaa järjestelmän stabiilisuuden heikkenemiseen ja jopa itsevärähtelyihin.

Suhteellisten säätimien haittoja ovat:

  • staattisen säätövirheen esiintyminen;
  • alhainen vakaus lisääntyvällä kertoimella.

Siinä on merkittävä etu:

  • Suuri nopeussäätö. Suhteellisen säätimen vastausta seuraavaan virheeseen rajoittaa vain järjestelmän näytteenottoaika.

Vain suhteellisuuslain mukaan toimivia sääntelijöitä käytetään harvoin.

PID-säätimen suhteellisen komponentin päätehtävänä on lisätä suorituskykyä.

Integroiva komponentti.

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

Suhteutettu epäsopivuusvirheen integraaliin. Kun otetaan huomioon ohjaimen aikadiskreetti, voimme kirjoittaa tämän:

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

  • I(t-1) – I:n arvo edellisessä näytteenottopisteessä.

Epäsopivuusvirhe kerrotaan kertoimella ja lisätään integroivan linkin edelliseen arvoon. Nuo. lähtösignaali kerääntyy koko ajan ja lisää sen vaikutusta kohteeseen ajan myötä. Siten epäsovitusvirhe kompensoituu täysin jopa pienillä virheen ja kertoimen Ki arvoilla. Vakaassa tilassa ohjaimen lähtösignaali on täysin integroiva komponentti.

Integroidun säätimen haittoja ovat:

  • alhainen suorituskyky;
  • keskinkertainen vakaus.

Arvokkuus:

  • Kyky kompensoida täysin yhteensopimattomuusvirhe millä tahansa vahvistuksella.

Käytännössä käytetään usein integroivia ohjaimia (vain integroiva komponentti) ja suhteellisesti integroivia ohjaimia (integroivia ja suhteellisia komponentteja).

PID-säätimen integroivan linkin päätehtävänä on kompensoida staattinen virhe ja varmistaa korkea ohjaustarkkuus.

Erottava komponentti.

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

Suhteutettu seuraavan virheen muutosnopeuteen. Eräänlainen osoitus epäsopivuusvirheen kiihtyvyydestä. Erottava komponentti ennustaa ohjatun parametrin poikkeamia tulevaisuudessa ja torjuu tätä poikkeamaa. Yleensä se kompensoi viiveitä säätimen vaikutuksessa kohteeseen ja lisää järjestelmän vakautta.

Ohjaimen aikadiskreettisyys huomioon ottaen voidaan erottava komponentti laskea seuraavasti:

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

Se näyttää kuinka paljon epäsopivuusvirhearvo on muuttunut säätimen diskreettisyyden yhden aikayksikön aikana.

Ei ole olemassa sääntelijöitä, jotka koostuvat yhdestä erottavasta linkistä.

PID-säätimen erotuslinkin päätehtävänä on lisätä vakautta.

PID-säätimen asetukset.

PID-säätimien ohjauksen laatu riippuu pitkälti siitä, kuinka optimaalisesti kertoimet valitaan. PID-säätimen kertoimet määritetään käytännössä järjestelmässä, jossa on todellinen kohde valinnalla. Asennusmenetelmiä on erilaisia. Puhun vain yleisistä periaatteista.

Sääntelyn laatu arvioidaan säätimen ohimenevän vasteen perusteella. Nuo. ohjatun parametrin ajan kuluessa tapahtuneiden muutosten kaavion mukaan.

PID-säätimen virityssekvenssin perinteisiin kohtiin lisäisin, että ensinnäkin on päätettävä, mitkä ohjauksen laatukriteerit ovat suositeltavia.

Edellisellä tunnilla tehosäädintä suunnitellessa kiinnostimme ensisijaisesti tarkkuus ja vakaus. Ja jopa vähennimme suorituskykyä keinotekoisesti. Jotkut säätimet toimivat huomattavan melun olosuhteissa ja niille on tärkeämpää vakaus, kun taas toiset vaativat korkeaa suorituskykyä jopa tarkkuuden kustannuksella. Optimointikriteerit voivat vaihdella. Yleensä PID-säätimet on konfiguroitu varmistamaan, että kaikki säädön laatukriteerit ovat korkealla tasolla.

PID-säätimen komponentit konfiguroidaan erikseen.

  • Integroivat ja erottavat linkit kytketään pois päältä ja suhteellisen linkin kerroin valitaan. Jos säädin on suhteellisesti integroiva (ei ole erottavaa linkkiä), saavutetaan täydellinen värähtelyjen puuttuminen transienttivasteesta. Kun säädin asetetaan suurelle nopeudelle, värähtelyjä saattaa jäädä. Erottava linkki yrittää kompensoida niitä.
  • Erottava linkki on yhdistetty. Sen kertoimella pyritään eliminoimaan ohjausparametrin vaihtelut. Jos tämä epäonnistuu, vähennä suhteellista kerrointa.
  • Integrointilinkin ansiosta jäljellä oleva epäsuhtavirhe poistetaan.

PID-säätimen viritys on luonteeltaan iteratiivista. Nuo. Kertoimien valintapisteet voidaan toistaa monta kertaa, kunnes saavutetaan hyväksyttävä tulos.

Korkean suorituskyvyn ja monipuolisuutensa ansiosta PID-säätimiä käytetään laajasti teollisuusautomaatiojärjestelmissä.

Seuraavalla oppitunnilla kehitämme PID-lämpötilansäätimen.

Hän jakaa kanssasi kokemuksensa älykkään tuulettimen pyörimisohjaimen luomisesta lämpöanturin, LCD-näytön ja tietysti Arduinon avulla.

Muutama kuukausi sitten luin useita artikkeleita Arduinosta ja kiinnostuin kovasti tästä laitteesta, ja päätin pian ostaa sen. On syytä huomata, että olen kaukana mikroelektroniikasta, joten pidin levystä ensisijaisesti sen suhteellisen helppokäyttöisyyden vuoksi. LEDien ja "Hello world" -järjestelmien parissa harrastettuani halusin tehdä jotain käytännöllistä ja samalla tutustua Arduinon ominaisuuksiin. Vuoden 2010 epätavallisen kuumaa kesää silmällä pitäen syntyi ajatus koota viileämpi nopeussäädin lämpötilasta riippuen ja kaikki siihen liittyvät ominaisuudet näkyvät LCD-näytöllä. Toivon, että tästä kaaviosta tai sen muunnelmista on jollekin hyötyä, joten päätin julkaista luonnokseni.

Tätä järjestelmää varten tarvitsemme:

  • Itse asiassa hallitus Arduino tai samankaltainen;
  • Leipälauta piirikomponenttien kokoamiseen;
  • Näyttö WH1601A-NGG-CT trimmivastus päällä 20 kOhm tai samankaltainen;
  • vastukset - 220 ohmia, 10 kOhm, 4,7 kOhm;
  • Bipolaarinen transistori SS8050D tai samankaltainen;
  • Digitaalinen lämpötila-anturi DS18B20;
  • Diodi 1N4148 Tai vastaava;
  • Tuuletin aksiaalinen kolmijohtiminen (12V), esimerkiksi - tietokone;
  • Jack-liitin ravitsemus 2,1/5,5 mm.

Tietokoneen jäähdyttimessä on kolme johtoa, joista kahta - punaista (+12V) ja mustaa (GND) käytetään virtalähteenä ja kolmas (keltainen) on kytketty Hall-elementille rakennettuun kierroslukumittariin. Valitettavasti 5V levyltä ei selvästikään riitä meille, mutta 6 Arduino-digitaalilähtöä voi toimia PWM-tilassa (ne on merkitty itse levyyn valkoisilla neliöillä tai kirjaimilla PWM), joten voimme säätää signaalin syöttöä kortilta. releeseen, joka vastaa puhaltimeen syötetystä vaihtojännitteestä.

Saamme tiedon kierroksista kolmannesta johtimesta kierroslukumittarista toteutukseen perustuvalla modifioidulla menetelmällä keskeyttää, joka useimmissa Arduinoissa voi tulla digitaalisiin nastoihin 2 (keskeytys 0) ja 3 (keskeytys 1). Muuten, Arduino Megassa on 4 lisänastaa, jotka voivat vastaanottaa keskeytyksiä.

Nyt sinun on asetettava paikka digitaalinen lämpötila-anturi, jonka tietoja käytämme digitaalilähtöön syötettävän jännitteen säätämiseen PWM:llä ja siten tuulettimen jännitekanavan "avaukseen". Dallas-antureilla on oma Arduino-kirjasto - DallasTemperature, jonka yhdistämme myöhemmin luonnoksessa. Kirjasto on purettava arduino-0018/libraries/-hakemistoon.

Viimeinen jäljellä on liitä LCD, jossa näytämme kaikki nykyiset tiedot lämpötilasta ja tuulettimen nopeudesta. Koska käytin rakentamiseen WH1601A-näyttöä, viivojen näyttämisessä voi olla tunnettuja ongelmia. Niiden poistamiseksi käytämme LiquidCrystalRus-kirjastoa, joka on myös purettava arduino-0018/libraries/-hakemistoon.

//Yhdistä lämpötila-anturin kirjasto#sisältää //Yhdistä LCD-kirjasto#sisältää #define PowerPin 9 // nasta tuulettimen tehon ohjaamiseen#define HallSensor 2 // nasta tuulettimen nopeusanturille (keskeytys)#define TempPin 7 // lämpötila-anturin tappi LiquidCrystalRus lcd(12, 11, 10, 6, 5, 4, 3); //Liitä LCD DallasTemperature tempSensor; int NbTopsFan, Calc, fadeValue; //kokonaislukumuuttujat laskelmia varten kellua temper; //todellinen muuttuja varastointilämpötilaan typedef struct( // Ota käyttöön uudentyyppiset muuttujat faneille char fanityyppi; allekirjoittamaton int fandiv; ) fanspec; //Uudentyyppisten muuttujien joukko fanspec fanspace=((0,1),(1,2),(2,8)); //Muuttuja, joka vastaa tuuletinanturin tyypin valinnasta (1 – unipolaarinen Hall-anturi, 2 – bipolaarinen Hall-anturi) char tuuletin = 2; //Tätä funktiota kutsutaan aina, kun keskeytämme void rpm() (NbTopsFan++;) // Toiminto, jolla lasketaan PWM:n avulla digitaaliseen nastaan ​​syötetty jännite void temp() ( fadeArvo = min(int(temper*7),255); // Kerro lämpötila kertoimella, // ottaa tuotteesta kokonaisluvun } // Koska suurin PWM-arvo on 255, silloin ei ole järkevää toimittaa enemmän - ota vähintään kaksi mitätön perustaa() (tempSensor.begin(TempPin); //Käynnistä lämpötila-anturi lcd.begin(16, 2); //Aseta LCD-ominaisuudet lcd.setDRAMModel(LCD_DRAM_WH1601); //Ja näyttötyyppi pinMode (HallSensor, INPUT ); // Määritä pin-koodi vastaanottamaan keskeytyksiä attachInterrupt(0, rpm, RISING); //Sidomme keskeytyksen numero 0 funktioomme, ja se lasketaan aina kun signaali muuttuu) mitätön silmukka() ( temper = tempSensor.getTemperature(); // Ota lämpötila temp(); // Laske PWM:lle syötetty jännite analogWrite(PowerPin, fadeArvo); // Syötä se NbTopsFan = 0; // Palauta kierrokset sisältävä muuttuja nollaan viive (1000); //Odota 1 sekunti Calc = ((NbTopsFan * 60)/fanspace.fandiv); //Laske kierrosluvun arvo 60 sekunniksi jaettuna tuulettimen kertoimella lcd.print(Calc, DEC); //Tulosta laskettu arvo desimaalimuodossa lcd.print(" rpm - " ); lcd.print(temper); //Lähdön lämpötila lcd.home(); )

Lukiessaan otsikon ensimmäistä osaa monet teistä luultavasti ajattelivat - toinen termostaatti pitkään kärsineessä Arduinossa. Ja... Se on totta - kyllä, tämä on toinen termostaatti toiseen kattilaan, toiseen taloon, mutta tämä on vain osittain totta - artikkelissa en halua keskittyä itse laitteeseen - niitä on todella paljon (artikkelit ). Tietenkin kuvaan termostaattia, mutta haluaisin puhua enemmän siitä, kuinka liitin itse mikro-ohjaimen kattilaan. Joten kiinnostuneet, kiitos...

Kuinka kaikki alkoi

Ensinnäkin haluan sanoa, että en ole ohjelmoija ollenkaan enkä ole koskaan aiemmin ollut tekemisissä todellisen mikro-ohjaimen kanssa. Ensimmäinen tutustumiseni AVR MK:hen (ja MK:hen yleensä) oli lukiossa, kun halusin tietää, miten tämä mystinen asia oikeasti toimii. Olen lukenut useita artikkeleita ja siitä lähtien minulla on muistissani vain katkelmia, jotka voidaan kuvata vain kahdella sanalla - DDR ja PORT - ja siihen tietoni päättyi. Sitten oli yliopisto, 5. vuosi - "Mikrokontrollerien ohjelmointi", jossa kaikki tutustuttiin MSC51:een virtuaalisessa ympäristössä. Siellä oli jo keskeytyksiä, ajastimia ja kaikkea muuta. No, tällä tietomäärällä pääsin ongelmaan. Lopetetaan tähän omaelämäkerralliseen muistiinpanoon ja siirrytään mielenkiintoisempaan osaan.

Joten itse asiassa, mistä termostaatin luominen alkoi? Asetettuani autonomisen lämmitysjärjestelmän kaasukattilalla, törmäsin monien tapaan tavanomaisiin ongelmiin - talon lämpötila oli hyvin riippuvainen säästä - pakkasta - se on kylmä asunnossa, sinun on nostettava akkujen jäähdytysnesteen lämpötilaa, se lämpeni - päinvastoin. Tällaiset tanssit tamburiinilla eivät sopineet minulle paljoa, koska... kattilan säätöä vaikeutti se, että se oli asennettu oven taakse ja ovi oli tuettu mikroaaltouunilla, jonka päällä oli roskia. No, ymmärrät idean - neula munassa, muna ankassa jne.

Tämä ongelma ratkaistiin hyvin yksinkertaisesti - OTC (Outside Temperature Compensation) -anturilla, joka on kytketty kattilaan ja jonka avulla se voi säätää automaattisesti jäähdytysnesteen lämpötilaa ulkolämpötilan mukaan. Ongelma näytti ratkeavan, mutta kattilan (Ferolli Domiproject C24D) huoltokäsikirjan lukeminen tallasi nopeasti toiveeni - ulkoisen lämpötila-anturin liittämistä ei ole tässä mallissa. Kaikki? Kaikki. Ja nyt luultavasti olisimme saaneet sen valmiiksi, mutta kesällä ukkosmyrskyn aikana ohjauskortti palaa silti kattilassa minulle vielä epäselvällä tavalla ja huoltomiehen kanssa jutellessa (taulu oli myöhemmin korjattu), kysyin, onko mahdollista liittää OTC kattilaani? Hän vastasi, että he yhdistävät ulkoisia termostaatteja. Tämä jäi mieleeni, mutta en oikeastaan ​​keskittynyt siihen ennen kuin kylmä sää tuli, ja sitten se oli edelleen sama ongelma.

Selailen samoja huolto-ohjeita, mutta tarkoituksena oli nähdä kuinka termostaatti on kytketty, huomasin, että "OpenTherm-säädin" on kytketty samoihin liittimiin. Silloin tajusin – tämä on SE! Google-haku "OpenTherm Arduino" tuotti minulle jälleen pettymyksen - ei mitään erityisen järkevää. Siellä oli viestimonitori, mutta se ei ole sitä – minulla ei ole mitään kuunneltavaa – tarvitsen vain termostaatin.

Rakennataan ensin jotain yksinkertaista Arduinolle. SISÄÄN luku 12 Olemme jo keksineet termostaatteja, joissa käytetään puhtaasti analogisia komponentteja. Katsotaan nyt, kuinka voimme ottaa digitaalisen teknologian mukaan tähän hyödylliseen liiketoimintaan.

Olemme jo maininneet (katso luku 18), että AVR-ohjaimet sisältävät 10-bittisen monikanavaisen ADC:n. Arduino-levyillä sen nastat on erityisesti merkitty analogisiksi tuloiksi (kirjaimella A numeroilla nollasta viiteen). Huomaa, että niitä voidaan käyttää myös tavallisina digitaalisina numeroilla 14-18, ja käytämme niitä tässä ominaisuudessa. Käytämme yhtä näistä tuloista lämpötilan mittaamiseen ja ohjaamme kuormitusliitäntää yhdestä digitaalilähdöstä.

Yhteensä tarvitsemme:

□ Arduino Uno -levy (mikä tahansa muu käy);

Minulla on termistori lämpötila-anturina. Sopii esimerkiksi olemassa olevaan

□ "Amperke" В57164-К 103-J, jonka nimellisvastus on 10 kOhm 25 °C:ssa - sen ominaisuudet on annettu kohdassa luku 13 kuvaamaan termistorien ominaisuuksia;

□ säädettävä vastus 10 kOhm, jatkuva vastus 620 ohmia;

□ toimeenpaneva rele – sähkömagneettinen (välttämättä vahvistustransistorikytkimellä, katso alla) tai puolijohderele.

Myynnissä on 5 voltin sähkömagneettisiin releisiin perustuvia moduuleja, jotka on erityisesti räätälöity ohjaamaan Arduino-lähdöistä. Sähkömagneettiset releet itsessään vaativat melko suuren ohjausvirran (ja mitä tehokkaampi rele, sitä tehokkaampi se on; vain pienitehoiset reed-releet voivat toimia suoraan logiikasta), joten kaikissa tällaisissa relemoduuleissa on oltava transistorivahvistinkytkin. Esimerkiksi Amperka myy tällaista HLS8L-DC5V-S-C-releeseen perustuvaa moduulia. Jos et ole tyytyväinen sähkömagneettiseen releeseen ja pyrit piirin äärimmäiseen yksinkertaisuuteen, voit etsiä puolijohdereleitä - esimerkiksi Crydomin CX240D5R tai vastaavat, joiden käyttöjännite on 3-15 V, sopivat. Niiden ohjausvirta on noin 15 mA 5 voltilla tulossa, mikä on hyväksyttävää AVR:ille, koska niiden ohjaustulo voidaan kytkeä suoraan Arduinon digitaalilähtöön. Totta, 220 voltin jännitteellä CX240D5R ei voi vaihtaa kuormaa, jonka teho on yli kilowatti, mutta tähän tehtävään emme tarvitse enempää.

Arduino Unon termostaattipiiri on esitetty kuvassa. 21.2.

Riisi. 21.2. Termostaattikaavio päällä Arduino Uno

Kaaviossa releen käämitys K1 (normaalisti avoimilla koskettimilla) on perinteisesti kytketty suoraan Arduinon digitaalilähtöön - oletetaan, että tämä on joko aiemmin mainittu puolijohderele, jolla on vaaditut ominaisuudet, tai yksinkertaisesti ohjaustulo. valmis relemoduulikortti. Piirin tilan valvontaa varten LED aktivoituu samanaikaisesti lämmittimen kanssa. Tämän järjestelmän mukainen termostaattiohjelma on erittäin yksinkertainen:

Vastuksen arvot on säädetty määritettyyn termistoriin B57164-K, jonka nimellisvastus on 10 kOhm 25 °C:ssa (103-J). Ohjelman mukaan rele toimii lähellä ADC-lähtöarvoa 500. Tämä on suunnilleen 10-bittisen alueen puoliväli (koko skaala on 1024 asteikkoa), eli tämä arvo määritetään, kun ylempi ja alempi resistanssit ovat suunnilleen samat suhteessa AO-tuloon (jännite tässä sisääntulossa on silloin noin 2,5 volttia).

Huomaa, että molemmat toiminnot josälä lopeta tavalliseen muu. Puhelun estämiseksi ohjelmaan on lisätty hystereesi: rele kytkeytyy päälle, kun koodin arvo ylittää 510, ja sammuu kun se putoaa 490:een. Sillä välin se säilyttää edellisen tilan. Kaksikymmentä yksikköä koodia (mitä on luku 12 soitimme kuollut alue) vastaavat noin 10 millivolttia, eli hystereesi lämpötila-alueella 30–40 astetta on hieman alle asteen kymmenesosa (tarkista itse taulukosta 13.1 alkaen luku 13).

Vastelämpötilan asettaminen vastuksella R2 näillä parametreilla on mahdollista alueella noin 22 - 96 °C. Käytännössä näin laajaa säätöaluetta ei tietenkään tarvita, joten R2-arvoa kannattaa pienentää. R1:n arvo valitaan siten, että R1 ja R2:n nimellisarvo laskevat yhteen termistorin resistanssin halutun lämpötila-alueen alemmalla arvolla (taulukon 13.1 mukaisesti). Tarkempaa sovitusta varten voit kalibroida ja muuttaa ohjelman kynnysarvoja mittaamalla määritetyn lämpötilan tavallisella lämpömittarilla.

Jos käytät muita antureita tässä piirissä, älä unohda lämpötilakertoimen merkkiä. Tavallinen diodi tai transistori diodiliitännässä (kuten piireissä luku 13) on myös ominaisuuden negatiivinen kaltevuus, joten niille ohjelmassa sinun on muutettava vain vastekynnyksen numeerisia arvoja. Mutta puolijohdeanturit, kuten TMP35 (katso. luku 13) tai yksinkertaisesti metalliresistanssilämpömittareita (kuten mallissa luku 17), joiden lämpötilakerroin on positiivinen, joten käyttöolosuhteet on vaihdettava. Eikä vain muuta "enemmän" "vähemmän" ja päinvastoin, vaan myös muuta hystereesin kynnysarvojen suhdetta - uudessa tilanteessa lämmittimen on kytkeydyttävä päälle, jos arvo on pienempi kuin pienempi kynnys, ja käännä pois päältä, jos se on enemmän kuin suurempi.


Ylös