[GMBB] Re-Edition de l'Automate de Windaube


Messages recommandés

EDIT sur le boulot que j'effectue en ce moment en bas du thread ! ;)  ( MAJ 1 , NEW : MAJ 2 ! )

 

Bonjour a tous ! 

Je viens en ce jour vous présentez mon projet de ré-édition du projet de @windaube21 et son Automate en GMBB " GrowMyBox Bit**'s "

tout ça 5 ans après le tuto original : 

 

N'étant pas calé du tout ( de base ) en électronique , légèrement en programmation ( mais pas vraiment en C )  , j'ai réussi a me monter deux automates !

( puis un MiniGrowDuino , @Gen :pro:  ) 

 

Tombant sur quelques embûches aux passage , j'ai du faire légèrement évoluer son automate 

(  problème de relais je dirais même grillé , d'alim , réduire le nombre de prises , écran en I2C  )

 

Et donc pour en venir ici , je me suis dis que après avoir ses deux automates

et un rajeunissement ( léger ) du code 

 

Pourquoi pas vous proposer une ré-édition de son automate .

En vue de l'absence de windaube 21 depuis , je pourrais assurer une aide sur ce post :plus:

pour tout nouveau ou débutant voulant se lancer dans le " TRIP " 

 

C'est partit ?!! 

 

Liste des pré-requis : 

 

Spoiler

 

- un Arduino ( UN VRAI S'il vous plait ) 

 

- un fer a souder

 

- de l'etain 

 

- 3 resistances 10 ohm

 

- 4 bouttons poussoir

 

- des Wires ( fils ) Arduino

 

- un ecran LCD I2C 20x4  

 

- des dominos , wago ( 5 broches )  , connecteurs 

 

-  Relais SSR High Relay State ( un par prise donc si vous voulez 6 prises = 6 relais SSR ) 

 

(Je conseille des dissipateur thermique sur les SSR lampes , extra , chauffage .. tous ce qui gros wattage  ) 

 

- des prises étanche ip54

 

- un coffret ip54 a ip65 

 

- une rallonge de 10 m ( pour avoir du câble et garder la prise mâle avec 1 m de câble pour le boitier )

 

et j'alimente mon Arduino avec un cable USB B coupé raccorder

- a une alim 5v 6A 

 

optionel : connecter l'entrée phase neutre 230v a un disjoncteur ( pour ma part 10A , sécu je pense ) 

 

 

je fais cette liste de courses a la main en ne mettant aucun prix , ou site marchand 

( je pense que tout le monde connait soit les sites chinois ou ebay et amazon , bref google est votre ami :) )

 

et vue que les prix diffères de sites ou de mois en années  

je mettrais que le prix approximatif de 80 euros ( peut être moins , peut être plus ) 

 

 

 

Le Câblage et la Programmation de l' Arduino : 

 

Spoiler

 

je pars du principe que vous n'avez toucher un arduino donc je vais essayer d’être le plus clair que possible :

 

Câblage : 

 

TUTO.thumb.jpg.83eef701b9a292627ee5e8aed1261a95.jpg

 

Programmation : 

 

Vous avez maintenant , ou aller recevoir votre arduino et vos câbles tout ça .. c'est bien mais comment dire a l'arduino quoi faire ?? 

 

Rendez vous ici : https://www.arduino.cc/en/Main/Software  ou en cliquant simplement ici ! 

 

une fois installé , copier les dossiers du dossier libraries dans Documents/Arduino/libraries/

 

Maintenant si vous ouvrez mon GMBB_TUT.ino vous aurez ceci .. 

 

( Descendez plus bas est modifier votre plage horaire souhaitez ainsi que vos temp/humi ) 

 

Screenshot_5.thumb.png.eb55988b518ef06425b67797f9e0d08e.png

 

connecter votre Arduino au PC , aller dans : 

 

Screenshot_6.png.e5a7e1e9339cd1e60bf7a8b64c5a6de2.png

 

Outils  et sélectionner Arduino /Genuino Uno . 

 

Screenshot_7.png.7dc56bcac4c4bfd261968e8be225a923.png

 

Selectionner le port COM ou est connecté votre Arduino .

 

Screenshot_8.png.6231d8ec5acdb069f217cacc85525415.png

 

Vérifier , puis téléverser vers votre Arduino ! :) 

( vous pouvez vérifier avec CTRL+R et ensuite le téléverser avec CTRL+U ) 

 

ENJOY !

 

 

EDIT : si , une fois le tout monté et téléversé , l'écran s'allume mais n'affiche rien .. il faut son changer l'adresse I2C 

 


//----------------- Declaration des Include & ecran ----------------\\
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Arduino.h>
#include <DS1307.h>
#include <DHT.h>
#define DHTPIN A0
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F, 20, 4);  // LA ICI !!! l'adresse de base est .. 0x24, 20, 4); je l'ai modifié par 0x3F

 

 

 

 

Résultat : 

 

Spoiler

mon premier en 4 prises ( Lampe , Brasseur , hydro ,Extra & Intra ) : 

 

Screenshot_3.png.d515361f8daeaafc14378b2fe1c28506.png

 

Le deuxieme 6 prises ( Lampe , Chauffage , Extra , Intra , Brasseur , Hydro ) : 

 

Screenshot_2.thumb.png.48fb81d18429dbf97795f86a4179dbba.png

 

 

Screenshot_4.thumb.png.8939b92ce0ee38475f4cdfca8e92f67b.png

 

 

EDIT : 

 

Mon GMBB de prototypage :D  :

 

Screenshot_9.thumb.png.8c2715beb7dc0a6ab425bc8519713175.png

 

accès a l'ardui , ainsi je peux brancher mes SSR et faire mes tests 

 

Screenshot_10.png.80bd82f1e0cdfa20e4d4cfe25496e2c9.png 

 

Screenshot_11.thumb.png.43bdb24b0f6dc46d8b9a46e2b53c7b16.png

 

Don't Worry , Be Happy .. je vous rassure il est pas branché en 230v ( c'etait un test ) 

 

 

 

 

