Gen

GROWDUINO [Zone de partage]

Recommended Posts

Gen

Je viens de faire la modif pour le fichier motorDriver.cpp

 

je dois encore la tester, mais cela ne devrait pas poser de problème.

 

Cette modif sera intégrée à la dernière mise à jour sur le post #1 de ce fil de discussion dès les tests terminés.

#include "MotorDriver.h"
#include <Arduino.h>
#include <Wire.h>
#include <avr/pgmspace.h>

MotorDriver::MotorDriver(int address,bool relayMode)
{
    _I2cAddress = address;    
    _reverse = relayMode;
}

void MotorDriver::begin()
{
    byte defaultValue[2]={ALL_UP,ALL_DOWN};
    byte motorsAdr[2]={EXTRA,INTRA};
    Wire.begin();
    for(byte i = 0; i<=1; i++)
    {
        Wire.beginTransmission(_I2cAddress);
        Wire.write(i);
        Wire.write(0x00); // define I/O in output
        Wire.endTransmission();
        Wire.beginTransmission(_I2cAddress);
        Wire.write(motorsAdr[i]);
        Wire.write(defaultValue[_reverse]);  // define original relay status
        Wire.endTransmission();
    }    
}

void MotorDriver::setSpeed(int motorSelected, int speed)
{
    if(speed > 7){speed = 7;}
    if(speed < 0){speed = 0;}
    Wire.beginTransmission(_I2cAddress);
    Wire.write(motorSelected);
    if(_reverse)
    {
        Wire.write(inverted_speed[0]);
    }    
    else
    {
        Wire.write(normal_speed[0]);
    }    
    Wire.endTransmission();

    delay(500);
    
    Wire.beginTransmission(_I2cAddress);
    Wire.write(motorSelected);
    if(_reverse)
    {
        Wire.write(inverted_speed[speed]);
    }    
    else
    {
        Wire.write(normal_speed[speed]);
    }    
    Wire.endTransmission();
}

++

GEN



 

Share this post


Link to post
Share on other sites
Gen

Ok ça marche, je suis sous Windows directement avec l'ide, je pense que c'est du fait que les librairies était toutes dispersés

 

klr, c'est la seule explication

 

passe sur sublime_text c'est un peu galère à installer mais après c'est que du plaisir à comparer au GUI préhistorique de l'IDE adruino

 

++

GEN

Share this post


Link to post
Share on other sites
Viker

je crois savoir d"où vient le problème.. le temps de commutation des relais.

As-tu essayé avec des relais mécaniques ?

Moi à l'origine j'ai prévu le système pour des relais mécaniques, il se peut qu'avec des SSR ça merdouille si l'on augmente pas le temps à vide des relais..

En gros en mettant 500ms cela ne devrait plus poser de problème. avec cette tempo pas de crête d'intensité car le moyeu est encore en train de tourner

 

Si tu édites la classe, et met tous les relais a off + un délais avant de lui relancer une commande cela ne devrait plus poser de prob si cela provient de là.

 

Edit : D'ici demain, je vais faire la modif de la classe et la tester, ensuite vous la mettre à dispo car c'est un peu compliqué pour des débutants de bidouiller les classes, ainsi ceux qui désireraient utiliser des platines SSR pour la commande moteur n'auront pas de blèmes

 

Tiens moi au jus

 

++

GEN

 

Ce que tu appelles la classe moteur c'est la librairie?

 

et du coup est-ce que ce changement est pertinent?

 

void MotorDriver::setSpeed(int motorSelected, int speed)

