Hakelämmityksen automaattiohjaus Arduinolla?

Hakelämmityksen periaate

Hakelämmityskattilaan syötetään jatkuvasti puuhaketta syöttöruuvin avulla. Puhaltimen avulla puhalletaan myös jatkuvasti ilmaa (happea) palopesään.

  • Syöttöruuvin syöttönopeutta säätämällä, voidaan lisätä kattilan tuottamaa lämpötehoa.
  • Ilmapuhalluksen nopeutta säätämällä, annetaan tarpeeksi happea palotapahtumalle, jotta palaminen tapahtuu tehokkaasti.

Suomen maaseudulla on paljon maatiloja, joissa käytetään puu/pelletti/hakelämmitystä, lämmöntuotantoon. Usein käytössä on automaattiohjaus, joka syöttää lämmityskattilaan automaattisesti palavaa polttoainetta ja pitää huolta siitä, että tuli palaa halutulla voimakkuudella. Automaatiolaitteilla on kuitenkin taipumus usein särkyä, esimerkiksi ukkosen ja muiden olosuhteiden vuoksi. Elektroniikka ei ole ikuista ja usein yritykset saattavat lopettaa jonkun tietyn laitteen valmistuksen ja varaosien saatavuus tällöin tietysti heikkenee.

Suomessa on kysyntää, avoimelle ja kustannustehokkaalle automaatiolle, jota voisi räätälöidä omiin tarpeisiin sopivaksi.

Olisi tietysti mukavaa nykyaikana, jos pystyisi seuraamaan lämmitysjärjestelmän toimintaa vaikka oman älykännykän avulla.

  • Seurata tarkemmin lämpötiloja ja hakkeen kulutusta graafisesti käyrinä, suhteessa ulkolämpötilaan ja muihin olosuhteisiin nähden.
  • Tiedon keruuta, tallennusta ja visualisointia on nykyisin mahdollista toteuttaa paljon tarkemmin, vaikka minuutin tai viiden minuutin välein.
  • Sähköpostin/tekstiviestin avulla automaattiohjaus voisi tarvittaessa lähettää hälytystietoa heti jos jotain ongelmia ilmenee.

https://www.energiatehokaskoti.fi/suunnittelu/talotekniikan_suunnittelu/lammitys/puulammitys/hakelammitys

https://www.energiatehokaskoti.fi/files/450/Maatilan_hakelammitysopas.pdf

Mitä tekoäly osaa kertoa hakelämmityksestä?

Kysytäänpä tekoälyltä, mitä se on mieltä automaattisen ohjauksen rakentamisesta, Arduinon avulla.

Kysymys: Voisiko hakelämmityksen ohjauksen tehdä käyttäen Arduinoa?

Tekoälyn vastaus:

  1. Lämpötilan mittaus: Kytke lämpötila-anturit (esimerkiksi DS18B20) Arduinoon mittamaan kattilan lämpötilaa ja mahdollisesti myös lämmitysjärjestelmän piirissä olevia muita osia.
  2. Kosteuden hallinta: Huomioi hakkeen kosteus, sillä se voi vaikuttaa polttoaineen palamiseen. Voit käyttää kosteusanturia ja ohjelmointia kosteuden seurantaan.
  3. Moottorin ohjaus: Hallitse ruuvikuljettimen moottoria (säiliössä olevan hakkeen syöttö) Arduinoon liitetyllä releellä tai ohjauskortilla.
  4. Ohjauslogiikka: Ohjelmoi Arduino ohjaamaan lämmityskattilan toimintaa ottaen huomioon mitatut lämpötilat ja kosteustiedot. Voit lisätä logiikan esimerkiksi käyttämällä säätöalgoritmeja, kuten PID-säätöä.
  5. Käyttöliittymä: Voit luoda yksinkertaisen käyttöliittymän LCD-näytön tai jopa mobiilisovelluksen avulla, jotta käyttäjä voi helposti seurata ja hallita lämmitysjärjestelmää.
  6. Langaton kommunikaatio: Käytä tarvittaessa langatonta yhteyttä, kuten WiFi- tai Bluetooth-moduuleja, jotta voit etävalvoa ja -ohjata lämmitysjärjestelmää.

Controllino on ohjelmoitava logiikka

