Forum des utilisateurs de Blockly(s)

Blockly@rduino => Nouveaux blocs => Discussion démarrée par: ucino le Janvier 01, 2019, 09:54:30 PM

Titre: Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 01, 2019, 09:54:30 PM
Bonjour à tous,

Tout d'abord un grand merci à Seb et à ceux qui l'ont aidé pour mettre ce projet en place.

J'essaie de mettre en place des blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver ULN2003A.

Je débute dans les moteurs pas à pas, blocky@rduino et javascript et dans github... ce n'est donc pas très évident pour moi :)

ça avance un peu quand même, mais voici ce qui me bloque actuellement :

Quand on dépose un de ces 3 blocs créés, un void nomdelinstance ; qui est créé dans le code arduino, ce qui rend la compilation dans arduino impossible, et ce que d'autres blocs ne font pas.

J'aimerai savoir comment empêcher cela.

Voici quelques infos :

Accéder au résultat actuel : http://developpements.open-elearning.fr/contrib-blockly-at-arduino/

Choisir français > Arduino Nano > Configurer les blocs > tout > Moteurs pas à pas > ce sont les 3 blocs avec des images.

Glisser déposer un de ces 3 blocs, et un vilain void moteurPap1; apparaît dans le code arduino.

Voici les 2 principaux fichiers :

https://github.com/openelearning/Blockly-at-rduino/blob/gh-pages/blocks/unipolar_stepper_motor/unipolar_stepper_motor.js

https://github.com/openelearning/Blockly-at-rduino/blob/gh-pages/generators/arduino/unipolar_stepper_motor.js

Si quelqu'un a des pistes pour que "void moteurPap1;" n'apparaisse pas, je suis preneur, merci.

Ucino
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: buchiprof le Janvier 02, 2019, 09:25:23 AM
Bonjour et bonne année,

Je suis exactement dans la même situation : je débute dans blockly-at-rduino et je souhaite piloter le même kit moteur pas à pas.

En pur code il suffit d'utiliser les exemples dans l'EDI arduino et ça marche avec ce kit.

Dans blockly-at-rduino, il n'y a qu'une partie de la fonction stepper (à partir de la catégorie "arduino pour confirmés" --> moteurs pas à pas) : on ne peut créer qu'une instance de moteur pas à pas avec deux broches car il manque l'instance moteur 4 broches (voir référence : https://www.arduino.cc/en/Reference/StepperConstructor )

De plus ce bloc ne semble même pas fonctionnel puisqu'en mettant les numéro de broches, le code généré ne donne que des valeurs "null".

Pour terminer, il apparait dans le code arduino une ligne dont j'ignore l'utilité : int moteur_PaP[2] = {null, null,null, null}

Bref c'est pas très fonctionnel tout ça  ???

Depuis une semaine maintenant j'essaie de re-créer ce fameux bloc "stepper 4 broches"...on va voir ce que ça donne...

Courage,
BuchiProf
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: SebCanet le Janvier 02, 2019, 11:29:02 AM
Bien le bonjour et bonne année !
Qui démarre sur les chapeaux de roue  :D
J'ai réglé les pb de moteurs pas à pas, rapido :
- système existant : le bloc de définition n'est pas intégré donc logique différente, plus visible, plus proche d'une déclaration de câblage à part ; mauvaise définition dans le générateur Arduino, un changement de forme de blocs (entrée interne en entrée externe) qui change la syntaxe à utiliser.
- UNL2003 : sympa l'image ; il manquait la déclaration correcte des instances, j'ai fait un simple copier-coller du bloc existant pour réutiliser la mécanique existante.

Merci de tester !
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 02, 2019, 12:51:46 PM
Bonjour et meilleurs vœux à vous 2 :)

Merci beaucoup Seb pour ces corrections et intégrations. BuchiProf on a planché en même temps sur la même chose :)

Impeccable pour le moteur pas à pas existant, maintenant donc les pins sont bien pris en compte. Je ne peux pas aller plus dans les tests matériels car je n'ai pas de moteur pas à pas bipolaire, seul à pouvoir fonctionner avec 2 pins de config si j'ai bien compris.

Pour le nouveau moteur :
* Merci de l'avoir ajouté :)
* Bien joué pour qu'il n'y ait plus le void qui apparaisse, je vais regarder en détail pour mieux comprendre.

