Aller au contenu

Messages recommandés

Posté (modifié)

Bonjour

j'aimerai touver qqun qui peux m'expliquer et comment modifier et renommer le driver nightcrawler pour commander mon projet de rotator.

j'ai ouvert un poste sur le forum INDI , j'ai bien Jasem qui me répond ,mais je sais pas si c'est la traduction anglais français ou alors  moi (qui surement ça) ,mais 

j'ai de la peine a suivre surtout que je suis un gros amateur en programmation .

Donc du coup je tente ma chance ici pour savoir si qqun peut m'aider a m'expliquer comment cela fonctionne et m'aider a réaliser ce driver .

Je dois simplifier le driver qui et trop pousser car il est pour un focuser et rotateur , et moi je veux que la partie que du rotateur .

et bien sur je dois aussi modifier le code arduino pour le simplifier.

 

Alors si qqun et intéresser pour me donner un coup de main et m'expliquer se qu'il fais cela serai super sympa !!!

Si vous ça vous dis je peux mettre les fichiers et le code arduino !

 

A bientot

Christophe 

Modifié par ch_porchet
Posté

Bonjour,

 

1) Programmer un driver INDI en plus de ton code Arduino c'est compliqué.

   Il me semble qu'une meilleure approche serait que ton rotateur utilise un protocole "connu" d'un autre rotateur du commerce pour lequel il existe un driver Indi, comme cela l'effort de programmation est seulement du coté Arduino, et pas du coté Indi 

 

2) Plutôt qu'utiliser le driver du LiteCrawler de Moonlite, je t'invite à coder dans ton rotateur le protocole utilisé par le rotateur Optec Pyxis, qui est bien décrit ici au chapitre 4.3  https://www.optecinc.com/astronomy/catalog/pyxis/images/17645_manual.pdf

 

3) Personnellement c'est l'approche que j'ai utilisé pour faire une roue a filtre imprimée en 3D et motorisée avec un arduino, qui implémenter le protocole de la roue a filtre Quantum  Note: je viens de m'apercevoir que je n'ai pas encore publié ce "bricolage" sur Webastro, je vais réparer cet oubli rapidement

 

4) Pour ce qui est du NiteCrawler, il fait rotateur et focuser, avec même la possibilité de gérer 2 focus. Je vais utiliser ce protocole pour motoriser la rotation et la mise eu point sur un C8 avec porte oculaire Moonlite. La motorisation a été bricolée avec de l'impression 3D, des moteurs Nema et un ESP32 (cela se programme comme un arduino mais en plus il y a du wifi).

 

Voila, le seul conseil que je me permet de te donner c'est de ne pas te lancer dans le développement d'un driver INDI, sauf si tu est à l'aise coté développement. Sinon limite toi au développement coté Arduino, c'est déjà bien assez de boulot...

 

Cordialement

 

Posté

hello Keymlinux

Merci de t'on intervention , alors tu vas rire , car j'y ai penser au driver Optec ,et le pire c'est que je me suis lancer dans se projet car j'a acheter "LePyxis" mais il n'as jamais fonctionner sous Kstars malgré mes email à Optec et en plus il ne vas pas avec mon nouveau projet.

J'ai un peux regarder le driver , mais j'ai pas le code arduino pour faire des essais et je pense etre incapable de le faire au complet alors que le code qqun me la donné ,mais comme dis plus haut, il est compliqué.

 

j'etais parti sur plusieurs piste , mon premier essaie etait fais avec qqun qui la fais pour lui en langage "c" pure et dure , cela fonctionnais avec mon ancien moteur , mais la je suis parti sur un moteur nema du coup plus compatible.

du coup j'ai pris le nightcrawler vu que j'ai eu le code arduino , mais trop compliqué ,d' ou ma question pour que l'on m'explique sont fonctionnement pour que je puisse essayer de le simplifier.

Mais si on peux m'expliquer et m'aider sur le Pyxis , alors cela m'interesse beaucoup plus , mais pour cela faut le code arduino.

 

Voila , a bientot

Christophe

 

Posté (modifié)

J'ai une question , sur se bout code du driver Pyxis