Ce tuto est fais par un nul , pour les nuls ! :D

 

le .ino est fonctionnel a ce jour( je l'utilise ) mais reste dans une version beta test pour le moment .. 

je travail toujours en ce moment même dessus 

 

Voulant héberger mon .ino sur le site pour éviter un liens mort j'ai changer l'extension .rar par .pdf 

( je ne sais pas si c'est autorisé , et si je risque quelque chose .. si quelqu’un connait la  meilleure soluce a ce problème je prend ) 

 

 

GMBB.pdf

 

renommer le GMBB.pdf par GMBB.rar  et vous accederez au dossier contenant l'ino un dossier lib 

 

Je vous souhaite une bonne lecture , réalisation , grow ! 

 

 

EDIT - Suivre le boulot en cours : 

 

MAJ 1 

 

Spoiler

Screenshot_17.thumb.png.079400429e848a100897ce28324e3b1e.pngScreenshot_18.thumb.png.6ded57cfa51ce132d9153500549038cf.png

 

- Je continue de ré-agencer le visu de l'ardui , j'ai gagné une ligne sur la première page ... qu'est ce que je pourrais bien y rajouter :siff:

- j'ai ajouté une sonde d'humidité du sol ( sur les photos aucune sonde n'est branché ) mais tout fonctionne si branché :) 

!! Je demande des avis sur la sonde sol , Utile ou useless ?? pour ma part c'est un peu sans intérêt ( j'ai deux pots ) mais je me dis des grosses box , ou des pots pas très accessible .. 

.... je travail aussi pour intégrer les classes DailyTimer , CyclicTimer , je verrais ça très vite ;) 

 

Si ca intéresse certains : 

Spoiler

/***********************************************************************************
 *                                                                                                                                              * 
 *                                        Tuto proposé par OMGPROD | DVH                                        *
 *                                      pour www.cannaweed.com , credits :                                      *
 *     https://www.tubefr.com/sonde-d-humidite-du-sol-arduino-lcd_5.html#title      *
 *                                                            ENJOY !                                                                   *
 *                                                                                                        tut noob for noob #2 *
 **********************************************************************************/
 
#include <LiquidCrystal_I2C.h> // Inclus la lib I2C
#include <Wire.h>
#define PotPIN A0 //PIN d’entrée data sonde A0

LiquidCrystal_I2C lcd(0x27, 16, 2);

 

int sol = 0; //integer de la sonde d'humidité du sol 
int ledR = 8; // pin " si led rouge ajouté " 
int ledV = 9; // pin " si led vert ajouté "  
int ledB = 10; // pin " si led bleue ajouté "  
int ledJ= 11; // pin " si led jaune ajouté " 

 

void setup() {
    Wire.begin();
    pinMode(ledR, OUTPUT);              
    lcd.init();
    lcd.backlight();
    lcd.print("ww.CannaWeed.com");
    lcd.setCursor(0, 1);
    lcd.print(" OMGPROD || DVH");
    delay(3000);
    lcd.clear(); 

}

void loop() {
  int sol = analogRead(PotPIN);
  sol = constrain (sol, 485, 1023);
  sol = map(sol, 485, 1023, 100, 0); 

  lcd.print("CannaWeed || DVH");
  lcd.setCursor(0, 1);
  lcd.print(" Humidite = ");
  lcd.print(sol);
  lcd.print("%");
  delay(75);
  lcd.print(" ");
  delay(1);

  
  if (sol <= 3) { // si l'integer des datas de la sonde qui revient est plus petit que 3 la led s'eteint 
    digitalWrite(ledR, LOW); 
    delay(1000); 
  }
    else if (sol <= 25) { // si l'integer des datas de la sonde qui revient est plus petit que 25 la led rouge s'allume 
    digitalWrite(ledR, HIGH);
    delay(1000); 
  }  
    else if (sol <= 50) { // si l'integer des datas de la sonde qui revient est plus petit que 50 la led jaune s'allume et la rouge s'éteint  
    digitalWrite(ledJ, HIGH);
    digitalWrite(ledR, LOW);
    delay(1000); 
  }
    else if (sol <= 75) {
    digitalWrite(ledV, HIGH);
    digitalWrite(ledR, LOW);
    digitalWrite(ledJ, LOW);
    delay(1000); 
  }
    else if (sol <= 100) {
    digitalWrite(ledB, HIGH);
    digitalWrite(ledR, LOW);
    digitalWrite(ledJ, LOW);
    digitalWrite(ledV, LOW);
    delay(3000); 
  }
  lcd.clear();
  
}
 

 

 

c'est le code pour un  , la sonde d'humidité du sol sur LCD I2C 16x2  , bref en gros ça :D  ( ne vous préoccupez pas des LED , c'est pas intéressant .. je pensais a un module connecter en wifi sans écran  ) 

  

5.thumb.jpg.1baff8550992d549a831208012979e5c.jpg3.thumb.jpg.36927df1c47e4702713dde73dc698fa0.jpg

 

Petit récap du cablage : LCD I2C 16x2 = GND/GND VCC/5V SDA/SDA SCL/SCL   |   SONDE  SOL I2C = GND/GND VCC/5V A0/A0 D0/ sur le pin de votre choix ex : PIN digital 1 , 2 , 3 , 4 , 5 .... 

 

Pour toutes questions n'hésitez pas ! ;)  @Omgprod !! 

PEACE !! 

 

 

MAJ 2

 

Salut a tous , j’espère que vous allez bien !! 

 

 

je viens aujourd'hui avec une petite MAJ , pas trop de boulot d'ajouté en vue , je en attente de commande , mais je vous rapporte un de news , histoire de ne pas oublier le thread ou de le laisser a l'abandon ! :D 

 

Je sais pas si certains suivent l'évolution du thread mais toute manière je récapépéte ! 

 

Le code de Windaube va peut être finir ses jours ici , vu l'apparition du rafraîchissement que @Gen ( :respect: )  en as fait , je posterais la dernière source que j'ai mise la version de son code que j'ai modifié .. 

 

Pour en venir au code de Gen , pour ceux qui ont jeté un coup d’œil dedans .. c'est très propre et agréable de partir sur de bonne base :P ( Windaube ne m'en veux pas )

 

J'ai commencé a ré-agencer le visuel a ma sauce vu que je suis en l'attente de boutons 3 positions :) ( a moins que je trouve une autre méthode d'ici la ) 

 

avec le boutons , j'ai deux trois trucs qui vont arriver et sur lesquels je vais essayer de les intégrer a mon projet ( changement d'écran soit plus grand 128x64 , soit la gamme nextion et je vais voir .. pour l'ajout soit un module Wifi , ou du module bluetooth qui as l'air plutôt pas mal est simpliste et très facile d’accès ( merci a @B.ganja pour le bout de code :respect: )  

 

Bref un peu de photos non ? 

 

Spoiler

IMG_0656.thumb.jpg.567ab261717616cdbe5192ab065f96d4.jpg

 

IMG_0657.thumb.jpg.5d8470d92f564ddbd298860fd4f2bacf.jpg

 

IMG_0658.thumb.jpg.af3bfad061ecf9112d583a719cb7c898.jpgIMG_0659.thumb.jpg.092d7ffbeee2fb6b1a3c5f1dd3e29bda.jpg

 

 

 

 

Voila pour un petit aperçue , je vous laisse mon salon discord si certains voudraient papoter en vocal ou textuel directe , pour de l'aide ou juste pour bavarder entre growers ;) 

https://discord.gg/XfC3n4V 

A plus l'équipe !! 

Modifié par Omgprod
  • Like 3
  • Thanks 4
Lien à poster
Partager sur d’autres sites

et j'avais pas fait attention que tu étais sur le front GROWDUINO en meme temps !

Sacré toi :)

 