Les 4 prochains objectifs sur lesquels je vais essayer de m'atteler :
- comme BuchiProf, faire qu'il soit possible d'utiliser 2 moteurs pas à pas en même temps (piste 1 : créer 2 blocs un avec par défaut moteurG, l'autre moteur D - piste 2 : utiliser un seul bloc que l'on peut mettre plusieurs fois, et changer sa variable sans que cela bug comme c'est le cas actuellement) ;
- mettre les traductions dans fr.js ;
- tester avec les enfants pour voir si d'autres méthodes - améliorations seraient  plus pertinentes (ex. l'enfant renseigne des tours au lieu du nombre de pas) ;
- faire des tests avec différentes valeurs pour voir celles qui marchent le mieux avec ce modèle de moteur (ex. dans le bloc de config,  4096 ou 2048 en nombre de tours par révolution fonctionnent toutes deux, laquelle est la plus intéressante)
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: buchiprof le Janvier 02, 2019, 02:36:32 PM
Hello,

Super boulot !!! ça fonctionne ...presque : Le code arduino est généré lorsque les blocs "avancer" et/ou "régler la vitesse" sont connectés au dessus du bloc de configuration mais pas de code si ces deux blocs se retrouvent en-bas du bloc configuration...bizarre.

Dernière remarque, le lien d'aide pour les trois blocs renvient à la même page alors que, à mon avis, l'aide du bloc "avancer" devrait renvoyer vers https://www.arduino.cc/en/Reference/StepperStep  et l'aide du bloc "vitesse" devrait renvoyer vers https://www.arduino.cc/en/Reference/StepperSetSpeed

Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 08, 2019, 01:20:22 AM
Salut,

Merci pour ton retour, bien vu pour les liens.

Pour le bloc de config je me demande ce qu'il faudrait mieux mettre, que penses-tu qu'on ne puisse l'emboiter ni par en haut, ni par en bas ? Je ne sais pas trop, on dirait que pour les blocs de configs on retrouve un peu des deux dans blockly at arduino.
Titre: Re : Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: SebCanet le Janvier 08, 2019, 03:10:25 PM
Citation de: ucino le Janvier 02, 2019, 12:51:46 PM
- comme BuchiProf, faire qu'il soit possible d'utiliser 2 moteurs pas à pas en même temps (piste 1 : créer 2 blocs un avec par défaut moteurG, l'autre moteur D - piste 2 : utiliser un seul bloc que l'on peut mettre plusieurs fois, et changer sa variable sans que cela bug comme c'est le cas actuellement) ;

Le pb vient du champ des définitions et/ou du setup qui ne doivent pas être fixes (ex : 'stepper') mais différent quand on veut les ajouter (ex : 'stepper_' + num_pin).

Citation de: ucino le Janvier 02, 2019, 12:51:46 PM
- mettre les traductions dans fr.js ;

Mais aussi dans en.js et de.js.... ;)

Citation de: ucino le Janvier 02, 2019, 12:51:46 PM
- tester avec les enfants pour voir si d'autres méthodes - améliorations seraient  plus pertinentes (ex. l'enfant renseigne des tours au lieu du nombre de pas) ;
- faire des tests avec différentes valeurs pour voir celles qui marchent le mieux avec ce modèle de moteur (ex. dans le bloc de config,  4096 ou 2048 en nombre de tours par révolution fonctionnent toutes deux, laquelle est la plus intéressante)

Cool ! Des tests avec des enfants et remanier l'ergonomie, voilà ce qui manque ! Toute remarque ets la bienvenue.

Citation de: ucino le Janvier 08, 2019, 01:20:22 AM
Pour le bloc de config je me demande ce qu'il faudrait mieux mettre, que penses-tu qu'on ne puisse l'emboiter ni par en haut, ni par en bas ? Je ne sais pas trop, on dirait que pour les blocs de configs on retrouve un peu des deux dans blockly at arduino.

Pour les URL c'est réglé mais pour l'ergonomie c'est un vrai problème...sachant qu'on peut faire les deux en les mettant dans des toolbox de niveaux différents et pas seulement dans 'TOUT'.
Titre: Re : Re : Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 09, 2019, 01:27:27 AM
Citation de: SebCanet le Janvier 08, 2019, 03:10:25 PM
Le pb vient du champ des définitions et/ou du setup qui ne doivent pas être fixes (ex : 'stepper') mais différent quand on veut les ajouter (ex : 'stepper_' + num_pin).
Merci j'essaierai de l'appliquer.