IPState Pyxis::HomeRotator()
{
    const char *cmd = "CHOMES";

    int nbytes_written = 0, rc = -1;
    char errstr[MAXRBUF];

    LOGF_DEBUG("CMD <%s>", cmd);

    tcflush(PortFD, TCIOFLUSH);

    if ( (rc = tty_write(PortFD, cmd, PYRIX_CMD, &nbytes_written)) != TTY_OK)
    {
        tty_error_msg(rc, errstr, MAXRBUF);
        LOGF_ERROR("%s: %s.", __FUNCTION__, errstr);
        return IPS_ALERT;
    }

    return IPS_BUSY;

 

si je comprend biens la commande de GoHome c'est CHOMES ou c'est cmd ?

ensuite sur le code arduino on devrais mettre  comme exemple 

#define CHOMES 3

Se qui donne que  c'est l'entrée 3 pour le contacteur Home , ou je suis complètement faux

A+

 

Modifié par ch_porchet
Posté

hello

j'ai regarde le driver de Pyxis , le problème c'est que je n'ai pas trouver le code arduino qui vas avec , et surtout je n'ai pas non plus trouver les bibliothèques qui vont avec se driver .

Du coup tu pense que c'est possible de créé qqch ave se driver ?

Posté

Bonjour,

Il y a 11 heures, ch_porchet a dit :
#define CHOMES 3

 

Tu définis une constante de nom CHOMES qui vaut 3 (Passe par le préprocesseur).

 

Il y a 11 heures, ch_porchet a dit :
const char *cmd = "CHOMES";

 

Idem ; tu définit une constante de type caractère, de nom cmd (vu le nom ça doit être une commande), qui vaut la chaine"CHOMES" (Passe par le compilateur directement).

 

Donc cmd contient la chaine de caractère "CHOMES" comme valeur

 

Et il y a aussi une constante de nom CHOMES qui vaut la valeur 3

 

Posté

ok alors c'est plus "cmd" qui est intéressant pour faire le code arduino ?

mais je t'avoue que  si je dois faire le code complet, je vais jamais y arrivé , je suis trop nul, hélas !!

Posté

Bon la programmation, c'est loin .... Je suis plus tout jeune ....

Cette méthode HomeRotator (On doit être en C++ pour indi), envoie la commande CHOMES (via cmd) pour mettre le rotateur en position home. Le reste ces sont des variables de gestion (nbbyte_written, rc), des informations de mise au point (LOGF_DEBUG), traitement des erreurs (if ... TTY_OK).

Commande:

image.png.b8d7f8680ec7f4ee2b193e4dced235ae.png

 

Les bibliothèques devraient être incluses dans des clauses "#include " des programmes.

Posté

hello

j'ai une question (encore 😉), j'ai un code d'un projet du mec qui avais commencer en meme tans que mois l'idée du rotator , le truc c'est qu'il la fais en code "C"

qui super abstrait pour moi , si je te met le code tu penses arrivé a m'expliquer ou a comprendre qqch pour que je puisse essayer de faire en arduino classique.

Car il fonctionnait bien chez lui, mais avec un autre moteur qui est spécifique pour sont montage. 

 

Redis moi 

a bientot

Christophe

Posté

Je ne sais pas .... Mais ça ne coûte rien d'essayer. 

C'est plutôt le manque de temps qui peut être gênant. Je travaille encore. Du transport.

Mais ça ne coûte rien d'essayer. 

On gagne toujours à aider.

Posté (modifié)

helloJ

je te met les 2 codes qu'il a fais , mais le truc c'est que en plus, c'est pas pour le même driver moteur que moi .

Il y a le code pour l'arduino et l'autre  il  me semble que c'est la bibliothèque , mais le code est étonnamment

cour par rapport a ceux que j'ai vu pour un rotator.

breffe si tu arrives a comprendre redis moi. 

rotator.h rotator.ino

Modifié par ch_porchet
Posté

Pas évident.

Comme ça rapidement:

- le .h : ce sont les includes, les définitions.

- le .ino ;: le code de son programme.

- le programme principal commence par main. C'est ce qu'il faut lire en 1er.

- les blocs d'instruction sont entre accolades : commence par { et finit par }

- Tu as une boucle infinie (while (1))

-  il lit l'entrée série (readSerialLine();) cmd c'est la commande. (il fait des décalages >> et des ou bit à bit | -> voir le fichier h sur _X et _Y)

- et il regarde ce qu'il a lu (le switch).

- les différents cas sont dans les case (s'il a trouvé gi ou gv ou gd, .... Les instructions selon le cas sont jusqu'au break suivant.

 

Je pense qu'il faut que tu regardes dans ton rotator comment lire les commandes pour modifier readSerielLine et quelles sont les commandes possibles (modifier les case).

 

Bon, c'est une modeste contribution. Dis-moi si ça t'aide un peu ....

 

Posté

hello

alors malheureusement , c'est trop compliqué pour moi hélas !!

Bon , ma première question , le ".h" c'est la ou se trouve le principe de fonctionnement ou de commande de l'eprom du driver moteur ou arduino.

Maintenant, si je voudrais que cela soit plutôt "AccelStepper.h"  qui et compatible avec le driver que je veux utiliser ,est-ce que je peux quand même essayer de modifier se code existant ?

 

deuxième dans le code il y a plusieurs partie que je voudrais que tu m'aide distinguer :

La partie qui ne dois pas changer qui sert a la connexion avec kstars pour lire les commandes

la partie qui et le programme pure , de mémoire c'est ou il y a les "case"

et enfin la partie qui a mon avis dois aussi exister , c'est celle qui redonne l'info a kstars de sa position en temps réel , je dis sa parce que dans un essaie on était arriver a faire bouger le rotator mais sans remonter l'info a kstars..

 

tu commence a voir que mon niveau  malheureusement 

Posté

A priori dans le code le développeur s'est amusé à tout coder lui même, comme piloter les timings des impulsions à donner sur chacun des 4 fils du moteur, alors qu'il existe des librairies toutes faites pour cela (Stepper et AccelStepper)

Du coup c'est compliqué...

Déjà, maintenir un code que l'on a prit soir même c'est galère, alors si c'est écrit par un autre, c'est juste indigeste...

 

Pour en revenir a ton problème initial , @ch_porchet, tu disais avoir un rotator Pyxis et ne pas réussir à le faire fonctionner

--> as tu essayé d'activer les options de debug sous INDI pour tracer le dialogue entre INDI et le rotateur, cela pourrait aider...

 

Si vraiment tu abandonnes l'idée d'utiliser le Pyxis et que tu souhaite en construire un autre et injecter un code dedans, je pars du principe que tu as construit un rotateur avec un moteur (nema ou autre ?), un stepper et un arduino, et dans ce cas, sans vouloir t'offenser, au vu des posts ci dessus je ne pense pas que tu ai les compétences pour coder le firmware (pas tapper...) (mais rien n'empêche d'essayer, apprendre la programmation il n'y a pas d'age, c'est sympa, mais c'est pas facile). Moi même j'ai fais un peu de C dans ma jeunesse, et j'arrive a faire du code "simple" pour un arduino (mais le développement c'est un boulot a part entière, et mes compétences sont limitées). 

Comme je le disais je suis en train de faire un rotateur pour mon C8. A terme je vais implementer le protocole des NiteCrawler car je dois pouvoir piloter 3 moteurs (je devrais dire, que je vais essayer...résultat non garanti). En attendant je vais faire une version rotator simple avec 1 moteur, et implementer le protocole du Pyxis, et le tester sous INDI. Si c'est OK tu n'aura plus qu'a utiliser ce code.

 

note: personnellement je vais utiliser des moteurs NEMA 17 et stepper DRV8825. Quel type de moteur vas tu utiliser ?

 

Cordialement

Posté (modifié)

Hello

J'ai aussi un nema17, ai j ai deux driver j ai commencer avec un TB6612, et un A4988 qui paraît et plus dimple à utiliser car tu peut lui donner que 3 infos pour qu'il fonctionne, les pas, la direction et si il dois être bloquer quand il est au repos.

 

 

il y a 44 minutes, keymlinux a dit :

sans vouloir t'offenser, au vu des posts ci dessus je ne pense pas que tu ai les compétences pour coder le firmware

Alors tu m'offence pas du tous car c'est la

juste la stricte vérité malheureusement. 

 

Mais quand j'ai fais mon toit roulant de mon observatoire ,j ai aussi demander de l'aide pour le piloter avec kstars, car si je suis arriver a faire le code du principe d'ouverture avec l'arduino , j'ai étés incapable de le faire piloter par kstars sans l'aide qqun.

Par contre cette fois je voudrais comprendre comment cela fonctionne, c'est pourquoi que si qqun arrive à m'aider ,j'aimerai aussi qu'on m'explique un peu le principe .

A+

Modifié par ch_porchet
Posté
Le 17/10/2021 à 21:43, keymlinux a dit :

2) Plutôt qu'utiliser le driver du LiteCrawler de Moonlite, je t'invite à coder dans ton rotateur le protocole utilisé par le rotateur Optec Pyxis, qui est bien décrit ici au chapitre 4.3  https://www.optecinc.com/astronomy/catalog/pyxis/images/17645_manual.pdf

