Aide : Courbes processing IDE

Bonjour à tous,
Un débutant à besoin de vous ...

Après différents essais pour faire des courbes, aujourd'hui j'essaie sur "Processing IDE"
Enfin " JE" ...
Pouvais vous m'aider sur cette partie ?

J'ai fais le dessin de la fenêtre de "travail"
Le code fonctionnel sur Arduino.
Manque le plus compliqué ... le codage du plot ( si je ne me trompe pas de therme) et c'est là que je fais appelle a vous si cela n'est pas trop lourd à faire.

Explication du projet : Automatisation d'une serre

  • Une sonde DHT 22 pour avoir les données de température et d'hygrométrie.
  • Ecran LCD 20x4 pour lecture des données.
  • 2 pack de 3 LED de différentes couleurs allumées en fonction du taux de température ou d'humidité.
  • 2 relais pour alimenter des appareils.

Il me manque quelques accessoires (donc ils ne sont pas dans le code) comme :

  • Horloge
  • Support carte SD pour l'enregistrement des données
  • Wifi pour une lecture déportée des données

Voici le code

#include "DHT.h"//bibliothéque
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 13 // connexion de la pin digital du capteur sur la broche n°2
#define DHTTYPE DHT22   // on appelle le capteur dht22 dans la bibliothèque

const int RELAY_Chauf = 6;
const int RELAY_Hygro = 5;

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {
 
  Serial.begin(9600); //définition de la vitesse du port
  Serial.println("Lecture du climat par capteur DHT22"); // Moniteur 
  lcd.init(); // initialisation de l'afficheur
  dht.begin(); // initialisation du capteur

  //Positionnement LEDs
  pinMode(10,OUTPUT); // Bleu température froide : en dessous de 20°C
  pinMode(11,OUTPUT); // Vert température : tout est OK
  pinMode(12,OUTPUT); // Rouge température chaude : au dessus de 25°C
  pinMode(7,OUTPUT); // Blanc hygrométrie basse : en dessous de 50%
  pinMode(8,OUTPUT); // Vert hygrometrie : tout est OK
  pinMode(9,OUTPUT); // Jaune hygrométrie haute : au dessus de 80%
  pinMode(6,OUTPUT); // Relais chauffage
  pinMode(5,OUTPUT); // Relais hygrométrie
}
 
void loop() {
 
  delay(2000); // attente d'2 seconde entre chaque mesure une fois la boucle revenue au début
  lcd.backlight(); // eclairage LCD
  float humidite = dht.readHumidity();//lecture de l'humidité.
  float temperature = dht.readTemperature();//lecture de la température en degrés Celsius.
 
  // Si la lecture ne s'effectue pas
  if (isnan(humidite) || isnan(temperature)) {
  Serial.println ("Probleme de lecture, verifier votre systeme");
    return;}

  //Ecriture sur le moniteur
  Serial.print("Température: ");
  Serial.print(temperature);
  Serial.println (" *C");
  Serial.print("Hygrométrie: ");
  Serial.print(humidite);
  Serial.println (" % ");

  //Ecriture température & hygrométrie sur le LCD 20x4
lcd.setCursor(0,0);
lcd.print("   Temp :       C");
lcd.setCursor(10,0);
lcd.print(temperature);
lcd.setCursor(0,2);
lcd.print("   Hygr :       %");
lcd.setCursor(10,2);
lcd.print(humidite);

    // Action pour température > 20 & < 30           <=== TOUT EST OK -- LED verte
if (temperature > 20.00 & temperature < 30.00) {
  lcd.setCursor(0,1);
  lcd.print("OK                  ");
digitalWrite (10, LOW);
digitalWrite (11, HIGH);
digitalWrite (12, LOW);
digitalWrite (RELAY_Chauf, LOW);
}

    // Action pour température < 20                    <=== TROP FROID -- LED bleu
if (temperature < 20.00) {
  lcd.setCursor(0,1);
  lcd.print("    Chauffage OK        ");
digitalWrite (10, HIGH);
digitalWrite (11, LOW);
digitalWrite (12, LOW);
digitalWrite (RELAY_Chauf, HIGH);
}

    // Action pour température > 30                    <=== TROP CHAUD -- LED rouge
if (temperature > 30.00) {
  lcd.setCursor(0,1);
  lcd.print("Extracteur OK       ");
digitalWrite (10, LOW);
digitalWrite (11, LOW);
digitalWrite (12, HIGH);
digitalWrite (RELAY_Chauf, LOW);
}

  //Action pour hygrometrie >= 60 & <= 70               <=== TOUT EST OK -- LED verte
if (humidite >= 60.00 & humidite <= 70.00) {
lcd.setCursor(0,3);
lcd.print("OK                  ");
digitalWrite (7, LOW);
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (RELAY_Hygro, LOW);
}

  //Action pour hygrometrie < 60                     <=== TROP SEC -- LED blanc
if (humidite < 60.00) {
lcd.setCursor(0,3);
lcd.print("Humidificateur OK   "); 
digitalWrite (7, HIGH);
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (RELAY_Hygro, HIGH);
}

  //Action pour hygrometrie > 70               <=== TROP HUMIDE -- LED jaune
if (humidite > 70.00) {
lcd.setCursor(0,3);
lcd.print("Deshumidificateur OK");
digitalWrite (7, LOW);
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
digitalWrite (RELAY_Hygro, LOW);
}


}

En photo le montage :

Et maintenant le code du dessin sur Processing IDE :

// Espace de dessin 
size (1300,900);
background (0,0,0);

// Texte
textSize (30);
text ("INFORMATIONS SERRE",545,45);
textAlign (CENTER,CENTER);

