Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
groupe a demarage auto
#1
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_refer...mpleButton)

j ai fais un programme


Code :
[== 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?
Répondre
#2
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.
Répondre
#3
OK ,faudrais reprendre l état du bouton dans la dernière boucle .
Merci de ton aide j essaye ce soir
Répondre
#4
bonjour , voici mon code fini et fonctionnel

Code :
[== 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.
Répondre
#5
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
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot
Répondre
#6
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)?
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)

A propos de Communauté francophone RPi

Communauté francophone RPi est un forum d'aide et de partage autour du Raspberry Pi et des micro-ordinateurs.