Go Down

Topic: Mini Station méteo avec afficheur LCD TFT 3.6" et liaison BT vers SmarPhone. (Read 51460 times) previous topic - next topic

hameau

Jul 14, 2015, 03:12 pm Last Edit: Aug 14, 2015, 06:38 pm by hameau Reason: Mise en place des photos de la liaison BT avec un smartphone.
Bonjour,

Je vous présente mon projet de mini station météo (un classique) avec un afficheur LCD TFT de 3.6 pouces.

- carte arduino Mega  
- Sensor Shield arduino méga V2.0
- LCD TFT 3.6 pouces 400*200 pixels
- Sonde T° et humidité  DHT 22 (pour l'intérieur)
- Sonde T° DS18B20 étanche (pour Extérieur)
- Sonde pression BMP 180
- Module RTC DS3231
- Module BT HC-06
- Module SD-Card

Archivage sur une micro-sd , de la T° Ext et de la pression , toutes les 15 min.




Nouvelle boite (boitier pupitre) pour mettre tous les composants :



Archivage de l'heure des T° Ext Maxi et mini.


Affichage des T° Ext, Int et pression sur smartphone Android, via BT.



Pour la suite du projet, je vais travailler sur la gestion du tactile du lcd pour ajouter des informations en plus.

@+

Code: [Select]

#include <UTFT.h>
#include <DS3232RTC.h>    //http://github.com/JChristensen/DS3232RTC
#include <Time.h>         //http://www.arduino.cc/playground/Code/Time  
#include <Wire.h>         //http://arduino.cc/en/Reference/Wire (included with Arduino IDE)
#include <Adafruit_BMP085.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#include <SPI.h>
#include <SD.h>

#define DHTPIN 17  // Sonde temperature DHT22  
#define DHTTYPE DHT22  
DHT dht(DHTPIN, DHTTYPE);

UTFT myGLCD(ILI9327,38,39,40,41); // Ecran TFT LCD 3.6 pouces

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

int heures;
int minutes;
int secondes;
int jour_mois;
int Mois;
int annee;
int pression_atm;
int temp_Ext;
float Tmax_Ext = 0;
float Tmin_Ext = 100;
float Tmax_Int = 0;
float Tmin_Int = 100;

static long date_init;

int comp_sd=0;

int Intervalle = 15;

 
char myData[100];
File myFile;

const int chipSelect = 53; // port SD card
Sd2Card card;

const char* jour_semaine[] = {
                   "         \0",
                   "Dimanche \0",
                   "Lundi    \0",
                   "Mardi    \0",
                   "Mercredi \0",
                   "Jeudi    \0",
                   "Vendredi \0",
                   "Samedi   \0"};
                  
const char* mois[] = {
                   "   \0",
                   "Jan\0",
                   "Fev\0",
                   "Mar\0",
                   "Apr\0",
                   "Mai\0",
                   "Juin\0",
                   "Juillet\0",
                   "Aout\0",
                   "Sep\0",
                   "Oct\0",
                   "Nov\0",
                   "Dec\0"};


  
Adafruit_BMP085 bmp; // Sonde de pression atmospherique BMP 180

#define ONE_WIRE_BUS 10  // sonde de temperature DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


void setup()
{
  date_init=millis();
  sensors.begin();
  dht.begin();
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setColor(255, 255, 255);
  myGLCD.fillScr(128, 208, 208);
  myGLCD.setBackColor(128, 208, 208);
  myGLCD.drawRect(5,5,395,235);
  myGLCD.drawLine(5,25,395,25);
  myGLCD.drawLine(5,55,395,55);
  myGLCD.drawLine(5,115,395,115);
  myGLCD.drawLine(5,175,395,175);
  myGLCD.drawLine(5,220,395,220);
  myGLCD.setFont(SmallFont);
  myGLCD.print("Station Meteo Arduino", CENTER, 10);
  
  Serial.begin(9600);
  if (!bmp.begin()) {
 Serial.println("Could not find a valid BMP085 sensor, check wiring!");
 while (1) {}
  }
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus() != timeSet)
  {
      Serial.println("Unable to sync with the RTC");
  }
    else
   {
      Serial.println("RTC has set the system time");
   }  
  Serial.print("Initialisation  SD card...");

  if (!SD.begin(53)) {
    Serial.println("Echec Initialisation carte SD ");
    myGLCD.print("Echec initialisation carte SD", 150, 222);
    return;
  }
  
  
}

