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
 
 

Ascenseur pour maison de poupées

Cette page est issue d'une demande sur un forum d'électronique que l'on retrouve dans ce lien.
Dans le cahier des charges initial, il s'agit d'une simple commande par interrupteurs d'un petit moteur continu et des fins de courses ILS (interrupteurs à lames souples).


Ce projet a été étoffé avec une gestion par µC picaxe 20M2. Le schéma proposé demande un minimum de composants et le programme codé en basic reste très simple, avec la facilité de programmation que donne le mode pseudo multitâches de la série M2.
En mode pseudo multitâches, le programme est constitué de plusieurs programmes "indépendants", introduits par une étiquette "startX" avec le 20M2, X peut varier de 0 à 7, soit huit programmes exécutés en parallèle (4 pour le 08M2).
L'exécution donne l'illusion que ces programmes s'exécutent en même temps, en réalité, ils sont "scannés" rapidement, les pauses rencontrées ne bloquent pas l'exécution des autres programmes et la modification d'une variable est immédiatement mise à jour dans les autres programmes.

Cahier des charges:
L'ascenseur déssert trois étages (une extension est possible).
La cabine est entrainée par un moteur à courant continu avec démultiplication.
La position des étages est repérée par des interrupteurs ILS, fermés par un aimant fixé sur la cabine.
L'inversion de sens se fait par deux mini relais R/T.
La sélection de l'étage se fait par poussoirs ou touches sensitives capacitives (deux options), mémorisation par leds.
Demande supplémentaire: affichage de l'étage sur afficheur leds 7 segments.

Le schéma avec sélection par poussoirs:
 

 

Le code:
; ASCENSEUR POUPÉE MM 09052016
;programme en pseudo multitâches
start0:
#picaxe 20M2
#no_data        ;pour gagner 2 s de chargement programme
;#simtask all        ;pour simulateur, enlever ";"
dirsB=%1111111    ;B.0 à B.6 en sorties
dirsC=%00000011    ;C.0 et C.1 en sorties
pullup %1111110000000000    ;pullup sur C.2 à C.7
;**** noms des broches *****
symbol niv0=pinC.5        
symbol niv1=pinC.6
symbol niv2=pinC.7
symbol pous2=pinC.4
symbol pous1=pinC.3
symbol pous0=pinC.2
symbol led0=B.0
symbol led1=B.1
symbol led2=B.2
symbol monte=B.3
symbol desc=B.4
;***noms des variables ****
symbol niveau=b1    ;var niveau de 0 à 2
symbol dest=b2        ;var destination de 0 à 2
symbol led=b3        ;var leds , n° des broches leds,ici de 0 à 2
;********** initialisation **********************
    if niv1=0 then    ;on est au niveau 1, on y reste
        dest=1 :niveau=1    ;mise en conformité
    elseif niv2=0 then        ;on est au niveau 2, on y reste
        dest=2    :niveau=2    ;mise en conformité
    else
        time=100                ;pas de niveau défini, afficheur éteint (voir start3:)
        Do while niv0<>0        ;on est au niveau 0, ou ailleurs...        
            high desc           ;si on y est pas, on descent
        loop                     ;
        low desc                ;on est arrivé, on arrête le moteur
        time=0                    ;on rallume l'afficheur        
        dest=0 : niveau=0        ;mise en conformité
    endif
;*** boucle principale ***************************
    Do    
        if pous0=0 then        ;appui sur la poussoir 0
            dest=0            ;mémorisation dans la var dest
        elseif pous1=0 then
            dest=1
        elseif pous2=0 then
            dest=2
        endif
        
        Do while dest<>niveau        ;appui poussoir, la dest n'est plus = au niveau
            time=0                    ;raz time (compte secondes)
            high dest                ;allumage led destination
            pause 1000                ;pour réalisme            
            if dest>niveau then        ;on va au dessus                    
                high monte            ;moteur montée on
            elseif dest<niveau then    ;sinon, c'est en dessous    
                high desc            ;descente on
            endif
        Loop
        low dest            ;on est arrivé, on éteint la led
        low monte            ;on arrête tout
        low desc    
    loop
;*************************************************
start1:        ;surveillance des niveaux
    Do
        if niv0=0 then        ;on est au niveau 0
            niveau=0        ;mise à jour de la var niveau
        elseif niv1=0 then
            niveau=1
        elseif niv2=0 then
            niveau=2
        endif    
    loop    
;****************************************************
start2:        ;affichage niveau sur un 7 segments
    Do     
        pinsC=niveau    ;sur C.0 et C.1 déclarés en sorties
    loop
