TM/latex/TM.tex

217 lines
11 KiB
TeX

\documentclass{scrreprt}
%\documentclass[draft]{scrreprt}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{polyglossia}
\usepackage{csquotes}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{appendix}
\usepackage{color}
\usepackage{minted}
\usepackage[singletitle=true,citestyle=verbose-trad2,bibstyle=verbose,backend=biber,citepages=omit]{biblatex}
\usepackage[hidelinks]{hyperref}
\usepackage[acronym,toc,xindy]{glossaries}
\usepackage{glossary-list}
\setmainlanguage{french}
\title{La lumière s'éteint-elle dans le frigo ?}
\subtitle{ou bla bli blu}
\author{Nathanaël \textsc{Restori}}
\date{\today}
\bibliography{bibliographie.bib}
\renewcommand*{\glstextformat}{\textbf}
\makeglossaries
\input{glossaire.tex}
\renewcommand{\appendixname}{Annexes}
\renewcommand{\appendixtocname}{Annexes}
\renewcommand{\appendixpagename}{Annexes}
\begin{document}
\input{couverture.tex}
\chapter*{Remerciements}
\thispagestyle{empty}
Je remercie bla bla bla...
\vfill
Image de couverture par \enquote{oomlout}, sous licence Creative Commons Attribution-Share like 2.0 Generic (CC BY-SA 2.0)
\tableofcontents
\chapter{Introduction}
\section{Motivations}
J'ai décidé de faire mon travaille de maturité sur ce sujet car je suis passionné de robotique depuis tout petit. J'ai commencé en participant à un atelier de soudures à la Maison Picson\footnote{Établissement servant de cantine proposant aussi des activités à Blonay}. Je suis aussi allé à la première édition du Festival de Robotique à l'EPFL en 2008 et ai participé à deux ateliers (introduction à la programmation de microcontrôleur et soudure d'un robot DIDEL).
Je suis aussi passionné par l'informatique en général, la programmation ainsi que les logiciels libres.
\section{Présentation du travail}
TODO
\section{Les principes du logiciel libre}
Un logiciel libre est un logiciel qui respecte quatre libertés fondamentales~:
\begin{enumerate}
\item la liberté d'utiliser le logiciel
\item la liberté de copier le logiciel
\item la liberté d'étudier le logiciel
\item la liberté de modifier le logiciel et de redistribuer les versions modifiées
\end{enumerate}
Les deux dernière libertés demandent la mise à disposition du \gls{code source}.
On retrouve aussi le terme \enquote{\emph{open source}}. Le terme logiciel libre est définit par la \gls{FSF} tandis que le terme open source est définit par l'\gls{OSI}. En pratique, ces deux termes désignent la même chose.
Les sources du logiciels sont soumis à des licences spécifiques garantissant ces libertés. Les plus connues sont la \gls{GPL}, la \gls{BSD} ou la MIT (une copie de cette dernière est disponible à l'annexe \ref{app:mit}).
Quelques logiciels libres connus sont Firefox et Thunderbird, Linux, OpenOffice.org et LibreOffice.
Ce \gls{TM} est donc entièrement articulé autour de logiciels et matériels libres : \LaTeX et vim pour l'écriture de ce rapport, Arduino comme plate-forme, CMake et gcc pour la \gls{compilation}, gnuplot pour les graphiques. Tout le code produit est donc placé sous licence MIT.
\section{Conventions d'écriture}
Les mots en \textbf{gras} sont des mots expliqués dans le glossaire ou des acronymes.
Les textes écrits avec \verb|cette police d'écriture| sont des extraits de code.
\chapter{Le matériel}
\section{Le choix de la plate-forme}
Il existe de nombreuse \gls{plate-forme} en robotique~: par exemple, le Boe-Bot de Parallax, utilisé dans les cours facultatifs de robotique de M. \textsc{Gardon}. J'ai fait le choix d'un Arduino car cette un plate-forme de plus en plus répandue, peu chère (20 € pour une carte programmable) et puissante. On trouve de nombreux exemples de \gls{DIY}, elle est programmable en \gls{C++} (donc il est possible d'utiliser des \glspl{bibliotheque}) et c'est du \gls{materiel libre}.
\section{Les capteurs}
Il a été décidé de faire une station météo. Nous avons donc besoin d'un thermomètre (figure \ref{fig:BMP085}), d'un hygromètre (figure \ref{fig:BMP085} aussi), d'un baromètre (figure \ref{fig:TSL2561}) et d'un capteur de luminosité (figure \ref{fig:DHT22}). J'ai ajouté une horloge (figure \ref{fig:ChronoDot}) qui nous permettra d'avoir l'heure à laquelle les mesures ont été prises. Tous les capteurs ont été commandé sur le site d'Adafruit. L'hygromètre ne se connecte malheureusement pas en I²C, aucun capteur de ce type n'étant disponible.
\begin{figure}[h]
\centering
\begin{subfigure}[b]{0.23\textwidth}
\centering
\includegraphics[width=1\textwidth]{images/perso/BMP085.JPG}
\caption{BMP085}
\label{fig:BMP085}
\end{subfigure}
~
\begin{subfigure}[b]{0.23\textwidth}
\centering
\includegraphics[width=1\textwidth]{images/perso/ChronoDot.JPG}
\caption{ChronoDot}
\label{fig:ChronoDot}
\end{subfigure}
~
\begin{subfigure}[b]{0.23\textwidth}
\centering
\includegraphics[width=1\textwidth]{images/perso/DHT22.JPG}
\caption{DHT22}
\label{fig:DHT22}
\end{subfigure}
~
\begin{subfigure}[b]{0.23\textwidth}
\centering
\includegraphics[width=1\textwidth]{images/perso/TSL2561.JPG}
\caption{TSL2561}
\label{fig:TSL2561}
\end{subfigure}
\caption{Les capteurs}
\caption*{Photos personnelles}
\end{figure}
\section{Les limitations}
J'ai vite été confronté a quelques limitations : la mémoire de l'Arduino ne peux contenir seulement 32256 octets de code compilé. Il ne peux donc pas contenir en même temps les \glspl{bibliotheque} pour utiliser les capteurs en I²C, utiliser le port RJ45 et utiliser la carte SD. La solution a été de couper le programme en deux : il y a donc un code pour afficher les mesures en direct à travers un navigateur web et un code pour prendre des mesures de manière régulière et les enregistrer.
\begin{figure}[h]
\centering
\includegraphics[width=1\textwidth]{images/perso/montage.JPG}
\caption{Montage complet}
\caption*{Photo personnelle}
\label{fig:montage}
\end{figure}
\chapter{Le logiciel}
\section{En général}
Les deux programmes sont composés de deux fonctions principales. La fonction \verb|setup()| qui s'exécute une fois au démarrage du programme et la fonction \verb|loop()| qui est exécutée en boucle. La première sert donc à initialiser et configurer les capteurs et les puces. La deuxième sert à traiter les informations.
Plusieurs \glspl{bibliotheque} sont utilisées. Comme bibliothèques tierces, sont utilisés : \verb|BMP085| pour le capteur de température et de pression, \verb|Chronodot| pour l'horloge, \verb|DHT| pour le capteur d'humidité, \verb|TSL2561| pour le capteur de luminosité et, pour finir, \verb|WebServer| pour servir les pages web. Comme bibliothèques internes (fournie avec l'Arduino), sont utilisés : \verb|Ethernet| pour la puce de contrôle du port RJ45, \verb|SD| ainsi que \verb|SPI| pour la carte SD et \verb|Wire| pour l'I²C.
\section{L'enregistreur}
Un copie des sources est disponible à l'annexe \ref{app:logger}.
La fonction \verb|setup()| commence par initialiser la carte SD puis initialise les différents capteurs. Il configure ensuite le capteur de luminosité et finit par vérifier si le fichier DATA.TSV existe, le crée si il n'existe pas et y enregistre les en-tête (un exemple de se fichier est disponible à l'annexe \ref{app:data}).
La fonction \verb|loop()| récupère les différentes données des capteurs puis les enregistre. Elle finit en faisant une pause d'un temps définit.
\section{Le serveur web}
Un copie des sources est disponible à l'annexe \ref{app:web}.
La fonction \verb|setup()| commence par initialiser la puce de contrôle du port RJ45 et le serveur web et configure ce dernier, puis initialise les différents capteurs. Il configure ensuite le capteur de luminosité. Elle finit par appeler \verb|sendNtpPacket()| qui va interroger un serveur \gls{NTP} pour mettre à jour l'heure de l'horloge.
La fonction \verb|loop()| se contente de demander au serveur de s'occuper des connections entrantes. Ce dernier peux appeler deux fonctions : \verb|defaultCmd()| si la page d'index est demandée ou \verb|sensorsJsonCmd()| si c'est la page \enquote{sensors.json} qui est demandée.
La fonction \verb|defaultCmd()| se contente d'envoyer la page d'index dont le code source est disponible à l'annexe \ref{app:index}.
La fonction \verb|sensorsJsonCmd()| récupère les valeurs des capteurs puis les envoie dans le format \gls{JSON}. Un exemple est fourni à l'annexe \ref{app:sensors}.
\subsection{La page d'index}
Une fois téléchargée par le navigateur web, du JavaScript est exécuté. Ce JavaScript va télécharger la page \enquote{sensors.json} de manière régulière, analyser son contenu puis mettre à jour le tableau qui contient les valeurs.
\chapter{Le cas du frigo}
\section{Les mesures}
Pour réaliser cette expérience, la station météo a été placée dans un sachet plastique contenant du silica gel ainsi qu'une rallonge pour l'hygromètre pour qu'il puisse être exposé à l'humidité du frigo. La station météo a ensuite été placée pendant une heure au frigo. Voici les premières constatations : premièrement, l'humidité ne dépassait jamais 70\%, deuxièmement, la température ne descendait jamais au dessous de 8°.
Un deuxième essais a donc été réalisé, sans sachet plastique cette fois ci. Le montage a été placé deux heures au frigo. Cette fois ci, la température s'est stabilisée à environ 5° Celsius mais on constate une chute de la puissance après environ une heure. Cela est probablement dû au fait qu'une partie de l'alimentation atteint un très mauvais rendement à basse température, la puissance raugmentant une fois sortie du frigo.
Un troisième essais a été réalisé, d'une durée d'une heure cette fois. C'est cet essais qui est disponible et qui va être analysé.
\section{Les résultats}
Premièrement, les graphiques sont disponibles à la figure \ref{fig:graphique}
\begin{figure}[b]
\centering
\input{data.tex}
\caption{Graphique}
\label{fig:graphique}
\end{figure}
\listoffigures
\chapter*{Bibliographie}
\addcontentsline{toc}{chapter}{Bibliographie}
\nocite{*}
\section*{Images}
\printbibliography[heading=none,keyword=image]
\glsadd{DIYg}
\printglossary[type=\acronymtype,title=Acronymes,toctitle=Acronymes,style=altlist]
\newpage
\printglossary[type=main,title=Glossaire,toctitle=Glossaire,style=altlist]
\appendix
\appendixpage
\addappheadtotoc
\chapter{Licence MIT}
\label{app:mit}
\inputminted{text}{input/mit.txt}
\chapter{WeatherStationLogger.ino}
\label{app:logger}
\inputminted[linenos]{cpp}{../arduino/WeatherStationLogger/WeatherStationLogger.ino}
\chapter{DATA.TSV}
\label{app:data}
\inputminted[obeytabs]{text}{input/DATA.TSV}
\chapter{WeatherStationWeb.ino}
\label{app:web}
\inputminted[linenos]{cpp}{../arduino/WeatherStationWeb/WeatherStationWeb.ino}
\chapter{index.html}
\label{app:index}
\inputminted[linenos]{html}{../arduino/WeatherStationWeb/index.html}
\chapter{sensors.json}
\label{app:sensors}
\inputminted[linenos]{json}{input/sensors.json}
\end{document}