Bjr à tous,
j'explique mon projet:
j'ai une serre dont je veux gérer la T° et Humidity. De ce côté là, j'y suis arrivé avec un DHT22 et un Arduino Uno en prenant des codes par ci par là sur le net, hé oui je n'y connait rein ,mais j'ai appris pas mal.
j'ai donc un anémomètre, et je voudrais que lorsque le vent dépasse "x" KM/h ma serre ce referme. Alors ,j'ai bien un code pour l'anémometre et je commande un relais pour fermer, je voudrais temporiser le relais pour une heure. En effet , dans mon code (que je n'ai pas écrit ,c'est du coller),l'anemo déclenche bien à une certaine vitesse, déclenche le relais, mais à chaque passage de l'ILS.mon but c'est que lorsqu'il déclenche le relais je voudrais qu'il reste fermé pendant une heure.,j'ai essayer pas mal de choses ,mais je ne trouve pas de code pour faire des essais, c'est pour cela que je fait appel à une âme charitable.
En fait ,je bricole çà pendant l'hiver,ma passion c'est le jardinage. Ma serre s'arose automatiquement et s'ouvre selon une certaine T°, et là je voudrais qu'elle se ferme par grand vent. Honnêtement ,c'est pour m'amuser,mais là çà fait déjà 1 semaine que je me bat avec les codes.
Par contre ,j'ai essayer de voir avec mBlock, sur le coup je me suis dis que c'est impeccable, mais voilà ,je n'y arrive pas non plus,qu'elqu'un peut-il me dire ou trouver toutes les explication détaillées pour pouvoir bien comprendre le fonctionnement.
En attendant je vous dis un grand merci d'avance.
je joins mon code ,enfin mon bidouillage
Code:#include <LiquidCrystal.h> #define INTER 2 int anemo = 2; int relaisPin = 3; LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // initialisation, on définit les ports pour RS, E et D4 à D7 unsigned long timeRun; unsigned long timeLast; float periode; const int RELAY = 3; /***************Variables pour la vitesse du vent*****************************/ //declare un var anemo qui = 2 float v_vent = 0.00; //var qui contiendra la vitesse du vent float rayonBras = 0.01; //rayon du bras 9cm => 0.09m int anemoTickCompteur = 0; //variable pour le comptage du nombre de "TICKS" du capteur ILS de l'anemo float FEtalonage = 3.1; unsigned long previousMillis = 0; const unsigned long TimePause = 30 * 60000; const unsigned long TimeMarche = 5 * 60000 ; enum {ARRET, MARCHE} etat; void setup() { lcd.setCursor(0, 0); //place le c lcd.begin(16, 2); // definit l'écran sur caractères (16) et de lignes (2) delay(100); //pause lcd.setCursor(1, 0); //place le cursor lcd.print("initialisation"); // affiche le message delay(500); //pause lcd.clear(); //efface l'écran delay(250); //pause lcd.print("vent: "); //affiche texte lcd.setCursor(6, 0); //place le cursor lcd.print(v_vent); //affiche la valeur de la vitesse du vent égale à 0.00 au départ lcd.setCursor(11, 0); //place le cursor lcd.print("km/h"); //affiche le texte // On initialise les entrées/sorties Serial.begin(9600); /********************************************************************* Mise en place des broches avec les fonctions d'interruption *********************************************************************/ pinMode(anemo, INPUT); // On écrit l'état du relais//definit la pin anemo(2) comme une entrée attachInterrupt(digitalPinToInterrupt(anemo), AnemoTicks, RISING); //dès que la broche anemo(2) changera d'etat (RISING = état BAS vers HAUT (front montant)) on appelle le SP AnemoTicks } void loop() { timeRun = millis(); //affecte le temps depuis lequel le programme tourne à la var timeRu } void AnemoTicks () { anemoTickCompteur++; if (anemoTickCompteur >= 4) { periode = (timeRun - timeLast) / 1000.0; //???calcul la période et on divise par 1000.0 pour obtenir le résultat en seconde v_vent = rayonBras * 2 * 3.14 * (4 / periode) * FEtalonage; //calcul de la vitesse du vent avec la formule vitesse du vent = rayonBras*2pi*fréquence (frequence=nb_tour/s) => résultat en m/s 2 Ticks = 1 tour/ 4 Ticks = 2 tours v_vent = v_vent * 3.6; //met le resultat en km/h timeLast = timeRun; // ??? anemoTickCompteur = 0; //remise à 0 du compteur anemoTickCompteur Afficher(); //appelle le SP Afficher } } void Afficher() { lcd.setCursor(6, 0); //place le cursor lcd.print(v_vent); //affiche la valeur de la vitesse du vent lcd.setCursor(7, 1); //place le cursor //affiche la valeur de la quantité de pluie { pinMode( 3, OUTPUT); } if ((v_vent = v_vent * 3.6)>100) { digitalWrite(RELAY, LOW); delay(60000); } else { // sinon on l'éteint digitalWrite(RELAY, HIGH); } }
-----