{

    if(speed > 7){speed = 7;}

    if(speed < 0){speed = 0;}

    Wire.beginTransmission(_I2cAddress);

    Wire.write(motorSelected);

    if(_reverse)

    {

        Wire.write(inverted_speed[0]);

       delay(500);

       Wire.write(inverted_speed[speed]);

    }    

    else

    {

       Wire.write(normal_speed[0]);

       delay(500);

       Wire.write(normal_speed[speed]);

    }    

    Wire.endTransmission();

 

Edit: ah bah le temps d'écrire le message et je vois que tu as déja posté la modif :P

 

 

++

Viker

Edited by Viker

Share this post


Link to post
Share on other sites
Gen

Pas assez rapide LOL

 

ton code n'aurait pas fonctionné car le circuit attend 2 bytes c'est pour cela qu'il faut faire un end transmission et un begin transmission, mais en gros l'idée y était

 

++

GEN

Edited by Gen

Share this post


Link to post
Share on other sites
Viker

héhé trop rapide Gen!

 

et oui j'ai compris en regardant ton code qu'il faut un begin et un end transmission pour chaque commande.

Bon et bien en attendant confirmation de ta part après test je m'en vais changer le ssd cramé.

 

++

Viker

Edited by Viker

Share this post


Link to post
Share on other sites
Roucass

Gen y a un moyen de mettre les menu de sublime text en français car je suis déjà nul en français alors en anglais j'y comprends rien

 

J'ai installer le dictionnaire français mais ça a rien changer.

Edited by Roucass

Share this post


Link to post
Share on other sites
Roucass

Bon bah je laisse tomber pour ce week-end, trop prise de tête, le fichier que tu m'a envoyer quand je l'est compiler il m'a trouver une erreur sur void Cyclic. Stop qui n'est plus utiliser, du coup je l'est supprimer dans le CCP et le h et maintenant il me ressort 20 erreur par rapport au cyclic

Edited by Roucass

Share this post


Link to post
Share on other sites
Gen

La classe est testée et fonctionne, je vais mettre les fichiers à jour dans l'archive

 

++

GEN

Share this post


Link to post
Share on other sites
Gen

Archive V1_35 Mise à jour

modification de la classe MotorDriver inclues

 

++

GEN

Share this post


Link to post
Share on other sites
Gen

Bon bah je laisse tomber pour ce week-end, trop prise de tête, le fichier que tu m'a envoyer quand je l'est compiler il m'a trouver une erreur sur void Cyclic. Stop qui n'est plus utiliser, du coup je l'est supprimer dans le CCP et le h et maintenant il me ressort 20 erreur par rapport au cyclic

 

C'est que tu as encore sur ton disque une version obsolète..

normalement dans ton répertoire de travail, il ne doit y avoir que 2 fichiers

le functions.h et le MiniGrowduinoV1_35.ino

Après ta première compil, un fichier .hex sera créé

Je viens de remettre à jour l'archive V1_35 , tu en prends les librairies que tu mettras dans ton environnement dans le repertoire librairie..

 

le mieux est d'y effacer les anciennes utilisées par le projet et d'y remettre les nouvelles.

 

N'oublies pas de relancer l'environnement pour qu'elles soient prises en compte.

 

++

GEN

Edited by Gen

Share this post


Link to post
Share on other sites
Roucass

Ok ça marche je verrais ça demain, depuis hier j'ai du passer une dizaine d'heure dessus pour au final tout recommencer ça c'est le bordel ce logiciel (tout est séparé de partout (dans différents répertoire, programme, document..) et sublime text ne peut être mis en français et j'ai beau faire comme dans les vidéo trouver sur internet mais j'arrive même pas à vérifier et compiler.

 

Je vais tout reprendre du début: tout supprimer ( logiciel, donnees et librairie), reinstallation de l'ide récupéré le code de Viker, vérifier erreur, puis ajouter des menu( reverifier les erreur). Jusque là j'avais un code qui fonctionner. Et ensuite on ce replongera dans ce code qui fait f*** depuis ce matin.

 

Va falloir que je fasse une copie au fur et et à mesure car la j'ai 20 erreur par rapport au fichier cyclic ( pourtant c'est le même que hier, basé sur cyclic timer que tu m'a fourni ou j'ai supprimer les mots timer pour le passer de cyclic timer à cyclic qui est appeler dans le code principal ).

Share this post


Link to post
Share on other sites
Gen

oublie cyclic timer, utilises les classes de l'archive que je viens de rafraîchir

 

++

GEN

Share this post


Link to post
Share on other sites
Roucass

Ok ça marche

 

Petite question pourquoi quand on importe des librairie le logiciel en mets dans la librairie de arduino(dans C:/ programme/arduino/librairie) et d'autre dans la librairie du projet (C:/user/utilisateur/arduino...)?

Share this post


Link to post
Share on other sites
Gen

re

 

C:/ programme/arduino/librairie  c'est l'endroit où doivent se trouver les librairies

 

C:/user/utilisateur/arduino ce sont les codes .ino, si tu y retrouves une librairies c'est quelle à dû être compilée

ou qu'en décompressant une archive elles s'y sont foutues

 

à toi de veiller à toujours avoir tes librairies dans C:/ programme/arduino/librairie

 

++

GEN

Share this post


Link to post
Share on other sites
Roucass

Ok ça marche merci

A+

Edited by Roucass

Share this post


Link to post
Share on other sites
Viker

Archive V1_35 Mise à jour

modification de la classe MotorDriver inclues

 

++

GEN

 

Bon je testerais demain en espérant ne pas avoir à redessouder et souder :/

 

merci Gen

 

++ Viker

Share this post


Link to post
Share on other sites
Roucass

Bonjour à tous

 

Générale après vérification sur le site arduino si j'utilise la bonne methode d'ajou, j'ai constaté que tu te trompe sur l'emplacement idéal pour stocker des bibliothèques "personnalisé ".

Sur le site arduino à cette adresse:

https://www.arduino.cc/en/Guide/Libraries

 

Il précise bien que pour les bibliothèques vaut mieux les stocker dans documents /arduino plutôt que programme/arduino car lorsque le logiciel ce met à jour il supprimé tout dans programme/arduino (dont les bibliothèques ) mais ne touche pas à la partie croquis (documents /arduino).

 

J'essayerais ce soir si j'arrive à faire fonctionner mon code

Bonne journée à tous

Share this post


Link to post
Share on other sites
Gen

possible,

mais chez moi elles sont toutes dans librairies.. car je ne fais pas les mises à jour.

je n'y ai que les librairies standard et celles que j'écris moi-même..

 

Mon pc de travail n'est jamais connecté au réseau (enfin pas tout à fait, juste pour l'upload des videos).. trop eu de mauvaises expériences

 