Citation de: SebCanet le Janvier 08, 2019, 03:10:25 PM
Mais aussi dans en.js et de.js.... ;)
oula  ::)


Citation de: SebCanet le Janvier 08, 2019, 03:10:25 PM
Cool ! Des tests avec des enfants et remanier l'ergonomie, voilà ce qui manque ! Toute remarque ets la bienvenue.
ok impec.

Citation de: ucino le Janvier 08, 2019, 01:20:22 AM
Pour le bloc de config je me demande ce qu'il faudrait mieux mettre, que penses-tu qu'on ne puisse l'emboiter ni par en haut, ni par en bas ? Je ne sais pas trop, on dirait que pour les blocs de configs on retrouve un peu des deux dans blockly at arduino.

Citation de: SebCanet le Janvier 08, 2019, 03:10:25 PM
Pour les URL c'est réglé mais pour l'ergonomie c'est un vrai problème...sachant qu'on peut faire les deux en les mettant dans des toolbox de niveaux différents et pas seulement dans 'TOUT'.
Merci pour ton retour. Du coup, quand toi tu prépares des blocs de configs tu privilégies quand l'un ou l'autre ? Pas d'emboitement par en haut et par en bas pour les niveaux débutant ? [edit : je pense avoir compris un peu mieux les enjeux : mieux vaut pouvoir les emboîter, comme ça on peut avoir une série de bloc emboîtés de déclarations > je conserve donc l'emboitement du haut et du bas]

Je mets à jour ma todo list :)

1 [presque ok - workaround] - comprendre comment répercuter les modifs du dépôt de Seb sur mon fork github [edit :  après avoir tenté https://www.christopheducamp.com/2013/12/16/forker-un-repo-github/ et https://help.github.com/articles/syncing-a-fork/ puis https://gist.github.com/vladimirtsyupko/10964772 je n'y suis pas arrivé. J'ai du coup fait le barbare : supprimé mon fork et en ait recréé un nouveau]
2 - [presque ok] faire qu'il soit possible d'utiliser 2 moteurs pas à pas en même temps en jouant sur  le champ des définitions et/ou du setup qui ne doivent pas être fixes (ex : 'stepper') mais différent quand on veut les ajouter (ex : 'stepper_' + num_pin).; [edit cf. https://github.com/openelearning/Blockly-at-rduino/commit/22f7f01eaa38677a8a3f52bb780cbcdbbb862448 : on peut maintenant ajouter 2 config du moteur pas à pas, mais si on les emboîte le dernier disparaît du code arduino. Le code attach servo de la catégorie servo ne présente pas ce problème, mais en regardant son code je ne suis pas arrivé à avoir le même comportement : faire que l'on puisse emboîter les blocs sans que cela fasse disparaître du code arduino une des 2 déclarations]
3 - faire des tests avec différentes valeurs pour voir celles qui marchent le mieux avec ce modèle de moteur (ex. dans le bloc de config,  4096 ou 2048 en nombre de tours par révolution fonctionnent toutes deux, laquelle est la plus intéressante) ;
4 - ajouter un bloc où l'enfant renseigne un numéro de tour ;
5- tester avec les enfants pour voir si d'autres méthodes - améliorations seraient  plus pertinentes ;
6 - mettre les traductions dans fr.js ;
7 - mettre les traductions dans en.js.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: Bzhtitude le Janvier 24, 2019, 12:35:59 AM
Salut,

Voici une proposition pour des blocs concernant les moteurs PAP :
On peut mettre plusieurs moteurs en spécifiant les broches utilisées.
Je n'ai fait le bloc de configuration que pour une connexion 4 fils, mais on peut "facilement" créer un deuxième bloc à partir de celui ci pour une connexion 2 fils.

Pour l'accrochage, je ne me pose jamais la question. A mon avis si le bloc ne renvoie rien, on doit pouvoir l'attacher en haut et en bas.

Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 26, 2019, 03:06:42 PM
Super, bien joué, merci !

1) Est-ce qu'il serait possible d'accéder au code ?

2) Est-ce que tu pourrais me dire comment tu as procédé : Tu as utilisé le tuto http://www.libreduc.cc/wiki/doku.php/fr/arduino/blockly_rduino/creerblocsmultiling , ou tu es parti d'un bloc existant .js (si oui lequel), ou tu as utilisé l'usine à code (icône bleu d'usine en bas à gauche de https://technologiescollege.github.io/Blockly-at-rduino/ ou une autre méthode ?