void loop()
{
  myGLCD.setFont(SmallFont);
  myGLCD.print("Nb ecritures SD: ", 10, 222);
  myGLCD.printNumI(comp_sd,140,222);
  myGLCD.print("Intervalle en min: ", 200, 222);
  myGLCD.printNumI(Intervalle,350,222);
  affiche_heure(10,60);
  affiche_date(10,30);
  pression(190,60);
  temperatures_humidite(15,120);
  if (millis()>=date_init + (Intervalle*60000))
 {
  sdcar();
  date_init=millis();
 }
  
  delay(1000);
  
  
}

void affiche_heure(int x, int y)
{
  heures=hour();
  minutes = minute();
  secondes =second();
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(heures, x, y, 2 ,'0');
  myGLCD.printNumI(minutes, x+70, y, 2 ,'0');
  myGLCD.setFont(BigFont);
  myGLCD.printNumI(secondes, x+135, y, 2 ,'0');
      
}

void affiche_date (int x, int y)
{
  jour_mois= day();
  annee=year();
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255,255,0);
  myGLCD.print(jour_semaine[weekday()], x, y);
  myGLCD.printNumI(jour_mois, x+120, y, 2);
  myGLCD.print(mois[month()], x+170, y, 2);
  myGLCD.printNumI(annee, x+305, y, 2);
  myGLCD.setColor(255, 255, 255);
  
}

void pression (int x, int y)
{
  myGLCD.setFont(SevenSegNumFont);
  pression_atm = ((bmp.readPressure()/100)+17);
  myGLCD.printNumI(pression_atm,x,y);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 0);
  myGLCD.print("hPa",x+130,y);
  myGLCD.setColor(255, 255, 255);
}

void temperatures_humidite (int x, int y)
{
  int humidite = dht.readHumidity();
  int temp_Int = dht.readTemperature();
  // Temperature DS 3231
  float c = RTC.temperature() / 4.;
  sensors.requestTemperatures();
  myGLCD.setFont(SevenSegNumFont);
  temp_Ext=int (sensors.getTempCByIndex(0));
  myGLCD.printNumI(temp_Ext,x,y,2,1);
  myGLCD.setFont(SmallFont);
  myGLCD.print("O", x+68, y);
  myGLCD.setFont(BigFont);
  myGLCD.print("C", x+75, y);
  myGLCD.print("Ext", x+65, y+35);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(temp_Int,x+130,y);
  myGLCD.setFont(SmallFont);
  myGLCD.print("O", x+195, y);
  myGLCD.setFont(BigFont);
  myGLCD.print("C", x+205, y);
  myGLCD.print("Int", x+195, y+35);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(humidite,x+280,y);
  myGLCD.setFont(BigFont);
  myGLCD.print("%", x+350, y);
  if (hour()==00 && minute()==00)
  {
   Tmax_Ext=0;
   Tmin_Ext=100;
   Tmax_Int=0;
   Tmin_Int=100;
 }
 if (Tmax_Ext<temp_Ext)
 {
      Tmax_Ext=temp_Ext;
 }
 if (temp_Ext<Tmin_Ext)
 {
      Tmin_Ext=temp_Ext;
 }
  if (Tmax_Int<temp_Int)
 {
      Tmax_Int=temp_Int;
 }
 if (temp_Int<Tmin_Int)
 {
      Tmin_Int=temp_Int;
 }
 myGLCD.setFont(BigFont);
 myGLCD.setColor(255, 255, 255);
 myGLCD.print("TMax_Ext:", x, y+60);
 myGLCD.printNumI(Tmax_Ext,x+140,y+60);
 myGLCD.print("TMin_Ext:", x, y+80);
 myGLCD.printNumI(Tmin_Ext,x+140,y+80);
 myGLCD.setColor(255, 0, 0);
 myGLCD.print("TMax_Int:", x+190, y+60);
 myGLCD.printNumI(Tmax_Int,x+330,y+60);
 myGLCD.print("TMin_Int:", x+190, y+80);
 myGLCD.printNumI(Tmin_Int,x+330,y+80);
 myGLCD.setColor(255, 255, 255);
}