Controllino on arduino pohjainen automaatiokäyttöä varten suunniteltu, testattu ja teollisuuteen hyväksytty ohjelmoitava logiikkalaite.

Sen avulla on helppo itse rakentaa ohjausjärjestelmiä ja ohjelmoida toiminnallisuuksia C-kielellä, arduino-kehitysympäristöllä. Vaihtoehtoisesti mahdollista on myös käyttää graafista ohjelmointia OpenPLC editorin avulla.

PT100 lämpötila-anturit:

PT100 on yleinen lämpötila-anturityyppi, joka perustuu platinaryhmän metalliseen resistanssiin. Se on tarkka ja vakaa anturityyppi, jota käytetään laajasti teollisissa sovelluksissa ja tieteellisissä mittauksissa.

Tässä muutamia keskeisiä piirteitä PT100-anturista:

  1. Resistanssi lämpötilan mukaan: PT100-anturit perustuvat platinaryhmän resistanssiin, joka muuttuu lämpötilan mukaan. Anturi on tarkka ja tarjoaa lineaarisen vastemuutoksen suhteessa lämpötilaan.
  2. Nominaaliresistanssi: PT100-anturin nominaaliresistanssi on 100 ohmia 0 °C:ssa. Kun lämpötila muuttuu, resistanssi muuttuu ja voidaan mitata tarkasti, mikä antaa tietoa ympäristön lämpötilasta.
  3. Standardit: PT100-anturit noudattavat kansainvälisiä standardeja, kuten DIN EN 60751 tai IEC 60751. Näissä standardeissa määritellään anturin tarkkuusluokka ja resistanssiarvot eri lämpötiloissa.
  4. Lämpötila-alue: PT100-anturit ovat saatavilla eri versioina, kuten PT1000, ja ne kattavat laajan lämpötila-alueen. Tyypillisesti PT100-anturit soveltuvat käytettäväksi noin -200 °C ja +600 °C välillä.
  5. Käyttökohteet: PT100-antureita käytetään monissa sovelluksissa, kuten lämmitys-, ilmastointi- ja jäähdytysjärjestelmissä, teollisuuden prosessiohjauksessa, laboratoriomittauksissa sekä tieteellisissä tutkimuksissa.
  6. Käyttöliittymät: PT100-anturit voivat liittyä mittausjärjestelmiin, jotka lukevat resistanssimuutoksen ja muuntavat sen lämpötilaksi. Tämä voi tapahtua esimerkiksi lämpötilaohjaimen tai -mittarin avulla.

PT100-anturit ovat suosittuja teollisuudessa ja tieteellisissä sovelluksissa niiden tarkkuuden ja vakauden vuoksi. Niitä käytetään erityisesti tilanteissa, joissa vaaditaan tarkkaa ja luotettavaa lämpötilanmittausta.

Kuinka voi mitata PT100 lämpötila-anturin antamaa lämpötila arvoa, Controllino arduino laitteen avulla?

Manuaalista löytyy tietoa:

https://www.controllino.com/wp-content/uploads/2023/07/CONTROLLINO-Instruction-Manual-V1.3-2023-05-15.pdf

Tekoälyn avulla tämä tieto on helppo kääntää suomeksi:

Tuloportteja, joilla on merkinnät “A0” ja “A..” käytetään analogisten jännitearvojen mittaamiseen CONTROLLINO-ohjaimen massa-potentiaalin perusteella. Tämä mahdollistaa sähköjännitteiden mittaamisen, kuten esimerkiksi anturin lähtösignaalin, joka riippuu tietyistä fysikaalisista suureista.

Tietojen lokitustoiminto toimii mikro-ohjaimen sisäisen A/D-muuntimen avulla, ja sillä on 10-bittinen tarkkuus, tuottaen arvoja välillä 0-1023. CONTROLLINO käyttää sisäistä automaattista jännitejakajaa, jota ohjataan yli syöttöjännitteen. Syöttöjännitteen mukaan jakaja kytketään oikeaan arvoon.

Jos käytät 12V syöttöjännitettä, mitattu arvo voi olla välillä 0-13,2V. 1 numero = 0,015V (15,0mV)

Jos käytät 24V syöttöjännitettä, mitattu arvo voi olla välillä 0-26,4V. 1 numero = 0,03V (30,0mV) Skaalauskerroin on:

