GROWDUINO [Zone de partage]


Messages recommandés

re:

 

Commençons par le commencement :-)

 

un optocoupleur est une sécurité supplémentaire quand on travaille avec du 220V, le relais assure une isolation galvanique, et en aval l'optocoupleur rajoute une isolation optique.

 

on peut très bien utiliser des relais sans optocoupleurs, moi perso je préfère avec.

 

Concernant les relais, il en faut 1 par vitesse. si vous avez un auto-tranfo 5vitesses, il vous faudra 5 relais..

 

Par contre le problème est le suivant avec les platines relais chinoises, elle sont actives à l'état bas.

C'est pas une erreur, c'est fait volontairement pour consommer moins sur l'arduino.. En règle générale c'est bien pensé, sauf dans notre cas.

pourquoi ?

 

parce que le fait de rebooter l'arduino entrainera de fait un allumage de tous les relais

On peut en diminuer le temps à quelques ms en mettant en première ligne du setup tous les relais à l'état haut.

 

Par contre en cas de coupure de courant, cela devient problématique, car les relais resteront enclenchés pendant toute l'initialisation du processeur, et cela dure plus que quelques ms !

 

Alors il y a plusieurs manières de régler le problème.

 

- La première est de prendre une platine relais actifs à l'état haut.. cela n'existe pas , il faut la fabriquer

(je vous ai mis les plans là : https://www.cannaweed.com/topic/212863-gdw13-platine-relais-%C3%A9tat-haut-pour-commande-auto-transfo/ )

- La seconde c'est de mettre un relais bipolaire sur le + et le - qui alimente la platine chinoise

un relais miniature OMRON GS6 5V fera l'affaire même sans mettre un transistor pour l'alimenter

il sera commandé par l'arduino en fin de setup pour alimenter la platine

 

 

++

GEN

 

Bonjour,

sur mon growduino j'ai les fameuses platines qui fonctionnent à l'état bas et je n'ai pour l'instant pas de soucis. Alors je suppose que l'initialisation dans la librairie motorDriver fait que les relais ne se déclenchent pas à l'allumage. En tout cas c'est ce que j'observe.

 

Sinon j'ai vu sur ali**** des platines qui peuvent être utilisées en déclenchement haut ou bas modifiable par cavaliers.

 

J'en profite pour dire que je n'ai pour l'instant toujours aucun bug sur le growduino tout roule nickel.

 

++

Viker

 

edit: j'ai mis le bon lien pour les platines (5v et non 24v)

Modifié par Viker
Lien à poster
Partager sur d’autres sites

Yop.

 

Attention, tes platines en ref c'est pour du 24VDC en pilotage !!

 

++

GEN

J'ai corrigé et mis le bon lien vers la platine en 5v merci Gen ;)

 

Sinon, le séchage approche et je vais avoir un problème car je sais que mon moteur intra ne supportera pas la vitesse 1.

Du coup, je me suis dis que ce serait bien de réguler le séchage selon l'humidité et les paramètres moteurs.

Je me suis replongé dans le code mais celui-ci a vraiment changé depuis la version 2 du coup je ne suis vraiment pas sûr que cela fonctionne.

 

Donc voici la modif que je propose. Si l'humidité est inférieure à la valeur humidité min alors les moteurs tournent au minimum (minspeed).

Si l'humidité est supérieure à la valeur humidité max alors les moteurs tournent au maximum (nbspeed).

Et si l'humidité se trouve entre ces deux limites alors les moteurs tournerons à la vitesse moyenne entre la valeur min et max.

 

Donc au final à la place de la ligne 2446:

 

MOTOR_DRIVER.setSpeed(1);

 

de mettre:

 

if (humidity <= DS.getActualUsedHumidityMin(true))

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getMinSpeed(EXTRA));}

if (humidity >= DS.getActualUsedHumidityMax(true))

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getNbSpeed(EXTRA));}

else

{MOTOR_DRIVER.setSpeed(((MOTOR_DRIVER.getNbSpeed(EXTRA))+(MOTOR_DRIVER.getMinSpeed(EXTRA)))/2);

 

Qu'en penses-tu Gen?

 

++

Viker

Lien à poster
Partager sur d’autres sites

if (humidity <= DS.getActualUsedHumidityMin(true))

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getMinSpeed(EXTRA));}

if (humidity >= DS.getActualUsedHumidityMax(true))

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getNbSpeed(EXTRA));}

else

