RaspFR :: Forum

Forum de la communauté francophone de Raspberry PI.

Vous n'êtes pas identifié(e).

Annonce

Canal irc: #raspfr sur zeolia.net

#1 05-05-2015 20:34:07

nathan0407
Membre
Inscription : 18-08-2013
Messages : 66

groupe a demarage auto

bonjour ,  mon projet une generatrice 7000 watts avec demarage auto .
 
je voudrai que ma generatrice demarre toutes seul, quande mon capteur de niveau d eau est en position haute ( installer dans un puisard).
pour cela j ai connecté a mon arduino nano :
-un relai pour le contact
-un relai pour le demareur
-un servo moteur pour actionner le starter
-une led come temoin
-le capteur cablé comme si c est un bouton poussoir(http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ExempleButton)

j ai fais un programme


[== Indéfini ==]
 #include <RCSwitch.h>
  #include <Servo.h>
  
RCSwitch mySwitch = RCSwitch ();
 

Servo monServo;            // mon servo moteur est appeler monServo controle le starter groupe electrogene
 int BP = 7;            // capteur niveau d eau
 int CONTACT = 10;              // relais contact groupe electrogene
 int DEMAREUR = 11;              // relais demareur groupe electrogene
 int ledPin = 12;              // led control demarage                
// Les variables sont modifiées au cours du programme
int buttonState = 0;         // variable pour mémoriser l'état du bouton



////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  monServo.attach(4);           //mon servo sur le pin 4 
  monServo.write(180); 
  mySwitch.enableTransmit(9);  //emetteur connecté au pin 9
  pinMode(ledPin, OUTPUT);  // led en mode sortie connecté au pin 11
  pinMode(CONTACT, OUTPUT);  //relai en mode sortie connecté au pin 10
  pinMode(DEMAREUR, OUTPUT);  //relai en mode sortie connecté au pin 12
  pinMode(BP, INPUT);     // capteur nivea eau en mode entrée connecté au pin 5
   Serial.begin(9600);
   
   digitalWrite(CONTACT, HIGH);
digitalWrite(DEMAREUR, HIGH);
digitalWrite(ledPin, LOW);
}

void loop(){
  // lit la valeur de l'état du bouton et la mémorise dans la variable
  Serial.println("start!");
  delay(4000);
  buttonState = digitalRead(BP);
  Serial.println(buttonState);
  // Teste si le bouton est appuyé
  // c'est à dire si la variable buttonState est à 1
  // NB : ne pas confondre = et == !
  if (buttonState == HIGH) {
Serial.println(buttonState);    
    // allume la LED   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(CONTACT, LOW); // Allumer le contact
    monServo.write(30);         // tourne le starter sur on
            delay(3000);
    monServo.write(180);         // tourne le starter sur off

         delay(1000);
     Serial.println("contact + led allumée + servo tourne le starter !");
   digitalWrite(DEMAREUR, LOW); // Allumer le demareur
     Serial.println("j allume le demareur, j attend 4 secondes !");
         delay(4000);
   digitalWrite(DEMAREUR, HIGH); // eteint le demareur
      Serial.println("j eteint le demareur !");
  }

  else { // sinon
    
    digitalWrite(CONTACT, HIGH); // Allumer le contact
    digitalWrite(ledPin, LOW);  // éteint la LED
    Serial.println(buttonState);
    digitalWrite(DEMAREUR, HIGH); // eteint le demareur
  
  }
  while (buttonState == HIGH) // tant que le niveau est haut le demareur ne demare pas, le contact reste
{
      
    Serial.println(buttonState);
      digitalWrite(CONTACT, LOW); // Allumer le contact
      //digitalWrite(DEMAREUR, HIGH); // le demareur reste eteint
      
      Serial.println("le demareur reste eteint!");
  }
}

sauf qu a la fin de la boucle meme quand le capteur descend la boucle bloc sur le demareur reste eteint?

Hors ligne

#2 06-05-2015 13:04:31

chevelu
Membre
Inscription : 28-01-2014
Messages : 161

Re : groupe a demarage auto

Tu ne changes pas la valeur de buttonState dans la dernière boucle, donc le test buttonState == HIGH ne change pas non plus de valeur. Tu as créé une boucle infinie.

Hors ligne

#3 07-05-2015 12:48:43

nathan0407
Membre
Inscription : 18-08-2013
Messages : 66

Re : groupe a demarage auto

OK ,faudrais  reprendre l état du bouton dans la dernière boucle .
Merci de ton aide j essaye ce soir

Hors ligne

#4 12-05-2015 22:43:19

nathan0407
Membre
Inscription : 18-08-2013
Messages : 66

Re : groupe a demarage auto

bonjour , voici mon code fini et fonctionnel

[== C++ ==]
 #include <RCSwitch.h>
  #include <Servo.h>
  
RCSwitch mySwitch = RCSwitch();
 
 Servo MONSERVO; // mon servo moteur est appeler monServo controle le starter groupe electrogene
 
 int CAPTEUR_NIVEAU = 7;             // capteur niveau d eau
 int CONTACT = 10;              // relais contact groupe electrogene
 int DEMAREUR = 11;              // relais demareur groupe electrogene
 int LEDPIN= 12;                // led control demarage                

 int etat_bouton = 0;
 int etat_bouton2 ;
 int etat_bouton3 ;
 int etat_bouton4 ;
 int etat_moteur = 0;
 int telecommande_demarage = 14468193;
 int telecommande_eteindre = 14468194;
 