;******************************************************    
start3:        ;extinction du 7 segments au bout de 60 s d'inactivité        
    Do
        if time<60 then     ;si time < 60 s
            low B.6                ;Bl=0 sur CD4543 allume l'afficheur
            else high B.6    ;Bl=1,l'éteint
        endif
    loop


Option avec sélection par touches sensitives capacitives.

Il faut modifier l'organisation des entrées et choisir les broches compatibles avec la commande "touche16".
Supprimer la programmation des résistances de pullup sur ces entrées.
Cette nouvelle distribution conviendrait également pour l'option poussoirs.
Les touches sensitives se fabriquent très simplement, un petit bout de PCB cuivré une ou deux faces, une rondelle de la taille du bout du doigt sous une face avant en plastique,etc...le doigt ne doit pas toucher le métal relié à la broche du picaxe, le picaxe ne mesure que l'augmentation de capacité de la touche.

Le schéma:
 

Le code:

; ASCENSEUR POUPÉE MM 08052016
;programme en pseudo multitâches
start0:
#picaxe 20M2
;#simtask all        ;pour simulateur, supprimer le ";"
dirsB=%1111111        ;B.0 à B.6 en sorties
dirsC=%00000011        ;C.0 et C.1 en sorties
pullup %111000000000000        ;pullup sur C.4 à C.6
;**** noms des broches *****
symbol niv0=pinC.4        
symbol niv1=pinC.5
symbol niv2=pinC.6
symbol tch2=C.7
symbol tch1=C.3
symbol tch0=C.2
symbol led0=B.0
symbol led1=B.1
symbol led2=B.2
symbol monte=B.3
symbol desc=B.4
;***noms des variables ****
symbol niveau=b1    ;var niveau de 0 à 2
symbol dest=b2        ;var destination de 0 à 2
symbol led=b3        ;var leds , n? des broches leds,ici de 0 à 2
symbol tch=w10
symbol sth0=w11
symbol sth1=w12
symbol sth2=w13    
        
;******** initialisation **********************
;réglage des seuils touches sensitives
     touch16 tch0 ,tch    ;renvoie une valeur de 0 à 65535
    sth0=tch+2000        ;enregistrement valeur retournée + marge de 2000
    touch16 tch1,tch
    sth1=tch+2000
    touch16 tch2,tch
    sth2=tch+2000
;initialisation niveau
    if niv1=0 then            ;on est au niveau 1, on y reste
        dest=1 :niveau=1    ;mise en conformité
    elseif niv2=0 then        ;on est au niveau 2, on y reste
        dest=2 :niveau=2    ;mise en conformité
    else  
        time= 100            ;afficheur éteint voir start3:
        Do while niv0<>0        ;on est au niveau 0, ou ailleurs...       
            high desc            ;si on y est pas, on descent
        loop
        low desc            ;on s'arrête au niveau 0
        time=0              ;afficheur allumé
        dest=0 : niveau=0        ;mise en conformité
    endif
;*** boucle principale ***************************
    Do        
            touch16 tch0 ,tch        ;lecture de la touche 0
            if tch>sth0 then        ;test si appui sur la touche
                dest=0        ;mémorisation dans la var dest
            endif
            touch16 tch1 ,tch
            if tch>sth1 then
                dest=1        
            endif
            touch16 tch2,tch
            if tch>sth2 then
                dest=2        
            endif        
        
        Do while dest<>niveau        ;appui poussoir, la dest n'est plus = au niveau
            time=0                    ;raz time (compte secondes)
            high dest                ;allumage led destination
            pause 500
            if dest>niveau then        ;on va au dessus                    
                high monte            ;moteur montée on
            elseif dest<niveau then        ;sinon, c'est en dessous    
                high desc            ;descente on
            endif
        Loop
        low dest            ;on est arrivé, on éteint la led
        low monte            ;on arrête tout
        low desc    
    loop
;*************************************************
start1:        ;surveillance des niveaux
    Do
        if niv0=0 then        ;on est au niveau 0
            niveau=0        ;mise à jour de la var niveau
        elseif niv1=0 then
            niveau=1
        elseif niv2=0 then
            niveau=2
        endif    
    loop    
;****************************************************
start2:        ;affichage niveau sur un 7 segments
    Do     
        pinsC=niveau    ;sur C.0 et C.1 déclarés en sorties
    loop
;******************************************************    
start3:        ;extinction du 7 segments au bout de 60 s d'inactivité
    Do
        if time<60 then         ;si time < 60 s
        low B.6            ;Bl=0 sur CD4543 allume l'afficheur
            else high B.6    ;Bl=1,l'éteint
        endif
    loop   

Amusez vous...



Créer un site
Créer un site