Bouton poussoir séquentiel

zeltron

Senior Member
Bonjour les picaxiens
J'ai un petit nouveau projet, mais j'arrive pas à trouver l'architecture du programme de deux boucles qui doivent s'imbriquer je pense...
C'est peut être plus compliqué que ça en a l'air...Ou pas.... moi ça me retourne la cervelle!
Voici le cahier des charges il est définitif!
Si je donne une impulsion sur un bouton poussoir, après antirebond, un bit est incrémenté, puis s'il se passe rien de plus au bout de 20 secondes, un petit n20, 6v 30rpm (motoréducteur n°1 ) est activé à travers un ULN2003 pendant 30 secondes.
Puis retour à la détection bouton poussoir.
Si j'avais appuyé 2 fois avec un écart d'une seconde entre chaque appuis sur ce même bouton poussoir au bout de 20 secondes c'est le moteur n20 numero 2 qui aurait été alimenté avec exactement les mêmes séquences...
Trois fois le moteur 3, etc... jusqu'à 12 fois maximum (donc 2 ULN 2003) et 12 moteurs qui ne sont jamais alimentés en même temps.
Si vous avez des idées?
Petit QUIZZ C'est quoi donc ce truc bizarre?
Un indice, le bouton poussoir n'en est pas un...
 

MGU

Senior Member
Bonjour,
Côté logique, ça doit pas être très compliqué. Prévoir un 20M2
Mais si on appuie une seconde fois au bout de 10s, on fait quoi?
MM
 
Last edited:

BESQUEUT

Senior Member
Bonjour les picaxiens
J'ai un petit nouveau projet, mais j'arrive pas à trouver l'architecture du programme de deux boucles qui doivent s'imbriquer je pense...
C'est peut être plus compliqué que ça en a l'air...Ou pas.... moi ça me retourne la cervelle!
Voici le cahier des charges il est définitif!
Si je donne une impulsion sur un bouton poussoir, après antirebond, un bit est incrémenté, puis s'il se passe rien de plus au bout de 20 secondes, un petit n20, 6v 30rpm (motoréducteur n°1 ) est activé à travers un ULN2003 pendant 30 secondes.
Puis retour à la détection bouton poussoir.
Si j'avais appuyé 2 fois avec un écart d'une seconde entre chaque appuis sur ce même bouton poussoir au bout de 20 secondes c'est le moteur n20 numero 2 qui aurait été alimenté avec exactement les mêmes séquences...
Trois fois le moteur 3, etc... jusqu'à 12 fois maximum (donc 2 ULN 2003) et 12 moteurs qui ne sont jamais alimentés en même temps.
Si vous avez des idées?
Petit QUIZZ C'est quoi donc ce truc bizarre?
Un indice, le bouton poussoir n'en est pas un...
Un bit ne peut pas être incrémenté : tout au plus basculé...

Pour moi c'est une "state machine" ou un programme collaboratif :
- il y a une seule boucle qui doit tourner le plus vite possible,
- on gère en permanence l'état du système, et ou surveille le bouton poussoir,
- en cas de changement sur le bouton poussoir, on passe à l'état suivant...

Pour les actions temporisées, la variable TIME est bien commode. Mais il y a d'autres façon de faire sir le Picaxe n'en dispose pas.

Exemples d'états et d'événements pour aider à comprendre le principe (à analyser plus en détails) :

ETATS :
1) En attente. Aucune action en cours.
2) Bouton enfoncé. En attente durée antirebond.
3) Moteur 1 armé. Attente temporisation 20s avant mise en route.
4) Moteur 1 en service.
5) Moteur 2 armé. Attente temporisation 20s avant mise en route.
6) Moteur 2 en service.


PS : en général, on a une liste des temporisations à respecter (liste des heures de début et des durée). Du coup on peut avoir un programme générique qui déclenche un changement d'état si une des tempos est dépassée.

Événements :
Bouton Enfoncé :
Si ETAT=1 on passe en ETAT=2 et on arme une temporisation "antirebond"
Autres cas de figure ???