Pour ma part, le level etait trop éloigné de la confiance que j'avais dans mes compétences et jsuis repartit sur un montage ... épuré

En plus, mon enthousiasme m'a fait raté mon jeux de mots puisque j'avais en tete GHOST IN THE SHIELD :)

 

Hésites pas à faire croquer de tes aventures et vive les nounous CAO :supair:

 

 

 

Lien à poster
Partager sur d’autres sites

Re @frenchiemaan ! 

 

Éhé GrowDuino oblige ! @Gen c’est le patron dans cette section B) 

 

ah ouais ? Faut pas te sous estimer ! J’avoue que c’est un Level au dessus , moi j’ai pas touché le code , je l’ai monté , config et c’est partit pour le moment comme ça :)  

 

 

C’est pour ça que je comprenais pas vraiment le titre :plol:  je repasserais voir aussi ou tu en ai ! 

 

Helas ce que je pourrais vous faire croquer ne seras jamais a un top niveau , je me lance a peine dans le C , le développement en langue informatique c’est juste un hobby pour moi + la weed :kana_smile:  on verra bien avec le temps .. 

 

A plus frenchie ! :yeah:

Lien à poster
Partager sur d’autres sites

Salut salut ! 

Je sais pas si vous avez vu la MAJ 1 sur le thread ! mais sa avance ! en parlant d'avancer !! 


 @tizi59 j'ai ajouté la lib dailyTimer qui contrôle la lampe , je vais surement rajouter pour contrôler l'extra mais laisser l'intra s'activer avec la température 

 

je vais rajouter la lib cyclic pour le brasseur , et je pense que la version ALPHa seras prête 

 

des avis sur la sonde d'humidité du sol ? @frenchiemaan , @Ravier17

 

vu sur l'ajout de la lib DailyTimer : 

Spoiler

IMG_0514.thumb.JPG.1b5cbce0a1d2c652a0e2ca0e5a767643.JPG

L'ajout de la lib , on délcare la lampe sur le pin 7 

 

IMG_0513.thumb.JPG.61ce48659ed96b68022806aa849662f7.JPG

 

:roulage::pc:  oui oui je spliff quand je code , y'a pas de fumée sans feu ^_^  la led du SSR s'éclair , le + est bien branché sur le port 7 de l'arduino . 

 

IMG_0511.thumb.JPG.7894678196c48e50c2f8c121f0720ed5.JPG

 

et le retour LCD la LAMPE est bien activé ! 

 

Lien à poster
Partager sur d’autres sites

La sonde d'humidité au sol !

je l'ai dans un coin de la tete, bien possible que je fasse ce petit montage un peu plus tard !!

 

Je viens de sortir d'une période de récup après être passé pas loin de la correctionnelle ...

Mon fils de 4 ans "m'assiste" depuis le départ des graines de "persil et coriandre" ... bien sur :-P

attentionnée, il me mettait de la flotte des qu'il avait une fenêtre de tir et la petite sonde m'aurait bien aidé à me rendre compte de son manège

 

et du coup, il pourrait y avoir une interaction avec une pompe ou ca serait peut etre hasardeux ?? 

 

 

Lien à poster
Partager sur d’autres sites

Re @frenchiemaan

 

rigolo que tu m’en parles , hein @keteki m’as parlé de la même chose tout a l’heure , mais comme je lui ai dis , je pense qui faut faire un minimum 2 jours pour que l’arrosage se lance ou placer la sonde vraiment dans le milieu du pot .. puis calculer combien de centilitres administrer au pot ... sans quoi on risque le sur arrosage a coup sur j’en pense ... faut en parler , lancer des testes sur des plants de tomates ;) 

 

... perso j’ai pas de pompe 5 ou 12 volt mais a l’avenir sa peux arriver 

Lien à poster
Partager sur d’autres sites

Bonjour à tous,

 

Super ton tafs @Omgprod cela te fait une bonne approche pour découvrir et bouffé, forgé;) du code pour pouvoir concevoir tes fonctionnalités 

 

Pour l'arrosage je pense qu'il faut travailler sur une base de 3j à 1 semaine (sa va poser pb?), avec simplement une durée de distribution,

l'ajout de la sonde peut être un plus avec arrosage anticipé ou retardé celon l'état du sol 

