% <<< zdrojový kód pro typografický systém TeX >>>
% <<< >>>
% <<< formát: LaTeX >>>
% (cokoliv za znakem procento je ignorováno a do konce øádku)
% -------<<< Definice parametrù formátu >>>-------
\documentclass[a4paper, 12pt]{article}
\usepackage[IL2]{fontenc}
\usepackage[czech]{babel} %kvuli cestine
\usepackage[cp1250]{inputenc} %kvuli cestine
\usepackage{graphicx}
\usepackage{epstopdf}
\usepackage{float}
\usepackage[hang]{caption}
\usepackage[top=3cm, bottom=3cm, right=2.5cm, left=2.5cm]{geometry}
\usepackage{hyperref} %jako HTML odkaz
%\usepackage{showframe} %zobrazí okraje
\usepackage{fancyhdr} %zahlavi a zapati
\pagestyle{fancy} %zahlavi a zapati
\usepackage{enumerate} % abych mohl pouívat i jiné, ne èíslované seznamy
% --------<<< ------------------------- >>>--------
% -------<<< Zde zaèíná vlastní dokument >>>-------
\begin{document}
% zahlavi vlevo
\lhead{Firmware Automatický vypoutìè meteobalónù}
% zahlavi vpravo
\rhead{Bc. Zbynìk Poskoèil}
\section{Firmware}
\subsection{Real-time operaèní systém}
Pro ovládání celého systému byl zvolen real-time operaèní systém (ROS). Ten byl zvolen pøedevím pro zjednuení programování vypoutìèe, konkrétnì nastavování periférií procesoru a øízení vícevláknové aplikace na nìm bìící.\\
Jako ROS pro tuto aplikaci tak byl zvolen ChibiOS, který splòuje standardní poadavky na ROS a také s ním máme zkuenosti s programováním jiných aplikací pod procesory ARM.
\subsection{Vysvìtlení funkce firmwaru}
Aplikace pro ovládání odpalování se dá rozdìlit na ètyøi funkèní bloky, které jsou realizovány pomocí vláken. Funkèní diagram je zobrazen na Obr. \cite{Diag_firmware}. V následujících kapitolách bude podrobnìji rozebrána funkce jednotlivých vláken aplikace.
\subsubsection{Blikání LED}
V tomto vláknì je realizované prosté blikání LED, které slouí pro signalizaci bìhu programu. Mezi tím, kdy dioda svítí a nebo je vypnutá je vlákno uspáno. Tím je vyøeeno jak èasování tak úspora prostøedkù procesoru.
\subsubsection{Vypoutìní}
Toto vlákno se stará o kompletní sekvenci pro vyputìní balónu. Po sputìní a inicializaci promìnných spadne program do nekoneèné smyèky ve které je následnì uspán a èeká na probuzení. To nastane ve tøech pøípadech:\\
\begin{enumerate}
\item Pøíjem pøíkazu pro odpal
\item Pøíjem pøíkazu pro zruení odpalu
\item Probuzení od èasovaèe
\end{enumerate}
Ad. 1. Po pøíjmu pøíkazu, který zahajuje celou sekvenci odpalování se vypíe na terminál zpráva o zahájení vypoutìní a sepne se pin, na kterém je pøipojen aktuátor, který otevírá víko krabice, ve které je balón uloen (v dobì vykonávání kadého kroku je na terminál vypisována informace o tom, kolik procent z daného kroku je ji vykonáno). Pomocí koncového spínaèe je snímána informace o tom, zda se støecha opravdu otevøela, pokud se tak nestalo, je celá sekvence ukonèena. Pokud snímaè indikuje otevøení støechy, pøistupuje se k dalím kroku.\\
Tím je otevøení ventilu a tím pádem zahájení napoutìní balónu. Tento krok není nijak v souèasné chvíli zpìtnovazebnì snímán - je dán pouze èas kdy je ventil otevøen. Do budoucna bychom rádi pouili mìøení prùtoku k získání informace, zda je balón opravdu naputìn daným mnostvím plynu.\\
Tøetím krokem celé sekvence je pøepálení plastové pojistky, která spoutí tavící lis. Po pevnì dané èasové prodlevì, která by mìla staèit pro pøetavení, je pomocí koncového spínaèe zjitìno, zda se pojistka pøetavila. Pokud ano, pokraèuje se posledním krokem, pokud ne, dochází opìt k pøeruení sekvence a návrat do výchozího stavu.\\
Posledním krokem je zatavení naplnìného balónu. V tomto kroku je opìt nadefinován èas, po který dochází k zatavování balónu pomocí odporového drátu. Po uplynutí nadefinované doby je balón zataven a na terminál je vypsána informace o ukonèení vypoutìní a vechny výstupy jsou v neaktivním stavu.\\
Ad. 2. V pøípadì pøíjmu zprávy, která pøikazuje ukonèení procesu odpalování, se deaktivují výstupy aktivní bìhem vypoutìní a uivatel je informován o úspìném pøeruení celé sekvence.\\
Ad. 3. Pro pøesné èasování bìhem celého procesu odpalování je vyuito funkce èasovaèe. Ten se v kadém kroku odpalování sepne na urèitou dobu, která je celoèíselným násobkem celkové doby, kterou se èeká v daném kroku. Tento postup byl zvolen z toho dùvodu, aby mohla být prùbìnì aktualizována zpráva pro uivatele vyjadøující èas, který zbývá do ukonèení daného úkolu.
\subsubsection{Pøíjem pøíkazu od uivatele}
Pro komunikaci s uivatelem je vyuito sériové linky. Ta se vyuívá jak pro informování uivatele o aktuálním stavu programu tak zároveò k pøíjmu pøíkazù od uivatele. Celý algoritmus pøíjmu pøíkazu spoèívá ve vyèítání znakù zadaných uivatelem znak za znakem a do té chvíle, kdy je stisknut ENTER a nebo je pøekroèena maximální délka pøíkazu. Poté se buï zadaný pøíkaz dekóduje a následnì provede a nebo je vypsána informace, e pøíkaz nebyl rozeznán.
\subsubsection{Pøíjem dat z GPS modulu}
Posledním vláknem vyuívaném ve firmwaru vypoutìèe je vlákno, které se stará o pøíjem a dekódování NMEA zprávy posílané po sériové lince z GPS modulu
\cite{GPS_ublox}. Kadou vteøinu je vyèítána NMEA zpráva a z ní je vybrána GPRMC zpráva, ze které je následnì získána informace o aktuálním èase, datu a poloze stanice. Tato informace slouí jednat pro pøesné logování událostí a zároveò v budoucnu pro snadné lokalizování vypoutìcí stanice.\subsection{Uivatelské rozhraní terminálu}
Pøi sputìní terminálu se po resetu programu procesoru vypíe úvodní zpráva s nápovìdou, na které výstupní kontakty procesoru jsou pøipojeny jednotlivé akèní èleny. Následnì je program v pohotovostním reimu a oèekává pøíkaz. Jednotlivé pøíkazy jsou:\\
\begin{enumerate}
\item odpal
\item zrus (nebo písmeno "s")
\item help
\item check
\end{enumerate}
Pøíkaz \textbf{odpal} spustí vypoutìcí sekvenci probuzením daného vlákna pro vypoutìní. Pøíkaz \textbf{zrus} zastaví vypoutìcí sekvenci, pokud byla zahájena a indormuje o tom výpisem o ukonèení vypoutìní. Zároveò jde vypoutìní zruit okamitì stisknutím "s" bez nutnosti potvrzovat pøíkaz enterem. Pøíkaz \textbf{help} vypíe stejnou úvodní zprávu jako po resetu programu. Poslední pøíkaz \textbf{check} lze pouít pro kontrolu stavu vypoutìèe pøed zaèátkem vypoutìní. Po zadání tohoto pøíkazu jsou na terminál vypsány informace o aktuálních stavech pouitých senzorù. Lze tak napøíklad zkontrolovat, e støecha není zajitìna, nebo e je lis ji sputìn.
\begin{figure}[hbtp]
\centering
\includegraphics[scale=0.6]{program_flow.png}
\caption{Funkèní diagram firmwaru Automatického vypoutìèe}
\label{Diag_firmware}
\end{figure}
\begin{flushleft}
\begin{thebibliography}{99}
\bibitem {GPS_ublox} $UBLOX. <i>LEA-6 series</i> [online]. 2013 [cit. 2013-05-12]. Dostupné z: http://www.u-blox.com/en/gps-modules/pvt-modules/lea-6-family.html$
\end{thebibliography}
\end{flushleft}
\end{document} %tímto pøíkazem musí soubor konèit