void sdcar()
{
  heures=hour();
  minutes = minute();
  secondes =second();
  Mois=month();
  jour_mois= day();
  annee=year();
  sensors.requestTemperatures();
  temp_Ext=(sensors.getTempCByIndex(0));
  pression_atm = int ((bmp.readPressure()/100)+17);
  sprintf(myData,"%u/%u/%u    %u:%u:%u  %u  %u", annee,Mois,jour_mois,heures,minutes,secondes,temp_Ext,pression_atm);
  myFile = SD.open("Meteo2.txt", FILE_WRITE);
  myFile.println(myData);
  myFile.close();
  myFile = SD.open("Meteo2.txt");
  // Lecture du contenu du fichier
  if (myFile) {
  Serial.println("Meteo2.txt:");
  while (myFile.available()) {
  Serial.write(myFile.read());
  }
  // Fermeture fichier
  myFile.close();
  } else {
  
  Serial.println("erreur ouverture meteo2.txt");
  }
  comp_sd = comp_sd+1;
  
}



ROBUDUINO

Bonjour, il est super sympa ton projet  ;) , c'est tout-à-fait ce que je souhaiterais faire avec mes élèves. Tu pourrais me dire comment en faire un ? Que j'essaie pendant les vacances et que je prépare ça ensuite pour la rentrée... Merci...

hameau

Salut,

Que veut tu savoir, pour réaliser ce montage, les principaux composant viennent d'ebay.


- Sensor Shield arduino méga V2.0

http://www.ebay.fr/itm/Sensor-Shield-arduino-mega-V2-0-/161762724649?

- LCD TFT 3.6 pouces 400*200 pixels

http://www.ebay.fr/itm/231453055102?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

- Module RTC DS3231
http://www.ebay.fr/itm/1-Module-RTC-DS3231-6-broches-soudees-avec-pile-ARDUINO-envoi-de-France-E119-/201381099225?

Les autres composants se trouvent sans soucis sur le Net, je peut fournir le schéma de câblage si nécessaire.

Tes élèves ont quel niveaux ?.
@+
 

ROBUDUINO

Merci, je viens de trouver tous les capteurs et le TFT (j'ai bien trouvé le même et celui-là -http://www.ebay.fr/itm/171591395025- t'en penses quoi ?), j'ai des Méga et des shields.

Sinon, c'est pour des 4ème et 3ème, ce sera au programme l'année prochaine, alors ça fait un petit moment que je m'autoforme, car nous n'avons pas d'autre possibilité -pour l'instant ?- et avec le reste du boulot à faire, et bien je n'avance pas vite.

Cette année j'ai utilisé et les élèves aussi, Ardublock, mais pour certains projets il faudra que je fasse les lignes de prog, et dans le programme il faudra aussi qu'ils apprennent le codage...

C'est avec des projets de ce type que je me forme et que j'essaie d'avancer. Si tu peux et tu veux m'aider c'est super, je suis un nul en la matière, donc j'ai besoin d'aide dans la réalisation et la programmation...

Ensuite je pourrais aider à mon tour quelques collègues intéressés qui en auront besoin.

hameau

Salut,

