postez vos oeuvres ici , pas de question dans cette section uniquement réservé aux tutos
Répondre

Re: Le post des Aquabouns'ers

Mar 16 Avr 2019, 22:22


commodore, tu a essayer de gérer des servo sans utiliser mon code pour voir ?
Si tu trouve un code avec le quelle tu a le problème avec les originaux et pas les copie, fait le moi suivre que je vois stp

Re: Le post des Aquabouns'ers

Mer 17 Avr 2019, 04:17

djbouns a écrit:commodore, tu a essayer de gérer des servo sans utiliser mon code pour voir ?
Si tu trouve un code avec le quelle tu a le problème avec les originaux et pas les copie, fait le moi suivre que je vois stp


Bien sur !
J'ai utilisé les 2 exemples de la librairie "servo.h" et directement les pins 11 et 12 désactivés .
Demain un pote m'apporte un original neuf pour faire des essais , car les miens ont déjà servies ! (on ne sait jamais).
Je te tiens au courant.

Re: Le post des Aquabouns'ers

Jeu 18 Avr 2019, 16:53

Bon , Arduino 2560 Neuf dans l'emballage d'origine

Image

Avec 1 servo :

Essai sur les pin 44, 45,46 , riens (normal !)
Les pins 11 12 et 13 opérationnelles ! :111:

Conclusion :

2 Vieux arduinos original a la poubelle :108:
Fin des tests sur les oscillos :115:
Le problème était chez moi.

Re: Le post des Aquabouns'ers

Ven 19 Avr 2019, 04:38

Passons a la suite :

La séquence de démarrage est pas mal mais un peux longue , on pourrait peut être accélérer la procédure ?

Le brassage , au démarrage du programme les pompes sont au maxi , j'ai ajouté dans l'initialisation des oscillos du setup : "analogWrite(pinOutBrassage[numeroOscillo], 50);"

Les tempêtes , elle démarre trop vite , faudrait un démarrage progressif , même chose pour l’arrêt !

Voila pour le moment !

Cela fait une quinzaine de jours qu'il tourne dans mon bac et pour le moment RAS, la semaine prochaine j'installerais le nouveau Arduino.

Re: Le post des Aquabouns'ers

Ven 19 Avr 2019, 10:43

Slt,
Ok pour les test, sa me rassure
Pour le demarage, il ne doit avoir lieu q’une fois, donc ... en plus quand c’est plus rapide on n.as pas le temp de lire si il y a un probleme.
Pour le brassage, faur que je regarde.
Pour’la tempette, c.est noter pour les prochaine version.

Moi, 5 mois en route sans probleme :)

Re: Le post des Aquabouns'ers

Mer 24 Avr 2019, 04:50

Dans le code de brassage "/* sinon brassage "normal" selon horraire */" le code n'intrigue un peut :

Il y a une série de if , else if , avec la même commande : "analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);"

Il y a moyen de simplifier en suppriment les "analogueWrite" et n'en mettre qu'un a la fin des test car seul "variable.pwmBrassage[numeroBrassage]" est modifié.

Seul le premier test est un peux différent, la variable est a zéro et tu enlève "* pourCentEnPwm", mais zéro * cequetuveux = 0 donc on peux aussi la supprimer.

Tu en penses quoi ?

Re: Le post des Aquabouns'ers

Mer 24 Avr 2019, 08:20

