Go Down

Topic: voilier connecté (Read 1 time) previous topic - next topic

libarde

Bonjour à tous.

J'ai utilisé ce site pour obtenir des informations bien utiles et je vous en remercie.
Je pense avoir fini mon projet: domotique d'un voilier (batotique?)

voici le programme pour arduino méga.
Double objectif:
- telecommande à distance pour le pilote automatique.
- telecommande pour les circuits permanents.

Le tout via un smartphone (appli appinventor)
Il fonctionne.



/*
 * Arduino mega
 * commandes pour un tableau electrique d'un bateau.
 * fermeture ou ouverture des circuits via un smartphone.
 * les relais 1 à 6 sont dédiés au pilote auto. Ils fonctionnent comme des boutons poussoirs (pilote ST4000)
 *
 * Les relais 7 à 23 commandent les circuits permanents.
 *
 *  relais1 = 26;//STANDBY
    relais2 = 27;//AUTO
    relais3 = 28;//-10
    relais4 = 29;//+10
    relais5 = 30;//-1
    relais6 = 31;//+1
   
    relais7 = 32;//auxi1
    relais8 = 33;//auxi2
    relais9 = 34;//instruments
    relais10 = 35;//pilote
    relais11 = 36;//navtex
    relais12 = 37;//eclairage
    relais13 = 38;//frigo
    relais14 = 39;//grpe eau
    relais15 = 40;//prises exterieur
    relais16 = 41;//feux nav
    relais17 = 42;//feu hune
    relais18 = 43;//feu mouillage
    relais19 = 44;//ecl pont
    relais20 = 45;//pompe douches
    relais21 = 46;//pompe cale
    relais22 = 47;//prises 12V
    relais23 = 48;//tv
*/
int mem[17];// memoire des relais 7 à 23
int pos = 0;// variable de position dans tableau des memoires : pos1 = memoire relais8 = mem[pos]
int broche = 0;// definit la broche de sortie (serialA + 25)
int serialA; // variable de reception de donnée via RX

void setup()
{

 Serial1.begin(9600); // initialisation de la connexion série (avec le module bluetooth hc06)
 
    for (int i = 26 ; i < 49; i++) //on utilise les sorties 26 à 48
  { digitalWrite(i, HIGH);// les relais optocoupleurs sont "active low"
  }
    for (int j =26 ; j < 49; j++)
  { pinMode(j, OUTPUT);// broches de sortie
  }
    for (int k = 0; k < 17 ; k++)// mise des memoires à 0 pour les relais 7 à 23
    {mem[k] = 0;
    }
                                                                                                                                                                                                                                                                                                                                     
}
 
void loop() {
 while (Serial1.available() == 0);
 serialA = Serial1.read(); // stocker la valeur reçue dans la variable SerialA
 pos = serialA - 1;  // position dans le tableau (utile à partir de case 7)
 broche = serialA + 25; // calcul broche de sortie
    switch (serialA)
    {
  case 1: // si arduino reçois le chiffre 1 à 6
  case 2:
  case 3:
  case 4:
  case 5:
  case 6:
    digitalWrite(broche, LOW); // ferme le relais
    delay (500);
    digitalWrite(broche, HIGH);// fin d'impulsion et ouverture du relais
    break;
 
 case 7: // si arduino reçois le chiffre 7 à 23"
 case 8:
 case 9:
 case 10:
 case 11:
 case 12:
 case 13:
 case 14:
 case 15:
 case 16:
 case 17:
 case 18:
 case 19:
 case 20:
 case 21:
 case 22:
 case 23:
   if (mem[pos] == 0){
   digitalWrite(broche, LOW);// ferme le relais
   mem[pos]=1;//memoire relais ON
   }
   else {
   digitalWrite(broche, HIGH);// ouvre le relais
   mem[pos] = 0;//memoire relais OFF
    break;
   }

    }
}

Si on peut faire mieux je suis preneur.
Je suis "arduiniste autodidacte depuis 2 mois"

Encore un grand merci pour vos conseils.

GG




Go Up