Merci
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: Bzhtitude le Janvier 26, 2019, 08:19:40 PM
Le code est dispo dans le PDF page 2.

Pour la fabrication, je procède souvent de la façon suivante :
1. Écrire le code en Arduino "pur"
2. Valider, simuler, tester
3. Repérer les "variables" , ce que doit renseigner l'utilisateur.
4. Ecrire; le bloc, le texte, le toolbox, et le generator,
5. Tester , affiner
6. Go

Je pars souvent d'un bloc existant (n'importe lequel du moment que les entrées nécessaires ressemblent à ce que je souhaite), qui sert de squelette, le reste vient avec l'habitude. L'usine à code est intéressant, mais je ne m'en sers plus.


Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 28, 2019, 11:58:59 PM
Merci beaucoup pour le code, je vais le regarder attentivement, et ton explication vis à vis de la démarche.

Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 29, 2019, 12:33:04 AM
Ahaaaa en regardant bien ton code, j'ai vu qu'il manquait au mien dans le generator lié au block de config:

return '';

Du coup avec ça ça a l'air de fonctionner...

Ton code va aussi beaucoup m'aider pour mettre en œuvre la traduction.

Milles merci pour ta précieuse aide !
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: SebCanet le Janvier 29, 2019, 09:35:21 AM
Du coup il y a une nouvelle version des blocs pour moteur pas à pas à intégrer ?
Et pour l'ergonomie vous voyez ça comment ?
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 29, 2019, 11:33:00 PM
Je vais essayer de t'envoyer ce soir la correction, en mettant à jour le tuto sur github.
J'essaie ensuite d'ajouter un bloc plus facile pour les plus petits (nombre de tours de roue au lieu de nombre de pas) et enfin les enfants vont pouvoir tester.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 29, 2019, 11:48:02 PM
Pull request faite, et pour le tuto github j'avais en fait déjà intégré les nouveautés pour pouvoir faire la pull request.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 30, 2019, 12:49:15 AM
Je suis en train d'essayer de faire le bloc pour permettre à l'enfant de dire qu'il veut avancer le moteur pas à pas en tours (ex. 2 tours) au lieu de pas (ex. 2048x2) qui est plutôt difficile pour des maternels...

Mais ce n'est peut-être pas possible. Est-ce que quelqu'un sait s'il est possible d'aller chercher la valeur définit dans un autre bloc de config qui a le même nom de variable ? (cf. l'image pour comprendre plus facilement). Si c'est possible et si quelqu'un connait un bloc dans blocky@arduino qui fait ça je suis preneur...

En fait on dirait qu'il faudrait faire la même chose qu'avec le nom du moteur, mais que cela soit considéré comme un nombre et non des caractères (si je renomme le moteur en 123 blockly m'ajoute un my_123). J'essaie de creuser dans la doc... https://developers.google.com/blockly/guides/create-custom-blocks/variables
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: Bzhtitude le Janvier 30, 2019, 10:10:11 AM
Réponse rapide sans test :

Dans le bloc de configuration du moteur, on doit pouvoir créer une variable "int nbpasmoteur_X = 2048" et ensuite dans y faire appel dans le bloc permettant de saisir le nombre de tour.
2048 pas par tour pour un PAP... c'est avec un réducteur non ?

Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Janvier 31, 2019, 12:16:59 AM
Bien vu... merci beaucoup ! Je viens de l'intégrer en local, demain j'essaie de tester sur le moteur.

Pour 2048 pas par tour pour un PAP, je dois refaire des tests. Il m'a semblé que ce moteur 28BYJ-48 pouvait étrangement fonctionner avec 2048 ou 4096, et il fallait réajuster la vitesse (l'un pouvait monter jusqu'à 8 ou 10 l'autre bien plus haut pour set speed). Je ne me souviens plus de ce qu'il en était des tours : faisait-il en 1 tour ou un demi tour ?

S'il a un réducteur, je ne sais pas trop, il est comme ça : https://browse.startpage.com/do/show_picture.pl?l=francais&rais=1&oiu=https%3A%2F%2Fimg.fasttechcdn.com%2F398%2F3982900%2F3982900-1.jpg&sp=141187c82972ff223c120a5e88d0fff5&t=default à priori non ?

J'avais regardé pas mal de vidéos, tutos et articles sur le 28BYJ-48, il y avait pas mal de recommandations différentes pour le nombre de pas par tour. Maintenant que les blocs fonctionnent bien, je vais un mieux tester  ça. Je vous tiens au courant.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: Bzhtitude le Janvier 31, 2019, 01:14:54 AM
bah vu que  l'arbre de sortie n'est pas dans l'axe du moteur... aucun doute, il y a un réducteur.

une petite recherche me donne

Caractéristique du moteur:
Diamètre: 28 mm
Tension: 5V
Angle de pas: 5.625°  c'est donc un 64 pas de base
Rapport de réduction: 1/64  donc des pas de 5.625/64 = 0.08789°... et il en faut 4096 pour faire un tour.

Tu as quoi comme driver pour le commander ? ça ressemble sur la photo à un  ULN2003, il y a de quoi "s'amuser" beaucoup plus avec des modes "1/2 pas" "double bobines" voir même du microstepping... ceci dit avec un réducteur , l'intérêt est assez limité. 

L'arbre de sortie ne tournera jamais bien vite par contre il aura une grande précision et un bon couple.

Bon courage pour tes améliorations
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Février 01, 2019, 12:09:34 AM
Bien vu pour le réducteur.

Précisément c'est ce moteur, j'ai retrouvé le lien, les données que tu as indiquées correspondent : https://fr.aliexpress.com/item/5V-Stepper-Motor-28BYJ-48-With-Drive-Test-Module-Board-ULN2003-5-Line-4-Phase/32608569300.html

En fait 4096 fait 2 tours sur mon moteur, bizarre, du coup par défaut je lui mets donc 2048.

Pour le driver en effet c'est un ULN2003.

Citationil y a de quoi "s'amuser" beaucoup plus avec des modes "1/2 pas" "double bobines" voir même du microstepping

Ah tu titilles ma curiosité, c'est à dire ? Pour s'amuser je suis preneur :)

