Bouton poussoir séquentiel

MGU

Senior Member
A la ms près....
Code:
;12coups MM 09/01/20
;comptage du nombre de coups
;tension moteur = 5 x vit/255

#picaxe 20M2
#no_data
symbol LDR=C.7
symbol cpt=b1
symbol vit=b2       ;vitesse moteur
symbol lum=b3            ;seil lumière
symbol cpt2=w12
symbol tmax=w13      ;temps moteursymbol cpt2=w12
symbol nuit= 21    ;seuil lumière du jour à ajuster
symbol pous=pinC.6        ;contact
pullup %100000000000000    ;pullup sur C.6

    do loop while pous=0    ;préparation C.6 pour simu
    do   
          do
            readadc LDR,lum
        loop while lum < nuit    ;tension haute le jour; on tourne la nuit
        cpt=0
        time=0
        do
            if pous=0 then
                do loop while pous=0
                pause 100
                inc cpt
                time=0
            endif 
        loop while cpt<1 or time <3
        dec cpt
        lookup cpt,(25200,27350,26720,124,125,126,127,128,129,130,131,132),tmax  ;à modifier tmax de 0 à 65535, en ms
        lookup cpt,(121,122,123,124,125,126,127,128,129,130,131,132),vit
        pwmout C.5, 63, vit    ;vitesse moteur; tension =5 x vit / 255
        high cpt     ;alim moteur
        for cpt2=0 to tmax ;temps de fonctionnement moteur
            pause 1     ; précision 1 ms ?
        next
        pwmout C.5,off
        low cpt
    loop
MM
 

MGU

Senior Member
Et si on supprime les switchs ? Juste deux fils acier qui se touchent ? C'est pas possible ?

MM
 

zeltron

Senior Member
Magnifique, la c'est top! bravo chef! y'a peut être une petite dérive mais c'est franchement bon et insignifiant!
ça me convient parfaitement! y'a une très bonne précision au tour, en deux ou 3 tours successifs c'est la même anche qui est légérement soulevé à l'arrêt donc c'est bon ! juste une ligne genre
if pous=0 then
pwmout C.5,off
dans la ligne
for cpt2=0 to tmax ;temps de fonctionnement moteur
Mais à chaque fois avec moi comme d'hab ça marche pas...
Pour refaire une RAZ manuel si besoin....
Y'a pas qu'une question de son, je trouve que l'électronique si performante soit elle manque d'ame et de charme.. et de souvenir....
J'ai testé le moteur sur alim 4v y'a pas plus de bruit que le pwm...j'ai pas testé le polystyrène
Le principe d'uneisolation phonique c'est une multicouche altérné d'un materiaux dense et un autre élastique mais la c'est difficile de mettre en oeuvre...
 
Last edited:

MGU

Senior Member
Pour le son, je comprends.

Mais pour la RAZ manuelle, je comprends rien.

Je te propose un truc simple qui pallierait à tout problème de décalage.
Petite explication.
Imagine une petite tige reliée au tambour qui tourne avec lui évidemment. A coté, une petit bout de ressort mince, un peu arqué que la tige vient juste toucher à chaque tour.
Le réglage initiale positionne la tige juste près la touchette.
On lance le tambour, après un tour, la tige vient toucher le ressort, on détecte le contact par l'entrée C.4 et lorsque la tige quitte le ressort, on arrête le moteur.
On est revenu à la position initiale pour un nouveau tour. On peut programmer plusieurs tours, si on veut.
Il n'y a plus de temps à ajuster, c'est "automatique".

Pour y réfléchir, voici le schéma et le programme:

23481

