Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:greenhouse-ctrl

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2017:greenhouse-ctrl [2018/01/15 05:56]
Josef Křivský Omlouvám se za takovéto odevzdání, ale bohužel se vyskytly velké problémy s dodáním HW
2017:greenhouse-ctrl [2018/01/15 07:28] (aktuální)
Josef Křivský
Řádek 8: Řádek 8:
  
 Cílem tohoto projektu je co nejvíce automatizovat obsluhu a udržování běžného zahradního skleníku. Obsahem návrhu je kompletní software řízení a obsluhy, ale také co nejjednodušší hardware pro příslušné periferie. Základní myšlenkou je možnost kontroly a nastavení jednotlivých vlastností skleníku z pohodlí domova, za pomoci ethernetového rozhraní a běžného PC. Pomocí definovaných příkazů je tak možné jak kontrolovat vlhkost půdy, teplotu a osvětlení ve skleníku, tak nastavit jejich limitní hodnoty pro spuštění zavlažování,​ odvětrávání/​vytápění skleníku a přisvětlení zářivkami. Cílem tohoto projektu je co nejvíce automatizovat obsluhu a udržování běžného zahradního skleníku. Obsahem návrhu je kompletní software řízení a obsluhy, ale také co nejjednodušší hardware pro příslušné periferie. Základní myšlenkou je možnost kontroly a nastavení jednotlivých vlastností skleníku z pohodlí domova, za pomoci ethernetového rozhraní a běžného PC. Pomocí definovaných příkazů je tak možné jak kontrolovat vlhkost půdy, teplotu a osvětlení ve skleníku, tak nastavit jejich limitní hodnoty pro spuštění zavlažování,​ odvětrávání/​vytápění skleníku a přisvětlení zářivkami.
 +
 +{{ :​2017:​xkrivs00:​img_20180115_063847_7.jpg?​400 |}}
 +
 ---- ----
  
Řádek 39: Řádek 42:
 ====== Vývoj HW ====== ====== Vývoj HW ======
  
-Požadavkem na celou konstrukci automatizovaného skleníku byla především jednoduchost implementace/​instalace,​ ale také cena celého systému. Vzhledem k velkému možství některých součástek v inventáři zadavatele, byly proto použity především ony. +Požadavkem na celou konstrukci automatizovaného skleníku byla především jednoduchost implementace/​instalace,​ ale také cena celého systému. Vzhledem k velkému možství některých součástek v inventáři zadavatele, byly proto použity především ony. 
 + 
 +Seznam použitých komponetů:​ 
 +  * Mikrokontrolér FRDM-K64F 
 +  * Servo Hitec HS-485HB 
 +  * NTC Termistor Eclipsera 1488979094 
 +  * Arduino modul pro měření intenzity světla BH1750 
 +  * Půdní Vlhkoměr Modul pro Arduino 
 + 
 +Odkazy na stránky výrobců/​prodejců:​ 
 + 
 +  *http://​hitecrcd.com/​products/​servos/​sport-servos/​analog-sport-servos/​hs-485hb-deluxe-hd-ball-bearing-servo/​product 
 +  *https://​www.nxp.com/​products/​processors-and-microcontrollers/​arm-based-processors-and-mcus/​kinetis-cortex-m-mcus/​k-seriesperformancem4/​k2x-usb/​freedom-development-platform-for-kinetis-k64-k63-and-k24-mcus:​FRDM-K64F 
 +  *https://​arduino-shop.cz/​arduino/​1574-ntc-termistor-10k-1-3950-1m-vodotesna-sonda-1488979094.html 
 +  *https://​arduino-shop.cz/​arduino/​902-arduino-mereni-intenzity-svetla-1420672425.html 
 +  *https://​arduino-shop.cz/​arduino/​1399-pudni-vlhkomer-modul-pro-arduino-1474354607.html
  
 ---- ----
Řádek 335: Řádek 353:
 Light illumination; ​            // Ovládání světel Light illumination; ​            // Ovládání světel
  
