Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 
         

La porte des étoiles

gestion par picaxe 20M2


Destiny226 est un passionné de d'origamie 3D. Entre autres réalisations, il y a une belle porte des étoiles et pour l'animer, il a demandé de l'aide sur un forum électronique. La discussion originale est ICI.
 
 
 


Le fonctionnement de la porte des étoiles :
Comme vous le savez, cette porte ouvre un trou de ver de Lorenz, ce qui permet de relier instantanément deux points de l’univers (sérieux, c’est scientifique, et les trous de ver de Lorenz sont réversibles, heureusement ).

La succession de symboles verrouillés par les chevrons défini une destination (planète).
Dans un premier temps, cette séquence était purement aléatoire. Notre origamiste 3D a souhaité pouvoir programmer des destinations particulières (ben oui, vaut mieux savoir ou on va).
Chaque programmation est associée à une touche d’une télécommande IR. Mais il faut alors partir d’une position de référence pour que l’enchainement des rotations aboutisse toujours sur les mêmes symboles, sinon, ça sert à rien.

En résumé :
Si on appuie sur une touche programmée par un « select case », un bip long accuse réception :
Le code programmé est reconnu (bip court) et la porte tourne à la recherche de la position de référence (fermeture d’un inter ILS par un aimant). Pendant cette phase, rien ne s’allume.
Arrivé à la position de référence, trois bips ascendants sont émis et la porte effectue le programme défini, enchainement des temps de rotations programmés dans un lookup et allumage des chevrons jusqu’au bouquet final.

Si la position de référence n’est pas trouvée (time out correspondant à un tour complet), émission de trois bips descendants et la porte effectue un cycle aléatoire.

Si on appuie sur une touche non programmée, un bip long accuse réception :
Pas de bip court, pas de recherche de référence et exécution d’un cycle aléatoire (histoire de faire quelque chose).

Un poussoir de « démarrage manuel et test » lance un cycle aléatoire.

Modifs simples possibles :

Pendant la recherche de référence, la porte tourne sans autre signalisation (perturbant ?) il serait possible d’allumer quelque chose : chevron central ou leds flash (en fixe).
Ou de lancer cette phase à la fin d’un cycle, et non au début, pour partir directement sur un cycle chevrons.

L’inter « sony/autre » permet d’utiliser une télécommande non compatible code SIRC. Celle utilisée est compatible et cet inter perd son utilité. La broche du µC (E/S) est utilisable pour une autre fonction.

Le schéma:
 

Le programme:
#picaxe 20M2
#no_data
symbol telecom=pinC.0    ;choix télécommande  
symbol flash=B.7        ;sortie flash
symbol ILS=pinC.1        ;entrée ILS
symbol PWMmot=C.3        ;PWM moteur
symbol gauche=C.4        ;commande moteur à gauche
symbol droite=C.5        ;commande moteur à droite
symbol InfR    =C.6        ;entrée TSOP
symbol pouss=pinC.7        ;entrée poussoir
symbol son=    C.2            ;sortie HP
symbol sens=bit0        ;sens moteur
symbol led=b1            ;n° leds
symbol datinf=b2        ;data télécommande
symbol cpt=b3            ;compteur
symbol cpt2=b4
symbol vmax=60            ;de 0 à 100 %, ici 50 =2,5 Volt
symbol memtps=w10        ;mémo temps rotation précédent
symbol vit    =w11        ;valeur vitesse
symbol alea    =w12        ;valeur léatoire
symbol temps=w13        ;temps rotation moteur
pullup %1100001100000000    ;pullup sur C.0, C.1,C.6 et C.7
dirsC=%0111100            ;broches C.2,C.3,C.4,C.5,en sorties
dirsB=%11111111            ;broches B en sorties
pinsB=0                 ;extinction des chevrons ->1 en sortie ULN ->leds en anodes communes éteintes)
low flash
pwmout C.3,249,0        ;pwm 1000Hz sur C.3, RC 100%=1000
    do                    ;boucle principale
        debut:        ; adresse timeout pour tester le poussoir toutes les 500ms  
        datinf=255            ;adresse par défaut (alatoire)        
        do while pouss=1     ;attente appui poussoir
            random alea
            if telecom=0 then     ;si inter sur SONY                
                irin [500,debut],InfR,datinf    ;attente IR, passage par pouss tous les 500ms
                if datinf = 21 then debut
                exit             ;irin a reçu une adresse, sortie boucle        
            else                 ;inter sur NON SONY    
                if pinC.6=0 then exit    ;sortie TSOP hors SONY
            endif            
        loop     
        sound son,(91,50)     ;son  départ                                            
        gosub destination        ;c'est parti pour les 6 chevrons latéraux
