Matériels utilisés pour le système 1:
- Arduino UNO
- Wireless SD Shield
- Solar Charger Shield
- Batterie Li-ion
- Panneau solaire
- Tinkerkit Sensor Shield
- RTC Module
- LED
- Module Thermistance
- Fils connecteurs
- Boîte
Disponibles sur le site dakarprotoshop.com
Circuit du système 1:
Présentation du système 1:
Le système 1 permet de mesurer la température ambiante et d’enregistrer les valeurs dans une carte SD tout en précisant la date et l’heure. Après chaque mesure, il se met en veille pendant une heure réduisant ainsi sa consommation d’énergie .Pour faire fonctionner tout ce système grâce au Solar Charger Shield sont juste nécessaires une batterie Li-ion 1000mAh et un panneau solaire de 1W.
En effet, le Solar Charger Shield utilisé permet en plus de charger la batterie; de fournir aussi les 5V dont a besoin le Arduino UNO. Pour cela, il reçoit de la batterie une tension comprise entre 2.7 et 4.2V et fournit en sortie 5V. Au même moment que le système fonctionne; s’il y a suffisamment d’ensoleillement alors grâce au panneau solaire également connecté sur le Solar Charger Shield, la batterie se charge .Le courant de charge peut atteindre au maximum 700 mA.
Notons que le Arduino UNO ne fonctionnera que si l’on agit sur le switch On/Off du Solar Charger Shield. Dans tous ces deux états, la batterie se charge et on aperçoit une Led rouge qui passera au vert à la fin de la charge.
Ce système utilise également un RTC Module qui permet de donner l’heure et la date. Ainsi on garde une information sur les heures de mesure. Contenant une pile de type CR 1225, le RTC Module peut alors fonctionner pendant au moins 7 ans.
Pour effectuer les mesures, nous utilisons un module Thermistance 4K7 Tinkerkit afin d’acquérir une température. Une thermistance est un composant électronique dont la résistance interne varie en fonction de la température. Ce module dispose d’une sortie analogique variant de 0 à 5V correspondant à la variation de température du module. Vous pourrez lire directement des valeurs entre 0 et 1023 correspondant aux variations de température, 0 étant la plus basse et 1023 la plus haute. A l’arrière du module, vous trouvez deux amplificateurs de signal et une LED verte qui signale que le module est correctement alimenté ainsi qu’une LED jaune dont l’intensité varie en fonction de la température. A l’aide d’une formule dans le programme, on pourra alors obtenir la température correspondante en degrés Celsius. Pour avoir des informations sur la présence ou non d’une carte SD au moment de l’initialisation, nous utilisons une Led Rouge. S’il n’y a pas de carte SD alors l’initialisation va échouer .Dans ce cas, nous nous en rendrons compte par deux clignotements de la Led Rouge. Si l’initialisation de la carte a réussi alors il ne se passe rien.
La Led Rouge s’allume à nouveau au moment des mesures puis s’éteint.
Le module Thermistance 4K7 et la Led Rouge peuvent être directement branchés sur le Tinkerkit Sensor Shield à l’aide de câble de liaison (voir circuit système 1).Nous pouvons également utiliser les pins du Tinkerkit à l’aide de fils comme c’est pour le cas avec le RTC Module.
Quant à la diminution de la consommation d’énergie, l’appel à la librairie Narcoleptic permet la mise en veille du système pour une certaine durée. En ce qui concerne cette librairie, elle peut fonctionner jusqu’à 30 secondes. Donc si vous voulez l’utiliser pour une durée beaucoup plus grande (des heures voir des jours…); vous faîtes juste une boucle à l’intérieur de laquelle vous mettez le Narcoleptic.
Pour plus de confort et de durabilité de ce système, vous pouvez alors mettre tous ses composants dans une boîte étanche avec le panneau qui reposera au dessus du couvercle.
Avec le programme 1, le système 1 effectue deux mesures de température toutes les heures et enregistrer ensuite les valeurs dans la carte SD en précisant la date et l’heure. Après cela, la mise en veille démarre jusqu’à la prochaine mesure soit pendant une heure.
Code Arduino du système 1:
/* The circuit: * analog sensor on analog 0 * SCL on analog sensor 5 *SDA on analog sensor 4 *LedPin-pin 9 * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** chipSelect - pin 4 */ #include <SD.h> #include <Narcoleptic.h> #include <Wire.h> #define DS1307_ADDRESS 0x68 //On the Ethernet Shield, CS is pin 4. Note that even if it's not //used as the CS pin, the hardware CS pin (10 on most Arduino boards, //53 on the Mega) must be left as an output or the SD library //functions will not work. const int chipSelect = 4; const int ledPin=9; void setup(){ pinMode(ledPin,OUTPUT); pinMode(chipSelect,OUTPUT); //Open serial communications and wait for port to open: Wire.begin(); Serial.begin(9600); Serial.print(" "); Serial.print("Initializing SD card..."); //see if the card is present and can be initialized: if(!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); for(int j=0;j<2;j++){ digitalWrite(ledPin,HIGH); delay(100); digitalWrite(ledPin,LOW); delay(500);} //don't do anything more: return; } Serial.println("card initialized."); } void loop(){ int a; int i=0; while(i<2){ digitalWrite(ledPin,HIGH); //Reset the register pointer Wire.beginTransmission(DS1307_ADDRESS); byte zero = 0x00; Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); int second = bcdToDec(Wire.read()); int minute = bcdToDec(Wire.read()); int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time int weekDay = bcdToDec(Wire.read()); //0-6 ->sunday-Saturday int monthDay = bcdToDec(Wire.read()); int month = bcdToDec(Wire.read()); int year = bcdToDec(Wire.read()); String secondString=String(second); String minuteString=String(minute); String hourString=String(hour); String monthString=String(month); String monthDayString=String(monthDay); String yearString=String(year); String dateTime= monthDayString +"/"+ monthString +"/"+ yearString+","+ hourString +":"+ minuteString +":"+ secondString; //print the date EG 03/01/11, 23:59:59 Serial.print(monthDay); Serial.print("/"); Serial.print(month); Serial.print("/"); Serial.print(year); Serial.print(","); Serial.print(hour); Serial.print(":"); if(minute<10) Serial.print("0"); Serial.print(minute,DEC); Serial.print(":"); if(second<10) Serial.print("0"); Serial.print(second,DEC); delay(1000); long Resistance; double Temp; int sensor = analogRead(A0); Resistance=(10230000/sensor-4700); Temp = log(Resistance); Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp)); Temp = Temp - 273.15; String sensorString= String( sensor); String tempString=String(Temp); String sensTmp=sensorString +","+ tempString; Serial.print(","); Serial.print("Input sensor value= "); Serial.print(sensor); Serial.print(","); Serial.print("Temperature correspondante= "); Serial.print(Temp); Serial.println(" degrees Celsius"); // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. File dataFile = SD.open("MesTmp2.csv", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.print(dateTime); dataFile.print(","); dataFile.print(sensTmp); dataFile.println(",degrees Celsius"); dataFile.close(); } // if the file isn't open, pop up an error: else { Serial.println("error opening MesTmp2.csv"); } delay(10); i++;} while(i>1&&i<122){ digitalWrite(ledPin,LOW); //Put Arduino UNO sleeping Narcoleptic.delay(30000); i++;} } byte bcdToDec(byte val) { // Convert binary coded decimal to normal decimal numbers return ( (val/16*10) + (val%16) ); }
Présentation du système 2:
Nous faisons maintenant un système 2 tout simple qui est constitué d’un Arduino UNO alimenté par une batterie Li-ion via le Solar Charger Shield .Avec le programme 2, nous faisons clignoter 10 fois la Led Rouge et ensuite nous la maintenons en allumage continu.
Matériels utilisés pour le systeme 2:
- Arduino UNO
- Solar Charger Shield
- Batterie Li-ion
- Panneau solaire
- Led Rouge
- Résistance de 220 ohms
- 2 fils connecteurs
Circuit du système 2 avec un Solar Charger Shield:
Code Arduino du systeme 2:
const int ledPin=8; // pin number of LED int i=0; void setup(){ pinMode(ledPin,OUTPUT); digitalWrite(ledPin,LOW); //light on and off the LED during ten times while(i<10){ digitalWrite(ledPin,HIGH); delay(1000); digitalWrite(ledPin,LOW); delay(500); i++;} delay(2000); } void loop(){ digitalWrite(ledPin,HIGH); }
Pour réaliser les mêmes tâches que les circuits précédents, nous pouvons utiliser un Lipo-Rider au lieu du Solar Charger Shield. En effet, le Lipo-Rider a la même fonction que le Solar Charger Shield. La seule particularité du Lipo-Rider est le fait qu’il est relié au Arduino UNO via un câble USB. Il dispose pour cela d’un port USB contrairement aux broches du Solar Charger Shield qui s’incrustaient directement sur les pins du Arduino UNO.
Le Lipo-Rider de même que le Solar Charger Shield ajustent automatiquement l’intensité de charge. Quant à la valeur maximale de l’intensité de charge du Lipo-Rider, elle est de 400 mA.
Lipo-Rider
Même Circuit que le système 1 mais avec un Lipo-Rider au lieu du Solar Charger Shield
Si vous avez des questions n’hésitez pas à les posez en commentaires.