Une question au sujet du driver Pyxis , tu pense que c'est possible de faire fonctionner avec un autre code arduino  ??

Mais alors comment faire pour que le driver pyxis reconnais l'arduino et comment faire pour utiliser et trouver les bonne commande ?

a+

Posté

Hello les gars !

Petite question pour comprendre , qu'est qu'il faut mettre comme code juste pour que kstars se connecte avec le un driver sur carte arduino ?

Comme par exemple le nightcrawler ou pyxis ou un autre ?

 

Autre chose:
si je prend le code du nightcrawler , j'ai essayé de comprendre une chose que je suis pas arrivé a influencer .
c'est que si je met 1° comme commande , il fais du style 360° ,j'ai essayer de modifier le nombre de pas , mais rien.
c'est comme le goHome ne fonctionne pas !

 

Merci

A+

Posté

Est-ce que qqun c est les commande que utilse le driver Pyxis pour dire l'angle et gohome au rotateur ?

Et de même au cas celui de nightcrawler ?

 

Merci

Posté

Bonjour ,Je reviens au sujet de Pyxis, est-ce que qqn c est les syntaxes des commandes que utilisé pyxis pour commander le rotator, et se que il faut pour que pyxis puisse se connecter ou reconnaître l'arduino .

 Un grand merci