- +enum STAT                       // Proměnná pro uložení ​stavu celého systému 
-char line1[50], line2[50], line3[50]; ​// Řetězce pro vypsání ​stavu skleníku ​+
 +    READY = 1, SETTINGS, MANUAL, ERROR 
 +}sklenikstav;​
 </​code>​ </​code>​
 +Stav systému sklenikstav je díky třídám pouze pomocnou proměnnou pro rozhodovací stromy uživatelského rozhraní.
  
-  * Ovládací vlákna RTOS (zde již probíhá periodická kontrola stavu skleníku, a jemu příslušné reakce periferií)+  * Ovládací vlákna RTOS (zde již probíhá periodická kontrola stavu skleníku, a příslušné reakce periferií)
 <code c> <code c>
-void watering_thread()+void watering_thread(void)
 { {
     while(true)     while(true)
Řádek 464: Řádek 485:
         avglx /= 6;         avglx /= 6;
         ​         ​
-        ​/*if(avglx<​light.getLimit())+        if(avglx<​light.getLimit())
         {         {
             illumination.Start();​             illumination.Start();​
Řádek 473: Řádek 494:
             illumination.Stop();​             illumination.Stop();​
         }         }
-        */ 
         ​         ​
         Thread::​wait(300000);​         Thread::​wait(300000);​
Řádek 479: Řádek 499:
 } }
 </​code>​ </​code>​
 +Tato vlákna mají zajišťovat plnou automatičnost skleníku po jeho prvotním nastavení. Bohužel se díky problémům s různými verzemi systému MBED a jeho knihoven nepodařilo (díky nedostatku času) najednou zprovoznit vlákna a ovládání skleníku přes ethernetové rozhraní. Ačkoliv RTOS sám o sobě funguje, nebylo by možné nastavovat skleník on-line, čímž bychom přišli o jakoukoliv možnost okamžitého zásahu, a zároveň by nebyla splněna nejdůležitější část zadání.
  
   * Funkce rozhodovacího stromu pro Ethernetové rozhraní skleníku (přímé ovládání)   * Funkce rozhodovacího stromu pro Ethernetové rozhraní skleníku (přímé ovládání)
 +<code c>
 +int evaluate(char *str)
 +{
 +    switch(sklenikstav)
 +    {
 +        case READY:
 +            if (strcmp(str,​ "​help"​) == 0)
 +            {
 +                return 1;
 +            }
 +            else if (strcmp(str,​ "​stav"​) == 0)
 +            {
 +                return 2;
 +            }
 +            else if (strcmp(str,​ "​set"​) == 0)
 +            {
 +            .
 +            .
 +            .
 +            ​
 +            ​
 +            ​
 +            ​
 +int main(void)
 +{
 +   .
 +   .
 +   .
 +            int x = evaluate(message);​
 +            if(sklenikstav == READY)
 +            {
 +                if (x == 0)
 +                {
 +                    client.send_all("​Neplatny prikaz!\r\n",​ 18);
 +                    client.send_all(commandwait,​ sizeof(commandwait));​
 +                }
 +                else if (x == 1)
 +                {
 +                    char helpmsg[] = "​stav\t\t-Zobrazeni aktualnich informaci\r\nset\t\t-Nastaveni skleniku\r\nman\t\t-Ovladani skleniku\r\nexit/​quit\t-Konec\r\n";​
 +                    client.send_all(helpmsg,​ sizeof(helpmsg));​
 +                    client.send_all(commandwait,​ sizeof(commandwait));​
 +                    number = 0;
 +   .
 +   .
 +   .
 +}
 +</​code>​
 +Jak lze vidět, jedna z těchto funkcí se nachází ve funkci main, a druhá je pouze jako pomoc při určování obdržených řetězců. V závislosti na obdrženém textu pak tyto funkce přepínají jak stavy systému (pouze pro potřeby komunikace s uživatelem),​ tak výstupy mikrokontroléru. Tyto funkce jsou obdobou absolvovaného cvičení č.5, pouze značně složitější,​ a proto je tu nebudu uvádět celé. Uvedu pouze stavy systému a jejich akceptované příkazy.
 +
 +=== Celý kód ===
 +
 +https://​os.mbed.com/​users/​civava/​code/​sklenik-2017/​
 +
2017/greenhouse-ctrl.1515992170.txt.gz · Poslední úprava: 2018/01/15 05:56 autor: Josef Křivský