Ma fille a pu tester les blocs, elle s'en est bien sortie, ça a pu l'entraîner à la lecture et l'écriture des chiffres. Du coup ça l'air de tenir la route les blocs dans la config actuelle, je vais le pousser dans sa nouvelle config. Avec plus de tests, je pense que d'autres idées d'améliorations viendront.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: Bzhtitude le Février 01, 2019, 01:01:52 AM
Pour s'amuser... on passe à un tout autre calibre,  la librairie "classique" stepper.h ne suffit pas, il faut se coder ces propres fonctions.

Voici un article qui m'a bien inspiré lorsque j'ai commencé à jouer avec ça. il y a un code fournit en fin d'article pour se donner une idée.
http://www.jangeox.be/2013/12/microstepping-with-arduino.html

Pour que ce soit "agréable" à utiliser avec Blockly, il faudrait mettre tous ça en fonction, faire une bibliothèque puis créer des blocs...  très formateur mais très chronophage.

J'ai vérifié mes calculs pour les 4096 pas... j'avoue ne pas comprendre pourquoi 2048 suffisent ?!?


Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: SebCanet le Février 01, 2019, 02:34:01 AM
C'est intégré ! Merci.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: ucino le Février 02, 2019, 11:59:10 PM
Ah ok Bzhtitude merci pour ces infos.

Oui, je ne comprends pas non plus pourquoi 2048 suffisent... peut-être qu'en vrai le modèle que j'ai sous la main n'est pas un 1/64 mais 1/32 ? Si jamais je perce le mystère je reviendrai en faire part dans ce fil de discussion.

Ok merci Seb pour l'avoir intégré :)
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: jbe le Avril 07, 2019, 09:06:45 AM
Bonjour.
Y a t il les opérateurs de décalage de bit dans Blockly@rduino ?
En tout cas je ne l'ai pas trouvé.

Il faudrait quelque chose du genre :
lire une variable ( variable := variable << 1 de la broche X)
écrire une trame sur une broche : broche X = variable << 1  ou quelque chose d'approchant.

En fait je veut faire fonctionner le circuit TLC1543, qui est un multiplexeur.
Il fait envoyer une trame (adresse de la voie, puis on lit la trame reçue par la voie sélectionnée)
Ce circuit permet de mesurer l'état des capteurs de ligne sur le robot WaveShare Alphabot AR.

Cordialement.
Titre: Re : Blocs pour utiliser un moteur pas à pas 28BYJ-48 avec un driver UNL2003A
Posté par: SebCanet le Avril 17, 2019, 11:05:21 AM
Hélas rien de tel pour l'instant.
Merci d'essayer de les créer !  ;D