% <<<       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ý vypouštìè 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 zjednušení programování vypouštìè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í požadavky na ROS a také s ním máme zkušenosti 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øešeno jak èasování tak úspora prostøedkù procesoru.
\subsubsection{Vypouštìní}
Toto vlákno se stará o kompletní sekvenci pro vypuštìní balónu. Po spuštì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 zrušení 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í vypouštìní a sepne se pin, na kterém je pøipojen aktuátor, který otevírá víko krabice, ve které je balón uložen (v dobì vykonávání každé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í napouštì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 použili mìøení prùtoku k získání informace, zda je balón opravdu napuštìn daným množstvím plynu.\\
Tøetím krokem celé sekvence je pøepálení plastové pojistky, která spouští tavící lis. Po pevnì dané èasové prodlevì, která by mìla staèit pro pøetavení, je pomocí koncového spínaèe zjištìno, zda se pojistka pøetavila. Pokud ano, pokraèuje se posledním krokem, pokud ne, dochází opìt k pøerušení 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í vypouštìní a všechny 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 vypouštìní a uživatel je informován o úspìšném pøerušení celé sekvence.\\
Ad. 3. Pro pøesné èasování bìhem celého procesu odpalování je využito funkce èasovaèe. Ten se v každé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 uživatele vyjadøující èas, který zbývá do ukonèení daného úkolu.
\subsubsection{Pøíjem pøíkazu od uživatele}
Pro komunikaci s uživatelem je využito sériové linky. Ta se využívá jak pro informování uživatele o aktuálním stavu programu tak zároveò k pøíjmu pøíkazù od uživatele. Celý algoritmus pøíjmu pøíkazu spoèívá ve vyèítání znakù zadaných uživatelem 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 vypouštìè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}. Každou 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í vypouštìcí stanice.\subsection{Uživatelské rozhraní terminálu}
Pøi spuštì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 režimu 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í vypouštìcí sekvenci probuzením daného vlákna pro vypouštìní. Pøíkaz \textbf{zrus} zastaví vypouštìcí sekvenci, pokud byla zahájena a indormuje o tom výpisem o ukonèení vypouštìní. Zároveò jde vypouštìní zrušit okamžitì 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 vypouštìèe pøed zaèátkem vypouštìní. Po zadání tohoto pøíkazu jsou na terminál vypsány informace o aktuálních stavech použitých senzorù. Lze tak napøíklad zkontrolovat, že støecha není zajištìna, nebo že je lis již spuštìn.

\begin{figure}[hbtp]
\centering
\includegraphics[scale=0.6]{program_flow.png}
\caption{Funkèní diagram firmwaru Automatického vypouštìè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