Tempo Antirebond dépassé :
Si ETAT=2 et bouton relâché :
On arme la temporisation de 20s
On arme la temporisation de 1s
on passe en ETAT=3

Si ETAT=3 et bouton relâché :
On arme la temporisation de 20s
on passe en ETAT=5

Autres cas de figure ???

Tempo 1s dépassée :
Si ETAT=3 :
Si bouton enfoncé : on arme une temporisation Antirebond

Tempo 20s dépassée :
On arme la tempo de 30s
Si ETAT=3 :
- On pase en ETAT=4 et on démarre le moteur N°1

Si Etat=5 :
- On passe en ETAT=6 et on démarre le moteur N°2


Tempo 30s dépassée :
On passe en ETAT=1
Si ETAT=4 :
on arrête le moteur N°1
Si ETAT=6 :
On arrête le moteur N°2
 
Last edited:

MGU

Senior Member
Bonjour,

Proposition de code répondant au CDC avec un picaxe 20M2.
Les 12 relais sont sur les sorties B.0 (0) à C.3 (11)
On enregistre le nombre d'appuis, reset du temps toutes les 2s .
On actionne le relais correspondant au nombre d'appuis pendant 1s
A cause de time, la simulation ne fonctionne pas en l'état avec PE6, utiliser P5.5
Pour remettre la cervelle à l'endroit, il n'y a pas de commentaires

Code:
#picaxe 20M2
    symbol cpt=b1
    symbol pous=pinC.6
    do loop while pous=0

    do  
        cpt=0
        time=0
        do              
            if pous=0 then
                do loop while pous=0
                inc cpt
                time=0                  
            endif              
        loop while cpt<1 or time <3
        time=0
        dec cpt
        do            
            loop while time<10
        high cpt
        pause 1000
        low cpt
    loop
MM
 

zeltron

Senior Member
Merci bien pour vos réponses et rapide en plus!
Je vais étudier toutes vos propositions et remarques
Côté logique, ça doit pas être très compliqué. Prévoir un 20M2
Mais si on appuie une seconde fois au bout de 10s, on fait quoi?
Alors ça ne peut pas arriver car ce n'est pas un bouton poussoir...
j'ai dit ça simplement pour le petit quizz en faite c'est un système automatique qui se déclenche chaque seconde ou pas
Oui c'est une state machine
En faite ma maman est décédé y'a 1mois 1/2 et j'ai hérité de son horloge, mais elle était passionnée des boites à musiques
J'aimerais en sa mémoire tourner une boite à musique différentes pour chaque heure de l'horloge
le bouton poussoir est un marteau qui frappe sur le gong...
j'aimerais que le picaxe soit asservie à l'horloge plutôt qu'une horloge électronique en parallele....
 
Last edited:

zeltron

Senior Member
Je dispose de picaxe qui n'ont pas l'instruction time j'ai commandé une carte et des 20m2
je vais attendre leurs réceptions
Cette commande time est une bonne idée merci!
 

MGU

Senior Member
Je dispose de picaxe qui n'ont pas l'instruction time j'ai commandé une carte et des 20m2
je vais attendre leurs réceptions
Cette commande time est une bonne idée merci!
Sincères condoléances.....

Le "time" des M2 n'est que le timer bridé des X2, ce n'est donc pas une spécialité.
Si le contact est entre le marteau et le gong, il ne va pas être de très bonne qualité, pour le traitement des rebonds, il faut ajouter une pause, disons 100 ms.
Les temps du programme sont pour la simulation, à adapter donc.
Je ne vois pas à quoi sert la tempo de 20s
On peut toujours faire une simulation, avec PE5.5 qui fonctionne parfaitement avec ce programme, contrairement à PE6
La simulation, c'est OK, ou pas
Programme avec antirebonds:
Code:
#picaxe 20M2
    symbol cpt=b1
    symbol pous=pinC.6
    do loop while pous=0

    do   
        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
        time=0
        dec cpt
        do             
            loop while time<10 ; 10 pour simu,  au lieu de 20
        high cpt
        pause 1000 ; pour simulation uniquement
        ;en réalité:
        ;time=0       
        ;do loop while time < 3 ; 3 pour simu, au lieu de 30
        low cpt
    loop