Je vais faire des photos du câblage de la carte arduino méga, en ce qui concerne le LCD il semble être le même que celui que j'utilise, par contre il n'y a pas la référence du contrôleur graphique, et donc cela va poser un soucis lors de l'utilisation du LCD, de plus celui-ci vient de Chine donc délais important de livraison.

Tu est de quelle région, je suis dans le 28, si tu n'est pas trop loin on pourrait se voir.

@+
 

ROBUDUINO

Ok, merci, je vais rester sur ta TFT alors, je ne suis pas encore capable de gérer ce genre de changement. Puisque tu veux bien m'aider je vais commander le matos. Je suis dans le 86 Sud, près de Poitiers, alors ça dépend où tu es dans le 28, si c'est au nord, ça peu faire loin...

hameau

Poitiers cela est trop loin de chez moi, donc on va continuer par ce site.


ROBUDUINO

OK, on continue ici...
J'ai petit blog sur lequel je diffuse mes activités :

hameau

Salut,

Je mettrais demain les photos de la station, par contre il faut aussi des câbles pour relier l'arduino shield aux différents composants.

http://www.ebay.fr/itm/171060292865?_trksid=p2060353.m1438.l2649&var=470261897677&ssPageName=STRK%3AMEBIDX%3AIT

Câbles en femelle /femelle.

@+

ROBUDUINO

Ok, merci. C'est bon pour les câbles, j'ai ce qu'il faut, tout est commandé... Ce week-end je ne sais pas si je serais bien présent, pour cause d'anniversaire, le mien... Alors je ne peux m'éclipser... ;o)

hameau

#10
Jul 18, 2015, 03:57 pm Last Edit: Jul 18, 2015, 04:09 pm by hameau
Salut,

Bonne anniversaire, voici les photos.

La première : carte arduino mega + Sensor Shield arduino méga V2.0
La seconde :  capteur DHT 22 , module RTC, en bas a droite capteur de pression.
La troisième : vue d'ensemble du projet, avec les cables de liaisons LCD --> Mega.

Les capteurs sont pour le moment dans un boite à part, mais je vais acheter une boite plus grande pour mettre le tout dedans.

Pour info, je suis aussi comme toi dans l'enseignement, sauf qu'il sont en Term SI.

Voila.
@+


ROBUDUINO

Salut,

Merci, ça ne se passe pas trop mal...
Merci également pour les photos.

A bientôt

ROBUDUINO

#12
Jul 20, 2015, 10:41 am Last Edit: Jul 20, 2015, 10:51 am by ROBUDUINO
Bonjour,

Bien que je sois en travaux à la maison, je vais être plus disponible. :)

J'ai bien regardé les photos, si tu pouvais m'envoyer le schéma ce serait sympa... ;)

J'ai vu que tu as placé le DHT22 sur une plaque d'essais, peux tu me dire pourquoi  tu as mis une résistance ?

hameau

#13
Jul 20, 2015, 11:14 am Last Edit: Jul 20, 2015, 11:23 am by hameau
Salut,

Pour le schéma des capteurs, voir fichier joint, il est nécessaire de mettre une résistance de 4.7K entre Vcc et la sortie signal aussi bien pour le DTH 22 que  DS18B20, c'est le constructeur des capteurs qui l'impose.

J'ai utilisé une plaque d'essai car cela est plus pratique pour souder la résistance, mais cela n'est pas obligatoire.

Je ferais un schéma pour le câblage du LCD un peut plus tard.

@+



ROBUDUINO

#14
Jul 20, 2015, 02:42 pm Last Edit: Jul 20, 2015, 03:00 pm by ROBUDUINO
Merci pour le schéma... C'est bien clair. Ce matin j'ai reçu deux RTC DS3231, pour un proto pour moi, afin de montrer aux élèves que cela fonctionne, je procède ainsi habituellement, et pour un autre ensemble pour les élèves.



Il manque juste des connecteurs et les piles, j'ai ce qu'il faut...

Go Up