Some fixes

This commit is contained in:
Nathanaël Restori 2012-10-27 15:50:57 +02:00
parent f2faca454c
commit d21f38f24b
4 changed files with 94 additions and 56 deletions

View File

@ -30,6 +30,21 @@
static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
// no-cost stream operator as described at
// http://sundial.org/arduino/?page_id=119
template<class T>
inline Print &operator <<(Print &obj, T arg)
{ obj.print(arg); return obj; }
template<class T>
inline Print &operator >>(Print &obj, T arg)
{
for (unsigned int mask = 0x80; mask; mask >>= 1) {
obj.print(mask&arg?'1':'0');
}
return obj;
}
void setup() {
Serial.begin(9600);
@ -68,38 +83,42 @@ void setup() {
Serial.println();
Serial.println("What\tByte\tCorrespondance");
Serial.println("------------------------------");
Serial.print("seconds\t"); Serial.print(blah[0]); Serial.print("\t"); Serial.println(ss);
Serial.print("minutes\t"); Serial.print(blah[1]); Serial.print("\t"); Serial.println(mm);
Serial.print("hours\t"); Serial.print(blah[2]); Serial.print("\t"); Serial.println(hh);
Serial.print("days\t"); Serial.print(blah[4]); Serial.print("\t"); Serial.println(d);
Serial.print("monthes\t"); Serial.print(blah[5]); Serial.print("\t"); Serial.println(m);
Serial.print("years\t"); Serial.print(blah[6]); Serial.print("\t"); Serial.println(y);
Serial.print("temp\t"); Serial.print(blah[17]); Serial.print("\t"); Serial.println(ttc);
Serial.print("temp\t"); Serial.print(blah[18]); Serial.print("\t"); Serial.println(portion);
Serial
<< "seconds\t" << blah[0] << "\t" << ss << "\r\n"
<< "minutes\t" << blah[1] << "\t" << mm << "\r\n"
<< "hours\t" << blah[2] << "\t" << hh << "\r\n"
<< "days\t" << blah[4] << "\t" << d << "\r\n"
<< "months\t" << blah[5] << "\t" << m << "\r\n"
<< "years\t" << blah[6] << "\t" << y << "\r\n"
<< "temp\t" << blah[17] << "\t" << ttc << "\r\n"
<< "temp\t" << blah[18] << "\t" << portion << "\r\n";
Serial.println();
Serial.println("Byte\tContent");
Serial.println("---------------");
Serial.print("0\t"); Serial.println(blah[0]);
Serial.print("1\t"); Serial.println(blah[1]);
Serial.print("2\t"); Serial.println(blah[2]);
Serial.print("3\t"); Serial.println(blah[3]);
Serial.print("4\t"); Serial.println(blah[4]);
Serial.print("5\t"); Serial.println(blah[5]);
Serial.print("6\t"); Serial.println(blah[6]);
Serial.print("7\t"); Serial.println(blah[7]);
Serial.print("8\t"); Serial.println(blah[8]);
Serial.print("9\t"); Serial.println(blah[9]);
Serial.print("10\t"); Serial.println(blah[10]);
Serial.print("11\t"); Serial.println(blah[11]);
Serial.print("12\t"); Serial.println(blah[12]);
Serial.print("13\t"); Serial.println(blah[13]);
Serial.print("14\t"); Serial.println(blah[14]);
Serial.print("15\t"); Serial.println(blah[15]);
Serial.print("16\t"); Serial.println(blah[16]);
Serial.print("17\t"); Serial.println(blah[17]);
Serial.print("18\t"); Serial.println(blah[18]);
Serial.print("19\t"); Serial.println(blah[19]);
Serial.println("Byte\tDecimal\tBinary");
Serial.println("----------------------");
Serial
<< "0\t" << blah[0] << "\t" >> blah[0] << "\r\n"
<< "1\t" << blah[1] << "\t" >> blah[1] << "\r\n"
<< "2\t" << blah[2] << "\t" >> blah[2] << "\r\n"
<< "3\t" << blah[3] << "\t" >> blah[3] << "\r\n"
<< "4\t" << blah[4] << "\t" >> blah[4] << "\r\n"
<< "5\t" << blah[5] << "\t" >> blah[5] << "\r\n"
<< "6\t" << blah[6] << "\t" >> blah[6] << "\r\n"
<< "7\t" << blah[7] << "\t" >> blah[7] << "\r\n"
<< "8\t" << blah[8] << "\t" >> blah[8] << "\r\n"
<< "9\t" << blah[9] << "\t" >> blah[9] << "\r\n"
<< "10\t" << blah[10] << "\t" >> blah[10] << "\r\n"
<< "11\t" << blah[11] << "\t" >> blah[11] << "\r\n"
<< "12\t" << blah[12] << "\t" >> blah[12] << "\r\n"
<< "13\t" << blah[13] << "\t" >> blah[13] << "\r\n"
<< "14\t" << blah[14] << "\t" >> blah[14] << "\r\n"
<< "15\t" << blah[15] << "\t" >> blah[15] << "\r\n"
<< "16\t" << blah[16] << "\t" >> blah[16] << "\r\n"
<< "17\t" << blah[17] << "\t" >> blah[17] << "\r\n"
<< "18\t" << blah[18] << "\t" >> blah[18] << "\r\n"
<< "19\t" << blah[19] << "\t" >> blah[19] << "\r\n";
}
void loop() {

View File

@ -73,8 +73,8 @@ void setup() {
if (file) {
Serial.print("Creating data.tsv");
file.println("#Time\t\t\tT [°C]\tP [Pa]\tAlt [m]\tHr [%]\tLx "
"[lux]");
file.println("#Time\t\t\tT [°C]\tP [Pa]\tAlt [m]\tHr [%]\t"
"Lx [lux]");
file.close();
Serial.println("DONE");
} else {

View File

@ -117,10 +117,13 @@ void sensorsJsonCmd(WebServer &server, WebServer::ConnectionType type,
server.httpSuccess("application/json");
server << "{ \"sensors\": ["
<< "{\"data\":\"" << time.hour() << ":" << time.minute()
<< ":" << time.second() << " " << time.day() << "/"
<< time.month() << "/" << time.year() << "\"},"
server << "{ \"sensors\": [" << "{\"data\":\""
<< time.hour() << ":"
<< time.minute() << ":"
<< time.second() << " "
<< time.day() << "/"
<< time.month() << "/"
<< time.year() << "\"},"
<< "{\"data\":" << temperature << "},"
<< "{\"data\":" << pressure << "},"

View File

@ -18,8 +18,8 @@
\setmainlanguage{french}
\title{La lumière s'éteint-elle dans le frigo ?}
\subtitle{ou bla bli blu}
\author{Nathanaël \textsc{Restori}}
\subtitle{Étude d'un bus en vue d'acquisition de données}
\author{Nathanaël Restori}
\date{\today}
\bibliography{bibliographie.bib}
@ -39,7 +39,12 @@
\chapter*{Remerciements}
\thispagestyle{empty}
Je remercie bla bla bla...
Je tient à remercier M.~Salanon pour ses conseils, son aide et pour m'avoir suivi tout au long de ce TM et M.~Gelsomino pour m'avoir permis de réaliser ce TM.
Je remercie aussi mes parents et ma sœur pour leur aide et leur relecture.
Merci aussi à l'équipe d'Adafruit pour son engagement envers le libre et pour sa documentation.
\vfill
Image de couverture par \enquote{oomlout}, sous licence \emph{Creative Commons Attribution-Share Alike 2.0 Generic (CC BY-SA 2.0)}.
@ -227,7 +232,7 @@ Si les deux maîtres on envoyer exactement la même chose, il n'y aura pas de co
\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}\glsadd{DIYg}, elle est programmable en \gls{C++} (donc il est possible d'utiliser des \glspl{bibliotheque}) et c'est du \gls{materiel libre}.
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.~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}\glsadd{DIYg}, 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.
@ -284,6 +289,8 @@ Plusieurs \glspl{bibliotheque} sont utilisées. Comme bibliothèques tierces, so
La partie logicielle est coupée en deux programmes : un enregistreur et un serveur web. Les sources sont disponibles respectivement à l'annexe \ref{app:logger} et à l'annexe \ref{app:web}.
Un troisième programme sera utilisé pour tester en pratique le protocole I²C à l'aide d'un oscilloscope et vérifier si la théorie correspond à la pratique. Le code source est disponible à l'annexe \ref{app:i2cpractise}.
\section{L'enregistreur}
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}).
@ -306,6 +313,11 @@ J'ai essayé de réunir les deux programmes en un seul en allégeant les \glspl{
J'ai aussi cherché s'il était possible de mettre un système d'exploitation sur l'Arduino et qu'il puisse charger les programmes sur la carte SD, mais je n'ai rien trouvé.
\section{Le programme pour tester en pratique l'I²C}
Cette fois-ci, l'entièreté du programme se situe dans la fonction \verb|setup()|. On commence par initialiser la classe \verb|Wire| puis commencer à transmettre sur le bus. D'abord, l'adresse de l'horloge est transmise, puis on positionne le curseur du registre à zéro et on lit les vingt premiers octets du registre qui continent l'heure, la date et la température. Ces données sont traitées pour être lisible puis on les affiche dans un tableau afin de savoir si la communication c'est bien passée. Pour finir, on affiche un tableau des vingt octets sous leurs formes décimales et binaires. %TODO: mettre un exemple en annexe
\chapter{Test de l'I²C en pratique}
\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° (voir la figure \ref{fig:1}).
@ -332,7 +344,7 @@ La luminosité est nulle tout au long de l'expérience sauf quand la station a
\end{figure}
\subsection{L'humidité en fonction de la température}
La figure \ref{fig:t-h} représente l'humidité en fonction de la température entre trois heure et quart du matin et sept heure de demi du matin. D'après les cours de monsieur \textsc{Bonnaz}, je m'attendais à voir une courbe de pente négative, symétrique à celle-ci. En effet : plus l'air est chaud, plus il peux accueillir de l'humidité donc l'humidité relative devrait diminuer. Mais ça ne fonctionne que si l'on part du principe que l'eau ne se condense que lorsque l'humidité atteint 100\% (ce qui était fait dans les exercices du cours).
La figure \ref{fig:t-h} représente l'humidité en fonction de la température entre trois heure et quart du matin et sept heure de demi du matin. D'après les cours de M.~Bonnaz, je m'attendais à voir une courbe de pente négative, symétrique à celle-ci. En effet : plus l'air est chaud, plus il peux accueillir de l'humidité donc l'humidité relative devrait diminuer. Mais ça ne fonctionne que si l'on part du principe que l'eau ne se condense que lorsque l'humidité atteint 100 \% (ce qui était fait dans les exercices du cours).
Mais d'où peux donc venir cette différence ? Faisons un peu de calcul :
@ -407,6 +419,10 @@ Si l'on part du principe que le frigo est étanche, la pente de la courbe peux d
\label{app:sensors}
\inputminted[linenos]{json}{input/sensors.json}
\chapter{I2CPractise.ino}
\label{app:i2cpractise}
\inputminted[linenos]{cpp}{../arduino/I2CPractise/I2CPractise.ino}
\chapter{Graphiques}
\label{app:graphs}