Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:greenhouse-ctrl

Toto je starší verze dokumentu!


Zadání

V prostředí Mbed vytvořte program pro vývojovou desku NXP FRDM-K64F, který bude realizovat řízení automatizovaného skleníku a jeho komunikaci s PC pomocí ethernetového rozhraní. Program bude zahrnovat ovládání a řízení periferií včetně návrhu komunikačního rozhraní s příkazy.


Úvod

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.


Vývojový hardware

FRDM-K64F

Key Features

  • Microcontroller:
    • Kinetis MK64FN1M0VLL12 in 100LQFP microcontroller featuring ARM® Cortex™-M4 32-bit core with DSP instructions and Floating Point Unit (FPU) working @ 120 MHz max CPU frequency
  • Memory:
    • 1024 KB program flash memory, 256 KB RAM, and FlexBus external bus interface
  • System peripherals:
    • Multiple low-power modes, low-leakage wake-up unit, 16-channel DMA controller
  • Clocks:
    • 3x Internal Reference Clocks: 32KHz, 4MHz and 48MHz, 2x Crystal inputs: 3-32MHz (XTAL0) and 32kHz (XTAL32/RTC), PLL and FL
  • Analog modules:
    • 2x 16-bit SAR ADCs up 800ksps (12-bit mode), 2x 12-bit DACs, 3x Analog comparators, Voltage reference 1.13V
  • Communication interfaces:
    • 1x 10/100 Mbit/s Ethernet MAC controller with MII/RMII interface IEEE1588 capable, 1x USB 2.0 Full-/Low-Speed Device/Host/OTG controller with embedded 3.3V/120mA Vreg, and USB device Crystal-less operation, 1x Controller Area Network (CAN) module, 3x SPI modules, 3x I2C modules. Support for up to 1 Mbit/s, 6x UART modules, 1x Secure Digital Host Controller (SDHC), 1x I2S module
  • Timers:
    • 2x 8-channel Flex-Timers (PWM/Motor control), 2x 2-channel FlexTimers (PWM/Quad decoder), 32-bit PITs and 16 bit low-power timers, Real-Time Clock (RTC), Programmable delay block
  • Security and integrity modules:
    • Hardware CRC and random-number generator modules, Hardware encryption supporting DES, 3DES, AES, MD5, SHA-1 and SHA-256 algorithms
  • Operating characteristics:
    • Voltage range: 1.71 to 3.6 V, Flash write voltage range: 1.71 to 3.6 V

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.


Software

V hlavním souboru main.cpp probíhá inicializace celého programu pomocí jednotlivých knihoven. Pro celý program byly použity veřejně dostupné knihovny mbed(Rev. 109), mbed-rtos(Rev. 95), EthernetInterface(Rev. 49) a také knihovna BH1750 dostupná na stránce https://os.mbed.com/users/vrabec/code/BH1750/ , kterou však bylo z důvodu jednoduchosti použití třeba značně modifikovat. Pro ostatní periferie byla vytvořena nová c++ knihovna Peripherals, která zahrnuje patřičnou inicializaci periferií (analogové vstupy, digitální a PWM výstupy, …) a následně práci s nimi.

Použité knihovny v soubotu main.c

  • #include „mbed.h“
  • #include „rtos.h“
  • #include „EthernetInterface.h“
  • #include „BH1750.h“
  • #include „Peripherals.h“

Knihovna Peripherals

Zapouzdřuje do tříd veškeré vlastnosti pro snímání vlhkosti a teploty, a ovládání akčních členů (servomotorem řízené otevírání ventilace a reléově ovládané zavlažování/ventilace/topení). Skládá se z

Peripherals.h:

class Humid
{
public:
    Humid(PinName AInp = A0, PinName AOut = D0);
    uint8_t readHumidity(void);
    void setLimit(uint8_t lim);
    void setCurrentLimit(void);
    uint8_t getLimit(void);
 
private:
    AnalogIn   ain;
    DigitalOut dop;
    uint8_t Limit;
};
 
/**
 
*/
class Temp
{
public:
    Temp(PinName AInp = A1);
    float readTemperature(void);
    void setHighLimit(float lim);
    void setLowLimit(float lim);
    void setVentLimit(float lim);
    void setCurrentHighLimit(void);
    void setCurrentLowLimit(void);
    void setCurrentVentLimit(void);
    float getHighLimit(void);
    float getLowLimit(void);
    float getVentLimit(void);
 
private:
    AnalogIn   ain;
    float HLimit, LLimit, VLimit;
};
 
/**
 
*/
class Vent
{
public:
    Vent(PinName PWM = D8);
    void open(uint8_t percent = 100);
    void close(void);
 
private:
    PwmOut pwm;
    uint8_t percentage;
};
 
/**
 
*/
class Fan
{
public:
    Fan(PinName DOut = D4);
    void Start(void);
    void Stop(void);
private:
    DigitalOut fan;
};
 
/**
 
*/
class Heat
{
public:
    Heat(PinName DOut = D5);
    void Start(void);
    void Stop(void);
private:
    DigitalOut heater;
};
 
/**
 
*/
class Water
{
public:
    Water(PinName DOut = D6);
    void Start(void);
    void Stop(void);
private:
    DigitalOut sprinkler;
};
 
/**
 
*/
class Light
{
public:
    Light(PinName DOut = D7);
    void Start(void);
    void Stop(void);
private:
    DigitalOut lighting;
};

Peripherals.cpp:

 
2017/greenhouse-ctrl.1515970782.txt.gz · Poslední úprava: 2018/01/14 23:59 autor: Josef Křivský