Giter Club home page Giter Club logo

trm's Introduction

Терморегулятор на базе микроконтроллера ESP32.

Регулятор температуры для пароводянных котлов. Может использоваться для иных целей, связанных с поддержанием температуры и выполнения температурных программ.

Условные обозначения

  • Температурная программа - последовательность, состоящая из температурных пауз. Каждой температурной программе соответсвует определенное количество температурных пауз.
  • Температурная пауза - Отрезок времени, который содержит температуру уставки. Контроллер должен поддерживать данную температуру уставки в течении этого отрезка времени.
  • Температура уставки - температура, которую должен поддерживать контроллер в рамках одной температурной пазуы.
  • Задержка времени - условие, при котором температурная пауза не начнет отсчет времени, пока не будет достигнута температура уставки.
  • ПИД регулятор - устройство, расчитывающее необходимую выходную мощность нагрева для поддержания необходимой температуры.
  • Веб-интерфейс - окно в браузере, с помощью которого, можно осуществлять управление регулятором.
  • Режим выполнения температурной программы - режим, при котором будет разрешено выполнение температурных программ.
  • Режим контроля можности - режим, при котором пользователь может вручную регулировать подаваемую мощность нагревателя в процентах.

Функции

  • Возможность по желанию подключиться к wifi сразу при включении. Во время работы подключение невозможно.
  • Регулировка температуры происходит при помощи встроенного ПИД регулятора.
  • ПИД регулятор можно откалибровать. Для этого необходимо ввести условно максимальную используемую температуру нагрева и запустить процесс.
  • Мощность подается импульсами (255 миллисекунд на импульс)
  • Можно записать в память до 7 программ по 6 шагов в каждой
  • Диапазон времени одной темпераутрной паузы ограничен двумя часами (120 минут).
  • В настройках можно выбрать режим отображения времени в секундах или минутах.
  • Имеется возможность использовать режим задержки времени (программа не начнет отсчитывать время пока не достигнет нужного значения уставки)
  • К ацп контроллера можно подключить термопару типа K. При неправильных показаниях можно ввести калибровочное значение.
  • Настройки времени разрешено изменять во время выполнения рабочей программы.
  • Все настройки автоматически сохраняются в память устройства и восстанавливаются при запуске.
  • Веб-интерфейс дублирует все настройки.
  • Имеется два режима: режим выполнения температурной программы и режим контроля мощности. В режиме выполнения температурной проргаммы разрешено запускать температурные программы. В режиме контроля мощности разрешено вручную управлять мощностью подаваемую на нагреватель.

Сборка

Необходим PlatformIO. С помощью него можно загрузить прошивку. Разрабатывался под ESP32-WROOM-32. А значит программу можно использовать с любым dev-kit на базе этого МК.

Схемы

Электрическая схема

Используемые библиотеки

  • Thinger.io. Для реализации веб-интерфейса. Ключи находятся в файле arduino_secrets.h.
  • GyverPID. Для реализации ПИД регулирования.
  • WiFiManager. Для удоббного подключения к WiFi.
  • LiquidCrystal_I2C. Отвечает за работу с LCD диспеем по интрефейсу I2C.
  • Остальные библиотеки были написаны разработчиком и находятся в папке src.

Пошаговый ход программы

  • Контроллер ожидает от пользователя разрешение к подключению
  • В случае положительного ответа МК раздает WiFi точку, к которой подключается пользователь и вводит параметры домашней точки.
  • При успешном подключении на экране высвечивается уведомление об успешном подключении. В противном случае уведомление будет отрицательным и устройство будет перезагружено.
  • В случае успешного подключения можно использовать веб-интерфейс Thinger для управления всеми процессами.
  • Контроллер ожидает действий от пользователя (вход в настройки, старт программы).
  • При использовании веб-интерфейса, пользователь может использовать привычное управление кнопками, однако программу невозможно будет начать, если веб-интерфейс активен.

Описание классов и структур

Для всех классов и структур кроме TRM и LCD приведен список используемых методов и полей.

struct temperaturePausesStruct

    struct temperaturePausesStruct{                             
    uint8_t setpointTemperature[6];
    uint32_t time[6];
    };

Данная структура отвечает за одну температурную программу. В ходе выполнения программы данная структура может записываться в память или читаться из нее. К видно, температурная программа состоит из двух массивов по 6 элементов в каждой. setpoint определяет температуру уставки, а time определяет время поддержания температуры уставки.

struct parametrs

struct parametrs
{
    parametrs(const bool &timeSet, const bool &timeDelay, const byte &powerMax, const byte &powerMin, const float &calibr, const byte &predel)
        : _timeSet(timeSet), _timeDelay(timeDelay), _powerMax(powerMax), _powerMin(powerMin), _calibr(calibr), _predel(predel) {}
    parametrs() {}
    bool _timeSet;
    bool _timeDelay;
    byte _powerMax = 255, _powerMin = 0, _predel = 101;
    float _calibr = 0;
};

Данная структура используется для получения и записи настроек времени, мощности и калибровочных значений.

###struct Koefficients

struct Koefficients
{
    float P = 1;
    float I = 1;
    float D = 1;
};

Структура хранящая ПИД коэффициенты.

Структуры parametrs и Koefficients при создании иницализируются стандартными значениями для возможного сброса настроек.

class TRM

  • Основной класс всей программы, использует интерфейсы ниже приведенных классов для вывода и приема информации. Отвечает за правильное сохранение всех настроек и температурных программ.
  • Предоставляет метод ввода настроек с помощью кнопок или веб-интерфейса.
  • Отвечает на команды пользователя по вводу температурной программы, посылает команды для всех используемых классов.
  • В основном loop цикле ожидает ввода каких-либо команд и возвращает выходное значение для нагреваетля.