Käyttöjännite Jakajan suhde @12V 3,06 @24V 6,14 HUOM:

Kaikki tulot ovat suojattuja sähköstaattista purkausta ja ylijännitettä vastaan (ESD-suojaus).

Happianturi (Lambda-anturi):

Lämmityskattilassa happianturit voivat olla osa polttotekniikkaa ja automaatiojärjestelmää, ja niiden tarkoitus on optimoida polttoaineen palaminen ja parantaa lämmitysjärjestelmän tehokkuutta. Seuraavassa on joitakin keskeisiä piirteitä happiantureista lämmityskattiloissa:

  1. Polttoaineen palaminen: Happianturit voivat mitata happipitoisuutta palamisprosessissa kattilan polttokammiossa. Tavoitteena on säätää polttoaineen ja ilman sekoitussuhdetta optimaalisen palamisen varmistamiseksi.
  2. Hapen hallinta: Säätämällä happipitoisuutta polttokammiossa voidaan optimoida palamisprosessia ja minimoida päästöt, kuten hiilimonoksidi (CO) ja typenoksidit (NOx).
  3. Energiatehokkuus: Happianturien avulla voidaan parantaa lämmityskattilan energiatehokkuutta, sillä optimaalinen palamisprosessi voi lisätä lämmöntuotantoa ja vähentää polttoaineenkulutusta.
  4. Päästöjen hallinta: Hyvä hapen hallinta auttaa vähentämään päästöjä, mikä on tärkeää ympäristön kannalta. Vähemmän päästöjä tarkoittaa puhtaampaa polttoainetta ja parempaa ilmanlaatua.
  5. Käyttölämpötila-alue: Happianturit lämmityskattiloissa voivat toimia laajalla lämpötila-alueella, joka sopii erilaisiin lämmitystarpeisiin.
  6. Happianturien tyypit: Käytetyt happianturityypit voivat vaihdella riippuen kattilan teknisistä vaatimuksista. Laajakaistaiset happianturit tarjoavat usein tarkempaa tietoa ja voivat soveltua paremmin monimutkaisempiin lämmitysjärjestelmiin.

Happianturit lämmityskattiloissa ovat osa modernin lämmitystekniikan automaatiota, joka pyrkii tekemään lämmitysjärjestelmästä mahdollisimman tehokkaan ja ympäristöystävällisen. Ne tukevat älykkäitä ohjausjärjestelmiä, jotka optimoivat polttamisen parametreja ja varmistavat järjestelmän parhaan mahdollisen suorituskyvyn.

Kokeillaan, osaisiko tekoäly auttaa meitä koodin kanssa:

Kuinka tehdään tilakone arduinolla, hakelämmityskattilan ohjaukseen? Anna esimerkkikoodi, jossa mitataan lämpötilaa PT100 anturin avulla, Controllino laitteella, joka osaa mitata lämpötila-arvoa analogisena jännitteenä, 0 – 24V. Sekä happiarvoa Lambda-anturin avulla, myöskin analoginen jännitearvo sisääntulo, 0 – 24V. Syöttöruuvia ohjataan relelähdön avulla, rele kytkee kolmivaihekontantorin. Ilmanpuhallusta säädetään PWM-lähdön avulla, Digitaalisesta output lähdöstä. Sisällytä esimerkkikoodiin myös painonapit, manuaalinen syöttöruuvin ajo eteenpäin ja taaksepäin. Sekä syöttötehon säätö, potentiometrin avulla. Sekä pienen LCD – näytön ohjaus, SPI-väylän avulla. Ohjelma voisi myös tulostaa debug-tietoa sarjaväylään, ihmistä varten. Sisällytä myös kommentointi koodiin, suomenkielellä. Kiitos.

#include <Wire.h>
#include <Adafruit_MAX31865.h>
#include <LiquidCrystal_SPI.h>

// PT100-anturi
#define PT100_CS_PIN 10  // CS-pinni
Adafruit_MAX31865 pt100 = Adafruit_MAX31865(PT100_CS_PIN);

// Lambda-anturi
#define LAMBDA_PIN A1  // Analoginen pinni
int lambdaValue = 0;

// Relelähtö syöttöruuvin ohjaamiseen
#define RELE_PIN 2
int forwardButton = 3;  // Painike eteenpäin
int backwardButton = 4;  // Painike taaksepäin

