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.