Nous devrions partager nos avis et suggestions pour définir les besoin et tenter de proposer une solution utile à tous 

Bonne prog

A+

Respect humain

Lien à poster
Partager sur d’autres sites
Spoiler
il y a 29 minutes, keteki a dit:

Bonjour à tous,

 

Super ton tafs @Omgprod cela te fait une bonne approche pour découvrir et bouffé, forgé;) du code pour pouvoir concevoir tes fonctionnalités 

 

Pour l'arrosage je pense qu'il faut travailler sur une base de 3j à 1 semaine (sa va poser pb?), avec simplement une durée de distribution,

l'ajout de la sonde peut être un plus avec arrosage anticipé ou retardé celon l'état du sol 

Nous devrions partager nos avis et suggestions pour définir les besoin et tenter de proposer une solution utile à tous 

Bonne prog

A+

Respect humain

 

 

Yop keteki ! ;) 

 

merci beaucoup mais je fais avec ce que je trouve surtout , on se depatouille commme on peux ! 

 

Pour te répondre .. je sais pas si 3 jours c’est pas trop long , si ça peut rentrer en compréhension soit en minutes , ou peut être en sélectionnant que certains jours ( faut vraiment que j’en apprenne plus sur l’horloge rtc ) et toujours avec le contrôle de la sonde si le taux d’humidité après 3 jours et en dessous de temps ... oui c’est possible , après c’edt toujours plus facile a dire que as faire 

 

je verrais dans la semaine prochaine pour commencer a feuilleter les tutos du net pour avoir des débuts de code et rajouter le if du temps rtc et l’humidite Du sol ... mais comme dis plus haut je n’ai pas de pompe pour des testes :/ pour le débit je pense que chaque pompe auras son réglage a faire et selon le tuyau utilisé aussi .... voili voilou ^_^ 

 

merci les loulous de rajouter du taff , et de quoi débattre un temps sois peu a ce thread :D 

Lien à poster
Partager sur d’autres sites

Re,

 

il y a 52 minutes, Omgprod a dit:
  Révéler le contenu masqué

 

 

Yop keteki ! ;) 

 

merci beaucoup mais je fais avec ce que je trouve surtout , on se depatouille commme on peux ! 

:ptdr:je ne te tiens pas pour responsable et dans l'obligation de mettre en fonction mes divagations:D

 

Plus sérieusement mon idée était de balancer quelques idée pour ce donner des pistes de réflexions. 

 

Je suis parfaitement incapable actuellement de mettre en "code" les idées que j'émet.

 

Mais je compte mi mettre...

 

Oui jme doute que que la prise en charge sur plusieurs jours dois poser un pb de mémoire, c'est plus facile (+léger en code je présume)avec une valeur mini est un capteur.

Oui celon la config d'irrigation et la pompe les debit/temps d'arrosage seront très variable.

Et doivent être testé pour mesurer leur débit en situation.

Bonne prog!!

A+

Respect humain

Lien à poster
Partager sur d’autres sites

Bonjour humain a un humain @keteki

;) 

 

ne me tiens pas pour responsable , mais c’est sur mon thread et faut bien que je m’occupe :rolleyes: 

 

Puis l’idee reste intéressante , puis pour une fois sa débat un petit peu ;)  

 

mais avant ça je me suis rendu compte que j’ai fail a un endroit ... avec la lib dailyTimer la lampe s’allume mais ne s’eteint Plus , faut que je cherche ou j’ai foiré , ou ce qui ne vas pas ... j’ai un doute sur la vielle lib RTC ... -_- 

 

Spoiler

941140EA-F5A1-4F1F-A160-0E9E4F0B7D93.thumb.jpeg.9bb9254135a3c2824ee70230ff8c29f8.jpeg

 

la lampe est allumé , il est 1h44 alors que dans les réglages c’est Sur 5h00 a 23h00

 

  • Like 1
Lien à poster
Partager sur d’autres sites
Le 24/02/2018 à 13:32, Omgprod a dit:

 

mais avant ça je me suis rendu compte que j’ai fail a un endroit ... avec la lib dailyTimer la lampe s’allume mais ne s’eteint Plus , faut que je cherche ou j’ai foiré , ou ce qui ne vas pas ... j’ai un doute sur la vielle lib RTC ... -_- 

 

  Révéler le contenu masqué

941140EA-F5A1-4F1F-A160-0E9E4F0B7D93.thumb.jpeg.9bb9254135a3c2824ee70230ff8c29f8.jpeg

 

la lampe est allumé , il est 1h44 alors que dans les réglages c’est Sur 5h00 a 23h00

 

salut ! dommage

 

fait voir le code que tu utilise si tu veux bien

 

a++

Modifié par tizi59
Lien à poster
Partager sur d’autres sites

Plop @tizi59 !! 

 

Merci d'étre repassé et de vouloir me dépanne :) 


J'ai un poil avancé j'arrive a allumé et éteindre la lampe , mais je dois mal régler l'heure actuelle en minute , ou un problème RTC de la vielle lib ds1307 , mais je pense que cela proviens de moi ^_^ 
 

Spoiler

Screenshot_13.png.f507677aa8f45beeda384665c150708e.pngScreenshot_12.png.ba3b615ef3b2e56f1fdc3205b1434d80.png

 

 

tout le code des includes a la partit croissance :) 

 


//----------------- Declaration des Include & ecran ----------------\\
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Arduino.h>
#include <DS1307.h>
#include <DHT.h>
#include "DailyTimer.h"
#define DHTTYPE DHT22
#define PotPIN A0
#define DHTPIN A1
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F, 20, 4);



#define CROISSANCE   0
#define FLORAISON    1
#define SECHAGE      2
#define LAMPE_PIN 7


DailyTimer LAMPE(LAMPE_PIN);

//------------- PIN DHT , Ne pas changer les bouttons --------------\\

const int bp1 = 1;
const int bp2 = 2;
const int bp3 = 3;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int sol = 0;

//------------------- Declaration des PIN Arduino ------------------\\

