Gen 2 808 Posté(e) novembre 22, 2017 Auteur Partager Posté(e) novembre 22, 2017 Salut lien en Mp ++ GEN Lien à poster Partager sur d’autres sites
Viker 147 Posté(e) novembre 25, 2017 Partager Posté(e) novembre 25, 2017 (modifié) 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é novembre 25, 2017 par Viker Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) novembre 25, 2017 Auteur Partager Posté(e) novembre 25, 2017 Yop. Attention, tes platines en ref c'est pour du 24VDC en pilotage !! ++ GEN Lien à poster Partager sur d’autres sites
Viker 147 Posté(e) novembre 25, 2017 Partager Posté(e) novembre 25, 2017 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
Gen 2 808 Posté(e) novembre 25, 2017 Auteur Partager Posté(e) novembre 25, 2017 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
Viker 147 Posté(e) novembre 25, 2017 Partager Posté(e) novembre 25, 2017 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
Gen 2 808 Posté(e) novembre 26, 2017 Auteur Partager Posté(e) novembre 26, 2017 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 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 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
Gen 2 808 Posté(e) novembre 26, 2017 Auteur Partager Posté(e) novembre 26, 2017 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
Invité dudu972 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 Ah non cétait pas le clavier c est l’écran opps Comment brancher le relais SSR ? Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) novembre 26, 2017 Auteur Partager Posté(e) novembre 26, 2017 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 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 Je poste des photos de mon Growduino ! Tous mes relais marchent bien J utilise pour l’instant Temp up et Humi Down Plus la lampe Lien à poster Partager sur d’autres sites
Invité dudu972 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 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
Gen 2 808 Posté(e) novembre 26, 2017 Auteur Partager Posté(e) novembre 26, 2017 (modifié) 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é novembre 26, 2017 par Gen Lien à poster Partager sur d’autres sites
Viker 147 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 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
Viker 147 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 (modifié) 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é novembre 26, 2017 par Viker Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) novembre 26, 2017 Auteur Partager Posté(e) novembre 26, 2017 (modifié) 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é novembre 26, 2017 par Gen Lien à poster Partager sur d’autres sites
Viker 147 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 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
Gen 2 808 Posté(e) novembre 26, 2017 Auteur Partager Posté(e) novembre 26, 2017 (modifié) Simple, tu le codes... MOTOR_DRIVER.setOffset(loffsetParRapportàLintextra) MOTOR_DRIVER.setSpeed(lavitessesouhaitée); ++ GEN Modifié novembre 26, 2017 par Gen Lien à poster Partager sur d’autres sites
Viker 147 Posté(e) novembre 26, 2017 Partager Posté(e) novembre 26, 2017 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
Messages recommandés