// Espace courbe
strokeWeight (3);        // epaisseur contour
stroke (254,254,254);    // contour
fill (174,182,191);      // fond
rect (10,70,1280,600);   // forme

// Courbes
strokeWeight (5);   // Humidité
stroke (84,153,199);
fill (84,153,199);
line (70,120,70,370);
strokeWeight (5);   // Température
stroke (236,112,99);
fill (236,112,99);
line (70,370,70,620);
strokeWeight (5);     // Heure
stroke (52,73,94);
fill (52,73,94);
line (70,620,1220,620);

// Unités
fill (84,153,199);  //100%
textSize (20);    
text ("100%",40,120);
textAlign (CENTER,CENTER);

textSize (20);    // Hygrometrie
text ("H",35,145);
textAlign (CENTER,CENTER);
textSize (20);    
text ("Y",35,165);
textAlign (CENTER,CENTER);
textSize (20);    
text ("G",35,185);
textAlign (CENTER,CENTER);
textSize (20);    
text ("R",35,205);
textAlign (CENTER,CENTER);
textSize (20);    
text ("O",35,225);
textAlign (CENTER,CENTER);
textSize (20);    
text ("M",35,245);
textAlign (CENTER,CENTER);
textSize (20);    
text ("E",35,265);
textAlign (CENTER,CENTER);
textSize (20);    
text ("T",35,285);
textAlign (CENTER,CENTER);
textSize (20);    
text ("R",35,305);
textAlign (CENTER,CENTER);
textSize (20);    
text ("I",35,325);
textAlign (CENTER,CENTER);
textSize (20);    
text ("E",35,345);
textAlign (CENTER,CENTER);

fill (236,112,99);    //50°C
textSize (20);    
text ("50°C",40,375);
textAlign (CENTER,CENTER);

textSize (20);      // Température
text ("T",35,400);
textAlign (CENTER,CENTER);
textSize (20);    
text ("E",35,420);
textAlign (CENTER,CENTER);
textSize (20);    
text ("M",35,440);
textAlign (CENTER,CENTER);
textSize (20);    
text ("P",35,460);
textAlign (CENTER,CENTER);
textSize (20);    
text ("E",35,480);
textAlign (CENTER,CENTER);
textSize (20);    
text ("R",35,500);
textAlign (CENTER,CENTER);
textSize (20);    
text ("A",35,520);
textAlign (CENTER,CENTER);
textSize (20);    
text ("T",35,540);
textAlign (CENTER,CENTER);
textSize (20);    
text ("U",35,560);
textAlign (CENTER,CENTER);
textSize (20);    
text ("R",35,580);
textAlign (CENTER,CENTER);
textSize (20);    
text ("E",35,600);
textAlign (CENTER,CENTER);

fill (52,73,94);  // Heures
textSize (20);    
text ("HEURES",600,650);
textAlign (CENTER,CENTER);

// Cadre température
strokeWeight (3);       // cadre 
stroke (254,254,254);    
fill (236,112,99);      
rect (10,680,300,210);
fill (0,0,0);          // Données
textSize (22);    
text ("TEMPERATURE",150,710);
textAlign (CENTER,CENTER);
strokeWeight (3);       // Cercle bleu
stroke (254,254,254);
fill (36,113,163);      
ellipse (60,840,30,30);
strokeWeight (3);       // Cercle vert
stroke (254,254,254);
fill (39,174,96);      
ellipse (160,840,30,30);
strokeWeight (3);       // Cercle rouge
stroke (254,254,254);
fill (192,57,43);      
ellipse (260,840,30,30);

// Cadre heure
strokeWeight (3);
stroke (254,254,254);
fill (52,73,94);
rect (510,680,300,210);   
fill (0,0,0);  // Heure
textSize (22);    
text ("HEURE",650,710);
textAlign (CENTER,CENTER);
fill (0,0,0);  // Date
textSize (22);    
text ("DATE",650,815);
textAlign (CENTER,CENTER);

// Cadre humidité
strokeWeight (3);  // Cadre
stroke (254,254,254);
fill (84,153,199);
rect (990,680,300,210);
fill (0,0,0);      // Données
textSize (22);
text ("HUMIDITE",1140,710);
textAlign (CENTER,CENTER);
strokeWeight (3);       // Cercle blanc
stroke (254,254,254);
fill (249,249,249);      
ellipse (1050,840,30,30);
strokeWeight (3);       // Cercle vert
stroke (254,254,254);
fill (39,174,96);      
ellipse (1150,840,30,30);
strokeWeight (3);       // Cercle jaune
stroke (254,254,254);
fill (247,220,111);      
ellipse (1250,840,30,30);

L'image :

Petites explications :
En ordonnées : l'axe est coupé en 2 parties ( humidité + température ) car je veux voir les 2 courbes en même temps.
En abscisse : L'heure
Dans les encadrés " température" et "humidité" je voudrai y ajouter la donnée lue en direct ainsi que la LED fonctionnelle ( elles peuvent être en noir à l'état d'origine )

Je ne sais pas si c'est bien compréhensible, ni si c'est trop lourd à faire. Ceci n'est qu'une ébauche, c'est mon 1er code, et mon 1er dessin sur processing, soyez indulgent.

Bien sur je suis à l'écoute pour toutes améliorations.

vous avez regardé les exemples ?

Oui bien sur,
Et j'avoue être un peu perdu.
Je cherche de mon côté aussi dans l'attente de vos retours.

vous avez aussi des outils sur GitHub

il faut explorer tout cela, choisir un des trucs tout fait, et l'adapter à votre besoin

Bonjour

Sur cette page du site Mon Club Elec on trouve aussi des infos et exemples pour Processing :
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.OUTILSProcessing

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.