Ruche Intelligente
Supervision de ruches en ligne
Projet ralis par
Johan BRUN
Florian LIGNEUL
Thomas MAUGIN
Signature :
Signature :
Signature :
Page 1 sur 46
REMERCIEMENTS
Avant tout, il nous semble important de commencer ce rapport en remerciant M. Sbastien
LAGRANGE, notre encadrant, qui nous a suivi durant ce projet et qui sest toujours montr disponible
pour rpondre nos questions.
Nous tenons remercier lIstia et toute son quipe pdagogique pour les connaissances transmises
durant notre formation, connaissances qui nous ont permis de mener bien ce projet.
Nous souhaitons galement exprimer notre reconnaissance toutes les personnes ayant contribu
de prs ou de loin au dveloppement de cette application.
Page 2 sur 46
Page 3 sur 46
Page 4 sur 46
INTRODUCTION
PRESENTATION DU DOCUMENT
Ce document fut conu dans le cadre du projet tuteur de la troisime anne de cycle ingnieur
dispens pour le diplme dingnieur par lIstia Angers (Institut des Sciences et Techniques de
lIngnieur dAngers). Il fut rdig en deux semaines et clt le projet.
Ce document est le rapport rcapitulant tout ce qui a t labor par notre quipe durant les 24
semaines de projet, sur une priode allant du 22 Septembre 2014 au 11 Fvrier 2015. Il prsente la
faon dont nous avons gr ce projet, les technologies utilises, le travail ralis puis tablit un bilan de
ce projet.
CONTEXTE DECRITURE
Le prsent document a pour but dinformer lquipe pdagogique de toute lorganisation de notre
projet, ce que lon a produit, ce que lon a appris, les outils utiliss, ainsi que les difficults rencontres.
Remarque : Ce document pouvant tre par moment technique, un glossaire a t rdig en fin de ce
document afin dexpliquer certains termes. Ces derniers seront crits en bleu afin de signifier au lecteur
que ce terme fait partie du glossaire.
PRESENTATION DE L EQUIPE
Notre groupe est compos de trois tudiants de la promotion des 3mes anne du cycle ingnieur (EI5),
suivant le parcours Automatique et Gnie Informatique (AGI) de lIstia dAngers. En voici les membres :
Johan BRUN
Florian LIGNEUL
Thomas MAUGIN
Nous tions encadrs tout au long de ce projet par M. Sbastien LAGRANGE, enseignant-chercheur
lIstia.
Page 5 sur 46
1. PRESENTATION DU PROJET
1.1. CONTEXTE
Ce projet fut ralis dans le cadre des projets tuteurs dEI5. Le but est dutiliser nos comptences,
lesprit de travail dquipe et notre capacit travailler en autonomie dans un projet innovant. Nous
voulions un projet mlangeant diffrentes technologies, cest pourquoi nous avons choisi ce projet.
1.4. CONTRAINTES
Ce projet na que peu de contraintes, mis part les celles de temps. Nous navions pas besoin dacheter
de matriel, ayant dj tout de fourni par lIstia. Nous tions compltement libre vis--vis des
technologies utiliser.
Page 6 sur 46
Page 7 sur 46
concurrents Java et C# car il dispose lui aussi dun garbage collector charg de librer de la mmoire
au fur et mesure de lexcution du programme.
Python : Le python est un langage orient objet invent dans les annes 1990 par Guido
van Rossum. La prochaine version publique cre en 1991. Il est multi-plateforme et multiparadigme. Cest un langage trs largement utilis pour la programmation imprative. Il est
aussi adapt la programmation dun petit programme ou un plus gros projet.
FIGURE 5 : LOGO
PYTHON
But
HTML / CSS
Javascript
Ruby
Page 8 sur 46
Python
C++
Programmation de lArduino
FIGURE 8 : LOGO
NODEJS
Node.js utilise un modle non-bloquant (par exemple, quand il demande une donne la
base de donnes, le temps de recevoir la rponse, il va excuter le code suivant et revenir une fois la
rponse reue), vnementiel (son code nest compos que de fonctions directement appeles par le
client), ce qui le rend lger et efficace. Il est idal pour les applications en temps rel requrant un grand
nombre de donnes. La nouveaut de Node.js est quil rend dsormais possible le dveloppement de
serveur laide de JavaScript, qui nest de ce fait plus seulement un simple langage ct client.
Node.js intgre une bibliothque de serveur HTTP qui permet de faire tourner un serveur web sans avoir
besoin de logiciel externe. Cela permet galement de contrler la faon dont le serveur web fonctionne
(directement dans le code).
Pour assurer la communication client-serveur, Node.js utilise un systme de socket (grce la librairie
Node.js socket.io). Pour le reste, cest la puissance du langage JavaScript qui sexprime, un langage
simple, enrichissable par des librairies externes et pouvant tre utilis en tant que langage objet.
Node.js peut tre enrichi, comme JavaScript, laide de diverses librairies (appeles galement
packages), comme par exemple Node-schedule qui permet de programmer un vnement une
date/heure prcise.
Page 9 sur 46
Nous avons dcid dutiliser le langage Ruby avec le framework Ruby On Rails, car ce dernier propose
une architecture MVC et un outil de scaffolding trs utile pour dbuter un projet et organiser son code
de manire uniforme. La philosophie du framework est la suivante : Ne vous rptez pas et
Convention plutt que configuration, cest pour cela quil dispose aussi dune API REST en parallle des
contrleurs et des vues normales du site ce qui tait ncessaire pour le groupe travaillant sur
lapplication Android et qui permet de faire le travail beaucoup plus rapidement tant donn quil ny a
pas refaire un projet pour le service web.
Ruby dispose dun gestionnaire de packet : RubyGem (quivalent de npm pour nodeJS). Il est trs
pratique pour installer et dployer des librairies, nous avons utilis pas moins dune vingtaine de gem
pour ce projet (gestion des utilisateurs, des droits, dploiement ).
2.2.3. BOOTSTRAP
Twitter Bootstrap, est une collection doutils utiles la cration de sites web et
applications web. C'est un ensemble qui contient des codes HTML et CSS, des formulaires,
boutons, et autres lments interactifs, ainsi que des extensions JavaScript en option. On
y obtient, grce son utilisation, un site ergonomique et esthtique.
FIGURE 10 : LOGO
BOOTSTRAP
2.3.4. JQUERY
jQuery est une librairie JavaScript permettant de simplifiant la communication entre
le html et le JavaScript sur une page HTML (et donc cot client). Il est trs simple
utiliser, et de ce fait est intgr dans 80 % des 10.000 sites web les plus visits sur
lInternet.
FIGURE 11 : LOGO
JQUERY
FIGURE 12 : LOGO DE
GIT
Page 10 sur 46
git clone : premire tre utilise sur nos postes afin de pouvoir cloner le dpt Git cr sur le
serveur.
git checkout . : rinitialise lespace de travail au dernier commit effectu ou tlcharg
Et pourquoi spcialement Git ? Il existe dautres outils de gestion de sources, par exemple SVN. Mais Git
tait le seul outil de gestion dj connu par plusieurs des membres du groupe. De plus, il existe sur le
net Bitbucket qui permet de crer un dpt sur un serveur priv.
FIGURE 13 : LOGO
SUBLIME TEXT
2.3.3 RUBYMINE
RubyMine est lIDE pour Ruby dit par Jetbrains qui ralise toutes les fonctions de base
dun IDE (comme IntelliJ) et permet de lancer directement un serveur Rails. Il est
privilgier face au simple diteur de texte, car la complexit dun projet sur Ruby On Rails
implique de nombreux fichiers et oblige lutilisateur disposer dune auto-compltion
efficace (ce que ne propose pas Sublime Text dans ce cas).
Page 11 sur 46
FIGURE 14 : RUBY ON
MINE
3. TRAVAIL REALISE
Durant tout le projet, le travail ralis fut compos de six grandes activits :
de Nom de la fonctionnalit
FT01
FT02
FT03
FT04
FT05
Page 12 sur 46
3.2. CONCEPTION
Le but de cette phase est de dfinir une
architecture de notre projet, afin de
raliser les plans et que chacun puisse
travailler dessus. Ce projet est un
mlange
dlectronique
et
dinformatique. On retrouve plus que le
dveloppement dun logiciel. Ces
diffrentes parties communiquent entre
elle (voir figure 16). On retrouvera la
fonction de chaque partie en figure 17.
Nom de la partie
Rle
Ruche
Arduino
ARF-53
Raspberry Pi
Wifi
Smartphone
Ordinateur
Page 13 sur 46
Nom de la partie
Fonction
Interface Srie
Serveur Python
Base de donnes
Stockage des donnes des capteurs des ruches, les configurations utilisateurs
et des comptes sur site web
Page 14 sur 46
Serveur Ruby
Interface Web
Page 15 sur 46
D IAGRAMME DE CLASSE
Le service web tant un logiciel, une conception prliminaire est ncessaire afin de tracer les plans crer
un projet propre et organis. Pour ce faire, nous avons alors ralis un diagramme de classe afin que
chacun puisse se baser dessus (voir figure 21)
Description
User (Utilisateur)
Hive (Ruche)
Sensor (Capteur)
Page 16 sur 46
Arduino
Datum
M ODELE MVC
Afin de crer un site web maintenable, lutilisation de larchitecture MVC (figure 23) est un bon choix.
Page 17 sur 46
aussi un framework assez reconnu et utilis par de nombreuses entreprises : Groupon, SoundCloud,
Heroku, Github et qui propose un service web intgr au site web...
3.3 DEVELOPPEMENT
Cette partie fera lobjet dun chapitre entier, car, comme mentionn dans la partie 5 de ce document, le
dveloppement nous a occups environ les trois quarts de notre projet. Donc, dans un souci
dquilibrage de nos parties et de clart, cette partie sera ne sera pas dtaille ici.
3.4. DEPLOIEMENT
Le dploiement dun environnement fonctionnant sur Ruby On Rails est assez dlicat, en effet dun ct
Ruby est un langage interprt disposant de plusieurs versions et ncessitant de compiler linterprteur
depuis les sources et dun autre on dispose dune Raspberry Pi aux performances limits avec systme
dexploitation aux fonctionnalits restreintes. Ce qui rend l'opration difficile car le dploiement dune
application Ruby On Rails ncessite beaucoup de ressources processeur, dans notre cas la Raspberry Pi
mettait plus dune demi-journe pour installer l'environnement de dploiement. Il ne fallait donc faire
aucune erreur sous peine de devoir perdre encore une demi-journe.
En ce qui concerne le python, le dploiement a t trs rapide, car les distributions linux classiques
dispose toute dun interprteur Python. Il suffit de lancer le programme automatiquement au
dmarrage de la Raspberry.
Le HotSpot Wifi pour se connecter depuis mobile a t galement assez difficile mettre en place car la
Raspberry ne disposait pas des drivers adquats pour le dongle Wifi, nous avons donc d recompiler le
driver pour permettre le bon fonctionnement de celui-ci.
Page 18 sur 46
4. DEVELOPPEMENT
Avant daborder cette partie, il serait bon de rappeler deux points :
Pour conomiser un maximum dnergie nous avons dcid de faire hiberner lArduino entre chaque
acquisition. Pour cela nous avons encore une fois utilis une librairie : LowPower, elle permet de passer
lArduino dans un mode o elle ne consomme presque plus dnergie. Elle fonctionne de faon analogue
la fonction sleep :
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
FIGURE 25 : MISE EN MODE "ECONOMIE ENERGIE" DE L'ARDUINO
En utilisant cette mthode on peut faire chuter la consommation de 40mA 6.5mA. Ce qui nest pas
ngligeable puisque lArduino ne fonctionne pas pendant plus de 99% du temps. On passe dune
consommation journalire de 960mAh 156mAh soit une rduction de 83% de la consommation
nergique.
Page 19 sur 46
La communication entre lArduino et la Raspberry se fait par une liaison srie avec le protocole JSON. En
voici un exemple :
{"sensors":[{"serial":1,"values":[22,23,22,21,23,22]},{"serial":2,"values":[84,86,86,85
,81,82,83,87,85]},{"serial":3,"values":[0.00000,1.00000,2.00000,3.00000,4.00000,5.00000,6.0000
0,7.00000,8.00000,9.00000,10.00000,11.00000,12.00000,13.00000,14.00000,15.00000,16.00000,17.00
000,18.00000,19.00000,20.00000,21.00000,22.00000,23.00000]}],"arduino":{"serial":1}}
FIGURE 26 : EXEMPLE DE TRAME ENTRE ARDUINO ET RASPBERRY
Si on regarde dun peu plus prs la trame on saperoit quil est donn un serial pour chaque capteur
et Arduino. Ce sont les identifiants uniques qui sont ncessaires pour faire le traitement en base de
donnes. Nous devons en disposer pour pouvoir facilement installer de nouveaux capteurs.
Prenons lexemple de deux ruches organises comme sur la figure 27:
Avec un systme d'identifiant unique pour chaque Arduino, il nest pas ncessaire que celui des capteurs
soit diffrent. Nous pouvons donc facilement avoir des pairs Arduino/Capteur ce qui simplifie la
modularit lorsquon a besoin dajouter de nouvelles ruches.
Pour ajouter une nouvelle ruche on ajoute une nouvelle Arduino avec un nouveau serial et on peut
grader la mme configuration de capteurs sans avoir faire de modifications (voir image).
Page 20 sur 46
Dans un premier temps lapplication attend l'arrive de message sur le port srie. Quand un paquet
arrive, il fait la correspondance entre les serials des diffrents capteurs et lID du capteur en base de
donnes pour ensuite enregistrer les valeurs dans la base de donnes MySQL. Ce procd est assez
simple, mais besoin dtre fait valeur par valeur puisquil faut reconstruire la date de chaque
acquisition en fonction de leur ordre dans le message. Ainsi la dernire valeur date de la rception du
message alors que la 24ieme valeur a t prise il y 24h.
Page 21 sur 46
seulement les afficher quant au dernier on peut lui interdire tout accs. Dans notre cas nous avons
cr quatre rles (figure 28):
Administrateur, qui est le propritaire de lapplication et qui dispose de tous les droits.
Modrateur qui dispose galement de tous les droits, mais qui nest pas le propritaire de
lapplication.
Enregistr, qui peut seulement visualiser les ruches, mais qui ne peut pas administrer le site
Banni qui ne peut rien faire sur le site.
Droits \ Utilisateur
Administrateur
Modrateur
Enregistr / Anonyme
Voir
Modifier
Banni
Pour des raisons daccessibilit, les utilisateurs non enregistrs peuvent quand mme visualiser les
ruches. Mais on peut tout moment modifier la configuration pour rendre obligatoire linscription. On
peut noter que la gem devise propose des moyens dauthentification pousss comme OmniAuth qui
permet de se connecter avec son compte Google, Facebook, Twitter
Le service web a t ralis en mme temps que lapplication web. En effet Rails implmente
automatiquement une API REST dans ses contrleurs. Avec une simple configuration on peut obtenir les
mmes routes que pour lapplication web. Il faut seulement rajouter .json la fin de lurl pour passer
par lAPI. Les vue du service web son ralis laide de JSON Builder, il permet dexposer les
proprits des objets en JSON de manire assez simple, comme on peut le voir en figure 29
json.extract! @sensor_type, :id, :name, :unit, :image, :created_at, :updated_at
FIGURE 29 : EXPOSITION D'OBJETS JSON
Page 22 sur 46
ARCHITECTURE
Larchitecture dune application Ruby On Rails est
assez classique. On retrouve un dossier App
contenant les vues, les contrleurs et les modles
(MVC), on dispose aussi dun dossier assets qui
comporte les feuilles de styles, le javascript, les
images et les polices.
Page 23 sur 46
Pour afficher des graphiques, la librairie highstock a t importe dans Rails laide de sa gem. Avec
cette librairie nous pouvions directement utiliser Ruby pour afficher les graphiques (or nous devrions
utiliser Javascript sans celle-ci), ceci nous a permis de garder une homognit dans le codage, il ny
avait que trs peu de code Javascript (et JQuery) pour grer la partie mtier.
=>
{:text
=>
Page 24 sur 46
@sensor.sensor_type.name
"
("
f.rangeSelector
:enabled
=>
'true',
:buttons
=>
[{type:'week',count:1,text:'1s'},{type:'month',count:1,text:'1m'},{type:'month',count:6,text:'
6m'},{type:'year',count:1,text:'1an'},{type:'all',text:'Tout'}],
:buttonSpacing => 10, :inputDateFormat => '%e %b %Y', :inputEditDateFormat =>
'%d-%m-%Y'
f.scrollbar :enabled => 'true', :minWidth => 30
FIGURE 32 : EXEMPLE D'UTILISATION DE LA LIBRAIRIE HIGHSTOCK
Dtail
Gestion de compte
Page 25 sur 46
Gestion de capteurs
Affichage dun capteur
Page 26 sur 46
une application fonctionnelle. LAPI pour le groupe sur lapplication Android a t implmente trs
facilement tant donn que les conventions de Ruby On Rails ont t suivies scrupuleusement.
Au terme des ce projet, lapplication fonctionnait bien. Il ne manque aucune option qui nous avait t
demand. Nous pouvons peut tre regrett que la liaison radio ne soit pas effective, mais nous avons
rempli le contrat de base de faire un client web pour la ruche.
Page 27 sur 46
5. GESTION DE PROJET
5.1. CYCLE DE VIE
Ayant un projet mlant lectronique, carte programmable et service web, le cycle de vie du projet peut
tre dcoup en deux sections : acquisition / traitement des donnes (arduino/raspberry) et
consultation des donnes (site web).
Pour cette premire partie, le plus logique fut de dvelopper en partant du plus bas niveau
(lectronique), pour ensuite coder la partie pour lire les donnes des capteurs, les envoyer la
Raspberry Pi, les stocker dans la base de donnes.
Page 28 sur 46
Analyse / Spcification
Cette phase est lanalyse des besoins du client, et la spcification des fonctionnalits de lapplication.
Mots cls de cette priode : imagination et pragmatisme.
Conception
Phase primordiale, elle permet de rflchir et de concevoir notre future application avant de se jeter
corps perdu dans la programmation. Cette phase, souvent nglig dans les petits projets, reste une
phase importante, car elle permet de bien dfinir les diffrents objets de lapplication, larchitecture,
ainsi que les maquettes des interfaces graphiques.
Cest un peu comme larchitecte qui dessine les plans de la maison en veillant bien respecter le cahier
des charges, afin que louvrier nait pas rflchir comment faire, mais simplement faire. Lide de la
phase de conception est l : rflchir et dfinir avant de construire, afin de savoir par o commencer,
mais galement pour viter les risques de devoir tout refaire, car on navait pas pens un dtail
(imaginez-vous vouloir mettre une salle de bain au deuxime tage de votre maison alors que la
plomberie ne se limite quau rez-de-chausse Jaurais d y penser avant, diriez-vous).
Mots cls de cette priode : comprhension et rflexion.
Test / Validation
La plus longue priode, mais galement la plus enrichissante. Globalement, cette phase runie
proportionnellement trois activits : apprentissage, recherche de solutions et criture du code.
Cette dernire devait tre effectue avec rigueur, en prenant garde respecter les rgles dfinies en
conception et en faisant leffort de conserver un code propre. Laissez toujours le code plus propre que
vous ne lavez trouv.
Mots cls de cette priode : rigueur et rflexion.
Page 29 sur 46
On retrouvera ces phases sur le macro-planning en figure 36. On retrouvera ce planning en pleine page
en annexe 4.
Page 30 sur 46
d'hbergement et de gestion de dveloppement de logiciels, utilisant le programme Git, qui permet aux
dveloppeurs travaillant sur le projet, de tlcharger la dernire version du code et denvoyer leurs
modifications du code. Le site fournit galement des fonctionnalits de type rseaux sociaux : flux, suivi
de personnes ou de projets, graphes de rseau pour les dpts, etc.
Durant le dveloppement, lorsquun fichier est cr ou mis jour, par un dveloppeur il est donc
commit puis envoy au serveur par lintermdiaire de la commande git push. Puis, une fois connect
au site du dpt, les membres peuvent consulter les logs afin de voir ce que chacun a fait.
Page 31 sur 46
erreur, ou encore implmenter de lui-mme une partie de programme afin de tester son code. Le seul
risque faire cela est la cration dun conflit, mais qui tait souvent relativement simple et rapide
rsoudre.
Page 32 sur 46
6. BILAN GLOBAL
6.1. IDEES DAMELIORATION
Avec un projet tel que celui l, beaucoup de fonctionnalits pourraient tre ajoutes. Nous en
proposerons ici que quelques-unes :
Page 33 sur 46
Il a t galement assez difficile de configurer le Wifi de la Raspberry, le CPU est assez faible et ne
permet pas davoir de bonnes performances pour compiler nos sources (de mme pour celle de Ruby et
Rails).
Les modules ARF-53 ont t compliqus prendre en main tant donn que nous ne disposions pas
de la documentation (seulement au dbut) et que leur mise en place est assez difficile, il faut
regarder ce qu'envoie les modules sur le port srie pour pouvoir les dboguer. Dans notre cas, les
vitesses de communication ntaient pas les bonnes, nous ne pouvions mme pas savoir ce qui ne
fonctionnait pas. Cest aprs de nombreuses tentatives que nous avons trouv la bonne
combinaison.
Page 34 sur 46
Page 35 sur 46
CONCLUSION
Pour conclure ce projet, on pourrait commencer par dire que nous avons beaucoup appris,
techniquement comme humainement. Dans ce premier cas, nous avons dcouvert la technologie Ruby
on Rails qui commence tre de plus en plus populaire dans le monde du dveloppement Web, et qui
sera de plus en plus utilis et apporte donc une vrai valeur ajout notre capital de connaissances. Il en
est de mme pour Bootstrap. Nous avons conduit un projet du bas niveau au haut niveau et donc pu
couvrir un large panel de comptences.
Et dans le deuxime cas, le travail en quipe fait beaucoup appel nos qualits sociales : lhumilit,
la patience, lentraide. Cest important dans un travail en quipe, et cest durant ce genre de projet que
lon sen rend compte. La cohsion sociale du groupe est le pilier du projet, qui ne peut aboutir sans
cela.
Notre projet est la hauteur du cahier des charges prvu. Cependant, les diffrents problmes
rencontrs nous ont beaucoup ralentis et mme avec beaucoup de travail, il faut toujours du temps
pour apprendre, comprendre et bien utiliser de nouvelles technologies.
Si ctait refaire, nous garderions larchitecture mise en place, car nous la trouvons robuste et bien
organise.
Intelligence is the ability to avoid doing work, yet getting the work done.
Linus Torvald
Page 36 sur 46
GLOSSAIRE
API (Application Programming Interface) : Ensemble de classes et de fonctions qui servent dinterface
une bibliothque (library en Anglais). Il fait la communication entre le logiciel et le contenu de cette
bibliothque.
Auto-compltion : Cest le fait que le logiciel de dveloppement propose au dveloppement des noms
de fonction / variable lorsque quil est en train dcrire le code.
Base de donnes : Outil permettant de stocker des donnes. Les donnes peuvent tre de diffrentes
natures, et desfois lies entre elles.
Client-serveur : architecture trs utilise sur le web. Dsigne un mode de communication travers un
rseau entre plusieurs programmes ou logiciels : le client, envoie des requtes ; le ou les serveur(s)
attend(ent) les requtes des clients et y rpond(ent).
Design pattern : cest un patron utilis en conception. Il permet de rsoudre des problmes en imposant
une structure. Par exemple, le pattern Observer permet de mettre jour une vue chaque changement
des donnes sans que la couche traitement nait rfrenc la couche vue.
Framework : ensemble de composants qui servent crer les fondations, l'architecture et les grandes
lignes d'un logiciel. L'objectif premier d'un framework est d'amliorer la productivit des dveloppeurs
qui l'utilisent.
IDE : pour Integrated Development Environment , logiciel disposant de multiples outils embarqus
afin daider et dassister le dveloppeur dans le dveloppement dun logiciel.
JSON : Format de donnes de plus en plus utilis pour la communication entre diffrents programmes
informatiques.
Langage de programmation : un langage qui permet aux dveloppeurs d'crire des instructions qui
seront analyses et traites par l'ordinateur.
Langage interprt : langage non compil, cest--dire quaucun fichier excutable (.exe) nest cr, le
code source reste tel quel. Si lon veut excuter ce code, on doit le fournir un interprteur qui se
chargera de le lire et de raliser les actions demandes.
Langage multi-paradigme : Cest un langage pouvant utiliser plusieurs principes, comme par exemple la
programmation orient objet ou la programmation imprative.
Liaison srie : La communication srie consiste transmettre des informations aprs les avoir
pralablement dcoupes en plusieurs morceaux de taille fixe (cette taille est le nombre de lignes de
Page 37 sur 46
Page 38 sur 46
Service web : Un service web (ou service de la toile) est un programme informatique de la famille des
technologies web permettant la communication et l'change de donnes entre applications et systmes
htrognes dans des environnements distribus
Socket : Canal rseau permettant la communication entre deux programmes informatiques.
Page 39 sur 46
Page 40 sur 46
BIBLIOGRAPHIE
Cycle de vie :
laboiteaprog.com
Ruby :
rvm.io/
andrewberls.com/blog/post/api-versioning-with-rails-4
collectiveidea.com/blog/archives/2013/06/13/building-awesome-rails-apis-part-1/
Architecture MVC :
opeclassrooms.com
Raspberry Pi :
http://hardware-libre.fr/2014/02/raspberry-pi-creer-un-point-dacces-wifi/
Informations sur les diffrents langages :
wikipedia.org
siteduzero.com
developpez.com
ruby-lang.org
rubyonrails.org
python.org
cpp.developpez.com
API :
wikipedia.org/wiki/Interface_de_programmation
Page 41 sur 46
Page 42 sur 46
GEM :
Cancan : https://github.com/ryanb/cancan/wiki/Role-Based-Authorization
Devise : https://github.com/plataformatec/devise
MySQL2 : http://dev.mysql.com/downloads/connector/c/
Bootstrap Form : https://github.com/bootstrap-ruby/rails-bootstrap-forms
Tlcharger le connecteur de la mme version que rails (32/64bit) Extraire le fichier dans C:
gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\mysqlconnector\lib" --with-mysql-include="C:\mysql-connector\include" --withmysql-dir="C:\mysql-connector"'
MISE EN PLACE :
bundle install
rake {db:drop} db:create db:migrate {RAILS_ENV=production}
rails s {-e production}
Page 43 sur 46
PROCEDURE
Pour mettre en place le service sur l'Arduino au sein de la ruche, il faut diter le code afin de le
configurer.
Dans un premier temps, il faut dfini les ID de l'Arduino, de la ruche dans laquelle elle est place ainsi
que ceux des capteurs et leur type. Il faut galement configurer le principe d'acquisition des donnes et
l'adapter un ventuel nouveau priphrique.
Une fois configur, on peut dans un deuxime temps crire le programme dans le code de l'Arduino
grce l'IDE Arduino et on peut procder au branchement des diffrents priphriques sur les ports
dfinis dans le code.
Enfin, une fois dmarre et les priphriques branchs, le systme est autonome et se charge d'envoyer
les donnes intervalle rgulier.
EXEMPLE DE CODE
# for each sensor
for sensor in jsonDecoded["sensors"] :
# get sensor serial
sensorSerial = sensor["serial"]
querySensorId = "SELECT sensors.id from sensors LEFT JOIN arduinos ON
sensors.arduino_id = arduinos.id WHERE sensors.serial = " + str(sensorSerial)
+ " and arduinos.id = " + str(arduinoSerial) + " LIMIT 1"
cur.execute(querySensorId)
# get sensor id
sensorId = cur.fetchone()
if sensorId is not None:
sensorId = sensorId[0]
now = time.time();
len = len(sensor["values"])
# for each value (i => index, e => value)
for i, e in list(enumerate(sensor["values"])):
index = len-i-1
value = e
TIME_BETWEEN_ACQUISITION = 3600 # seconds
time = datetime.datetime.utcfromtimestamp(now - 3600 *
index).strftime('%Y-%m-%d %H:%M:%S')
queryDb = "INSERT INTO data(value,sensor_id,created_at,updated_at)
VALUES("+str(value)+","+str(sensorId)+",'"+str(time)+"','"+str(time)+"')"
cur.execute(queryDb)
db.commit()
Page 44 sur 46
PROCEDURE
Il faut d'une part brancher le convertisseur USB/Serial afin de brancher le rcepteur HF la Raspberry.
Une fois branche, il faut vrifier sur quel port le systme est reconnu et le configurer dans le code
source.
Une fois la base de donnes cr grce au Ruby, on peut lancer le programme d'acquisition qui
rcuprera les informations pour les stocker dans la base de donnes. Le service Python est autonome
et ne ncessite aucune intervention une fois lanc et configur.
EXEMPLE DE CODE
// Arduino initialisation
void setup(void)
{
// Start software serial port
mySerial.begin(4800);
// Put emitter pin in output and low level
pinMode(EMITTER_PIN,OUTPUT);
digitalWrite(EMITTER_PIN, LOW);
// Initialize fictive bee Count
beeCount = 0;
// Init value 2d array
sensorsValue = (double **) (malloc(sensorsCount * sizeof(double)));
for(int i = 0; i < sensorsCount; i++)
{
sensorsValue[i] = (double*) (malloc(MAX_VALUES * sizeof(double)));
}
}
// Get data value For each sensor
for(int i=0; i<sensorsCount; i++)
{
// Local copies of data
sensor = aJson.createObject();
values = aJson.createArray();
// Add sensor serial number
aJson.addNumberToObject(sensor,"serial",sensorsSerial[i]);
// Add each value
for(int j=0;j<MAX_VALUES;j++)
{
if(sensorsValue[i][j] != -999)
{
value = aJson.createItem(sensorsValue[i][j]);
aJson.addItemToArray(values,value);
}
}
Page 45 sur 46
Page 46 sur 46
Ruche Intelligente
Projet ralis par : BRUN JOHAN, LIGNEUL FLORIAN ET MAUGIN THOMAS
Projet encadr par : M. LAGRANGE SEBASTIEN
RESUME
La diminution de la population d'abeille dans le monde est un vritable flau pour la nature et lhumanit.
Pour le combattre, de plus en plus de systmes se dveloppent grce l'informatique, afin d'assister et
soutenir les apiculteurs dans leur travail. Ce fut alors la thmatique de notre projet, crer un systme dans le
but de superviser l'tat de plusieurs ruches.
Ce projet de six mois fut trs large et couvrait un large panel de connaissances. De l'lectronique au site
Internet, tout tait faire. Pour ce faire, des capteurs ont t installs et connects une carte Arduino.
Ensuite venu la programmation d'un Rapberry Pi afin de traiter et stocker les donnes. De lArduino. Enfin, un
serveur web a t mis en place sur cette carte pour hberger notre site web et rendre les donnes rcoltes
consultables.
Pour ce faire, des recherches sur les diffrentes technologies ont t ncessaires afin de mettre en place
l'architecture du projet. Ce dernier fut dcoup en plusieurs parties, donc les diffrentes tches ont t
spares entre les membres du groupe. Un cycle de dveloppement en spirale a souvent t utilis, en
ajoutant les fonctionnalits une par une.
A la fin du projet, les fonctionnalits furent ralises. Plusieurs ruches pouvaient tre surveilles par
diffrents utilisateurs l'aide d'un ordinateur / mobile et un navigateur web.
Mots-cls : Arduino, Raspberry, Ruby, Web, Ruche
SUMMARY
The reduction of the number of bees in the world is a real problem for the nature and even for the humanity.
To fight against it, more and more systems are developed thanks to computer-science to assist beekeepers in
their work. It was the subject of our project; create a system to monitor several hives.
This 6-month project was very large, and covers a lot of knowledge. From electronic to website, all was left to
do. To begin, sensors were connected to an Arduino card. Next, the Raspberry was configured to process and
store data from Arduino. To finish, a web server has been set up to host our website, in order to display data.
For that purpose, some searches on different technologies were needed to set up the project architecture.
The latter was cut in several parts, so different tasks were separated between project members. A systems
development life cycle in spiral was often used, by adding features separately.
At the end of the project, all features were performed. Several hives could be monitored by different user
with a computer / mobile and a web browser.
Keywords: Arduino, Raspberry, Ruby, Web, Hive