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
 
 

Serrure codée avec clavier matricé
picaxe 14M2

 

Cette page répond à la question de dudulle76120 sur un forum d'électronique.
J'ai proposé cette solution picaxe 14M2 utilisant la gestion "économique" vue sur cette page.


cahier des charges :
Les codes sont introduits par un clavier 12 ou 16 touches.
La clé est une suite de quatre caractères (nombres ou symboles du clavier). Initialisation par poussoir.
La clé est introduite en mémoire EEPROM (non effacée hors alimentation).
Relance du programme avec la nouvelle clé à la fin de la séquence d'introduction du code.
En cas d'abandon de procédure, relance au bout d'un temps défini (Ex 6s) et reprise de l'ancienne clé.
Les actions sont signalées par différents beeps sur buzzer piezzo.
La clé actionne un relais pour activer une gâche électrique par ex. temps de fonctionnement réglable par potentiomètre.

Le schéma:

Pour un clavier 16 touches, la colonne 4 sera connectée à la broche B.4 (voir code en annexe).
La sortie est ici sur B.0, pourrait être sur B.5 ou C.2.
La led jaune est en option, les beep peuvent suffire.
En cas de programmation hors site (sur plaque d'essais), les R de 10 et 22k sont supprimées. La broche C.5 est reliée au 0V.

Une vidéo:
Le code:
Adapté et conforme au schéma ci dessus. Faire un copier/coller dans PE6
Fonctionne pour des claviers de 12 ou 16 touches, sans modification.

;serrure4digeco MM 22/12/21
;clavier 12 ou 16 touches matriciel
;picaxe 14M2
;Entrées:
     ;ILS ou poussoir sur C.3
     ;potar tempo sur C.4
     ;colonnes du clavier sur B.1,B.2,B.3,et B.4 pour un 16 touches
;Sorties:
        ;piezzo sur C.0
        ;led jaune sur C.1 (option)
        ;relais sur B.0            
#picaxe 14M2
symbol NCode=pinC.3    'cotact ILS NouveauCode
symbol gache=pinB.0
symbol Nled=pinC.1
symbol buz=C.0
symbol potar =C.4
symbol tempo=w13        'compteur attente
symbol car=b1
symbol lig=b2
symbol col=b3
symbol chx=b5        
symbol rang=b7        'compteur rang décodage
symbol ch0=b8
symbol ch1=b9
symbol ch2=b10
symbol ch3=b11
    setfreq M16
    dirsB=%110001      ;B.0 ne peut être qu'une sortie, B1 à B3 en entrées
    dirsC=%10                
    pullup %100000011110        ;pullup sur B1,à B4 et C3  
    sound buz,(119,30)     'signal passage init    
    read 0,ch0,ch1,ch2,ch3    'lecture du code en mémoire EEPROM    
    Nled=0    
    rang=0        'RAZ rang
    time=0        'RAZ compteur attente    
    readadc potar,tempo    ;lecture de la temporisation sortie
    tempo=tempo*50    'max = 256 x 20= 5120 mS'
    do        ;boucle principale
        if NCode=0 then nouvcode    'Si appui sur le pousoir, on entre un nouveau code    
        if time >5 then    ;'RAZ rang et time toutes les 5s env
           rang=0
           time=0
        endif          
       for col=1 to 4   ;n° de broche (B.1 à B.4)=> 4 colonnes
            readadc col,lig    ;col est le n° de colonne, lig donne la valeur ligne        
            pause 100         
            if lig <= 225 then
                gosub clav    ;on a appuyé! valeur=>ligne
                lookup rang,(ch0,ch1,ch2,ch3),chx    
                if chx=car then                    
                    inc rang        ;on avance dans la séquence
                else     rang=0        ;sinon, on repart à 0                    
                endif            
                if rang>=4    then                 
                    gosub sortie            
                endif
            endif        
       next        
    loop
;***************************************************************
clav:         
     col=col-1        ;col de 0 à 3, le lookup commence à 0
    select case lig    ;sélection ft valeur ligne
        case 175 to 225    ; pour 4 Volt
            lookup col,(1,2,3,13),car        ;ligne 4
        case 125 to 174   ; pour 3 Volts
            lookup col,(4,5,6,14),car        ;ligne 3            
        case 75 to 124  ; pour 2 Volts
            lookup col,(7,8,9,15),car        ;ligne 2
        case 25 to 74  ; pour 1 Volts
            lookup col,(11,10,12,16),car    ;ligne 1        
    endselect     
    col=col+1    ;retour au n° de broche µC    
    do            
       readadc col,lig        ;attente relâchement touche            
    loop while lig <= 225
    sound buz,(119,40)    ;buzz action touche     
    return
sortie:        ;activation gache
    gache=1
    sound buz,(119,80)
    pause tempo
    gache=0
    rang=0
    time=0
    return
;***************************************************************
nouvcode:        'Sous programme mémo d'un nouveau code    
    do loop while Ncode=0  ;ttente relachement poussoir
    sound buz,(119,80)    ;buzz entrée nouvcode
    rang=0
    time=0  
    Nled=1     ;allumage led jaune
    ch0=0:ch1=0:ch2=0:ch3=0
    do
        for col=1 to 4    ;n° de broche (B.1 à B.4)=> 4 colonnes
            readadc col,lig    ;col est le n° de colonne, lig donne la valeur ligne
            pause 100
            if time>6 then
                sound buz,(119,200): pause 200:sound buz,(119,50)    ;buzz abandon procédure
                reset
            endif                   
            if lig <= 225 then
                gosub clav    ;on a appuyé! valeur=>ligne
                if rang=0 then
                    ch0=car
                elseif rang=1 then
                    ch1=car
                elseif rang=2 then
                    ch2=car
                elseif rang=3 then
                    ch3=car
                endif    
                inc rang                               
                if rang>= 4 then
                    write 0,ch0,ch1,ch2,ch3
                    sound buz,(119,80):pause 100:sound buz,(119,80)    ; buzz mémorisation nouvelle clé
                    reset
                endif    
            endif
          next
    loop


 



Créer un site
Créer un site