// PWM-lähtö ilmanpuhalluksen ohjaamiseen
#define PWM_PIN 5

// Potentiometri syöttötehon säätöön
#define POTENTIOMETER_PIN A0
int potValue = 0;

// LCD-näyttö SPI-väylän avulla
LiquidCrystal_SPI lcd(12, 11, 10, 9, 8);

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);

  // PT100-anturin alustus
  if (!pt100.begin()) {
    Serial.println("Could not find MAX31865, check wiring!");
    while (1);
  }

  // Rele ja PWM-lähtöjen alustus
  pinMode(RELE_PIN, OUTPUT);
  pinMode(PWM_PIN, OUTPUT);

  // Painikkeiden määritys
  pinMode(forwardButton, INPUT_PULLUP);
  pinMode(backwardButton, INPUT_PULLUP);
}

void loop() {
  // Lue lämpötila PT100-anturista
  sensors.requestTemperatures();
  float temperature = pt100.temperature();

  // Lue Lambda-arvo
  lambdaValue = analogRead(LAMBDA_PIN);

  // Lue potentiometrin arvo
  potValue = analogRead(POTENTIOMETER_PIN);
  int powerLevel = map(potValue, 0, 1023, 0, 255);
  
  // Ohjaa syöttöruuvia painikkeiden avulla
  if (digitalRead(forwardButton) == LOW) {
    // Etene eteenpäin
    digitalWrite(RELE_PIN, HIGH);
  } else if (digitalRead(backwardButton) == LOW) {
    // Mene taaksepäin
    digitalWrite(RELE_PIN, LOW);
  } else {
    // Pysähdy
    digitalWrite(RELE_PIN, LOW);
  }

  // Ohjaa ilmanpuhallusta PWM-lähdön avulla
  analogWrite(PWM_PIN, powerLevel);

  // Näytä tietoja LCD-näytöllä
  lcd.clear();
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.setCursor(0, 1);
  lcd.print("Lambda: ");
  lcd.print(lambdaValue);

  // Tulosta tietoa sarjaväylään debuggausta varten
  Serial.print("Temp: ");
  Serial.print(temperature);
  Serial.print(", Lambda: ");
  Serial.print(lambdaValue);
  Serial.print(", Power Level: ");
  Serial.println(powerLevel);

  delay(1000);  // Pieni viive, voit muuttaa tarvittaessa
}

Yhteenvetoa:

Kyllä tässä ajatusta jo on, mutta tekoäly ei nyt aivan valmista koodia tietystikään meille ei vielä osaa antaa.

Eli vielä on työtä myös koodareille, tekoäly on hyvä renki, mutta huono isäntä. Sen avulla koodari kuitenkin pystyy hakemaan lisätietoa ja siltä voi kysyä neuvoja, kuinka jonkun tietyn asian ehkä voisi suorittaa.

Tästä asiasta täytyy tehdä myös useamman blogi-postin pituinen artikkeli. Yhteen lyhyeen postaukseen ei tällainen työ tietystikään mahdu.

Tällaisen ohjauksen työstäminen ei tietystikään myös onnistu päivässä eikä muutamassa. Työhön sisältyy paljon selvittelyä, kokeilua, koodaamista, testaamista ja keskusteluja mahdollisten asiakkaiden ja sponsoreiden kanssa.

Kokeiluun ja testailuun täytyy tietysti tilailla painonappeja ja LCD-näyttöjä ja muuta hauskaa, näillä on aina omat toimitusaikansa.

Tekoälyn kanssa voi myös kokeilla käydä lisää keskusteluja ja kokeiluja, jotta itselle kertyy enemmän tietoa asiasta:

Kiitos, no anna esimerkki kuinka voisi tehdä yksinkertaisen tilakoneen, Arduinon avulla, lämmityskattilan ohjaukseen. Edellä mainituilla Input ja Output arvoilla. Sisällytä esimerkkikoodiin tilat: Stop, Käynnistys, Normaali ajo, Manuaali ajo eteenpäin, Manuaali ajo taaksepäin ja Manuaalinen Puhaltimen testaus.

Yksinkertainen tilakone voidaan toteuttaa käyttäen switch-case -rakennetta, joka käsittelee erilaisia tiloja ja niihin liittyviä toimintoja. Tässä on esimerkkikoodi, joka demonstroi yksinkertaista tilakonetta Arduinon ja Controllinon avulla lämmityskattilan ohjaukseen:

// Pin määrittelyt
#define RELE_PIN 2
#define FORWARD_BUTTON_PIN 3
#define BACKWARD_BUTTON_PIN 4
#define PWM_PIN 5
#define POWER_POTENTIOMETER_PIN A0
#define START_BUTTON_PIN 6
#define FAN_TEST_BUTTON_PIN 7

// Tilat
enum State {
  STOP,
  STARTUP,
  NORMAL_OPERATION,
  MANUAL_FORWARD,
  MANUAL_BACKWARD,
  FAN_TEST
};

State currentState = STOP;

void setup() {
  pinMode(RELE_PIN, OUTPUT);
  pinMode(FORWARD_BUTTON_PIN, INPUT_PULLUP);
  pinMode(BACKWARD_BUTTON_PIN, INPUT_PULLUP);
  pinMode(PWM_PIN, OUTPUT);
  pinMode(POWER_POTENTIOMETER_PIN, INPUT);
  pinMode(START_BUTTON_PIN, INPUT_PULLUP);
  pinMode(FAN_TEST_BUTTON_PIN, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  switch (currentState) {
    case STOP:
      // Tilan toiminnot
      digitalWrite(RELE_PIN, LOW);
      analogWrite(PWM_PIN, 0);

      // Tilaan siirtyminen
      if (digitalRead(START_BUTTON_PIN) == LOW) {
        currentState = STARTUP;
        delay(1000);  // Odota 1 sekunti startup-tilan välttämiseksi
      }
      break;

    case STARTUP:
      // Tilan toiminnot
      Serial.println("Käynnistys...");

      // Tilaan siirtyminen
      currentState = NORMAL_OPERATION;
      break;

    case NORMAL_OPERATION:
      // Tilan toiminnot
      digitalWrite(RELE_PIN, HIGH);

      // Tilaan siirtyminen
      if (digitalRead(FORWARD_BUTTON_PIN) == LOW) {
        currentState = MANUAL_FORWARD;
      } else if (digitalRead(BACKWARD_BUTTON_PIN) == LOW) {
        currentState = MANUAL_BACKWARD;
      } else if (digitalRead(FAN_TEST_BUTTON_PIN) == LOW) {
        currentState = FAN_TEST;
      }
      break;

    case MANUAL_FORWARD:
      // Tilan toiminnot
      digitalWrite(RELE_PIN, HIGH);
      analogWrite(PWM_PIN, map(analogRead(POWER_POTENTIOMETER_PIN), 0, 1023, 0, 255));

      // Tilaan siirtyminen
      if (digitalRead(FORWARD_BUTTON_PIN) == HIGH) {
        currentState = NORMAL_OPERATION;
        analogWrite(PWM_PIN, 0);
      }
      break;

    case MANUAL_BACKWARD:
      // Tilan toiminnot
      digitalWrite(RELE_PIN, LOW);

      // Tilaan siirtyminen
      if (digitalRead(BACKWARD_BUTTON_PIN) == HIGH) {
        currentState = NORMAL_OPERATION;
      }
      break;

    case FAN_TEST:
      // Tilan toiminnot
      Serial.println("Puhaltimen testaus...");
      analogWrite(PWM_PIN, 255);  // Täysi nopeus

      // Tilaan siirtyminen
      if (digitalRead(FAN_TEST_BUTTON_PIN) == HIGH) {
        currentState = NORMAL_OPERATION;
        analogWrite(PWM_PIN, 0);
      }
      break;
  }

  // Voit lisätä muuta ohjelmaasi tähän
}

Palataan tähän projektiin tulevaisuudessa, kokeillaan mitä saadaan aikaiseksi. Ottakaa rohkeasti yhteyttä, jos haluatte tukea projektia ja jos olette kiinnostuneet tällaisen automaattiohjauksen toteutuksesta.

Theseus tietokannasta saattaa mahdollisesti löytyä myös lisätietoa, joskus ihan suomen kielellä:

https://www.theseus.fi/discover?scope=%2F&query=controllino&submit=&rpp=10

https://www.theseus.fi/discover?scope=%2F&query=hakel%C3%A4mmityksen+ohjaus&submit=&rpp=10