MM
 

zeltron

Senior Member
Ok merci bien
Je faisais des essais avec un 40x2 mais de toutes façon il me fallait un picaxe adapté
J'ai pas le temps de faire des essais ce soir mais dans la semaine je vous dirais ça MERCI ENCORE!
 

zeltron

Senior Member
En réponse a MGU j'ai testé vite fait avec PE6 ça marche pas comme je veux mais je pense que le coeur du programme est bien la!
Merci c'est la bonne méthode je pense.
Je ne vois pas à quoi sert la tempo de 20s
La tempo de 20 secondes c'est à peu prêt le temps nécessaire au 12 coups de gong maximum, ils sont espacés d'une seconde
Apres ce delai maximun d'enregistrement du nombre de coups le moteur qui correspond au nombre de gong est activé pendant le temps que dure la boite à musique donc dans les 30 secondes
Apres y'a plus trop à se presser puisque le prochain coup de gong et 1/2 heure plus tard
Sauf en cas de remise à l'heure de l'horloge en manuel mais c'est pas grave
 

MGU

Senior Member
Ben non, ça marche pas, c'est normal. On peut ajouter des verrues pour que ça fonctionne (un peu) mieux.
Mais LA solution est là: http://www.picaxe.com/Software/Obsolete/PICAXE-Programming-Editor/
C'est obsolète, mais ça fonctionne !

Quelques explications.
La tempo de 20s est inutile. Le programme compte les impulsions tant que le temps entre chaque coup est inférieur à 2 (ou 3) secondes.
La suite du programme se poursuit "automatiquement" après le dernier coup. Le moteur correspondant au nombre de coups est alimenté pendant un temps programmé par ex 30s

MM
 

MGU

Senior Member
Et si tu veux quand même utiliser PE6, voici un programme avec verrues pour faire avancer péniblement la variable time. Mais faut pas être pressé.
Code:
#picaxe 20M2
symbol cpt=b1
symbol pous=pinC.6
pullup %100000000000000    ;pullup sur C.6
    do loop while pous=0    ;préparation C.6 pour simu

    do   
        cpt=0
        time=0
        do               
            if pous=0 then
                do loop while pous=0
                pause 100
                inc cpt
                time=0                   
            endif   
            pause 1           
        loop while cpt<1 or time <3
        time=0
        dec cpt
        do
            pause 1           
        loop while time<2 ;pour simu : 10 au lieu de 20
        high cpt       
        time=0       
        do
            pause 1
        loop while time < 2
        low cpt
    loop
MM
 

zeltron

Senior Member
Ah vi! ça marche C'est ingenieux ce petit code...Si j'avais réussi à faire le code il aurait fait bien plus de lignes pour rien...Merci bien
 

MGU

Senior Member
Bonjour,

Reste la boucle de 20 s à supprimer, et les verrues pour le code final.
Et voir si il n'est pas possible de remplacer le contact du marteau par un µswitch sur le bras

Code:
#picaxe 20M2
symbol cpt=b1
symbol pous=pinC.6
pullup %100000000000000    ;pullup sur C.6
    do loop while pous=0    ;préparation C.6 pour simu
    do  
        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      
        high cpt      
        time=0      
        do loop while time < 10
        low cpt
    loop
MM
 
Last edited:

zeltron