Normalement oui
J'ai fait les modifs (ajout + commenter), dit moi si c'est bon et je le mettrais dans la prochaine version
Code:
void brassage() {
  for (uint8_t numeroBrassage = numeroUn; numeroBrassage <= numeroTrois ; numeroBrassage++) { // lance la fonction pour chaque pompe de brassage
    /* si nourissage en cours */
    if (nourissageEnCours ) {
      if (millis() - tempsPrecedentNourrissage <= sauvegarde.dureeNourrissageMillis) { // si duree du nourisssage non ateinte
        if (sauvegarde.brassageOnOffPwm[numeroBrassage] != Arret) { // si pas en OFF baisse du brassage au MIN
          variable.pwmBrassage[numeroBrassage] = puissanceMinBrassage[numeroBrassage];
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
          // DPRINTF("brassage minimum car Nourrissage"); DPRINTLN();
        }
        else { // si en OFF
          variable.pwmBrassage[numeroBrassage] = zero;
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
          // DPRINTF("Nourrissage mais en OFF"); DPRINTLN();
        }
        if (MajEcranTempeteEnCours ) { // si tempette en cours, tempette OFF
          MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
          statutTempete(); // met a jour l'icone sur l'ecran
        }
        if (numeroBrassage == numeroTrois) {
          if (MajEcranNourrissageEnCours == false) { // met a jour les info a l'ecran
            MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours; /// boolean pour ne rafraichir en boucle
            rafraichirBrassage1Nextion(); // rafraichi les info a l'ecran
            rafraichirBrassage2Nextion(); // rafraichi les info a l'ecran
            rafraichirBrassage3Nextion(); // rafraichi les info a l'ecran
            onOffalimentation = false; // met le bouton en false
          }
        }
        if (tempeteAleatoireEnCours ) { // si la tempette etait ON
          tempeteAleatoireEnCours = !tempeteAleatoireEnCours; // met tempete en OFF
        }
      }
      else { // nourissage fini
        nourissageEnCours = !nourissageEnCours;
        onOffalimentation = true; // met le bouton en true
      }
    }
    /* si tempete manuel en cours */
    else if (tempeteManuelEnCours ) { // tempete manuel ON
      if (millis() - tempsPrecedentTempete <= sauvegarde.dureeTempeteMillis) { // si tempete manuel
        //DPRINT(MajEcranTempeteEnCours);  DPRINTLN(); // debug
        if (sauvegarde.brassageOnOffPwm[numeroBrassage] != Arret) { // si pas en OFF
          variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceTempete; // puissance definie en tempete
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        }
        else { // si en OFF
          variable.pwmBrassage[numeroBrassage] = zero; // puissance zero
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
        }
        if (MajEcranTempeteEnCours == false) { // boolean pour ne pas mettre a jour les info a l'ecran en boucle
          MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
          statutTempete(); // MAJ l'icone sur l'ecran
        }
        if (MajEcranNourrissageEnCours ) { // boolean pour ne pas mettre a jour les info a l'ecran en boucle
          MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours;
        }
        if (tempeteAleatoireEnCours ) {// boolean pour ne pas mettre a jour les info a l'ecran en boucle
          tempeteAleatoireEnCours = !tempeteAleatoireEnCours;
        }
        //DPRINTF("brassage TEMPETE manuel "); DPRINT(MajEcranTempeteEnCours); DPRINTLN();
      }
      else { // fin de la tempette manuel
        tempeteManuelEnCours = !tempeteManuelEnCours; // boolean pour mettre a jour les info a l'ecran
      }
    }
    /* si tempete aleatoir en cours */
    else if (tempeteAleatoireEnCours ) {
      if (millis() - tempsPrecedentTempeteAleatoire <= dureeTempeteAleatoire) {
        variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceTempete;
        if (sauvegarde.brassageOnOffPwm[numeroBrassage] > Arret) {
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        }
        else {
          variable.pwmBrassage[numeroBrassage] = zero;
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
        }
        if (numeroBrassage == numeroTrois) {
          if (MajEcranTempeteEnCours == false) {
            MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
            statutTempete();
            rafraichirBrassage1Nextion(); // rafraichi les info a l'ecran
            rafraichirBrassage2Nextion(); // rafraichi les info a l'ecran
            rafraichirBrassage3Nextion(); // rafraichi les info a l'ecran
          }
        }
        if (MajEcranNourrissageEnCours ) {
          MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours;

        }
        //  DPRINTF("brassage TEMPETE aleatoire"); DPRINTLN(); //debug
      }
      else { // si tempete aleatoir fini
        tempeteAleatoireEnCours = false;
        rafraichirBrassage1Nextion(); // rafraichi les info a l'ecran
        rafraichirBrassage2Nextion(); // rafraichi les info a l'ecran
        rafraichirBrassage3Nextion(); // rafraichi les info a l'ecran
      }
    }
    /* sinon brassage "normal" selon horraire */
    else {
      if (sauvegarde.brassageOnOffPwm[numeroBrassage] == Arret) { // si brassage OFF
        variable.pwmBrassage[numeroBrassage] = zero; // puissance zero
        //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
        //DPRINTF("brassage OFF");DPRINT(numeroBrassage); DPRINTLN(); //debug
      }
      else if (sauvegarde.brassageOnOffPwm[numeroBrassage] == Actif) { // si brassage ON
        variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceMaxBrassage[numeroBrassage]; // puissance MAX defini
        //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        //DPRINTF("brassage nominal");DPRINT(numeroBrassage); DPRINTLN(); //debug
      }
      else if (sauvegarde.brassageOnOffPwm[numeroBrassage] == Pwm) { // si brassage PWM acalmie la nuit, lever/coucher associer au soleil
        if ((Time >= debutleverSoleil[bleu1]) && (Time < finleverSoleil[blanc2])) { // augmentation pendent lever soleil
          variable.pwmBrassage[numeroBrassage] = map(Time, debutleverSoleil[bleu1], finleverSoleil[blanc2], puissanceMinBrassage[numeroBrassage], sauvegarde.puissanceMaxBrassage[numeroBrassage]);
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        }
        else if ((Time >= finleverSoleil[blanc2]) && (Time < debutcoucherSoleil[blanc1])) { // puissance MAX defini pendent le zenith
          variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceMaxBrassage[numeroBrassage];
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        }
        else if ((Time >= debutcoucherSoleil[blanc1]) && (Time < fincoucherSoleil[bleu2])) { // dimminition pendent coucher soleil
          variable.pwmBrassage[numeroBrassage] = map(Time, debutcoucherSoleil[blanc1], fincoucherSoleil[bleu2], sauvegarde.puissanceMaxBrassage[numeroBrassage], puissanceMinBrassage[numeroBrassage]);
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        }
        else {
          variable.pwmBrassage[numeroBrassage] = puissanceMinBrassage[numeroBrassage]; // puissance MAX minoré de la baisse accalmie/nourissage
          //analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
        }
        //DPRINTF("brassage pwm");DPRINT(numeroBrassage); DPRINTLN(); //debug
      }
      if (MajEcranTempeteEnCours ) { // boolean pour ne pas avoir de mise a jour de l'ecran a repetition
        MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
        statutTempete();
      }
      if (MajEcranNourrissageEnCours ) { // boolean pour ne pas avoir de mise a jour de l'ecran a repetition
        MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours;
      }
      if (tempeteAleatoireEnCours ) { // boolean pour ne pas avoir de mise a jour de l'ecran a repetition
        tempeteAleatoireEnCours = !tempeteAleatoireEnCours;
      }
    }
    analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
  }
}

