Dessine moi l'heure!

zeltron

Senior Member
Bonjour à tous les moustachus du picaxe!
Je suis bluffé par un petit montage ingenieux trouvé sur le net
Pensez vous qu'il soit possible de réaliser ce "plotclock" avec un picaxe?
et avez vous une idée sur le genre de code qui pourrait être utilisé pour commander ces 3 servomoteurs (pour moi c'est presque de la magie ce truc!)
est-il à la portée d'un presque débutant comme moi?
 

PieM

Senior Member
Bonjour,
C'est une horloge pour le petit train ? ;-)
A mon avis trop de calculs hors d'atteinte du Picaxe. C'est réalisé avec de l'Arduino et des calculs trigo du type imprimantes 3D Delta.
 

zeltron

Senior Member
Ok merci bien! souvent les choses qui paraissent les plus simples sont bien compliquées!
Non c'est pas pour le petit train , mais c'était par curiosité!
Pour le petit train j'ai conservé que la partie gestion du pont tournant, pour le reste j'ai préféré retourner à une gestion à base de switchs plus conviviale à mon gout...

Le pont tournant fonctionne parfaitement et souvent je pense à votre aide pour son développement!
Juste deux fois ou j'ai perdu des pas mais pour cause de courroie détendue et une autre fois pour un roulement hs
Encore un grand Merci!
 

Buzby

Senior Member
J'imagine qu'un PICAXE pourrait être utilisé pour construire un plotclock sans avoir besoin de trigonomètres ni de calculs compliqués.

Si une mémoire EEPROM a été utilisée pour stocker le X / Y de chaque point d'un chiffre à chaque position de chiffre, l'impression consiste simplement à rechercher les valeurs pertinentes et à piloter les servos.

J'ai un mécanisme plotclock sans contrôleur.

Un jour, je pourrais essayer mon idée!
 

PieM

Senior Member
Si une mémoire EEPROM a été utilisée pour stocker le X / Y de chaque point d'un chiffre à chaque position de chiffre, l'impression consiste simplement à rechercher les valeurs pertinentes et à piloter les servos.
Ce n'est pas faux ! Excellente idée.
Si on suppose une dizaine de points en moyenne par chiffre, 10 chiffres sur 4 positions ça fait environ 400 couples X/Y
On pourrait faire comme en robotique avec apprentissage: ici, remplacer les servos par deux potentiomètres et enregistrer automatiquement les positions successives mises à l'échelle des valeurs pour les servos. Peut être amusant à faire ...
Le problème sera peut être d'assurer le synchronisme entre les 2 servos.
 
Last edited:

zeltron

Senior Member
Ah je vous sent chaud la!!!!
Moi je voyais ça à ma sauce....
Avant je travaillais dans les asservissement de position mais à cette époque c'était completement analogique!
Les servos étaient aussi analogique du style ça...il serait peut être possible d'avoir une recopie du geste pour chaque chiffres préenregistrés et de gerer des tensions mémorisée avec les convertisseurs du picaxe sans besoin de calcul?
Capture.JPG
 

PieM

Senior Member
Oui tout à fait. Comme je le proposais, remplacer dans un premier temps, les servos par deux potentiomètres. En apprentissage, donc a la main, faire décrire les 40 chiffres, (10 sur 4 positions) et enregistrer les valeurs, les mettre à l'échelle sur un tableur par exemple, et les injecter dans une table sur le picaxe. Il n'y a besoin d'aucun calcul dans ce cas. Chaque position correspond a un couple de bytes envoyés aux deux servos.
On pourrait simplifier en mettant un autre servo qui assurerait la translation pour les positions des digits. Ainsi, seuls 10 chiffres seraient à mémoriser.
Les servos étaient aussi analogique du style ça
Les servos ana continuent à fonctionner comme ça.
 

jojojo

Senior Member
Vous savez, le truc qui le ferait bien, pour l'apprentissage ?

Un manche de télécommande (deux potar, X Y), un poussoir start, un poussoir stop.
 

PieM

Senior Member
Vous savez, le truc qui le ferait bien, pour l'apprentissage ?
Un manche de télécommande (deux potar, X Y), un poussoir start, un poussoir stop.
Ben non, la cinématique n'est pas la même ! si tu te déplaces selon les Y (ou les X) les deux valeurs doivent changer puisque qu'on est sur un système compas....
Il faut que les deux potars soient exactement à la place qu'occuperont les servos, avec le même système de biellettes.
 

jojojo

Senior Member
Ben, je ne pense pas.
Un "manche" de commande, en RC, commande en X ET en Y (Puisque le corps du second potar est solidaire de l'axe du premier, les deux valeurs changent).

Donc, après appuis sur "start", je dessine un patatoide, avec le manche de commande, avant d'appuyer sur stop.

Sur la période (entre start et stop, à intervalles constants), je mémorise chaque valeur ADC x, ADC y.

Les restituer, ensuite, en commande servo ne me semble pas insurmontable.

La difficulté, me semble plus résider dans la gestion du timing. Trop long, on va dépasser les capacité de stockage (variable µP _ne rêvons pas_ ou EProm).
Trop rapide, on ne va pas avoir le temps de dessiner le patatoide.

Mais, je suis sûr que c'est faisable...

Edit:

Toujours en cogitant, je me dis aussi, que l'on pourrait passer en mode delta. On n'enregistre pas, tant que x ou y ne changent pas...
Gain de place en mémoire, et possibilité de s'arrêter, en cours de dessin, sans appuyer sur stop...
 
Last edited:

PieM

Senior Member
Non désolé! si avec ton manche tu fais un I un seul potar sera actionné, alors que la cinématique du système nécessite que les 2 changent. Et pas symétriquement selon l'emplacement.
 

zeltron

Senior Member
Il me vient des idées d'application, j'en ferai bien un compteur de points!
Depuis une vingtaine d'années je joue aux cartes MTG avec mes enfants...
Donc j'espere pouvoir devisser les servos pour prendre les tensions sur les curseurs des poties.
et remplacer l'arduino par un bon picaxe!
Monter l'ensemble sur une mécanique d'une vielle imprimante pour la translation des digits comme tu le proposes Piem! Donc que 10 chiffres.
Mais un comptage possibles max 999 points joueur 1 et 999 joueur 2
avec un bras positionné en haut des chiffres pas en bas.
 

PieM

Senior Member
Donc j'espere pouvoir devisser les servos pour prendre les tensions sur les curseurs des poties.
Ben tu as plus simple en prélevant les longueurs d'impulsion envoyées aux servos (avec des pulsin) et en les stockant en eeprom.
Sinon le programme Arduino est , mais il y a des calculs trigo !
 

zeltron

Senior Member
Ah super merci beaucoup pour le lien! du coup il faudrait me mettre à l'arduino en modifiant le programme de base sans toucher à
la trigo je vais voir ça....
 

MGU

Senior Member
Bonjour,
Je suppose que la trigo sert à faire des chiffres ronds, mais des chiffres carrés, genre 7 segments doivent simplifier le programme.
C'est différent, bien sûr
MM
 

PieM

Senior Member
Bonjour,
Je suppose que la trigo sert à faire des chiffres ronds, mais des chiffres carrés, genre 7 segments doivent simplifier le programme.
C'est différent, bien sûr
MM
Non Michel, vu la cinématique, il faut que les 2 servos soient actionnés ensemble pour faire un trait droit. Ce serait vrai si les servos commandaient les mouvement en X et Y comme sur une table traçante.
@ Buzby : intéressants ces servos 360° avec feedback en PWM ! Un peu chers, oui.
 

jojojo

Senior Member
Non Michel, vu la cinématique, il faut que les 2 servos soient actionnés ensemble pour faire un trait droit.

Pas pour insister, mais, je pense que non. Mécaniquement parlant, cela passe par une simple biellette à fenêtre, commandée par le servo.
On transforme un mouvement rotatif, en mouvement linéaire.
ET on peut faire un trait droit, en X comme en Y.
 

PieM

Senior Member
Il ne s'agit pas d'une biellette à fenêtre mais d'un système compas comme sur une imprimante 3D Delta.

ET on peut faire un trait droit, en X comme en Y.
Il suffit de regarder la vidéo et les mouvements lors de l'effacement ! Un trait droit est obtenu par le mouvement des 2 servos.
 

MGU

Senior Member
Il ne s'agit pas d'une biellette à fenêtre mais d'un système compas comme sur une imprimante 3D Delta.



Il suffit de regarder la vidéo et les mouvements lors de l'effacement ! Un trait droit est obtenu par le mouvement des 2 servos.
Oui, c'est vrai. Faudrait voir ce que peut donner le dessin a partir de fonctions linéaires (je n'en ai aucune idée). On aurait certainement pas la même police de caractères ;)