class LCD

  • Отвечает за вывод всей информации на экран.
  • Использует библиотеку LiquidCrystal_I2C.
  • Хранит в себе весь текст, выводящийся на экран.
  • Т.к. был выбран lcd экран с возможностью вывода кириллицы, то все надписи были закодированы в 16-ном виде.
  • Вывод нужного текста осуществляется через вызов нужного метода класса с передачей ему нужных методов.

class TemperatureProgramm

class TemperatureProgramm{
private:
    temperaturePausesStruct _pausesStruct;

public:
    TemperatureProgramm(const temperaturePausesStruct& pauses);//При создании объекта этого класса будет считана переданная температурная программа
    TemperatureProgramm(const byte& adress);//При создании объекта этого класса будет считана температурная программа из переданной ячейки
    ~TemperatureProgramm(){}
    Pair<byte, uint32_t> readPause(const byte& pause) const;//Получение одной паузы
    void writePauses(const byte& adress, const temperaturePausesStruct& structWrite);//Запись программы с дальнейшим её сохранением в ячейку
    temperaturePausesStruct getPauseAll(); //Получение последней используемой программы
    void savePauses(const int& adress); //Запись последней используемой программы 
};

Данный класс служит для записи и получения температурной программы прмо из ячейки и дальнейшей передаче её вызывающему методу. Данный класс использует класс коллектор, передавая ему либо номер ячейки для получения, либо температурную программу для записи.

class TemperaturePauseCollector

class TemperaturePauseCollector
{
private:
    byte _numberProgramms[7] = {0, 1, 2, 3, 4, 5, 6};
    byte _adress[7] = {0, 35, 70, 105, 140, 175, 210}; // ячейки в которые будут записываться паузы
public:
    TemperaturePauseCollector() {}
    void writePauses(const byte &numberProgramm, const temperaturePausesStruct &pause);//запись программы в ячейку
    Pair<byte, uint32_t> readPause(const byte &numberProgramm, const byte &numberPause); //получили одну паузу из программы
    temperaturePausesStruct getPause(const byte &numberProgramm); //получает программу из ячейки
};

Данный класс служит для записи и получения температурных программ. Хранит порядковые номера программ последовательно. Каждой программе соответствует определенная ячейка памяти. Получение программы происходит по передаче порядкового номера программы. Запись происходит по передаче порядкового номера программы и самой программе. Для записи и получения использует класс TemperatureProgramm.

class ProgrammRunner

class ProgrammRunner
{
private:
    temperaturePausesStruct programm_;
    bool timeSet = false;
    bool timeDelay = false;
    bool startTime = false;
    bool can_to_start = false;
    bool is_stopped = false;
    uint32_t timer = millis();
    uint32_t ticker = 0;
    byte numberPause = 0;

public:
    ProgrammRunner(const temperaturePausesStruct &programm, const bool &time, const bool &delay);
    ProgrammRunner(const bool &time, const bool &delay);
    ProgrammRunner();
    void putTimeSet(const bool &time);
    void putTimeDelay(const bool &delay);
    void putTimeSettings(const bool &time, const bool &delay); //Ввод настроек всех времени одним методом
    void putProgramm(const temperaturePausesStruct &programm); // Ввод температуры нагрева
    bool is_programm_run() const; // если программа закончена, то false
    void programm_stop(); // Выполняет остановку программы
    void startPause(); // Выполняет запуск программы нагрева 
    Third<byte, uint32_t, byte> runningProgramm(const float &temperature); 
    //Метод, который активно ведет отсчет времени температурной программы и возвращает порядковый номер программы, оставшееся время выполняемой паузы и температуру уставки программы. 
    //Для реализации правильной работы задержки нагрева необходимо передавать температуру 
};

Данный класс служит для начала старта или остановки выполнения программы нагрева. Использует настройки времени (при активированной настройки задержки времени не начинает остчет времени пока не будет достигнута температура уставки). Инициализацию класса можно производить без параметров или передав ей параметры времени и температурную программу, которая будет выполняться.

class PIDRegulator

class PIDRegulator
{
private:
    Koefficients koefficients;
    GyverPID regulator;
    PIDtuner tuner;
    bool tune = false;
    Pair<byte, byte> parametrsForLCD{0, 0};

public:
    PIDRegulator();

    // Надо каждый раз вводить лимиты
    void setLimits(const byte &minValue, const byte &maxValue); // Ограничение выходной мощности в процентах
    // Получить значение
    int getValuePID(const int &temperatureNow);
    // Внести температуру уставки
    void putTemperature(const int &setTemperature);
    // Надо вызывать перед каждым тюном
    void tuneInitialization(const float &temperatureNeed);
    // тюн
    Third<bool, byte, byte> tunePID(const int &temperatureNow);
    Pair<byte, byte> GetPIDValueTune(const int &temperatureNow);
    // вставить коэффициенты в регулятор
    void enterPIDKoefficients(const Koefficients &koefficients);
    //
    void loadKoefficients();
    void saveKoefficients();
    void baseKoefficients();
    bool getTuneInfo() const;
    Pair<byte, byte> GetParametrsLCD() const;// Получение значений для передачи их на дисплей
};

Данный класс использует ПИД регулятор, хранит в себе ПИД коэффициенты. Позоволяет производить корректировку коэффициентов и регулировку максимальной и минимальной вызодной мощности в процентах. Для расчетов и корректировки использует библиотеку ПИд регулятора.

trm's People

Contributors

saveliiyam avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.