blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
PHP, Arduino programátor
deadawp



Časová kontrola vodárne - stavový automat - Arduino
pridal deadawp 29.7. 2020 o 23:26



Dnešný projekt sa zaujíma o časovú kontrolu behu domácej vodárne - Darlingu, ktorý je využívaný pre prečerpávanie vody zo studne do zásobníka. Programová implementácia spočíva vo využití stavového automatu, ktorý je vhodný pre podobné aplikácie. Stavový automat má konečný počet stavov, ktoré môžu v aplikácii nastať. V našom prípade každý stav odpovedá určitej fáze čerpadla a taktiež (ne)reaguje na určité vstupy systému v každom zo stavov.

Princíp funkčnosti, ktorý chceme dosiahnuť:

  • Po zopnutí tlakového spínača na vodárni je z jej spínacieho kontaktu privedený 5V signál na vývod Arduina, ktoré vzápätí zopne relé modul pripojený na stykač čerpadla (resp. je stykač nahradený spínaním napájania), rozsvieti sa zelená LED dióda, že beží čerpadlo.
  • Ak sa tlakový spínač rozpojí do určitého času (2 minúty), je všetko v poriadku, zelená LED zhasne, relé sa rozpojí, čerpadlo sa vypne a čaká sa na ďalšie zopnutie tlakového spínača.
  • V prípade, že by čerpadlo bežalo viac ako 2 minúty v kuse, relé sa vypne, rozsvieti sa červená (STOP) LED dióda a čerpadlo bez fyzického reštartu Arduina by už nebolo možné zapnúť - PORUCHA, ochrana pred preťažením a poškodením vodárne

Stavový automat vytvoríme pre Arduino vetvením - využitím prepínača switch, ktorý obsahuje všetky stavy - režimy, ktoré môžu v systéme nastať:

  • Režim 0 - čaká sa na impulz log 1 --> 5V na vstupe v nekonečnej slučke
  • Režim 1 - každú sekundu sa vykonáva meranie na vstupe, ak sa vykoná 120+ meraní log 1 za sebou, systém skočí do Režimu 2. Ak počas týchto 120 cyklov (120 sekúnd) nameria kedykoľvek log 0 --> skočí do Režimu 0
  • Režim 2 (Default v switch case) - Arduino v tomto režime čaká na hardvérový reset cez tlačidlo RESET na doske, nemožno z tohto režimu vyskočiť, je to akoby while(true), cyklus tam ostane navždy.

Hardvér pre projekt:

  • Mikrokontróler - Arduino Nano (Uno, AtMega328P)/ AtTiny85
  • 2x LED diódy (červená pre signalizáciu poruchy, zelená pre signalizáciu bežiacej vodárne)
  • 2x predradné rezistory 220 ohm až 1 kohm.
  • Elektromagnetické relé SRD-5VDC-SL-C - 10A pri 230V (2300W max) - spína v logickej 0

Programové riešenie jednotlivých režimov:

Režim 0 - režim načítava v loope funkciou digitalRead() hodnotu z digitálneho vývodu, na ktorý je pripojený kontakt z tlakového spínača Darlingu. V prípade zaznamenania hodnoty HIGH (3.3V+) na vývode, je program posunutý do ďalšieho stavu - režimu 1, uloží sa počet milisekúnd od štartu procesora z funkcie millis() do globálnej premennej, rozsvieti sa zelená LED dióda, čerpadlo beží.

Režim 1 - na základe získaného času z funkcie millis() je možné vykonávať časové operácie a to meranie digitálneho vývodu každých 1000ms. Každé pripočítavanie a zistenie hodnoty HIGH pripočítava aj inkrementátor, ktorý overuje počet vykonaných meraní. Nakoľko sme limitovaný behom čerpadla na maximálne 2 minúty, t.j. 120 sekúnd, počítadlo nám počíta tieto sekundy meraním logickej 1 na príslušnom vývode. 