{MOTOR_DRIVER.setSpeed(((MOTOR_DRIVER.getNbSpeed(EXTRA))+(MOTOR_DRIVER.getMinSpeed(EXTRA)))/2);

 

Qu'en penses-tu Gen?

 

++

Viker

 

re :

 

tu utilises : DS.getActualUsedHumidityMin(true) mais dans cette méthode rien n'est renvoyé en mode séchage

idem pour le max et le booléen passé en paramètre indique le cas échéant que ce serait les valeurs de jours.

 

int  DataStorage::getActualUsedHumidityMin(bool isLighting)

{

    if(isLighting)

    {

        switch (_workingMode)

        {

            case CROISSANCE:

              return humidityData[0][0];

              break;

            case FLORAISON:

              return humidityData[2][0];

              break;         

        }    

            /......

 

Comme les paramètres de séchage sont constants au niveau du renouvellement de l'air; autant soit modifier la valeur de la ligne 2445         MOTOR_DRIVER.setSpeed(1);   dans void runProcess() qui ma foi est bien suffisant, ou d'y placer ton code de sélection en dur sans avoir besoin d'utiliser les méthodes de l'objet DS, qui de toute manière ne renverront pas des données qui n'existent pas

 

++

GEN

Lien à poster
Partager sur d’autres sites

re :

 

tu utilises : DS.getActualUsedHumidityMin(true) mais dans cette méthode rien n'est renvoyé en mode séchage

idem pour le max et le booléen passé en paramètre indique le cas échéant que ce serait les valeurs de jours.

 

int  DataStorage::getActualUsedHumidityMin(bool isLighting)

{

    if(isLighting)

    {

        switch (_workingMode)

        {

            case CROISSANCE:

              return humidityData[0][0];

              break;

            case FLORAISON:

              return humidityData[2][0];

              break;         

        }    

            /......

 

Comme les paramètres de séchage sont constants au niveau du renouvellement de l'air; autant soit modifier la valeur de la ligne 2445         MOTOR_DRIVER.setSpeed(1);   dans void runProcess() qui ma foi est bien suffisant, ou d'y placer ton code de sélection en dur sans avoir besoin d'utiliser les méthodes de l'objet DS, qui de toute manière ne renverront pas des données qui n'existent pas

 

++

GEN

 

justement le fait que ce soit les valeurs de jours me plaisait bien mais effectivement vu le switch ne comprenant pas le mode SECHAGE le retour est effectivement sans valeur. C'est ce que j'avais fait dans ma version 1.34mod. J'utilisais les valeurs de jour du mode CROISSANCE pour le mode SECHAGE.

 

Donc selon ta préconisation soit je change que la valeur de la ligne 2445 avec une autre valeur : MOTOR_DRIVER.setSpeed(4);

Soit je rentre des valeurs min et max de l'hygrométrie souhaitée en mettant celle-ci directement dans le code:

 

if (humidity <= 50)

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getMinSpeed(EXTRA));}

if (humidity >= 70)

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getNbSpeed(EXTRA));}

else

{MOTOR_DRIVER.setSpeed(((MOTOR_DRIVER.getNbSpeed(EXTRA))+(MOTOR_DRIVER.getMinSpeed(EXTRA)))/2);

 

 

Merci pour ton retour Gen

 

++

Viker

Lien à poster
Partager sur d’autres sites

re :

 

erreur 1 : Ton code n'est pas correct; regarde ce qui se passe si le taux d'humidité est à 40 par exemple..

erreur 2 : Dans le else, il se peut qu'une vitesse ne soit pas un entier ex : (5 + 2) /2  = 3,5

 

++

GEN

Lien à poster
Partager sur d’autres sites
Invité dudu972

Bonjour

J ai  un souci pour brancher le relais SSR

Je l ai mit a la sortie du relais en 220 v pour qu il fasse le  ON OFF mais vu le bruit et l odeur j ai du buger !!

Ouf j en avais commandé  2 !

Je me suis rendu compte que l entrée doit être 3-32V et que sur ton post tu parles des bus I2C

J ai branché le clavier en bus I2C comme demandé et ca marche bien

Mais je sais pas trop comment brancher le relais SSR pour "dire" au bus de faire ON OFF

J espère que c est clair ?

Merci pour l aide !

Lien à poster
Partager sur d’autres sites

Salut.

 

Non, je te rassure, ce n'est absolument pas clair :-)

 

Brancher le clavier sur le bus I2c ???????

 

Je sais pas ce que tu fous ??? Tout est expliqué là => https://www.cannaweed.com/topic/209717-growduino-zone-de-partage/?do=findComment&comment=4046140

 

Qu'est-ce que tu ne comprends pas?

 

++

GEN

Lien à poster
Partager sur d’autres sites

1- soit en direct

 

sortie Timer1 du shield sur le + du relais (coté 3-32V) et le - du relais (coté 3-32V) sur une borne GND quelconque du shield

 

2 - comme dans l'image du post en ref dans mon précédent message

 

 

++

GEN

Lien à poster
Partager sur d’autres sites
Invité dudu972

Oui Merci

En fait je mettais les 2 relais "cul a cul "mais le relais SSR suffit

C'est assez simple en fait ....mais quand on connait rien !!

Top pour ton aide !

Je reposterai des photos avec mon SSR !

Lien à poster
Partager sur d’autres sites

re:

 

Merci pour les tofs de ton montage

 

Par contre, petite indication au passage, le clavier est auto-collant, pas besoin de tape pour le fixer.

 

++

GEN

Modifié par Gen
Lien à poster
Partager sur d’autres sites

re :

 

erreur 1 : Ton code n'est pas correct; regarde ce qui se passe si le taux d'humidité est à 40 par exemple..

erreur 2 : Dans le else, il se peut qu'une vitesse ne soit pas un entier ex : (5 + 2) /2  = 3,5

 

++

GEN

 

Salut,

 

ok je pense avoir pigé si l'humidité est à 40 il passe change la valeur à MinSpeed puis à la valeur MOTOR_DRIVER.getNbSpeed(EXTRA))+(MOTOR_DRIVER.getMinSpeed(EXTRA)))/2

donc il faut que je mette un else if

sinon pour la vitesse à 3,5 vu que c'est un entier j'aurais 4 non? ou faut-il que je fasse une conversion int(...

du coup le code serait:

 

if (humidity <= 50)

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getMinSpeed(EXTRA));}

else if (humidity >= 70)

    {MOTOR_DRIVER.setSpeed(MOTOR_DRIVER.getNbSpeed(EXTRA));}

else

{MOTOR_DRIVER.setSpeed(int((MOTOR_DRIVER.getNbSpeed(EXTRA))+(MOTOR_DRIVER.getMinSpeed(EXTRA)))/2);

 

sinon je ne vois pas ;)

 

++

Viker

Lien à poster
Partager sur d’autres sites

re:

 

Merci pour les tofs de ton montage

 

Par contre, petite indication au passage, le clavier est auto-collant, pas besoin de tape pour le fixer.

 

++

GEN

 

Et en plus en collant le clavier avec son auto-collant tu peux cacher la fente de passage de la nappe ;)

 