A+

 

Posté

Du coup personne a une idée comment faire pour que ce driver Pyxis communique avec un code arduino ainsi que les syntaxe qu'il envoie pour donner l'angle et le gohome.

Car je suis bloqué pour l'instant.

 

je remet le lien que ma fourni Keymlinux

https://www.optecinc.com/astronomy/catalog/pyxis/images/17645_manual.pdf

C'est au chapitre 4

 

Au faite Keymlinux tu aurais pas une idée 

 

A bientot 

Posté
il y a 9 minutes, ch_porchet a dit :

Au faite Keymlinux tu aurais pas une idée 

Bonjour

Dans le doc que j'ai fourni il y a toutes les infos qui expliquent comment le driver discute avec un vrai rotateur Pyxis.

Reste plus qu'a écrire un bout de code pour arduino pour recevoir via le port série les ordres du driver et actionner le moteur en conséquence (pour que l'arduino se fasse passer pour un Pyxis) --> c'est en cours.

Tu as indiqué avoir un moteur nema 17 (quel modèle exactement ?, combien de pas par tour ? les miens ont 200 pas par tour) et un driver A4988  (qui est compatible avec le driver DRV8825 que j'utilise).

 

Pour le bout de code, livraison d'une première version mercredi soir...

 

Cordialement

Posté

Hello

Alors moteur nema17 à le même nombre de pas 200.

Alors j'ai un bout de code qui fonctionne avec le driver a4988 avec gohome et donner l'angle , mais je sais pas faire le reste. 

Toi tu as déjà le code pour communiquer entre les deux ?

Posté

Salut. La lecture du post m'a donner envi d'essayer. Je ne suis pas sous linux, j'ai donc essayé avec le driver ASCOM. En espionnant la liaison série, je vois bien que le driver envoi la commande CCLINK, l'arduino décode bien le message et répond bien "!" suivi d'un CR et un LF. Mais le driver n'accepte la connexion. As tu reussi de ton coté a établir la connexion entre ton montage et le driver? Si oui je suis intéressé par le code. Merci.

Posté

hello

alors pour l'instant pas , j'attend de voir ci Keymliunx  et arrivé .

Par contre tu arrives a me montrer le bout de code que tu as fais pour la connexion , même si il ne vas pas.

 

Merci

Posté (modifié)

C'est vite fait pour déjà essayer de voir si ca pouvait dialoguer avec le driver, mais il ne veut rien savoir. Avec ce code l'Arduino répondra "! CR LF" à chaque requête. Le plus probant était celui là:

 

int index = 0;
char commande[6];
char inchar;
boolean commandeRecue = 0;

void setup() 
{
  Serial.begin(19200);
}

 
void loop() 
{
  if(Serial.available())
  {
    index = 0;
    while(index < 7)
    {
      inchar = Serial.read();
      commande[index] = inchar;
      delay(1);
      index++;
    }
    Serial.println("!");
    commandeRecue = 1;
  }
}

 

Dans le PDF du Pyxis ils disent que le CR correspond à 0X0C alors que l'Arduino renvoi un 0X0D. Je bloque ici. Pas très loin...

Modifié par Cedric02700
Posté

Bonjour,

 

Avec un peu de retard, voici un code pour arduino pour piloter un moteur se comportant comme un rotateur Pyxis

Le code Arduino

SMO-PYXIS-1.0.ino

Le log INDI lors des tests

indi_pyxis_rotator_00:45:43.log

 

Concernant le code

1) dans la section "SMO DEFINES (optional compil)", on peut changer des options comme par exemple activer/désactiver le mode débug et commentant ou dé-commentant la ligne "#define SMO_DEBUG"

