ch_porchet Posté 17 octobre 2021 Posté 17 octobre 2021 (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é 18 octobre 2021 par ch_porchet
keymlinux Posté 17 octobre 2021 Posté 17 octobre 2021 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
ch_porchet Posté 17 octobre 2021 Auteur Posté 17 octobre 2021 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
ch_porchet Posté 17 octobre 2021 Auteur Posté 17 octobre 2021 (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é 17 octobre 2021 par ch_porchet
ch_porchet Posté 18 octobre 2021 Auteur Posté 18 octobre 2021 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 ?
jjc Posté 18 octobre 2021 Posté 18 octobre 2021 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
ch_porchet Posté 18 octobre 2021 Auteur Posté 18 octobre 2021 Ok , au sujet des bibliothèques , je dois faire comment
ch_porchet Posté 18 octobre 2021 Auteur Posté 18 octobre 2021 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 !!
jjc Posté 18 octobre 2021 Posté 18 octobre 2021 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: Les bibliothèques devraient être incluses dans des clauses "#include " des programmes.
ch_porchet Posté 18 octobre 2021 Auteur Posté 18 octobre 2021 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
jjc Posté 18 octobre 2021 Posté 18 octobre 2021 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.
ch_porchet Posté 19 octobre 2021 Auteur Posté 19 octobre 2021 (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é 19 octobre 2021 par ch_porchet
jjc Posté 19 octobre 2021 Posté 19 octobre 2021 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 ....
ch_porchet Posté 19 octobre 2021 Auteur Posté 19 octobre 2021 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
keymlinux Posté 19 octobre 2021 Posté 19 octobre 2021 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
ch_porchet Posté 19 octobre 2021 Auteur Posté 19 octobre 2021 (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é 19 octobre 2021 par ch_porchet
ch_porchet Posté 21 octobre 2021 Auteur Posté 21 octobre 2021 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+
ch_porchet Posté 21 octobre 2021 Auteur Posté 21 octobre 2021 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+
ch_porchet Posté 22 octobre 2021 Auteur Posté 22 octobre 2021 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
ch_porchet Posté 29 octobre 2021 Auteur Posté 29 octobre 2021 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+
ch_porchet Posté 31 octobre 2021 Auteur Posté 31 octobre 2021 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
keymlinux Posté 31 octobre 2021 Posté 31 octobre 2021 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
ch_porchet Posté 31 octobre 2021 Auteur Posté 31 octobre 2021 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 ?
ch_porchet Posté 4 novembre 2021 Auteur Posté 4 novembre 2021 Hello Keymlinux Es-tu arrivé affaire que ton code arduino soit reconnut par Pyxis . Redis moi A bientot Christophe
Cedric02700 Posté 5 novembre 2021 Posté 5 novembre 2021 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.
ch_porchet Posté 5 novembre 2021 Auteur Posté 5 novembre 2021 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
Cedric02700 Posté 5 novembre 2021 Posté 5 novembre 2021 (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é 5 novembre 2021 par Cedric02700
keymlinux Posté 6 novembre 2021 Posté 6 novembre 2021 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: 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
Cedric02700 Posté 6 novembre 2021 Posté 6 novembre 2021 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.
ch_porchet Posté 6 novembre 2021 Auteur Posté 6 novembre 2021 Coolll !!! Merci, je vais regarder tous ça!! A bientôt
Messages recommandés