int extracteur2 = 10;
int extracteur = 10;
int hydro = 11;
int brasseur = 12;
int lampe = 9;
int chauffage = 8;

int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
int temps_perso;

//------------- Reglage Temperature , Hygro , Extracteur ------------\\

float chauffage_on = 23.00;             //Temp Chauff
float chauffage_off = 24.00;            //Temp Chauff

int hydro_on = 20;                 //VALEUR EN CRO
int hydro_off = 80;               //VALEUR EN CRO
int hydro_on_flo = 20;             //VALEUR EN FLO
int hydro_off_flo = 60;            //VALEUR EN FLO
int hydro_on_flo2 = 20;            //VALEUR EN fin FLO
int hydro_off_flo2 = 50;           //VALEUR EN fin FLO

float extracteur_on = 70.00;
float extracteur_off = 15.00;
float extracteur2_on = 70.00;
float extracteur2_off = 15.00;

int lampe_on_flo = 500;
int lampe_off_flo = 1700;


//------------- Creation de Caractere pour LCD -----------------\\

byte COEUR[8] = {
  B00000,
  B00000,
  B01010,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000
};

byte ROND[8] = {
  B11111,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B11111,
};

/*
byte ROND[8] = {
  B11111,
  B10001,
  B10101,
  B10101,
  B10101,
  B10001,
  B11111,
};
*/

byte CARRE[8] = {
  B11111,
  B10001,
  B11011,
  B10101,
  B11011,
  B10001,
  B11111,
};

byte CEL[8] = {
  B00010,
  B00101,
  B00010,
  B00000,
  B00000,
  B00000,
  B00000,
};

byte CANNA[8] = {
  B00100,
  B10101,
  B10101,
  B01100,
  B11111,
  B01110,
  B10101,
};

byte GOUTTE[8] = {
  B00100,
  B00100,
  B01010,
  B01010,
  B10001,
  B10001,
  B01110,
};

byte TEMP[8] = {
  B00100,
  B01010,
  B01010,
  B01110,
  B11111,
  B11111,
  B01110,
};

byte AMPOULE[8] = {
  B01110,
  B10001,
  B10001,
  B10001,
  B01010,
  B01010,
  B01110,
};


int rond = 0;
int carre = 3;
int cel = 2;
int coeur = 1;
int canna = 4;
int goutte = 5;
int temp = 6;
int ampoule = 7;

// TEST






// fin TEST

//------------- Fin des declaration , debut Partit SETUP  ------------\\

void setup() {


  /*      Reglage de la pile ! Decomenter et recommenter  !
    RTC.stop();
    RTC.set(DS1307_SEC,00);        //Reglage secondes
    RTC.set(DS1307_MIN,06);        //Reglage minutes
    RTC.set(DS1307_HR,01);         //Reglage heures
    RTC.set(DS1307_DOW,2);         //Reglage jour de la semaine
    RTC.set(DS1307_DATE,20);       //Reglage date
    RTC.set(DS1307_MTH,02);         //Reglage mois
    RTC.set(DS1307_YR,18);          //Reglage année
    RTC.start();


    */

  pinMode(bp1, INPUT);
  pinMode(bp2, INPUT);
  pinMode(bp3, INPUT);
  pinMode(chauffage, OUTPUT);
  pinMode(lampe, OUTPUT);
  pinMode(brasseur, OUTPUT);
  pinMode(hydro, OUTPUT);
  pinMode(extracteur, OUTPUT);
  pinMode(extracteur2, OUTPUT);
  digitalWrite(LAMPE_PIN, LOW);

  digitalWrite(chauffage, LOW);
  digitalWrite(lampe, LOW);
  digitalWrite(brasseur, LOW);
  digitalWrite(hydro, LOW);
  digitalWrite(extracteur, LOW);
  digitalWrite(extracteur2, LOW);

  lcd.createChar(coeur, COEUR);
  lcd.createChar(carre, CARRE);
  lcd.createChar(rond, ROND);
  lcd.createChar(cel, CEL);
  lcd.createChar(temp, TEMP);
  lcd.createChar(canna, CANNA);
  lcd.createChar(goutte, GOUTTE);
  lcd.createChar(ampoule, AMPOULE);

  LAMPE.setValue(GROW_START,00,00);  // 05:00
  LAMPE.setValue(GROW_STOP ,18,00);  // 23:00
  LAMPE.setValue(FLO_START ,11,20);  // 11:20
  LAMPE.setValue(FLO_STOP  ,23,20);  // 23:20
  
  dht.begin(); 
  lcd.init(); 
  lcd.backlight();
  lcd.print(" GrowMyBox Bitch's   ");
  lcd.setCursor(0, 1);
  lcd.print("    Thank's to       ");
  lcd.setCursor(0, 2);
  lcd.print("  Windaube & Gen     ");
  lcd.setCursor(0, 3);
  lcd.write(byte(canna));
  lcd.setCursor(2, 3);
  lcd.print("OMGPROD Edition  ");
  lcd.write(byte(canna));
  delay(3000);

  lcd.clear();

}