++

Viker

Modifié par Viker
Lien à poster
Partager sur d’autres sites

ligne 2445 appel de méthode

 

MOTOR_DRIVER.setSpeed(getDryingMotorSpeed(humidity));

 

rajouter cette fonction dans le code principal

 

int getDryingMotorSpeed(int value)

{

    if(value <= 50){return 1;}

    if(value >= 70){return MOTOR_DRIVER.getNbSpeed(EXTRA);}

    return 3 + (MOTOR_DRIVER.getNbSpeed(EXTRA) >=7);

}

 

explications :

 

si l'HR est inférieur à 50 la fonction renvoie 1 et sort du process

 

si c'est pas le cas, le process de la fonction se poursuit et regarde si l'HR est supérieur à 70

 

si c'est le cas, la fonction renvois la vitesse max et sort du process

 

Si aucun des cas précédents n'est validés alors la fonction renvoie

 

3 si le moteur à 5 vitesses et

3 + 1 (1 = vrai en booléen) càd 4 si le moteur possède 7 vitesses ou plus

 

++

GEN

Modifié par Gen
Lien à poster
Partager sur d’autres sites

ligne 2445 appel de méthode

 

MOTOR_DRIVER.setSpeed(getDryingMotorSpeed(humidity));

 

rajouter cette fonction dans le code principal

 

int getDryingMotorSpeed(int value)

{

    if(value <= 50){return 1;}

    if(value >= 70){return MOTOR_DRIVER.getNbSpeed(EXTRA);}

    return 3 + (MOTOR_DRIVER.getNbSpeed(EXTRA) >=7);

}

 

explications :

 

si l'HR est inférieur à 50 la fonction renvoie 1 et sort du process

 

si c'est pas le cas, le process de la fonction se poursuit et regarde si l'HR est supérieur à 70

 

si c'est le cas, la fonction renvois la vitesse max et sort du process

 

Si aucun des cas précédents n'est validés alors la fonction renvoie

 

3 si le moteur à 5 vitesses et

3 + 1 (1 = vrai en booléen) càd 4 si le moteur possède 7 vitesses ou plus

 

++

GEN

 

Ok mais du coup j'ai une question. Si la valeur retournée est de 1 pour l'extra est-ce que mon intra aura également pour valeur 1?

Si oui, que faire sachant que mon intra ne peux pas accepter 1 comme vitesse min mais 3, sinon il ne tourne pas?

 

++

Viker

Lien à poster
Partager sur d’autres sites

Simple, tu le codes...

MOTOR_DRIVER.setOffset(loffsetParRapportàLintextra)

MOTOR_DRIVER.setSpeed(lavitessesouhaitée);

 

++

GEN

Modifié par Gen
Lien à poster
Partager sur d’autres sites

Simple, tu le codes...

MOTOR_DRIVER.setOffset(loffsetParRapportàLintextra)

MOTOR_DRIVER.setSpeed(lavitessesouhaitée);

 

++

GEN

 

Ok donc je suppose que la réponse était oui à ma première question.

Merci pour ton aide

 

++

Viker

Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.