Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide pour un projet (débutant)

ARDUINO

13 juillet 2018 à 10:17:52

Bonjour,

Je viens vers vous car je me suis lancé dans mon premier projet arduino et je me pose quelques questions auxquelles vous saurez sans doutes me répondre.

Tout d'abord voici en gros ce que je souhaite faire :

Partant en vacances je ne souhaite pas retrouver mes plantations desséchées par la chaleur et le soleil. N'ayant personne pour les arroser et étant toujours en quête de m'intéresser un peu à tout, j'ai décidé de programmer un script qui ferait en sorte de prendre les mesures de température et d'humidité, grâce à un module DHT11, tous les 12 heures. Ensuite en fonction des valeurs prises un servo moteur s'actionnerait pendant un temps donné ce qui permettrait de laisser écouler l'eau.

A présent voici ce que je suis parvenu à faire :

################## SCRIPT ###############

#include <SimpleDHT.h>     // ici j'ai inclu les différentes bibliothèques

int pinDHT11 = 2;
SimpleDHT11 dht11;


#include <Servo.h>

Servo myservo;



void setup() {
 
  myservo.attach(9);      // ici je n'ai pas trop compris ce qu'il fallait que je mette
  myservo.write(0);
  delay(8000);

    Serial.begin(9600);
}

void loop() {

  Serial.println("=================================");             //ici c'est ce qui va s'afficher dans le moniteur série
  Serial.println("Sample DHT11...");
 
 
  byte temperature = 0;                         //là ça prend les mesures d'humidité et de température
  byte humidity = 0;
  byte data[40] = {0};
  if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
    Serial.print("Read DHT11 failed");
    return;
  }
 
  Serial.print("Sample RAW Bits: ");
  for (int i = 0; i < 40; i++) {
    Serial.print((int)data[i]);
    if (i > 0 && ((i + 1) % 4) == 0) {
      Serial.print(' ');
    }
  }
  Serial.println("");
 
  Serial.print("Sample OK: ");                                             //ici ça indique les valeurs trouvées dans le moniteur série
  Serial.print((int)temperature); Serial.print(" *C, ");
  Serial.print((int)humidity); Serial.println(" %");                

  if (((int)temperature)>25) {                        // et là c'est ce qui est censé faire bouger le servo moteur
    myservo.write(80);
    delay(10000);
    myservo.write(10);
  }

  if (((int)humidity)>55 && ((int)temperature)<25) {
    myservo.write(80);
    delay(5000);
    myservo.write(10);
  }
 

  delay(10000000);                      // et là un delay qui n'est pas le delay final je précise
 
}

##########################################

Pour ce qui est de la vérification et du téléversement, il n'y a pas de problèmes mais le moteur tourne toujours est encore jusqu'à la prochaines prise de valeur alors que ce que je souhaiterai c'est qu'il soit à 0° pour ne pas laisser passer l'eau et qu'il s'actionne pour aller à 60° par exemple et qu'il attende 10 secondes (temps de passage de l'eau) et qu'il revienne à 0° pour ne plus laisser passer l'eau et qu'il ne re-bouge plus jusqu'à la prochaine prise de mesures.

Merci infiniment à ceux qui sauront m'aider et qui auront eu le courage de tout lire !

-
Edité par NabetseSab 13 juillet 2018 à 10:19:49

  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2018 à 11:34:06

met ton code dans une fenetre </>, ce sera plus lisible
  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2018 à 15:16:28

Voici le code dans une fenêtre :

#include <SimpleDHT.h>     // ici j'ai inclu les différentes bibliothèques

int pinDHT11 = 2;
SimpleDHT11 dht11;


#include <Servo.h>

Servo myservo;



void setup() {
 
  myservo.attach(9);      // ici je n'ai pas trop compris ce qu'il fallait que je mette
  myservo.write(0);
  delay(8000);

    Serial.begin(9600);
}

void loop() {

  Serial.println("=================================");             //ici c'est ce qui va s'afficher dans le moniteur série
  Serial.println("Sample DHT11...");
 
 
  byte temperature = 0;                         //là ça prend les mesures d'humidité et de température
  byte humidity = 0;
  byte data[40] = {0};
  if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
    Serial.print("Read DHT11 failed");
    return;
  }
 
  Serial.print("Sample RAW Bits: ");
  for (int i = 0; i < 40; i++) {
    Serial.print((int)data[i]);
    if (i > 0 && ((i + 1) % 4) == 0) {
      Serial.print(' ');
    }
  }
  Serial.println("");
 
  Serial.print("Sample OK: ");                                             //ici ça indique les valeurs trouvées dans le moniteur série
  Serial.print((int)temperature); Serial.print(" *C, ");
  Serial.print((int)humidity); Serial.println(" %");                

  if (((int)temperature)>25) {                        // et là c'est ce qui est censé faire bouger le servo moteur
    myservo.write(80);
    delay(10000);
    myservo.write(10);
  }

  if (((int)humidity)>55 && ((int)temperature)<25) {
    myservo.write(80);
    delay(5000);
    myservo.write(10);
  }
 

  delay(10000000);                      // et là un delay qui n'est pas le delay final je précise
 
}



  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2018 à 15:39:56

Salut, 

J'ai pas bien compris ton problème (le moteur tourne toujours), 

Dans ton code tu lui indique jamais de retourner à 0 c'est normal qu'il ne revient pas à sa position initiale (et donc laisser passer l'eau) 

  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2018 à 15:46:07

jubam a écrit:

Salut, 

J'ai pas bien compris ton problème (le moteur tourne toujours), 

Dans ton code tu lui indique jamais de retourner à 0 c'est normal qu'il ne revient pas à sa position initiale (et donc laisser passer l'eau) 


En fait le moteur répète toujours ce que je lui ai dit de faire dans le "if". N'y a t il pas un moyen qu'il ne le fasse qu'une fois ?
  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2018 à 17:44:08

ça doit etre du au fait que la fonction principale "loop" a déjà reboucler non ? 

  • Partager sur Facebook
  • Partager sur Twitter
14 juillet 2018 à 18:10:26

Dans ton if tu peu rajouter une condition (température >25 ET deja_arrose == 0)

Tu initialise ton "deja_arrose" a 0 dans le setup.
Tu mets "deja_arrose" a 1 au moment de la prise de température.
Tu mets "deja_arrose" a 0 lorsque tu viens d'arroser.



  • Partager sur Facebook
  • Partager sur Twitter
16 juillet 2018 à 15:10:09

J'ai pris en note vos différentes réponses et suis arrivé à un résultat qui me satisfait ! Merci à tous, vous me sauvez moi ainsi que mon potager :)
  • Partager sur Facebook
  • Partager sur Twitter
17 juillet 2018 à 10:34:20

Salut, 

Content pour toi, tu pourrais poster ton code (et schémas aussi) pour d'autres personnes qui auront le même problème ?

  • Partager sur Facebook
  • Partager sur Twitter