MM
 

zeltron

Senior Member
Ben tu as plus simple en prélevant les longueurs d'impulsion envoyées aux servos (avec des pulsin) et en les stockant en eeprom.
Avec mon petit niveau il faudra m'expliquer comment faire ça...
Faudrait voir ce que peut donner le dessin a partir de fonctions linéaires
Quand j'aurai reçu le gadget, pas de problème pour faire tous vos essais par curiosités!
En gros vous êtes les têtes et moi les jambes!:)
 

Buzby

Senior Member
Bonjour,

I have not written any code yet, but last night I found an explanation of the maths ...

PlotClock_maths_123a.png

This maths is complex to perform on a PICAXE, but it could be done using Excel.

I suggest creating a speadsheet to generate the servo values for each X,Y point.

Then you will be able to create data lists for each digit.

It's still a lot of work, but it would be a first. I don't think anyone has yet built a PlotClock using a PICAXE !.

Cheers,

Buzby

-------------------------------------

Google says ......


Bonjour,


Je n'ai pas encore écrit de code, mais hier soir, j'ai trouvé une explication du calcul ...

Ce calcul est complexe à effectuer sur un PICAXE, mais vous pouvez le faire avec Excel.

Je suggère de créer une feuille de calcul pour générer les valeurs d'asservissement pour chaque point X, Y.

