• Регистрация
Dan123
Dan123+1.07
н/д
  • Написать
  • Подписаться

Система мониторинга динамических процессов в автоматизированных теплицах в реальном времени

Мониторинг данных с "последовательного порта" в реальном времени с помощью MATLAB.

Реализация проекта инициирована в рамках выполнения гранта ФСИ по программе "УМНИК". Нам необходимо было вести непрерывный мониторинг и сохранение параметров и данных, передаваемых микроконтроллером по "последовательному порту - через USB" в наш компьютер. Далее эти пакеты данных необходимо расшифровать и распределить по массивам для дальнейшего анализа и других манипуляций. В этой задаче наиболее удобным инструментом работы с данными является MATLAB, он позволяет вести быструю разработку программ, прост в освоении и дает возможность наглядно работать с большими массивами информации. Для реализации проекта мы использовали MATLAB R2014a(b) и его встроенные возможности работы с COM-портами ПК. 

Алгоритм работы программы:

  1. Подключение по Com-port к нашему микроконтроллеру (далее МК).
  2. Создание пустых массивов в соответствии с данными, которые будут приходить от МК.
  3. Формируются основные циклы, длительностью, равной периоду эксперимента, для отключения системы мониторинга в нужный момент и периодичного сохранения созданных массивов.
  4. Чтение данных (расшифровка при необходимости), распределение по массивам.
  5. Рисуем графики.
  6. По окончанию работы всех циклов остановка программы и закрытие соединения с МК.

Подключение к МК по COM-port:

close, clear;

s2 = serial('COM3', 'BaudRate', 115200);

fopen(s2);

 

Номер порта мы определяем в системе: Панель управления -> Диспетчер устройств. Скорость должна совпадать с запрограммированной в контроллер.

Создаем пустые массивы:

T_air = [];

T_cool = [];

T_hot = [];

T_out = [];

Hum_in = [];

Hum_out = [];

Pressure = [];

 

Пусть длительность эксперимента составляет 3 дня, тогда мы запускаем цикл FOR так:

for dayF = 1:3 % счетчик дней

 

Период чтения данных раз в минуту, то есть за час ровно 60 раз МК пришлет данные, поэтому пишем:

for i=1:60й % счетчик часов (ждем 60 измерений)

 

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

Вот как выглядит чтение первого байта:

             while(1)

                beginREAD = fscanf(s2, '%s')

                if beginREAD == char('b');

                    break

                end

            end

Далее мы последовательно считываем данные, которые отправляет МК:

            c = fscanf(s2, '%s')

            try

                T_air(i) = str2num(c)

            catch

                T_air(i) = NaN;

            end

В случае если МК не считал данные или отправил их некорректно, здесь присутствует конструкция “try-catch-end” (в общем, для отлавливания ошибок).

Следующими строками добавляем точку на график и продолжаем считывать данные:

            figure(1);

            subplot(221);

            plot(i,T_air(i),'r'), title('Температура внутри, С')

            xlabel('время, сек')

            ylabel('Температура')

            grid on

            hold on

Ну и проверка контрольной суммы:

            %% crc

            c = fscanf(s2, '%s')

            try

                crc(i) = str2num(c);

            catch

                crc(i) = NaN;

            end 

            %% stopREAD           

            stopREAD = fscanf(s2, '%s')

            %% Проверка правильности пакетов

            if (crc(i) == (T_air + T_cool + T_hot + T_out + Hum_in + Hum_out + Pressure + i_p + Lux_led + colorRED + colorGREEN + colorBLUE + colorBLUE)/10)

            ERRPAK = 0;

            else ErrCHEK = ErrCHEK + 1;

                ERRPAK = 1

            end

По завершению цикла (в данном примере он равен часу работы МК) мы сохраняем данные в отдельный файл следующими командами:

now_data = datestr(now);

        f_name = strcat(now_data(1:2),'_',now_data(4:6),'_',now_data(8:11),'_',now_data(13:14),'_', now_data(16:17), '_', now_data(19:20))

        eval(['save ' f_name ' T_air T_cool T_hot T_out Hum_in Hum_out Pressure i_p Lux_led colorRED colorGREEN colorBLUE colorWHITE time_UNIX crc']);

Когда завершится эксперимент (наш основной цикл) обязательно отключаемся от контроллера:

fclose(s2);

С помощью данной программы было проведено более 100 опытов на семенах овощных и зеленных культур. Система управления базируется на микроконтроллере Arduino MEGA 2560. В системе автоматизированно поддерживалась влажность, температура и тестировались новые методы досветки светодиодным освещением с применением методов аппроксимации к реальному солнечному свету.

 

Авторы: Лукьянов А.Д., Донской Д.Ю.

Файлы

  • MB_float_example.m

Теги

    10.04.2021

    Комментарии

    • Natalia_Gvyzina
      Natalia_Gvyzina-0.60
      11.04.2021 12:10

      Очень интересная статья!

      • Goryunova_A
        Goryunova_A+0.20
        11.04.2021 12:44

        Круто 

        • pridumay_psevdonim
          pridumay_psevdonim0.00
          12.04.2021 10:09

          Познавательная статья, эти наработки можно будет использовать на нашем предприятии.