;********** C'EST LA FIN **********************************
            gosub posILS     ;pour allumage chevron central          
        high flash    ;allume leds flash
        sound son,(252,5000)    ;   bruit blanc 5 S ";" devant pour supprimer
        time=0
        time500:    ;adresse sortie timeout pour tester time
        do while time < 600 ;temps max 10 minutes
            irin [500,time500],InfR,datinf    ;attente IR, passage par pouss tous les 500ms
            if datinf=21 then exit            
        loop                                 
        pinsB=0            ;extinction des chevrons avec 1 en sortie uln
        low flash        ;teint leds flash    
        sound son,(100,10,120,10,110,10)    ;son de fin
        pause 3000        ;on se repose 3 s
    loop                ;fin boucle principale
;***** sous programmes ************************************
destination:
    sens=0                        ;init sens de rotation        
    select datinf
;*********************************************************************        
        case 0        ;touche 1 code SONY            
            for led=0 to 5
                lookup led, (4520,3890,5600,7200,6200,2800),temps ;en ms
                gosub rotation
            next                
;********************************************************************
        case 1        ;touche 2 code SONY            
            for led=0 to 5
                lookup led, (1000,1000,1000,1000,1000,1000),temps
                gosub rotation
            next                   
;********************************************************************
        case 2        ;touche 3 code SONY            
            for led=0 to 5
                lookup led, (2000,6500,3000,5000,2500,7000),temps
                gosub rotation
            next                
;***********************************************************************
        case 3        ;touche 4 code SONY            
            for led=0 to 5
                lookup led, (2000,6500,3000,5000,2500,7000),temps
                gosub rotation
                next                 
;***********************************************************************
        case 4        ;touche 4 code SONY            
            for led=0 to 5
                lookup led, (2000,6500,3000,5000,2500,7000),temps
                gosub rotation
                next                
;***********************************************************************                
        else         ;génération aléatoire
            for led=0 to 5            ;boucle    sur 7 leds                            
                do
                    random alea      ;nombre aléatoire
                    temps=alea//24
                loop while memtps=temps;pas de répétition
                memtps=temps        
                temps=temps*1000 + 1000    ;de 1s à 24 s par 23 paliers de 1 s                      
                gosub rotation
            next                
        endselect
    return    
rotation:            
        If sens=0 then
            high gauche    ;tourne à gauche :C.4 SUR ON
            gosub accel                
            pause temps
            gosub decel
            low gauche        ;arret tout off
        else
            high droite        ;tourne à droite : C.5  SUR ON
            gosub accel
            pause temps    
            gosub decel
            low droite  
        endif
        high 6        ;allumage led du haut (led n°6)
        pause 500    ;500ms
        high led        ;allumage led suivant séquence
        pause 300
        low 6        ;led du haut éteinte
        sound son,(108,10)
        pause 1000        ;pause cycle
        sens=not sens    ;inversion sens                
    return
posILS:    ;recherche position ILS
       
        high gauche
        gosub accel
        time=0
        do         
        loop while ILS=1 and time <30    ; arret sur ILS=0 ou temps max>=30 s
        low gauche         
        if ILS=0 then
            sound son,(110,5,112,5,114,5)    ;ILS trouvé
        else
            sound son,(110,10,108,10,106,10);ILS pas trouvé
        endif     
            high 6                ;chevron central allumé
        return
accel:    ;accélération contrôlée
    for cpt=3 to 10
        vit=cpt*vmax        ;de 3 à Vmax
        pwmduty PWMmot,vit
        pause 200        ;réglage temps d'accélération
    next
    return    
decel:    ;décélération contrôlée
    for cpt=10 to 0 step -1
        vit=cpt*vmax        ;de Vmax à 0
        pwmduty PWMmot,vit
        pause 200
    next
    return



 



Créer un site
Créer un site