Ceci expliquerait cela

 

tiens moi au jus

 

++

GEN

Share this post


Link to post
Share on other sites
Viker

Archive V1_35 Mise à jour

modification de la classe MotorDriver inclues

 

++

GEN

 

Bonjour,

 

Je viens de mettre la nouvelle classe MotorDriver et j'ai testé sur une lampe à filament et... bah ça clignote.

En effet runMotors est relancé periodiquement avec runProcess et du coup MOTOR_DRIVER.setSpeed est également relancé et par conséquent 500 ms de délais.

Du coup il est possible qu'en effet les ssr ne grillent plus (je n'ai pas encore testé) mais par contre l'allumage extinction des intra extra toutes les 2 secondes ne vont-ils pas nuire à leur durée de vie?

Du coup quel est la meilleur option pour éviter le clignotement (hors changement de vitesse)?

J'ai pensé à une condition du genre dans void runMotors

if(currentTemp < previousTemp -0.5) || (currentTemp > previousTemp +0.5) alors exécuter les instructions habituelles sinon fin de void runMotors

solution élégante ou y a-t-il mieux?

 

Sinon petite contribution pour programmer l'arduino mega par les pin rx et tx si comme moi vous ne pouvez plus accéder au port usb du mega.

 

En effet, mon arduino mega est fixé dans la box miniGrowduino et je ne peux accéder à la prise usb sans démonter mon arduino ce qui n'est pas pratique si je veux changer le programme.

 

Donc j'utilise un programmateur FTDI que je branche de la façon suivante sur mon arduino mega :

 

FTDI Rx --> Tx Mega

         Tx --> Rx

       Vcc --> +5V

      Gnd --> Gnd

 

Attention, le FTDI alimente le Mega donc pas d'autre alimentation branchée sur le Mega le temps de la programmation.

 

Sinon dans l'IDE Arduino sélectionnez comme d'habitude dans tools (outils), le type de carte Arduino Mega, le processeur Mega 2560 et le port com adéquat.

 

Avant d'appuyer sur upload (téléversement) il faut enfoncer le bouton reset du mega. Au moment ou la compilation vient de finir il faut relâcher le bouton reset afin que le téléchargement s'opère. Les led tx et rx se mettent alors à clignoter rapidement sur le FTDI. Voilà c'est terminé.

 

Bonjour à tous

 

Générale après vérification sur le site arduino si j'utilise la bonne methode d'ajou, j'ai constaté que tu te trompe sur l'emplacement idéal pour stocker des bibliothèques "personnalisé ".

Sur le site arduino à cette adresse:

https://www.arduino.cc/en/Guide/Libraries

 

Il précise bien que pour les bibliothèques vaut mieux les stocker dans documents /arduino plutôt que programme/arduino car lorsque le logiciel ce met à jour il supprimé tout dans programme/arduino (dont les bibliothèques ) mais ne touche pas à la partie croquis (documents /arduino).

 

J'essayerais ce soir si j'arrive à faire fonctionner mon code

Bonne journée à tous

 

Toutes les librairies que j'ai installées se trouvent dans le dossier librairies lui même dans le dossier où se trouvent les projets créés (.ino) et cela fonctionne très bien.

 

++ Viker

Share this post


Link to post
Share on other sites
Gen

Yop Viker

 

C'est pour cela que tu as un paramètre de temporisation de l'échantillonage

 

int motorDelayInSec = .... 

 

que tu règles en fonction du volume et de l'inertie thermique.

 

J'ai mis une tempo de 500ms par défaut pour le basculement des relais

 

réponse à ta question : il y a mieux LOOOOL ;-)  tu verras dans le code

Pourquoi ? Car une classe a un niveau d'abstraction élevé, et peut être réutilisée par tout autre projet.

de plus, un classe te permet d'en faire x instanciations avec des paramètres différents

 

voila pour résoudre le problème

 

je vais aller mettre la classe à jour dans le post#1 (Fait)

 

++

GEN

Edited by Gen

Share this post


Link to post
Share on other sites
Viker

Ah bah oui en effet comparer si la vitesse est différente de la vitesse actuelle dans la classe même.

Share this post


Link to post
Share on other sites
Gen

Ah bah oui en effet comparer si la vitesse est différente de la vitesse actuelle dans la classe même.

 

tu m'as donné l'idée de pouvoir modifier le temps j'ai rajouté 2 methodes supplémentaires dans la classe MotorDriver

La valeur par défaut est de 500ms

++

GEN

Edited by Gen

Share this post


Link to post
Share on other sites
Viker

Excellent.

 

Possibilité de modifier et vérifier la valeur du délai des relais via l'interface du miniGrowduino.

Bon je vais quand même utiliser la valeur par défaut sans toucher au programme :P

J'upload la nouvelle bibli, je teste sur 24h.

 

A plusieurs on est plus intelligent ;)

Vive la zone de partage!

 

++

Viker

Share this post


Link to post
Share on other sites
Gen

 

A plusieurs on est plus intelligent ;)

 

 

J'adore !

 

++

GEN

Share this post


Link to post
Share on other sites