Si la ligne commence par "//" alors c'est commenté, pas de debug, si il n'y a pas de "//" devant "#" alors l'option est active

Le débug est pratique pour les tests avec le moniteur série de l'interface de développement arduino, mais il faut le désactiver pour utiliser le code pour de vrai (on dialogue avec INDI par le port série, si on le pollue avec des logs cela ne fonctionne pas...)

 

2)  Dans la même section, choisir le type de stepper/moteur à utiliser en décomentant une des lignes suivantes

#define SMO_USE_UL2003
#define SMO_USE_DRV8825

choisir UL2003 pour les moteurs pilotés avec un stepper à 4 fils, choisir DRV8825 pour les stepper avec 2 fils (1 pour la direction, un pour les pas)

 

3) Dans la section "DEFINES (values)" il faut a minima adapter les numéros de broches (pin) que vous allez utiliser pour piloter le moteur

vous pouvez aussi adapter les valeurs suivantes:

 

La vitesse initiale de rotation du moteur en pas pas minute

    #define defStepperSpeed          600

L'accélération de la rotation

    #define defStepperAccel          200

La vitesse max de rotation du moteur en pas par minute

    #define defStepperMaxSpeed      1000
Le nombre de pas nécessaire pour faire un tour d'axe moteur

    #define defStepsPerRevolution   64.0    // usualy 64 for 28BYJ-48, 400 for NEMA 17

Le facteur de réducteur si engrenage interne (c'es le cas du moteur 28BYJ-48 t de certains Nema avec réducteur intégré, ou bien d'un éventuel réducteur imprimé en 3D )

    #define defInternalGearRatio    64.0    // usualy 64 for 28BYJ-48, 1 for NEMA 17
Si comme moi vous avez des engrenages imprimés en 3D en sortie du moteur, vous pouvez indiquer le nombre de dents
  #define defNbDentsAxeMoteur      20
  #define defNbDentsAxeRotator    100

 

Par exemple, avec un moteur 28BYJ-48 et réducteur interne x64 on va avoir avec les valeurs ci dessus:

-  le rotateur est une couronne dentée de 100 dents

- Pour que le rotateur fasse 1 tour de 360 degrés, il faut que le pignon de 20 dents en sortie moteur fasse 5 tours (100/20)

- Pour que ce même pignon de 20 dents fasse lui même un tout il faut que le moteur fasse 4096 tours (64x64)

- donc un tour de 360 degrés demande 5x64x64 pas, soit presque 57 pas par degré de rotation

 

Dans mon cas perso, avec le montage suivant:

1411443916_Capturedcran2021-11-0602_34_10.png.59945d06a26d422f6bc6f0742c9ac8db.png

En rouge le moteur NEMA 17 200pas/tour

En marron/orange/jaune/bleu/vert, des engrenages qui constituent un réducteur imprimé en 3D, ayant un ratio de 4.34 (il faut un peu plus de 4 tours de moteur pour faire 1 tour de l'engrenage vert)

Le petit engrenage vert fait 12 dents, le rotateur rose fait 100 dents, donc ici ratio 8.33

Au final il faut 36,16 tours de moteur de 200 pas pour 1 tour de rotateur de 360 degrés donc environ 20 pas par degré

Donc j'utilise les valeurs suivantes

    #define defStepperSpeed          600

    #define defStepperAccel          200

    #define defStepperMaxSpeed      1000

    #define defStepsPerRevolution   200.0

    #define defInternalGearRatio    4.34
    #define defNbDentsAxeMoteur      12
    #define defNbDentsAxeRotator    100

 

Cordialement, Stephane

Posté

Beau travail!  Solution clef en main. 

 

Avec ton code j'obtiens la même réponse à "CCLINK". Donc même réaction du driver ASCOM, ça ne valide pas la connexion. Le driver ASCOM doit attendre un petit truc en plus pour identifier les rotateurs officiels. 

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.