Vous pourrez ensuite créer des listes de données pour chaque chiffre.

C'est encore beaucoup de travail, mais ce serait une première. Je pense que personne n’a encore construit de PlotClock avec un PICAXE!.

À votre santé,

Buzby
 

BESQUEUT

Senior Member
Bonjour,
Je suppose que la trigo sert à faire des chiffres ronds, mais des chiffres carrés, genre 7 segments doivent simplifier le programme.
C'est différent, bien sûr
MM
Ben non : chiffres ronds ou carrés, le problème reste le même.
La trigo sert à convertir les coordonnées X,Y en coordonnées polaires, seules utilisables pour les servos.
Si vous voulez faire simple, il faut des servos linéaires...
Mais maintenant qu'on a le programme, il suffit de le mettre dans une macro Excel qui donnera directement la table à intégrer dans le Picaxe.

Cela dit, avec seulement 10 points par chiffre, pas sur que le résultat soit satisfaisant.
En effet, pour aller du point A au point B en ligne droite, ou sur une courbe régulière, les servos ont des variations d'angle absolument pas linéaires, et l'un peut changer de sens en cours de route...
Cas simple (A et B sont les deux servos) :
- A doit faire 60°
- B doit faire 30°
Et évidement les deux doivent partir et arriver en même temps...
L'arduino calcule des tas de points intermédiaires... Impossible à tabuler...
 
Last edited:

claudius01

New member
Bonjour à tous,

Tout nouveau sur ce forum, je me permets de vous faire partager 2 simulations interactives de la cinématique grâce à l'excellente calculatrice graphique en ligne Desmos

1 - Cf. 1st simulation avec les angles des servos = fonction(position de traçage) en déplaçant le pivot présenté en orange dans la zone de traçage théorique
2 - Cf. 2nd simulation avec la position de traçage = fonction(angles des servos) en déplaçant les points rouge et vert permettant de faire varier les 2 angles entre 0° et 180°

Comme identifié par BESQUEUT, les mouvements ne sont pas simples à déterminer mais ne sont pas insurmontables ;-)
À suivre...

NB1: Le point de traçage supportant le crayon et qui doit être différent du pivot orange n'est pas actuellement pris en compte et fera l'objet d'une prochaine mise à jour...
NB2: Lorsque que le graphique est barré d'une grande croix rouge, cela veut dire que la solution n'est pas mécaniquement viable

Claudius
 

BESQUEUT

Senior Member
Bonjour à tous,

Tout nouveau sur ce forum, je me permets de vous faire partager 2 simulations interactives de la cinématique grâce à l'excellente calculatrice graphique en ligne Desmos

1 - Cf. 1st simulation avec les angles des servos = fonction(position de traçage) en déplaçant le pivot présenté en orange dans la zone de traçage théorique
2 - Cf. 2nd simulation avec la position de traçage = fonction(angles des servos) en déplaçant les points rouge et vert permettant de faire varier les 2 angles entre 0° et 180°

Comme identifié par BESQUEUT, les mouvements ne sont pas simples à déterminer mais ne sont pas insurmontables ;-)
À suivre...

NB1: Le point de traçage supportant le crayon et qui doit être différent du pivot orange n'est pas actuellement pris en compte et fera l'objet d'une prochaine mise à jour...
NB2: Lorsque que le graphique est barré d'une grande croix rouge, cela veut dire que la solution n'est pas mécaniquement viable

Claudius
Très intéressant !
Et ça permet de nuancer mon propos :
D'abord il faut préciser le challenge :
A) Sans contraintes précises : prendre un A... ou un T..., télécharger le programme ad-hoc et Basta
B) Le processeur doit être un Picaxe : ajouter une bonne grosse mémoire et tabuler tous les points de passage. Résultat garanti. Mieux mais c'est limite de la triche...
C) En dehors des servos, n'utiliser qu'un ou plusieurs Picaxes. Là ça devient marrant...