Re: Le post des Aquabouns'ers

Jeu 25 Avr 2019, 12:53

Ok , je valide la modif , RAS pour le moment.

Re: Le post des Aquabouns'ers

Ven 26 Avr 2019, 15:01

:147: Djbouns.

D'abord pour le partage et aussi pour le travail. J'ai pris le temps de lire, tout… Voilà un montage simple, bien expliqué qui répond à la majorité des besoins. Sans esbroufe ni besoin d'épater la galerie. Des explications claires, concises… comme j'aime :128:

Pourtant je ne suis pas sûr d'exploiter ce beau cadeau, moi qui ait toujours privilégié mes systèmes en modules indépendants. Toujours cette phobie de voir tomber en panne un système très (trop) centralisateur ! Il y a un temps, j'avais imaginé que l'idéal consisterait en dives modules (RAC, osmolation, Ecumeur, éclairage…) chacun pouvant fonctionner sans les autres. Chaque récifaliste pouvant s'équiper au fur et à mesure de ses besoins. L'ensemble pouvant être coordonné par un système centralisateur, avec un bel écran, seulement là pour coordonner et récupérer des infos à afficher. Les ESP m'ont paru idéaux pour cette approche. Mais les protocoles de communication ont vite eu raison de mon incompétence, malgré ma récente initiation à l'Arduino.

Aquabouns, tu désespères de ne pas voir ton système plus adopté que ça. Comme je te comprends ! Chacun vit son récifal, avec ses priorités, ses moyens… pas le temps, pas intéressé, non bricoleur, pas de compétence en électricité, en électronique, en C++, en soudure, en limage et collage de plastique… il ne reste finalement potentiellement plus grand monde pour s'associer )à ce projet. Et puis il faut avouer que dans ce monde du "consommer vite" il n'y a pas beaucoup de place pour reconnaitre ni le travail, ni le résultat, même si il est offert sur un plateau, gratos.

Je n'ai pas fait avancer le schmilblick. Désolé ! Mais je suis tout cela de près, avec l'espoir que ton énergie ne sera pas vaine, dans quelques mois, quand je (re)cogiterai un nouvel aquarium.

Mais déjà, merci !
Modifié en dernier par Denisio le Ven 26 Avr 2019, 23:54, modifié 1 fois.

Re: Le post des Aquabouns'ers

Ven 26 Avr 2019, 21:21

Merci denisio, ça fait plaisir.
c'est vrai que j'ai du mal a comprendre pourquoi si peut de personne se lance, pour une simple et bonne raison :
en comparaison avec l'ackduino que beaucoup on adopté, je pense que l'aquaboun's est "plus mieux" lol plus beau, plus simple, plus complet, plus FIABLE et que le montage n'est pas plus compliqué !
alors pourquoi ? ... mais bon ...
je commence a recevoir des message comme le tient. comme tu le dit sa fait pas avancer le schmilblick mais sa réconforte un peu :)
Et puis j'ai 2 3 touches avec des personne qui sont près a participé a l’évolution et ça, c'est TOP !