Senior Member
Un petit retour d'infos sur le montage...
Ca marche pas trop mal j'ai ajouté une LDR en c7 pour détecter le jour et la nuit afin d'arrêter les boites à musiques inutiles la nuit.
Mais ce n'est pas parfait, j'utilise des moteurs n20 6v 200 rpm alimentés par une petite carte alim réglable que j'ajuste à 3v pour rentrer dans la borne 10 des ULN ce qui permet de réduire le bruit des réducteurs.
Mais chaque boite à musique demanderait une vitesse (tension) et donc un temps de fonctionnement différent pour avoir les bons rithmes...
Donc ça va rester comme ça sinon il faut encore une usine à gaz...
A moins d'utiliser la seul sortie qui me reste c5 en pwm pour attaquer la borne 10 de l'uln 2803 pour donner des tensions differentes à chaque moteur, mais je sais pas si c'est possible ça, pour commander un ULN 2803?
 
Last edited:

PieM

Senior Member
A moins d'utiliser la seul sortie qui me reste c5 en pwm pour attaquer la borne 10 de l'uln 2803 pour donner des tensions differentes à chaque moteur, mais je sais pas si c'est possible ça, pour commander un ULN 2803?
Bonjour,
L'ULN2803 n'est qu'un ensemble de Darlington NPN. La borne 10 est normalement reliée au V+ alim des moteurs, via des diodes de clamp pour les circuits inductifs. Donc si tu veux modifier la tension moteur par un pwm, c'est sur la sortie de ta carte alim qu'il faut agir. ( La borne 10 est ou n'est pas connectée selon les applis.)
Tu peux donc via un simple transistor NPN de puissance relié au 5V, modifier ta tension moteur en utilisant ta sortie dispo avec daclevel sur la base de ce transistor, ou par un PWM. Et ta carte alim n'est plus nécessaire!
 
Last edited:

MGU

Senior Member
Bonjour,
L'ULN2803 n'est qu'un ensemble de Darlington NPN. La borne 10 est normalement reliée au V+ alim des moteurs, via des diodes de clamp pour les circuits inductifs. Donc si tu veux modifier la tension moteur par un pwm, c'est sur la sortie de ta carte alim qu'il faut agir. ( La borne 10 est ou n'est pas connectée selon les applis.)
Tu peux donc via un simple transistor NPN de puissance relié au 5V, modifier ta tension moteur en utilisant ta sortie dispo avec daclevel sur la base de ce transistor, ou par un PWM. Et ta carte alim n'est plus nécessaire!
Bonjour,
Je pense aussi qu'il est possible de différentier les tensions en ft de la sortie.
Je n'avais pas pensé au daclevel, reste à savoir si il y a assez de niveaux dans la plage de tension utile, et il faut amplifier le courant par un darlington.
Sinon, effectivement, un PWM, peut être en commutant le retour au Gnd de l'uln (à essayer pour faire simple).
Il y a des essais à faire...

MM
 

zeltron

Senior Member
il faudrait utiliser la sortie 19 du picaxe 20m2 pour le DAC alors? Mais elle est déjà utilisé pour la fiche jack axe027...
Pour ce qui est des differents niveaux de plage de tension y'a pas besoin de grande plage ni de precision c'est du style vitesse lente 3v moyenne 3.5v grande 4v c'est juste pour être plus agréable à la z'oreille!
 

MGU

Senior Member
il faudrait utiliser la sortie 19 du picaxe 20m2 pour le DAC alors? Mais elle est déjà utilisé pour la fiche jack axe027...
Pour ce qui est des differents niveaux de plage de tension y'a pas besoin de grande plage ni de precision c'est du style vitesse lente 3v moyenne 3.5v grande 4v c'est juste pour être plus agréable à la z'oreille!
Bonjour,

Avec un pas de 5/32= 0,16V env., la résolution serait suffisante. Mais si il faut un darlington, on perd env 1,4V donc une tension max en sortie de 3,6V avec l'alim 5V.

Quelle est la tension d'alim utilisée actuellement?
La même broche peut être utilisée en serout pendant le chargement et en DAC pour le programme.
On peut aussi associer deux paramètres pour chaque sortie, la vitesse moteur (DAC ou PWM) et le temps de fonctionnement.
A suivre...

MM
 

zeltron