V prípade, že je hodnota počítadla menšia ako 120 a stav digitálneho vývodu prejde do LOW (tlakový spínač sa uvolní), počítadlo sa vynuluje, relé rozopne, LED zhasne, režim sa nastaví na 0, na čo okamžite zareaguje automat a program pokračuje v režime 0. V prípade, že počítadlo (inkrementované každých 1000ms pri odmeraní hodnoty HIGH na digitálnom vstupe) presiahlo hodnotu 120, program prechádza na režim 2, rozsvieti sa červená LED dióda - PORUCHA, rozopne sa relé na stykač, zhasne zelená LED dióda.

Režim 2 - Nekonečná slučka (beží v loope, neobsahuje žiadny vykonávateľný kód), nereaguje na vstupy, výstupy, čaká sa na fyzický reštart Arduina tlačidlom.

Schéma zapojenia:

Program môže byť rozšírený o watchdog, ktorý v prípade zaseknutia Arduina vykoná jeho reštart. 
Viac projektov spojených s mikrokontrolérmi môžete nájsť na: https://arduino.php5.sk. Existujúcu programovú implementáciu je možné v zjednodušenom zapojení nájsť aj v online simulátore TinkerCAD: https://www.tinkercad.com/things/9AVCZolXyw4

Programová implementácia:

//Autor: Martin Chlebovec
//Časová kontrola vodárne
//Web: https://arduino.php5.sk

const int buttonPin = 2; //kontakt, na ktory sa privedie +5V
unsigned long lastDebounceTime = 0; //premenna pre cas millis()
int rezim = 0; //rezim systemu
int pocet_merani = 0; //pocet merani (cyklov), rataju sa do 2 minut --> 120 sekund
const int zelenaLED = 6; //D pin zelenej LED
const int cervenaLED = 7; //D pin cervenej LED
const int vystup = 8; //D pin pre rele
int reading;
int reading2;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(zelenaLED, OUTPUT);
pinMode(cervenaLED, OUTPUT);
pinMode(vystup, OUTPUT);
digitalWrite(vystup, HIGH);
digitalWrite(zelenaLED, LOW);
digitalWrite(cervenaLED, LOW);
}

void loop() {
switch (rezim) {
case 0:
reading = digitalRead(buttonPin);
if (reading == HIGH) {
lastDebounceTime = millis();
rezim = 1;
digitalWrite(zelenaLED, HIGH);
digitalWrite(vystup, LOW);
}
break;
case 1:
if (millis() - lastDebounceTime >= 1000) {
lastDebounceTime = millis();
reading2 = digitalRead(buttonPin);
if (reading2 == HIGH) {
pocet_merani++;
} else {
rezim = 0;
pocet_merani = 0;
digitalWrite(zelenaLED, LOW);
digitalWrite(vystup, HIGH);
}
if (pocet_merani > 120) {
rezim = 2;
digitalWrite(cervenaLED, HIGH);
digitalWrite(zelenaLED, LOW);
digitalWrite(vystup, HIGH);
}
}
break;
default:
// NUTNY RESTART ARDUINA NATVRDO CEZ RESET
break;
}
}



Prístupov 1353
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Ovládanie Arduina cez UART z počítača
[ 19.11.2020] (príspevkov 0)
ArduinoJson - knižnica pre parsovanie JS...
[ 15.11.2020] (príspevkov 0)
Overenie kradnutých vozidiel - Arduino +...
[ 11.11.2020] (príspevkov 0)
Hladinomer + Zrážkomer - Arduino / ESP82...
[ 2.11.2020] (príspevkov 0)
RFID vrátnik - update Október 2020
[ 29.10.2020] (príspevkov 0)
Digitálny potenciometer, prerušenie, deb...
[ 28.10.2020] (príspevkov 0)
Integrácia zrážkomera RG-11 do projektu ...
[ 22.10.2020] (príspevkov 0)
WiFi Termostat - ESP8266 - WiFiManager -...
[ 28.9.2020] (príspevkov 0)
Izbový termostat - Portovanie programu -...
[ 22.9.2020] (príspevkov 0)
RFID vrátnik - Ukončenie projektu
[ 9.9.2020] (príspevkov 0)