void loop() {

  lcd.createChar(coeur, COEUR);
  lcd.createChar(carre, CARRE);
  lcd.createChar(rond, ROND);
  lcd.createChar(cel, CEL);
  lcd.createChar(temp, TEMP);
  lcd.createChar(canna, CANNA);
  lcd.createChar(goutte, GOUTTE);
  lcd.createChar(ampoule, AMPOULE);

  buttonState1 = digitalRead(bp1);
  buttonState2 = digitalRead(bp2);
  buttonState3 = digitalRead(bp3);
  int sol = analogRead(PotPIN);
  sol = constrain (sol, 485, 1023);
  sol = map(sol, 485, 1023, 100, 0);



  if (buttonState1 == LOW && buttonState2 == LOW && buttonState3 == LOW) {


    lcd.setCursor(0, 0);
    lcd.print(" Selection du mode :");
    lcd.setCursor(0, 1);
    lcd.print("   [ CROISSANCE ]   ");
    lcd.setCursor(0, 2);
    lcd.print("   [ FLORAISON  ]   ");
    lcd.setCursor(0, 3);
    lcd.print("   [  FIN FLO   ]   ");
    delay(1000);
    lcd.clear();
  }
  if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState3 == LOW) {



    lcd.setCursor(0, 0);
    lcd.print(" Selection du mode :");
    lcd.setCursor(0, 1);
    lcd.print("   [ CROISSANCE ]   ");
    lcd.setCursor(0, 2);
    lcd.print("   [ FLORAISON  ]   ");
    lcd.setCursor(0, 3);
    lcd.print("   [  FIN FLO   ]   ");
    delay(1000);
    lcd.clear();
  }
  if (buttonState1 == HIGH && buttonState2 == LOW && buttonState3 == HIGH) {


    lcd.setCursor(0, 0);
    lcd.print(" Selection du mode :");
    lcd.setCursor(0, 1);
    lcd.print("   [ CROISSANCE ]   ");
    lcd.setCursor(0, 2);
    lcd.print("   [ FLORAISON  ]   ");
    lcd.setCursor(0, 3);
    lcd.print("   [  FIN FLO   ]   ");
    delay(1000);
    lcd.clear();
  }
  if (buttonState1 == LOW && buttonState2 == HIGH && buttonState3 == HIGH) {


    lcd.setCursor(0, 0);
    lcd.print(" Selection du mode :");
    lcd.setCursor(0, 1);
    lcd.print("   [ CROISSANCE ]   ");
    lcd.setCursor(0, 2);
    lcd.print("   [ FLORAISON  ]   ");
    lcd.setCursor(0, 3);
    lcd.print("   [  FIN FLO   ]   ");
    delay(1000);
    lcd.clear();
  }
  if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState3 == HIGH) {


    lcd.setCursor(0, 0);
    lcd.print(" Selection du mode :");
    lcd.setCursor(0, 1);
    lcd.print("   [ CROISSANCE ]   ");
    lcd.setCursor(0, 2);
    lcd.print("   [ FLORAISON  ]   ");
    lcd.setCursor(0, 3);
    lcd.print("   [  FIN FLO   ]   ");
    delay(1000);
    lcd.clear();
  }


  //------------------------ Partit Croissance ------------------------------

  if (buttonState1 == HIGH && buttonState2 == LOW && buttonState3 == LOW) {


    for (;;) {


      lcd.createChar(coeur, COEUR);
      lcd.createChar(carre, CARRE);
      lcd.createChar(rond, ROND);
      lcd.createChar(cel, CEL);
      lcd.createChar(temp, TEMP);
      lcd.createChar(canna, CANNA);
      lcd.createChar(goutte, GOUTTE);
      lcd.createChar(ampoule, AMPOULE);

      digitalWrite(brasseur, HIGH);
      digitalWrite(extracteur, HIGH);
      digitalWrite(extracteur2, HIGH);
      

      for (int i = 0; i < 50; i++) // on brasseur
      {
        
        dht.begin();
        lcd.init();

        for (int i = 0; i < 20; i++) // lcd page 1
        {
          LAMPE.run(31,CROISSANCE); // regler l'heure actuelle en minute 
          
          heure = RTC.get(DS1307_HR, true);
          minut = RTC.get(DS1307_MIN, false);
          seconde = RTC.get(DS1307_SEC, false);
          date = RTC.get(DS1307_DATE, false);
          mois = RTC.get(DS1307_MTH, false);
          annee = RTC.get(DS1307_YR, false);
          temps_perso = (heure * 100) + minut;  //creation temps_perso

          float h = dht.readHumidity();
          float t = dht.readTemperature();

          if (isnan(t) || isnan(h)) {
          } else {

            if (t >= chauffage_off) {
              digitalWrite(chauffage, LOW);
            }
            if (t <= chauffage_on) {
              digitalWrite(chauffage, HIGH);
            }

            if (t >= extracteur_on) {
              digitalWrite(extracteur, HIGH);
            }
            if (t <= extracteur_off) {
              digitalWrite(extracteur, LOW);
            }
            if (h <= hydro_off) {
              digitalWrite(hydro, LOW);
            }
            if (h >= hydro_on) {
              digitalWrite(hydro, HIGH);
            }
            if (t >= extracteur2_on) {
              digitalWrite(extracteur2, HIGH);
            }
            if (t <= extracteur2_off) {
              digitalWrite(extracteur2, LOW);
            }

          }

          // Fin Verif des Temp / Hum  / temps pour lampe
          lcd.setCursor(0, 0);
          lcd.write(byte(canna));
          lcd.print("  [ CROISSANCE ]  ");
          lcd.write(byte(canna));
          lcd.setCursor(0, 2);
          lcd.write(byte(temp));
          lcd.print(" ");
          lcd.print(t);
          lcd.write(byte(cel));
          lcd.print("C");
          lcd.setCursor(11, 2);
          lcd.write(byte(goutte));
          lcd.print(" ");
          lcd.print(h);
          lcd.print(" %");

          lcd.setCursor(10, 3);
          lcd.print("LAMPE ");
          if (digitalRead(LAMPE_PIN) == HIGH)
          {
            lcd.write(byte(ampoule));
            lcd.print(" ");
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(ampoule));
            lcd.print(" ");
            lcd.write(byte(rond));
          }
          delay(10);
          lcd.setCursor(0, 3);
          lcd.print("|");
          lcd.setCursor(2, 3);
          if (heure < 10)
          {
            lcd.print("0");
          }
          lcd.print(RTC.get(DS1307_HR, true));
          lcd.print("H");
          if (minut < 10)
          {
            lcd.print("0");
          }
          lcd.print(RTC.get(DS1307_MIN, false));
          lcd.print(" ");
          lcd.setCursor(8, 3);
          lcd.print("|");
        }



        delay(3000);
        lcd.clear();



        for (int i = 0; i < 10; i++) // lcd pages 2
        {




          //Recuperer l'heure du DS1307

          heure = RTC.get(DS1307_HR, true);
          minut = RTC.get(DS1307_MIN, false);
          seconde = RTC.get(DS1307_SEC, false);
          date = RTC.get(DS1307_DATE, false);
          mois = RTC.get(DS1307_MTH, false);
          annee = RTC.get(DS1307_YR, false);
          temps_perso = (heure * 100) + minut;  //creation temps_perso

          float h = dht.readHumidity();
          float t = dht.readTemperature();

          if (isnan(t) || isnan(h)) {
          } else {

            if (t >= chauffage_off) {
              digitalWrite(chauffage, LOW);
            }
            if (t <= chauffage_on) {
              digitalWrite(chauffage, HIGH);
            }

            if (t >= extracteur_on) {
              digitalWrite(extracteur, HIGH);
            }
            if (t <= extracteur_off) {
              digitalWrite(extracteur, LOW);
            }
            if (h <= hydro_off) {
              digitalWrite(hydro, LOW);
            }
            if (h >= hydro_on) {
              digitalWrite(hydro, HIGH);
            }
            if (t > extracteur2_on) {
              digitalWrite(extracteur2, HIGH);
            }
            if (t < extracteur2_off) {
              digitalWrite(extracteur2, LOW);
            }

          }




          lcd.setCursor(9, 2);
          lcd.print("| EXTRA  ");
          if (digitalRead(extracteur) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(9, 3);
          lcd.print("| INTRA  ");
          if (digitalRead(extracteur2) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          
          lcd.setCursor(9, 1);
          lcd.print("| POMPE  ");
          if (digitalRead(chauffage) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 1);
          lcd.print("CHAUF  ");
          if (digitalRead(chauffage) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 2);
          lcd.print("HYDRO  ");
          if (digitalRead(hydro) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 3);
          lcd.print("BRASS  ");
          if (digitalRead(brasseur) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 0);
          lcd.write(byte(goutte));
          lcd.print(" SUBSTRACT ");
          lcd.write(byte(goutte));
          lcd.print(" = ");
          lcd.print(sol);
          lcd.print("%");
          delay(10);


        }
        delay(3000);
        lcd.clear();
      }


      digitalWrite(brasseur, HIGH);


      for (int i = 0; i < 50; i++) // OFF brasseur
      {

        dht.begin();
        lcd.init();

        for (int i = 0; i < 20; i++) // lcd page 1
        {
          // debut du texte a modif de A a Z



          //Recuperer l'heure du DS1307

          heure = RTC.get(DS1307_HR, true);
          minut = RTC.get(DS1307_MIN, false);
          seconde = RTC.get(DS1307_SEC, false);
          date = RTC.get(DS1307_DATE, false);
          mois = RTC.get(DS1307_MTH, false);
          annee = RTC.get(DS1307_YR, false);
          temps_perso = (heure * 100) + minut;  //creation temps_perso

          float h = dht.readHumidity();
          float t = dht.readTemperature();

          if (isnan(t) || isnan(h)) {
          } else {

            if (t >= chauffage_off) {
              digitalWrite(chauffage, LOW);
            }
            if (t <= chauffage_on) {
              digitalWrite(chauffage, HIGH);
            }

            if (t >= extracteur_on) {
              digitalWrite(extracteur, HIGH);
            }
            if (t <= extracteur_off) {
              digitalWrite(extracteur, LOW);
            }
            if (h >= hydro_off) {
              digitalWrite(hydro, LOW);
            }
            if (h <= hydro_on) {
              digitalWrite(hydro, HIGH);
            }
            if (t >= extracteur2_on) {
              digitalWrite(extracteur2, HIGH);
            }
            if (t <= extracteur2_off) {
              digitalWrite(extracteur2, LOW);
            }

          }


          lcd.setCursor(0, 0);
          lcd.write(byte(canna));
          lcd.print("  [ CROISSANCE ]  ");
          lcd.write(byte(canna));
          lcd.setCursor(0, 2);
          lcd.write(byte(temp));
          lcd.print(" ");
          lcd.print(t);
          lcd.write(byte(cel));
          lcd.print("C");
          lcd.setCursor(11, 2);
          lcd.write(byte(goutte));
          lcd.print(" ");
          lcd.print(h);
          lcd.print(" %");

          lcd.setCursor(10, 3);
          lcd.print("LAMPE ");
          if (digitalRead(LAMPE_PIN) == HIGH)
          {
            lcd.write(byte(ampoule));
            lcd.print(" ");
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(ampoule));
            lcd.print(" ");
            lcd.write(byte(rond));
          }
          delay(10);
          lcd.setCursor(0, 3);
          lcd.print("|");
          lcd.setCursor(2, 3);
          if (heure < 10)
          {
            lcd.print("0");
          }
          lcd.print(RTC.get(DS1307_HR, true));
          lcd.print("H");
          if (minut < 10)
          {
            lcd.print("0");
          }
          lcd.print(RTC.get(DS1307_MIN, false));
          lcd.print(" ");
          lcd.setCursor(8, 3);
          lcd.print("|");
        }

        delay(3000);
        lcd.clear();



        for (int i = 0; i < 10; i++) // lcd pages 2
        {


          heure = RTC.get(DS1307_HR, true);
          minut = RTC.get(DS1307_MIN, false);
          seconde = RTC.get(DS1307_SEC, false);
          date = RTC.get(DS1307_DATE, false);
          mois = RTC.get(DS1307_MTH, false);
          annee = RTC.get(DS1307_YR, false);
          temps_perso = (heure * 100) + minut;  //creation temps_perso

          float h = dht.readHumidity();
          float t = dht.readTemperature();

          if (isnan(t) || isnan(h)) {
          } else {

            if (t >= chauffage_off) {
              digitalWrite(chauffage, LOW);
            }
            if (t <= chauffage_on) {
              digitalWrite(chauffage, HIGH);
            }
            if (t >= extracteur_on) {
              digitalWrite(extracteur, HIGH);
            }
            if (t <= extracteur_off) {
              digitalWrite(extracteur, LOW);
            }
            if (h >= hydro_off) {
              digitalWrite(hydro, LOW);
            }
            if (h <= hydro_on) {
              digitalWrite(hydro, HIGH);
            }
            if (t >= extracteur2_on) {
              digitalWrite(extracteur2, HIGH);
            }
            if (t <= extracteur2_off) {
              digitalWrite(extracteur2, LOW);
            }
          }


          lcd.setCursor(9, 2);
          lcd.print("| EXTRA  ");
          if (digitalRead(extracteur) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(9, 3);
          lcd.print("| INTRA  ");
          if (digitalRead(extracteur2) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          
          lcd.setCursor(9, 1);
          lcd.print("| POMPE  ");
          if (digitalRead(chauffage) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 1);
          lcd.print("CHAUF  ");
          if (digitalRead(chauffage) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 2);
          lcd.print("HYDRO  ");
          if (digitalRead(hydro) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 3);
          lcd.print("BRASS  ");
          if (digitalRead(brasseur) == HIGH)
          {
            lcd.write(byte(carre));
          }
          else
          {
            lcd.write(byte(rond));
          }

          lcd.setCursor(0, 0);
          lcd.write(byte(goutte));
          lcd.print(" SUBSTRACT ");
          lcd.write(byte(goutte));
          lcd.print(" = ");
          lcd.print(sol);
          lcd.print("%");
          delay(10);

        }
        delay(3000);
        lcd.clear();
      }
    }
  }

 

 

 

Du temps j'ai ré-organiser l'affichage , tout recentré 

 

 

Spoiler

Screenshot_11.png.190bab4909b2883a54d9bec7d5d30156.pngScreenshot_10.png.52eecbbe047a56a9eb7161e910721105.png

 

je vais remplacer le VENTI par POMPE peut être , dés que je pourrais teste ça  

 


#define WATERPIN 2
#define READSOILPIN A0

// higher number is more dry
#define MAXDRYNESS 700

#define WATERDELAY 750
#define WATERPOSTDELAY 5000

void setup()
{
  Serial.begin(9600);
  pinMode(READSOILPIN, INPUT);
  pinMode(WATERPIN, OUTPUT);
}

void loop()
{
  int SensorValue = analogRead(READSOILPIN); //take a sample
  Serial.print(SensorValue); Serial.print(" - ");
  
  if(SensorValue >= MAXDRYNESS) 
  {
   // if the soil is too dry start watering for 3/4 a second then
   // wait for 5 seconds before monitoring again
   Serial.println("Soil dry start watering");
   digitalWrite(WATERPIN, HIGH);
   delay(WATERDELAY);
   digitalWrite(WATERPIN, LOW);
   delay(WATERPOSTDELAY);
  }
  
  delay(50);
}

c'est très simplifier , mais c'est déjà une base ^_^ @frenchiemaan , @keteki

 

 

 

Je te remercie encore tizi de jeter un coup d'oeil la dessus :) 

Lien à poster
Partager sur d’autres sites

Yop..

 

J'ai essayé je vous jure, j'ai essayé.. mais non je peux pas

Ce code n'est pas structuré, il n'y a pas de découpage de code, pas de fonctions, pas d'appel..

Et c'est bourré d'erreurs

int extracteur2 = 10;
int extracteur = 10;

la création des chars perso se fait dans le setup et non dans le loop

void loop() {

  lcd.createChar(coeur, COEUR);
  lcd.createChar(carre, CARRE);
  lcd.createChar(rond, ROND);
  lcd.createChar(cel, CEL);
  lcd.createChar(temp, TEMP);
  lcd.createChar(canna, CANNA);
  lcd.createChar(goutte, GOUTTE);
  lcd.createChar(ampoule, AMPOULE);

Bref !

Il n'y a pas que la syntaxe et la sémantique  à revoir, mais des process ne sont pas efficients

Je vais essayer de trouver le temps de vous pondre un code structuré

++

GEN

Modifié par Gen
  • Thanks 1
Lien à poster
Partager sur d’autres sites

 

Spoiler
il y a 52 minutes, Gen a dit:

Yop..

 

J'ai essayé je vous jure, j'ai essayé.. mais non je peux pas

Ce code n'est pas structuré, il n'y a pas de découpage de code, pas de fonctions, pas d'appel..

Et c'est bourré d'erreurs





int extracteur2 = 10;
int extracteur = 10;

la création des chars perso se fait dans le setup et non dans le loop





void loop() {

  lcd.createChar(coeur, COEUR);
  lcd.createChar(carre, CARRE);
  lcd.createChar(rond, ROND);
  lcd.createChar(cel, CEL);
  lcd.createChar(temp, TEMP);
  lcd.createChar(canna, CANNA);
  lcd.createChar(goutte, GOUTTE);
  lcd.createChar(ampoule, AMPOULE);

Bref !

Il n'y a pas que la syntaxe et la sémantique  à revoir, mais des process ne sont pas efficients

Je vais essayer de trouver le temps de vous pondre un code structuré

++

GEN

 

 

 

Merci d’être passé par la @Gen !

 

Je tiens a te rappeler que je ne suis pas un coddeur , que je ne suis en aucun cas diplômé , que je fais ça pour le plaisir et que j'apprend par plaisir ..  Je sais bien que je fais beaucoup d'erreurs  , mais c'est comme ça que l'on apprend , non ? ( il y a moins d' un mois de ça je ne savais même pas téléverser sur l'IDE d'arduino ) 


La partie intéressante de ton message c'est celle pour les chars perso , et encore tu n'explique pas vraiment pourquoi on ne place pas de chars dans le loop ( même si j'ai deviné pourquoi pour le coup  ) 

 

pour les extracteurs je l'ai réglé comme ça vu que mon premier boitier n'avait que 4 prises au début ( c'est vrai que j'aurais pu simplement supprimé extracteur 2 ) 

mais comme dit dans le premier thread de ce post  : http://prntscr.com/ijyhwq ( je ne sais pas si tu avais fait gaffe ;) ) 

 

 

Donc je suis désolé de te faire mal aux yeux avec tout ce code remplis d'erreurs mais j'apprend petit a petit . 

 

 

Lien à poster
Partager sur d’autres sites