Senior Member
Sur certaine musique il faudrait 4v mais c'est pô grave je vais conserver le montage comme ça, c'est plus simple et ça me convient assez bien.
La perfection n'est pas de ce monde...
Je vais utiliser une tension moyenne de 3.6v certaine musique seront plus ou moins rapide et puis c'est tout....
Finalement quand on tourne une boite à musique à la main nous réalisons un petit asservissement de vitesse imperceptible que je n'avais pas remarqué...
 

PieM

Senior Member
un PWM, peut être en commutant le retour au Gnd de l'uln (à essayer pour faire simple).
Oui, ça me semble effectivement jouable. les presque 4V sont possibles à partir du 5V si on utilise un petit MOSFET pour ne par en rajouter aux ~1V de Vce sat de l'uln.
 

MGU

Senior Member
Sur certaine musique il faudrait 4v mais c'est pô grave je vais conserver le montage comme ça, c'est plus simple et ça me convient assez bien.
La perfection n'est pas de ce monde...
Je vais utiliser une tension moyenne de 3.6v certaine musique seront plus ou moins rapide et puis c'est tout....
Finalement quand on tourne une boite à musique à la main nous réalisons un petit asservissement de vitesse imperceptible que je n'avais pas remarqué...
Ah!, dommage, moi qui souffre de perfectionnite, j'ai mal...
C'est pas grave, on sait jamais, voici un schéma avec une modif très simple.
Le but est que chaque musique ait une vitesse et un temps de fonctionnement propre.

23478


Le code :
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 tmax=b2        ;temps moteur
symbol vit=b3        ;vitesse moteur
symbol lum=b4
symbol nuit= 100    ;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
        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,(29,30,31,32,28,30,30,31,32,33,20,30),tmax
        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    
        time=0    
        do loop while time < tmax
        low cpt
    loop
Rien n'est testé, mais il est plus facile de tester que de simuler

MM
 
Last edited:

PieM

Senior Member
C'est pas grave, on sait jamais, voici un schéma avec une modif très simple.
Le but est que chaque musique ait une vitesse et un temps de fonctionnement propre.
Mais ça mais c'est bien sûr! c'était ça la solution! bravo.
 

zeltron

