Objets communiquants et gestion de l'énergie : Différence entre versions
(→Réalisation) |
(→CODE DU LINKER) |
||
Ligne 195 : | Ligne 195 : | ||
===CODE DU LINKER=== | ===CODE DU LINKER=== | ||
+ | |||
+ | Code du programme de liaison | ||
+ | |||
+ | ce programme en java est constitué de 5 classes | ||
+ | |||
+ | Le Main | ||
+ | <code> | ||
+ | public class main { | ||
+ | |||
+ | public static SQLinker linker; | ||
+ | public static Xbee xbee; | ||
+ | |||
+ | public static void main(String[] args){ | ||
+ | String address = new String("jdbc:mysql://sitedb.polytech-lille.net/cdelberg?"); | ||
+ | String user = new String("user=cdelberg&password=myLo9ufonese"); | ||
+ | String COM; | ||
+ | |||
+ | |||
+ | <span style="color: red;">// We ask the user on the Communication Port to connect the XBee</span> | ||
+ | System.out.println("Please enter the Communication port of the Xbee"); | ||
+ | Scanner sc = new Scanner(System.in); | ||
+ | COM = sc.next(); | ||
+ | System.out.println("COM port changed to: "+COM); | ||
+ | |||
+ | <span style="color: red;">//Creation of the Variables that will be used to connect to the Database and the Xbee</span> | ||
+ | linker = new SQLinker(address, user); | ||
+ | linker.FillArdList(); | ||
+ | xbee = new Xbee(COM); | ||
+ | |||
+ | <span style="color: red;">//Creating the Updates Threads</span> | ||
+ | W8Thread thread1 = new W8Thread(); | ||
+ | thread1.start(); | ||
+ | UpTestThread thread2 = new UpTestThread(); | ||
+ | thread2.start(); | ||
+ | |||
+ | <span style="color: red;">//We now allow the user to enter a command</span> | ||
+ | String command; | ||
+ | System.out.println("vous pouvez maintenant lancer une commande si vous le souhaitez"); | ||
+ | System.out.println("tapez help pour plus d'informations"); | ||
+ | boolean exit=false; | ||
+ | |||
+ | while(exit==false){ | ||
+ | command=sc.next(); | ||
+ | |||
+ | if(command.equals("help")){ | ||
+ | System.out.println("print => affiche la liste des arduinos"); | ||
+ | System.out.println("exit => ferme le programme"); | ||
+ | } | ||
+ | if(command.equals("print")){linker.PrintArdList();} | ||
+ | if(command.equals("exit")){exit=true;} | ||
+ | |||
+ | } | ||
+ | <span style="color: red;">//if the user ask to stop the program, it will do those final commands</span> | ||
+ | sc.close(); | ||
+ | thread1.stop(); | ||
+ | thread2.stop(); | ||
+ | xbee.XbeeClosing(); | ||
+ | //System.out.println("Program finished successfully"); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
=== Liste du matériel à acheter === | === Liste du matériel à acheter === |
Version du 22 février 2013 à 15:24
Présentation du projet
Planning prévisionnel provisoire (jusqu'à la pré-soutenance)
Ce planning pourrait être amené à être modifié.
I) Etat de l'art ( ~2-3 semaines)
-Energy harvesting (Calvin)
-Batteries (Justin)
II) Mesure de puissance des différents appareil Arduino ( ~2 semaines)
III) Confronter théorie/réalité ( ~1 semaine) -estimer consommation de puissance
-vérifier en pratique
Amené à être ajouté:
Mesure du Arduino de sa propre consommation.
Mesure de la consommation du code (?)
Applications:
-Envoi des valeurs de l'Arduino au serveur.
-Interface web pour interagir avec l'objet.
Etat de l'art
Energy Harvesting
- Mosquino:
Mosquino est un matériel compatible avec le développement logiciel et dérivé de Arduino, il permet de récupérer de l'énergie des sources ambiantes (chaleur, luminosité, vibrations)
Il n'est destiné qu'aux faibles consommations électriques et n'est encore qu'en phase de développement, il n'a pas encore été véritablement testé.
http://tim.cexx.org/?page_id=760
- Breakout board BOB-o9946 :
Cette carte utilise le collecteur d'énergie piezoelectrique LTC3588 de Linear Technologies et permet non seulement de récupérer l'énergie piezoélectrique mais aussi l'énergie solaire. Initialement prévu pour fonctionner à faible voltage, la capacité de sortie peut-être dimensionnée pour recevoir une salve de courant de sortie plus élevée.
https://www.sparkfun.com/products/9946
Batteries
- nouvelles technologies:
ces dernières années, de nouvelles technologies sont apparues, sans être encore réellement utilisées. je pense notamment aux batteries contenues dans des câbles: http://phys.org/news/2012-09-lg-chem-cable-batteries-reshape.html
ainsi qu'aux batteries ultra fines dévellopées par thinergy: http://www.infinitepowersolutions.com/products.html
Néanmoins, les tensions pouvant etre délivrées par ces technologies naissantes sont loin de pouvoir alimenter le materiel qui nous interresse, à savoir des Arduino (necessitant une alimentation comprise entre 7V-12V)
D'autres techno sont encore en phase de développement, comme les batteries lithium-Air d'IBM, les piles au graphène utilisant la chaleur pour produire de l’énergie (plutôt de l'energy harvesting pour le coup). Comme ces technologies sont encore en phase de développement, elles n’apparaîtrons pas sur le marché avant au moins 10 ans.
- technologies adaptée à notre usage:
comme je l'ai rappelé plus haut, ce PFE tourne principalement autour d'Arduino. ces plates-formes nécessitant une tension d'alimentation supérieure à 7V, le choix le plus intéressant reste les piles rechargeable.
Seulement, il existe plusieurs types de piles rechargeables. dans l'usage qu'il en sera fait, et si ces batteries sont couplées à des technologies de récupération d'énergie, il est important de choisir des piles Lithium-Ion.
En effet, ces piles sont les plus intéressantes pour plusieurs raisons:
tout d'abord, elles sont insensibles à l'effet mémoire. du coup elles ne perdent pas de leur capacité de stockage d’énergie au cours du temps.
le circuit intégré à ces piles empêche toute surtension lors de la charge.
elles peuvent être rechargée en même temps qu'elles sont utilisées.
dans une époque ou la pollution est un sujet préoccupation, ces piles sont moins dangereuse pour l’environnement que leurs homologues au nickel-Cadmium
le seul problème pourrais venir du fait qu'elles ne supporte pas bien la chaleur, mais à moins de les coller à un radiateur, il ne devrais pas y avoir de soucis.
Mesure de la consommation énergétique
WSIM permet la simulation de capteurs sans fil. Il permet notamment d'estimer la consommation électrique http://wsim.gforge.inria.fr/index.html Pour l'instant il ne fonctionne qu'avec des microcontrolleurs TI. Le support des AVR est en cours. L'estimation de la consommation énergétique utilise esimu http://esimu.gforge.inria.fr/index.html
Réalisation
Le Arduino
Architecture de l'objet communiquant
- Un Arduino Mega 2560
- Un XBee
- Un capteur de température
- Un capteur de luminosité
- Un accéléromètre (dont les valeurs ne seront pas utilisées et qui devait servir d'appareil supplémentaire pour la problématique de consommation)
#include <XBee.h> // Define variables, pins.. int sensorTempPin = 0; int Temp; int sensorLightPin = 1; int Light; int XPin = 2; int YPin = 3; int ZPin = 4; int XValue; int YValue; int ZValue; uint8_t values[] = { 0, 0, 0, 0 }; XBee xbee = XBee(); XBeeResponse response = XBeeResponse(); Rx16Response rx = Rx16Response(); Tx16Request tx = Tx16Request(0x1111, values, sizeof(values)); TxStatusResponse txStatus = TxStatusResponse(); void setup() { // Initialise xbee / serial xbee.begin(9600); Serial.begin(9600); } void loop() { // Read the values on analog pins Light = analogRead(sensorLightPin); Temp = analogRead(sensorTempPin); XValue = analogRead(XPin); YValue = analogRead(YPin); ZValue = analogRead(ZPin); xbee.readPacket(); if(xbee.getResponse().isAvailable()){ // Got something Serial.print("Got something\n"); // Break the 10-bits of information retrieved from light // and temperature into 2 bytes for each. values[0] = Temp >> 8 & 0xff; values[1] = Temp & 0xff; values[2] = Light >> 8 & 0xff; values[3] = Light & 0xff; Serial.print(values[0]); // Sending values to server xbee.send(tx); // After sending a tx request, we expect a status response // from the server // Wait up to 5 seconds for the status response if (xbee.readPacket(5000)) { // We got a response! Serial.print("We got a response\n"); // It should be a znet tx status if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) { xbee.getResponse().getZBTxStatusResponse(txStatus); // get the delivery status, the fifth byte if (txStatus.getStatus() == SUCCESS){ // Success! Time to celebrate Serial.print("SUCCESS! Time to celebrate\n"); } else { // The remote XBee did not receive our packet. Is it powered on? Serial.print("The remote Xbee did not receive our packet\n"); } } } else { // local XBee did not provide a timely TX Status Response -- should not happen Serial.print("Local Xbee did not provide a timely TX Status Response\n"); } } delay(500); }
Ce code fonctionne de la manière suivante:
Fonction setup():
Une fois implémenté sur le Arduino, la fonction setup va faire démarrer le protocole XBee et le protocole Série afin de pouvoir envoyer et recevoir des messages par XBee, et d'imprimer les messages d'erreur sur le port Série s'il y a lieu.
Fonction loop():
CODE DU LINKER
Code du programme de liaison
ce programme en java est constitué de 5 classes
Le Main
public class main {
public static SQLinker linker; public static Xbee xbee;
public static void main(String[] args){ String address = new String("jdbc:mysql://sitedb.polytech-lille.net/cdelberg?"); String user = new String("user=cdelberg&password=myLo9ufonese"); String COM;
// We ask the user on the Communication Port to connect the XBee
System.out.println("Please enter the Communication port of the Xbee"); Scanner sc = new Scanner(System.in); COM = sc.next(); System.out.println("COM port changed to: "+COM);
//Creation of the Variables that will be used to connect to the Database and the Xbee
linker = new SQLinker(address, user); linker.FillArdList(); xbee = new Xbee(COM);
//Creating the Updates Threads
W8Thread thread1 = new W8Thread(); thread1.start(); UpTestThread thread2 = new UpTestThread(); thread2.start();
//We now allow the user to enter a command
String command; System.out.println("vous pouvez maintenant lancer une commande si vous le souhaitez"); System.out.println("tapez help pour plus d'informations"); boolean exit=false;
while(exit==false){ command=sc.next();
if(command.equals("help")){ System.out.println("print => affiche la liste des arduinos"); System.out.println("exit => ferme le programme"); } if(command.equals("print")){linker.PrintArdList();} if(command.equals("exit")){exit=true;}
} //if the user ask to stop the program, it will do those final commands sc.close(); thread1.stop(); thread2.stop(); xbee.XbeeClosing(); //System.out.println("Program finished successfully");
}
}