Code:
#picaxe 20M2
#no_data
symbol LDR=C.7
symbol cpt=b1            ;copteur bytes
symbol vit=b2         ;vitesse moteur
symbol lum=b3            ;seil lumière
symbol nuit= 21       ;seuil lumière du jour à ajuster
symbol pous=pinC.6     ;contact
symbol stp=pinC.4        ;switch stop
pullup %101000000000000    ;pullup sur C.6 et C.4

    do loop while pous=0    ;préparation C.6 pour simu
    do  
          do
            readadc LDR,lum
        loop while lum < nuit    ;tension haute le jour; on tourne la nuit
        cpt=0
        time=0
        do
            if pous=0 then
                do loop while pous=0
                pause 100
                inc cpt
                time=0
            endif
        loop while cpt<1 or time <3
        dec cpt    
        lookup cpt,(121,122,123,124,125,126,127,128,129,130,131,132),vit
        pwmout C.5, 63, vit    ;vitesse moteur; tension =5 x vit / 255
        high cpt     ;alim moteur      
           do loop while stp=1    ;on tourne jusqu'au contact stp
          pause 100
           do loop while stp=0    ;il y a eu contact, attente réouverture contact
           pause 100                    ;léger dépassement pour assurer l'ouverture
           low cpt        ;arret moteur
        pwmout C.5,off    ;arret PWM      
    loop
 

zeltron

Senior Member
Pour la RAS manuelle c'est simple si je détecte un trop gros décalage c'est à dire qu'après plusieurs tours le morceau de musique ne commence pas au début, il suffit d'appuyer un nombre de fois sur le bouton poussoir égale à la boite à musique concernée puis à un moment, quand le début du cylindre est joué, il suffit d'appuyer sur le bouton poussoir pour arrêter le moteur. Donc le cylindre est resynchronisé au début car il est impossible de désolidariser l'axe du moteur, de la boite à musique dans mon montage. donc elle ne tourne plus manuellement...
Pour l'instant je coupe l'alimentation du montage pour faire ça, mais c'est brutale....
Pour la tige laisse tomber je pense que c'est assez difficile à bricoler pour être fiable et ce n'est pas nécessaire c'est déjà très bien comme ça.
Je suis trés satisfait du montage.
Merci bien pour ton dévouement!
 

MGU

Senior Member
Pour la tige laisse tomber je pense que c'est assez difficile à bricoler pour être fiable et ce n'est pas nécessaire c'est déjà très bien comme ça.
Je suis trés satisfait du montage.
Merci bien pour ton dévouement!
Nan, c'est pas compliqué. Dommage, suffit de faire se toucher deux fils... Parce que resynchroniser les musiques, ça deviendra vite fatigant.
M'enfin, c'est comme tu veux. Donc un poussoir pour arrêter ?
Dans la boucle for next, j'ajouterais :
if pinC.4=0 then
cpt2=tmax
endif
ET on devrait sortie de la boucle et arrêter le moteur
Faut garder le pullup du dernier programme (pullup sur C.4) et le poussoir entre C.4 et 0V
MM
 

zeltron

Senior Member
Nan c'est pas fatigant car la dérive est minime, puis c'est pas obligatoire de commencer au début....
Non ça marche pas cet ajout dans la boucle ça modifie le temps de fonctionnement moteur
Je remplace C.4 par C.6 mais ça doit pas être différent (pour utiliser un seul poussoir)
A chaque fois que je test différentes if instructions dans cette boucle
soit le temps de fonctionnement du moteur n'est pas respecté ou C6 ne donne pas l'ordre d'arrêt
ou alors C6 arrête le moteur mais il redémarre après l'arrêt... et si je place une pause le temps d'arrêt n'est pas immediat et le temps de fonctionnement du moteur n'est pas respecté...grrrrrr
Pour le pullup pas la peine y'en a une physiquement
 

MGU

Senior Member
Bonjour,
Tout cela me semble normal. Avec un boucle rapide, tout test augmente le temps de boucle.
Remplacer pause 1 par pause 10 minimisera l'impact.