Senior Member
Bon beh tu as tellement bossé la dessus que je suis un chien si je ne teste pas ton truc!(remarque j'adore les chiens!)
je vais me mettre à la recherche d'un bc 337 dans mes fonds de tiroirs sinon un 2n2222 convient?
(pour info le seuil de nuit est en-dessous de 20)
 

MGU

Senior Member
Bon beh tu as tellement bossé la dessus que je suis un chien si je ne teste pas ton truc!(remarque j'adore les chiens!)
je vais me mettre à la recherche d'un bc 337 dans mes fonds de tiroirs sinon un 2n2222 convient?
(pour info le seuil de nuit est en-dessous de 20)
Merci, je vais déjà un peu mieux.
Toutes les valeurs sont n'importe quoi, il faudra des essais pour chaque valeur dans les lookup.
Je ne connais pas le courant moteur, mais un 2n2222 doit convenir.
Et si tu veux simuler, il faut charger PE5.5 : http://www.picaxe.com/Software/Obsolete/PICAXE-Programming-Editor/#download

Bonne bidouille
MM
 

MGU

Senior Member
une mise à jour du code pour arrêter le pwm:

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 tmax=b2        ;temps moteur
symbol vit=b3        ;vitesse moteur
symbol lum=b4
symbol nuit= 100    ;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
        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,(29,30,31,32,28,30,30,31,32,33,20,30),tmax  
        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      
        time=0      
        do loop while time < tmax
        pwmout cpt,off
        low cpt
    loop
MM
 
Last edited:

MGU

Senior Member
0
une mise à jour du code pour arrêter le pwm:

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 tmax=b2        ;temps moteur
symbol vit=b3        ;vitesse moteur
symbol lum=b4
symbol nuit= 100    ;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
        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,(29,30,31,32,28,30,30,31,32,33,20,30),tmax
        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     
        time=0   
        do loop while time < tmax
        pwmout cpt,off
    loop
MM
 

MGU

Senior Member
Bonjour,

J'efface tout...
Je pense que le test J/N était à l'envers
Et si on alimente pas les moteurs, ça tournera pas.
Un code avec moins d'erreurs (j'espère), mais je n'ai toujours pas les moyens de tester.
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 tmax=b2        ;temps moteur
symbol vit=b3        ;vitesse moteur
symbol lum=b4
symbol nuit= 100    ;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,(29,30,31,32,28,30,30,31,32,33,20,30),tmax   
        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         
        time=0       
        do loop while time < tmax
        pwmout cpt,off
        low cpt
    loop
MM
 

zeltron

Senior Member
Pour les 1er tests que je viens de faire ça marche! C'est ok pour le 2n2222
Mais...
Sur ton sympatique schéma de principe si tu aimes que ça soit parfait il faut rectifier le câblage de c4 à c5 pour le pwm.
et pour le temps il faudrait des valeurs lookup avec des virgules.. pour pouvoir démarrer pil poil au début et s'arreter à la fin de la sic...
Peut être que si je programme un temps pour 2 fois la musique ça va le faire....
à lookup 250 je suis à 4 v sur le moteur c'est ok, mais y'a un autre problème plus grave qui viens se greffer c'est que le moteur fait plus de bruit je trouve qu'il devient trop bruyant par rapport à la boite à musique peut être à cause du pwm....
En tout cas merci bien je vais continuer à faire des testes, voir pour insonoriser le moteur mais c'est pas facile j'ai déjà testé des tas de trucs sans gros résultats...
 

zeltron

Senior Member
Oui le test jour nuit ne fonctionne pas j'avais pas testé je comprends pas encore pourquoi, j'ai pourtant modifié la valeur de 100 à 20....
mon code était celui ci il marchait bien
do readadc C.7,lumiere
if lumiere<21 then loop'la nuit la cellule ldr donne une lecture <20 arret musique
endif
C'est presque le même que le tiens pourtant....
 

zeltron

Senior Member
Nan même avec une double lecture le morceaux de musique se décale...
La solution à ce problème serait peut être de faire une vitesse décroissante en fin de chaque morceaux de musique.... encore une usine à gaz du soft..
Nan y' a plus simple trouver un bon compromis vitesse /temps.. je suis bête maintenant que la vitesse est paramètrable
Pour le hard cette version est plus simple pas besoin de 2 alimentations....
 
Last edited:

zeltron

Senior Member
Non je ne parviens pas à trouver un couple parfait vitesse/temps achaque fois y'a un décalage entre le début et la fin de la musique...
 

MGU

Senior Member
Bon, y a encore un peu de travail.
Je vois en relisant un "pwmout cpt, off", c'est évidemment "pwmout C.5 ,off" qu'il faut lire....
Pourquoi chercher un couple? La vitesse en fonction de la "mélodie", le temps pour la fin du rouleau, les deux sont indépendants
On peut ajuster le temps de façon plus fine, en comptant des temps de 200, voire 150ms. Mais je ne suis pas sûr que l'on obtienne la perfection, il y aura toujours un décalage avec le temps.
La solution serait de doter les rouleaux à musique d'un fin de course, pas forcement compliqué, juste un ergot qui appuierait sur un mini µswitch ou n'importe quoi qui indiquerait que l'on a fait un tour.
En attendant, voici un code qui compte des durées de 200ms au lieu de minutes. (temps max= 200ms x 255 = 51s)

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 tmax=b2        ;temps moteur
symbol vit=b3        ;vitesse moteur
symbol lum=b4
symbol cpt2=b5
symbol nuit= 100    ;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,(141,142,143,124,125,126,127,128,129,130,131,132),tmax
        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   
        for cpt2=0 to tmax
            pause 200     
        next
        pwmout C.5,off
        low cpt
    loop
Pour le bruit, il est possible que le pwm apporte du bruit (la fréquence est pourtant élevée). Dans le "tas de trucs essayés", as tu essayé un condo de 100nF en // sur les bornes du moteur?
As tu câblé les sorties 10 des ulm, cf schéma ?
On a pas testé le DAC, qui ne ferait pas de bruit...
Pour le test lumière, ça dépend aussi du câblage de la LDR.

En attendant mieux...à quoi ressemble ces rouleaux à musique ?

MM
 
Last edited:

zeltron

Senior Member
Réponse dans l'ordre:
Dans tas de truc essayés c'est pas des solutions électronique que j'ai testé mais des insonorisations en enveloppant le moteur de liege etc pour l'instant j'ai pas trouvé de materiaux miracle....juste je décolle du sol le moteur pour eviter les vibrations....
Donc non pas testé le 100nf je vais voir ça!
Oui les sorties 10 son câblés idem que ton schéma avant la diode
le câblage LDR était identique à ton montage avant ton schéma
Voici un lien sur le type de boite à musique utilisées c'est tout chtie...
7,5 x 3,5 x 2 cm
Je vais laisser le poussoir en parallèle sur le gong ajouter une ligne de code pour resynchroniser les boites en manuelle
genre si un moteur est en marche et que j'appuis sur le bouton poussoir le moteur s'arrete, ainsi j'arrête le rouleau exactement à la fin du morceau
 
Last edited:

zeltron

Senior Member
Pourquoi chercher un couple? La vitesse en fonction de la "mélodie", le temps pour la fin du rouleau, les deux sont indépendants
non chef les deux son dépendants
Je vois en relisant un "pwmout cpt, off", c'est évidemment "pwmout C.5 ,off" qu'il faut lire....
J'avais pas remarqué le bug mais ça fonctionnait avec...
 

zeltron

Senior Member
Pour le 100nf y'a pas de différence mais je pense finalement que c'est à cause aussi de l'augmentation de la tension de 3v à 4v
il faut que je trouve une isolation phonique adaptée
Pour la nuit c'est ok j'avais certainement pas bien isolé la ldr de la lumiere c'est sensible c'est petit machin lol
 

MGU

Senior Member
Pour le 100nf y'a pas de différence mais je pense finalement que c'est à cause aussi de l'augmentation de la tension de 3v à 4v
il faut que je trouve une isolation phonique adaptée
Pour la nuit c'est ok j'avais certainement pas bien isolé la ldr de la lumiere c'est sensible c'est petit machin lol
Bonjour,
Pour lever le doute, faut faire tourner le moteur avec une tension continue de 4V, et comparer.
De la graisse silicone sur les engrenages ?

heu chef le dernier prog ne fonctionne pas
il ne se passe rien la derniere boucle je pense....
Alors, finalement, après #38, ça fonctionne ou pas?

Pour le problème de temps et de synchro, il doit y avoir moyen d'ajouter un truc (réglable, c'est mieux) sur le côté du cylindre pour appuyer sur un µswitch de ce genre:
https://www.gotronic.fr/art-microrupteur-d2f221-4316.htm
Ex : coller un morceau de bois dans le creux de l'axe pour visser quelque chose pouvant actionner le switch
Le but est d'avoir un info sur la position de départ de la musique. Tous les contacts sont en // et tous ouverts aux début des musiques.
Regarde les possibilités de faisabilité. Si c'est possible, il n'y a plus de problème pour faire exactement un tours ou deux tours, avec arrêt pile poil au bon endroit.

On s'éloigne un peu du but de ce forum (sur d'autres, on serait classé dans le bricolage)

MM
 
Last edited:

MGU

Senior Member
Pour info, il y a sur picaxe plusieurs commandes pour sortir de la musique, voir sound, play, tune.
Ce serait beaucoup plus simple, mais le son n'est pas le même...

Autre chose, avec le lookup des programmes proposés, le temps peut être réglé à la ms, de 0 à 65535 ms

MM
 
Last edited:
Top