int precedentButtonState = 0;   // Variable pour l'état précédent du bouton poussoir
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  MONSERVO.attach(4);           //mon servo sur le pin 4 
  MONSERVO.write(170); 
  mySwitch.enableTransmit(9);  //emetteur connecté au pin 9
  pinMode(LEDPIN, OUTPUT);  // led en mode sortie connecté au pin 11
  pinMode(CONTACT, OUTPUT);  //relai en mode sortie connecté au pin 10
  pinMode(DEMAREUR, OUTPUT);  //relai en mode sortie connecté au pin 12
  pinMode(CAPTEUR_NIVEAU, INPUT);     // capteur nivea eau en mode entrée connecté au pin 5
      Serial.begin(9600);
   
     digitalWrite(CONTACT, HIGH);
     digitalWrite(DEMAREUR, HIGH);
     digitalWrite(LEDPIN, LOW);
}
///////////////////////////////////////////////////////////////////////
void loop() {
 
  Serial.println("start!");
  //delay(2000);
  etat_bouton = digitalRead(CAPTEUR_NIVEAU); // lit la valeur de l'état du bouton et la mémorise dans la variable
  Serial.println(etat_bouton);
 ////////
  if (etat_bouton != precedentButtonState ) {
Serial.println(etat_bouton); 
    digitalWrite(LEDPIN, HIGH); // allume la LED 
    digitalWrite(CONTACT, LOW); // Allumer le contact
    MONSERVO.write(45);         // tourne le starter sur on
            delay(3000);
    MONSERVO.write(170);         // tourne le starter sur off
//delay(1000);
     Serial.println("contact + led allumée + servo tourne le starter  (etape1)!");
   digitalWrite(DEMAREUR, LOW); // Allumer le demareur
     Serial.println("j allume le demareur, j attend 4 secondes !");
         delay(4000);
   digitalWrite(DEMAREUR, HIGH); // eteint le demareur
      Serial.println("j eteint le demareur !");
      Serial.println("le moteur tourne!");
      Serial.println("j attend 10 minutes !");    
         
          delay(11000); //delais 10 minutes
       
                  etat_moteur =1 ;  //moteur sur 1
       Serial.println(etat_moteur);  //affiche l etat du moteur dans le moniteur
       Serial.println(etat_bouton);  //affiche l etat du bouton dans le moniteur
       //delay(4000);
       Serial.println("fin (etape1)!");
  }

 else 
 {
    Serial.println("si non eteint le contact + la led!");  
    digitalWrite(CONTACT, HIGH); // eteint le contact
    digitalWrite(LEDPIN, LOW);  // éteint la LED
    Serial.println("niveau bas . affichage etat moteur+ etat bouton3 (etape fin de la boucle else)!");
    etat_bouton3 = digitalRead(CAPTEUR_NIVEAU);
    etat_moteur =0 ;
    Serial.println(etat_bouton3);
    Serial.println(etat_moteur);
 }
 ////////////////   
    etat_bouton4 = digitalRead(CAPTEUR_NIVEAU);
    Serial.println("affichage etat bouton puis moteur)!");
    Serial.println(etat_bouton4);
    Serial.println(etat_bouton);
   
  while (etat_moteur == 1 && etat_bouton4 == 1 ) // tant que le moteur tourne et le bouton est etat 1 
 {
      
    
      digitalWrite(CONTACT, LOW); //  le contact Allumer
      digitalWrite(LEDPIN, HIGH);  //  la LED Allumer
      Serial.println("boucle while ,tant que le capteur sur 1 = contact on + led on");
      etat_bouton4 = digitalRead(CAPTEUR_NIVEAU);
      Serial.println(etat_bouton4);
      
  }
}
 

je dois rajouté une variable pour l etat courant dans la maison ( s il y en a ou pas)
je veux pouvoir le demarer  avec un recepteur 433 et une telecommande
faut que je trouve ca.

Hors ligne

#5 13-05-2015 08:16:21

chris57100
Chris
Lieu : Thionville
Inscription : 23-06-2013
Messages : 1 405
Site Web

Re : groupe a demarage auto

Une télécommande comme pour les prises éléctriques radio commandées pourra faire l'affaire (en tout cas chez moi ca fonctionne) et un récepteur 433 sur l'Arduino
Par contre la portée n'est pas terrible


Raspberry Pi Home Server : http://www.pihomeserver.fr
Tutorials and tips : Samba, Airplay, CUPS, Time machine, MPD+Rompr, Nginx, Owncloud, rTorrent+ruTorrent, Wordpress, Joomla, Subsonic, VNC, etc.
Electronic : weather station, Arduino, etc.

Hors ligne

#6 13-05-2015 20:59:36

nathan0407
Membre
Inscription : 18-08-2013
Messages : 66

Re : groupe a demarage auto

Je voulais récupéré le code de rcswitch (receivedemo_simple)
le modifié j ai réussi ,mais je sais pas ou l insérer dans mon code (generatrice)?

Hors ligne

Pied de page des forums