Autre essai possible avec une interruption sur C.4 (pas d'interruption sur C.6)
Code:
;12coups MM 14/01/20
;comptage du nombre de coups
;tension moteur = 5 x vit/255

#picaxe 20M2
#no_data
symbol LDR=C.7
symbol cpt=b1
symbol vit=b2       ;vitesse moteur
symbol lum=b3            ;seil lumière
symbol cpt2=w12
symbol tmax=w13      ;temps moteursymbol cpt2=w12
symbol nuit= 21    ;seuil lumière du jour à ajuster
symbol pous=pinC.6        ;contact
pullup %1000000000000    ;pullup sur C.4      
   
    do loop while pous=0   ;préparation C.6 pour simu
    setint %0,%10000    ;interruption sur C.4 niveau bas
    do  
          do
            readadc LDR,lum
        loop while lum < nuit    ;tension haute le jour; on tourne la nuit
        cpt=0
        time=0
        do
            if pous=0 then
                do loop while pous=0
                pause 100
                inc cpt
                time=0
            endif
        loop while cpt<1 or time <3
        dec cpt
        lookup cpt,(25200,27350,26720,124,125,126,127,128,129,130,131,132),tmax  ;à modifier tmax de 0 à 65535, en ms
        lookup cpt,(121,122,123,124,125,126,127,128,129,130,131,132),vit
        pwmout C.5, 63, vit    ;vitesse moteur; tension =5 x vit / 255
        high cpt     ;alim moteur
        for cpt2=0 to tmax ;temps de fonctionnement moteur
            pause 1     ; précision 1 ms ?
        next
        low cpt
        pwmout C.5,off
        loop
   
    interrupt:
        low cpt
        pwmout C.5,off
        do loop while pinC.4=0
        reset
MM
 

zeltron

Senior Member
Magnifyyyyyque!(y)(version interrupt) Nickel chrome! Merci bien! ce qui fait que le picaxe 20m2 est plein comme un oeuf en version hard!
Super!
 

MGU

Senior Member
Bon, si ça convient, tant mieux.
Une remarque sur cette interruption: Une interruption est un sous programme qui se termine logiquement par un return, normalement, l’absence de return conduit à un plantage par dépassement de pile (en gros, plus de gosub que de return). Mais comme l'interruption se termine par un reset général, le problème est masqué, comme l'absence de réarmement de l'interruption.
Pense quand même à la synchro automatique, il y a 12 rouleaux....

MM
 

zeltron

Senior Member
Un petit retour de ce montage
Après être passé de la maquette au projet définitif j'avais quelques bugs dans le comptage et puis ce montage est sur la même alimentation secteur qu'un volet électrique qui déclenche les musiques...
j'ai commencé par mettre un filtre secteur LC pour ce bug mais sans efficacité....Ensuite j'ai mis un micro switch sur le marteau mais la encore pas de résultats...toujours des bugs dans le comptage....j'ai placé une led branchée en paralléle sur le switch marteau pour visualiser les frappes (elles sont ok)
Ensuite j'ai câblé un vrai antirebond fait avec 2 portes nand et circuit RC pas beaucoup plus de résultats....

Et j'ai testé le soft sans le mode interrupt, surprise!!!! plus de bugs de comptage ni de bug avec le volet électrique....
Encore un truc bizarre....:):) comme d'hab...
 
Last edited:

MGU

Senior Member
Bonjour,

Oui, faut voir le montage. Essayer une R de pullup extérieure de 1k, voire 470 ohms pour voir

MM
 

zeltron

Senior Member
Bonjour MGU tu es un cador! j'étais tellement polarisé sur le comptage que j'ai oublié de mettre une pull up sur cette interrupt...:rolleyes::rolleyes::rolleyes::rolleyes::cool:(n)
Pour l'instant j'ai placé une 10k on va voir mais c'est certainement good!(y)😀
 

MGU

Senior Member
Bonjour,

Le programme active la résistance pullup interne sur C.4. Mais elle n'est peut être pas suffisante pour empêcher les perturbations extérieures si l'entrée fait antenne avec un câblage long. C'est une explication d'un déclenchement intempestif de l'interruption. Vérifier aussi l'entrée de programmation serial in 0V.

MM
 
Top