Je vois deux approches dans ce cas :
C1) On réfléchit beaucoup pour tasser un maximum de points dans la mémoire du Picaxe
C2) On réfléchit encore plus pour tasser non seulement les points de passage mais en plus la fonction d'interpolation entre deux points de passage.
Evidemment le résultat doit être le plus rapide possible.

Dans les deux cas, remarques préalable : le montage étant complètement symétrique, il suffit de décrire la partie gauche pour connaitre la partie droite par effet miroir. En code, ça signifie qu'on peut obtenir chaque valeur numérique (angle) de la partie droite par une simple soustraction à partir de son équivalent dans le partie gauche. Moitié moins de choses à mémoriser...

Dans le cas C1, 1024 octets signifie 256 couples de words mais on doit pouvoir faire mieux car il y a un gros gaspillage de bits. Pour chaque chiffre de 7 segments plus un déplacement, il y a 8 mouvements à décrire. Pour deux chiffres, ça nous fait 16 points par mouvement (les deux autres par effet miroir).

A tester, mais ça semble réaliste.
Si c'est trop mauvais, on doit pouvoir pousser jusqu'à environ 20 points par compression des données.

Au delà, on passe en C2.
Il faut décrire les deux courbes (une pour chaque servo)
En première approche, on peut se contenter d'une interpolation linéaire, mais on sait que le résultat sera médiocre.
Mais comme on travaille dans une boucle, on n'a pas besoin de calculer la fonction, mais uniquement sa dérivée.
Du coup, une équation du second degré se traite avec quelques additions, et compte tenu de ce qu'on observe avec le simulateur, on devrait pouvoir approcher la courbe idéale a peu de frais...

23046
 
Last edited:

claudius01

New member
Bonsoir à tous,

Les valeurs injectées dans la 3rd simulation fournissent, sauf erreur de ma part, approximativement bien le traçé de la verticale x = -5 située entièrement à l'intérieur de la zone de traçage théorique :)

Cf. 3rd simulation

NB: Le tableau de valeurs des angles en degrés des 2 servos est défini à la ligne 9 du programme de simulation et dont vous pouvez modifier le contenu pour voir l'impact. Qui se lance pour tracer l'horizontale y = 15 avec x compris entre -10 et +10 ?

Claudius
 
Last edited:

BESQUEUT

Senior Member
Bonsoir à tous,

Les valeurs injectées dans la 3rd simulation fournissent, sauf erreur de ma part, approximativement bien le traçé de la verticale x = -5 située entièrement à l'intérieur de la zone de traçage théorique :)

Cf. 3rd simulation

NB: Le tableau de valeurs des angles en degrés des 2 servos est défini à la ligne 9 du programme de simulation et dont vous pouvez modifier le contenu pour voir l'impact. Qui se lance pour tracer l'horizontale y = 15 avec x compris entre -10 et +10 ?

Claudius
Promis, dès que j'ai du temps (mais c'est mal barré...) je m'intéresse à ce logiciel plein de ressources manifestement...
Dans l'attente, il faudrait se faire une police de chiffres pour étudier les différents mouvements à digitaliser.
J'étais parti sur des chiffres "carrés" genre 7 segments. Çà permet de réutiliser pas mal de déplacements communs à plusieurs chiffres.
Ne pas oublier que chaque chiffre doit être dessiné 2 fois.
Mais dans les vidéo, les chiffres sont plutôt script, ce qui est logique car ils doivent pouvoir être dessinés d'un seul trait.
Du coup, il y A 20 tracés à codifier.
Avec un word pour codifier chaque déplacement (deux servos combinés + plume levée/baissée), ça nous fait en moyenne 25 déplacements par chiffre. Là encore ça semble jouable.
 

BESQUEUT

Senior Member
N'étant pas aussi fort que Claudius avec Desmos, j'ai persévéré avec Excel...
J'ai écrit en VBA le générateur de caractères. Pas encore très propre, mais ça donne une idée des séquences à codifier :
23053
23054

23055

La première série "H" correspond à la barre verticale pour vérifier que les angles sont corrects.
Pour le moment il y a donc 10 parcours d'une vingtaine de valeurs, mais à placer sur 4 positions différentes.
Ça fait beaucoup.
Comme déjà dit, les chiffres symétriques peuvent être obtenus par effet miroir sur deux positions différentes.
En outre, en optimisant un peu chaque chiffre, différents segments de parcours sont communs...
Par exemple, en supposant le 8 complètement défini, on peut en extraire le 3 et des morceaux pour faire le 6 et le 9, voire le deux et le zéro...

Pour finir, au cas où ça intéresse, les courbes simultanées des deux servos pour chaque chiffre :
23056
 
Top