Система мониторинга динамических процессов в автоматизированных теплицах в реальном времени
Мониторинг данных с "последовательного порта" в реальном времени с помощью MATLAB.
Реализация проекта инициирована в рамках выполнения гранта ФСИ по программе "УМНИК". Нам необходимо было вести непрерывный мониторинг и сохранение параметров и данных, передаваемых микроконтроллером по "последовательному порту - через USB" в наш компьютер. Далее эти пакеты данных необходимо расшифровать и распределить по массивам для дальнейшего анализа и других манипуляций. В этой задаче наиболее удобным инструментом работы с данными является MATLAB, он позволяет вести быструю разработку программ, прост в освоении и дает возможность наглядно работать с большими массивами информации. Для реализации проекта мы использовали MATLAB R2014a(b) и его встроенные возможности работы с COM-портами ПК.
Алгоритм работы программы:
- Подключение по Com-port к нашему микроконтроллеру (далее МК).
- Создание пустых массивов в соответствии с данными, которые будут приходить от МК.
- Формируются основные циклы, длительностью, равной периоду эксперимента, для отключения системы мониторинга в нужный момент и периодичного сохранения созданных массивов.
- Чтение данных (расшифровка при необходимости), распределение по массивам.
- Рисуем графики.
- По окончанию работы всех циклов остановка программы и закрытие соединения с МК.
Подключение к МК по 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. В системе автоматизированно поддерживалась влажность, температура и тестировались новые методы досветки светодиодным освещением с применением методов аппроксимации к реальному солнечному свету.
Авторы: Лукьянов А.Д., Донской Д.Ю.
Комментарии
Очень интересная статья!
Круто
Познавательная статья, эти наработки можно будет использовать на нашем предприятии.