en se qui concerne
Toujours cette phobie de voir tomber en panne un système très (trop) centralisateur
tout a été fait pour qu'il y est un max de sécurité et aucune blocage.
l'avenir nous le diras mais je suis serin :) et tout problème / bug rencontré seras analysé dans l'intention d'etre debugé. J'ai vraiment envie que l'aquaboun's avance avec les recifaliste ...

Re: Le post des Aquabouns'ers

Ven 26 Avr 2019, 23:59

Je viens d'en faire la promotion ce soir, au club de Montauban. Peu de réactions, mais bon, je ne peux les blâmer, la majeure partie fait ses premiers pas de récifaliste. Ce n'est pas leur priorité. Il faudra analyser l'impact de ce projet, dans le temps. Les retours feront sa promotion.


Pour revenir au sujet : qui dit module GSM, dit carte SIM, donc un abonnement chez un opérateur. J'imagine que le plus adapté aujourd'hui, c'est chez Free ?

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 03:53

Pour ma part j'ai pris Free pour 2 € , je n'ai pas trouvé moins cher !
Par contre j'ai eu un mal de chien pour enlever le code pin car c'était une micro sim et les portable actuel c'est du nano , j'ai du trouver quelqu'un qui avait un "ancien" portable pour enlever le code pin.
Modifié en dernier par Commodore le Sam 27 Avr 2019, 04:17, modifié 1 fois.

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 04:03

Tempête :

Pour les oscillos je déplace de 1° toutes les 10 secondes (je ne sais pas si c'est correct mais ça fonctionne bien).

Dans le mode tempête peut être faut il multiplier par 2 la vitesse des oscillos ? ou définir la vitesse des oscillos dans le mode tempête !

Non ?
Modifié en dernier par Commodore le Sam 27 Avr 2019, 04:20, modifié 1 fois.

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 04:16

djbouns a écrit:
Commodore a écrit:Quand je nettoies l'aquarium j’enlève 30 L d'eau et je remet 30 L , donc un bouton ON/OFF est pratique !

j'ai compris


J'ai fait un nettoyage du bac hier et je constate qu'un bouton on/off n'est pas suffisant !
en fait pour le fonctionnement normal de l'osmolation il faudrait :

Auto /off/On

auto : fonctionnement normal en automatique, gérer par l'aquabouns
Off : arrêt total du fonctionnement
On : Fonctionnement forcé de la pompe d'osmolation (avec un arrêt sur le flotteur de sécurité peut être).

Ce qui permettrais d'avoir Off maintenance du bac , On remplissage du bac et auto fonctionnement normal !


J'essaye de rendre le produit au top ... :111: :113:

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 09:00

Commodore a écrit:Tempête :
Pour les oscillos je déplace de 1° toutes les 10 secondes (je ne sais pas si c'est correct mais ça fonctionne bien).
Dans le mode tempête peut être faut il multiplier par 2 la vitesse des oscillos ? ou définir la vitesse des oscillos dans le mode tempête !
Non ?

Le mode trempette permet de lever les sédiment.
Pourquoi vouloir accelerer l'oscillation ?
Les marrée vont plus vite lors des tempetes ? lol

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 09:04

Commodore a écrit:auto : fonctionnement normal en automatique, gérer par l'aquabouns
Off : arrêt total du fonctionnement
On : Fonctionnement forcé de la pompe d'osmolation (avec un arrêt sur le flotteur de sécurité peut être).
Ce qui permettrais d'avoir Off maintenance du bac , On remplissage du bac et auto fonctionnement normal !

Ok pour auto et off
Je suis beaucoup plus retissent sur le On, mais pourquoi pas uniquement si il faut rester appuyer sur le bouton pour mettre on

Commodore a écrit:J'essaye de rendre le produit au top ... :111: :113:

je n'en doute pas

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 10:00

De mon côté, pour l'osmolation, je ne comprends pas l'intérêt d'une fonction ON. L'osmolation est automatique, ou pas.
Modifié en dernier par Denisio le Sam 27 Avr 2019, 15:15, modifié 1 fois.

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 11:50

l'osmolation est automatique mais lors du remplissage du bac après une maintenance c'est plus pratique !

Re: Le post des Aquabouns'ers

Sam 27 Avr 2019, 15:17

Je voulais dire, l'osmolation est en mode automatique (AUTO), ou pas (OFF)

Pour une intervention : OFF
Après intervention et pour le remplissage du bac, il ne suffit pas de mettre sur AUTO ?
Répondre