Station météo Arduino – 3
Nous arrivons à la dernière étape de la réalisation de notre station météo! Enfin plutôt à la réalisation du projet, la station étant finie si vous avez suivi jusqu’ici. Notre objectif est maintenant de programmer deux softs qui ajouteront les fonctionnalités suivantes:
- Envoie des données reçues via câble USB sur le réseau
- Affichage automatique d’histogrammes / courbes (données météorologiques en fonction du temps)
Vous remarquerez peut être que je n’ai pas évoqué l’interprétation des données, tout simplement parce que nous travaillons actuellement dessus. Bref commençons par l’envoie des données sur le réseau: vous savez qu’à l’aide de la méthode Serial.print() il est possible d’envoyer depuis la carte Arduino des données sur le port série. Il suffit d’ouvrir la fenêtre adéquate dans l’IDE pour y lire ce dont nous avons besoin. Nous allons reprogrammer cette partie pour avoir une appli indépendante d’Arduino et qui pourra de plus, envoyer les données sur le réseau. Au niveau du code, c’est du C, je vous redirige vers l’article correspondant à son développement:
http://valou-tweak.com/?p=99
Passons maintenant à la deuxième partie: les grapgiques. Sachez tout d’abord que tous les honneurs reviennent à Djibril, qui a travaillé dessus!
Pour tracer des grapgiques, nous allons utiliser gnuplot, compatible windows / linux / mac. C’est un programme qui prendra en paramètre un fichier .gnu contenant les instructions d’affichage. Il faut cependant se munir de la version adéquate (version spécifique à l’OS), de la librairie et le tour est joué! Voir l’article “Annexes” pour le téléchargement du .zip où tout est regroupé.
Le code Linux du programme (paramètre 1: fichier de donnée 2: Titre du graph) :
#include#include #include #include #include #include "gnuplot_i.hpp" #define SLEEP_LGTH 1 #define NPOINTS 50 using namespace std; void affichage(string txt,string titre); int main(int argc, char* argv[]) { if (argc != 3) { cerr << "Usage: linuxGnuPlot fichier titre" << endl; exit(1); } char *file = argv[1]; char *title = argv[2]; affichage(file, title); return 0; } void affichage(string txt, string titre) { // ouverture en écriture avec effacement du fichier ouvert ofstream fichier("simple.1.gnu", ios::out | ios::trunc); if(fichier) { string programme="plot '"+txt+"' with boxes title '"+titre+"' npause -1"; fichier << programme << endl; fichier.close(); } else { cerr << "Impossible d'ouvrir le fichier !" << endl; exit (3); } execlp("gnuplot", "gnuplot", "simple.1.gnu", NULL); cerr << "Erreur lors de l'exec" << endl; exit(2); }
Voyez, il n'y a rien de très complexe! Admirez plutôt un exemple de résultat:
Le projet toucherait presque à sa fin, il faudrait maintenant souder le montage, car il n'est pas vraiment transportable actuellement. Une belle petite boîte en bois et la station sera toute belle! Je ferai certainement une annexe pour ajouter ce qu'il pourrait manquer comme l'ajout d'un altimètre, un script d'automatisation des tâches etc...
Bon vent et à bientôt!
Laisser un commentaire