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 solution


Suite de cette page
Bien sûr, la présentation est à améliorer, l'intérieur fait un peu fouillis. En utilisant des fils émaillés regroupés sous le même isolant, il n'y aurait plus que deux câbles sortant du boitier pour améliorer l'illusion.
 

 
Le truc est simple:
Les couleurs n'ont aucun rôle dans ce tour de magie. Tout réside dans la manipulation des interrupteurs.
En numérotant les leds et les inters de 1 à 4, en commençant à gauche:
Ex: Si le dernier inter éteint est le 1 (à gauche), après un délai de 10s et sans aucune autre action sur les interrupteurs, la séquence suivante d'allumage des leds sera 1 - 2 - 3 - 4, indépendamment de l'ordre des interrupteurs actionnés. On choisit évidemment en premier l'interrupteur qui a la couleur de la led n°1, puis celui de la couleur de la led n°2, etc
De même:
Si le dernier inter éteint est le 2, la séquence sera 2 - 1 - 4 - 3
Si le dernier inter éteint est le 3, la séquence sera 3 - 4 - 1 - 2
Si le dernier inter éteint est le 4, la séquence sera 4 - 3 - 2 - 1

Regardez à nouveau la vidéo de démo, l'ordre des manipulations des interrupteurs est clairement visible, on peut mieux masquer la manipulation, et si on ne connait pas le truc, ce n'est pas évident.
Autre détail: Si l'inter n°4 est sur ON à la mise sous tension, le système est bloqué, l'inter 1 allume la led1, etc

Le schéma:
Celui de Bill Brown (qu'il faut remercier), utilise un picaxe 14M2 (l'original utilisait un 18M obsolète), j'ai simplement remplacé les résistances de pulldown sur les interrupteurs par les pullup internes: le 0 sur les entrées ne correspond plus à l'ouverture, mais à la fermeture du contact. J'ai également remplacé le comptage de boucles par la commande time, il est ainsi très facile d'ajuster le "time out" pour modifier ce délai 10s
Le découplage est réduit à un 100nF

Le picaxe est glissé, roulé en boule dans le petit emplacement, à côté de l'inter à glissière du boitier de pile.
Les fils et le 100nF céramique sont soudés directement sur les pattes repliées du 14M2.
Les 330ohms sont à l'extérieur, mais il serait plus "classe" de se fabriquer les lampes à vis, avec une 330 cms et une led coiffée par une boule de couleur (peinture à vitre ?) . Quoique, les capuchons de surligneurs...c'est plus rapide.


Y a pas la place pour l'arduino là

Un lien vers ce boitier comportant un inter et un petit logement qui fait bien l'affaire ici ou ailleurs.
Le fil jaune, c'est la broche "serial in" pour modifier le programme sans sortir le picaxe.

Le programme de Bill Brown, adapté au picaxe 14M2
#picaxe 14m2
#no_data
' Magic Switchboard - original source by "Technical" from PicAxe Forum
'                     Modified for PicAxe 18x by Wayne Thomason of Addison, TX USA
'                     7/15/2009  
'                Modified for Picaxe 14m2 By Bill Brown
'                12/8/2012'            
'                      mods: 1. Now is easily configurable via switch? and bulb? variables
'                            2. "timeout" functions even without learning all 4 switches
'                            3. starting point and sequence direction dependent on last switch turned off
'                            4. Now has Audience_lockdown feature.  If power is turned on while switch-4
'                               is set, each light will respond only to corresponding switch position
'                               until circuit is reset.
'                Modifs MM pullup sur C.0 à C.3 et timeout par ft time en s (30/09/2017)
' Assumptions
' 1. Times out after 10 seconds of all switches in the off position
'    regardless of whether all switches are learned yet
' 2. All switches must be off at start
'    (If switch 4 on when started, it starts up in audience-mode.)
' 3. All 4 switches must be switched on before that sequence is learned
' 4. Set bulb/LED outputs using bulb1, bulb2, bulb3 & bulb4
' 5. Set switch inputs using switch1, switch2, switch3 and switch4
' 6. first pattern is left to right, bulbs 1, 2, 3, 4
' 7. subsequent patterns are determined by last SWITCH turned off:
'       Switch 1 = 1234 order (bulb 1 first, then right in sequence)
'       Switch 2 = 2143 order (bulb 2 first, then left in sequence, wrapping after first)
'       Switch 3 = 3412 order (bulb 3 first, then right in sequence, wrapping after last)
'       Switch 4 = 4321 order (bulb 4 first, then left in sequence)
 
symbol switch1 = pinc.3  ' input pin for switch 1  (pinc.0, pinc.1, pinc.2 and pinc.3)
symbol switch2 = pinc.2  ' input pin for switch 2
symbol switch3 = pinc.1  ' input pin for switch 3
symbol switch4 = pinc.0  ' input pin for switch 4
symbol bulb1 = b.3       ' output for bulb 1  (b.0, b.1, b.2 and b.3)
symbol bulb2 = b.2       ' output for bulb 2
symbol bulb3 = b.1       ' output for bulb 3
symbol bulb4 = b.0       ' output for bulb 4
symbol timeout = 9         ' comptage des s par time
symbol flags = b0  ' flags to remember whether a switch has been learnt yet
symbol flag0 = bit0
symbol flag1 = bit1
symbol flag2 = bit2
symbol flag3 = bit3
symbol light0 = b1 ' variable to remember which switch is which light
symbol light1 = b2
symbol light2 = b3
symbol light3 = b4
symbol bulb = b7
symbol starting_lite = b6 ' variable to set starting light position (and direction)
symbol position = b5  ' position counter
dirsB=%111111
pullup %111100000000    ; R pullup sur C.0 à C.3 . Modif câblage:au repos switch OFF -> niveau haut
if switch4=1 then audience_lockdown
starting_lite = 1
' Start of program
do_reset:
'                ' reset position counter       
 if starting_lite = 1 then  ' if starting with bulb 1, position reset to 0.
    position = 0
 end if
 if starting_lite = 2 then  ' if starting with bulb 2, position reset to 1.
    position = 1
 end if
 if starting_lite = 3 then  ' if starting with bulb 3, position reset to 2.
    position = 2
 end if
 if starting_lite = 4 then  ' if starting wtih bulb 4, position reset to 3.
    position = 3
 end if
 flags = 0  ' reset flags
' Learning loop
waiting_to_learn_loop:
' if not learnt switch learn it
 if switch1 = 1 and flag0 = 0 then learn0
 if switch2 = 1 and flag1 = 0 then learn1
 if switch3 = 1 and flag2 = 0 then learn2
 if switch4 = 1 and flag3 = 0 then learn3
 ' we have learnt that switch so light output accordingly
    if flag0 = 1 then
        if switch1 = 1 then
            high light0
        else
            low light0
        end if
    end if
    if flag1 = 1 then
        if switch2 = 1 then
            high light1
        else
            low light1
        end if
    end if
    if flag2 = 1 then
        if switch3 = 1 then
            high light2
        else
            low light2
        end if
    end if
    if flag3 = 1 then
        if switch4 = 1 then
            high light3
        else
            low light3
        end if
    end if
    if switch2=0 and switch1=0 and switch3=0 and switch4=0 then    ' count down to timeout even while in learning loop  
    if time > timeout then do_reset   
    else    
        time=0
    end if
    goto waiting_to_learn_loop
'************ Learn a light position and set flag so we know that switch is done
learn0:
    gosub bulbset
'************ position gives you the output for this switch
    flag0 = 1    ' set flag
    light0 = bulb   ' remember position for this switch
    goto learn_end
learn1:
    gosub bulbset
'***********position gives you the output for this switch
     flag1 = 1    ' set flag
     light1 = bulb   ' remember position for this switch
     goto learn_end
learn2:
    gosub bulbset
 '************ position gives you the output for this switch
     flag2 = 1    ' set flag
     light2 = bulb   ' remember position for this switch
     goto learn_end
learn3:
    gosub bulbset
 '*********** position gives you the output for this switch
     flag3 = 1    ' set flag
     light3 = bulb   ' remember position for this switch
learn_end:
    if starting_lite = 1 then    'if starting with 1st lamp, sequence = 1-2-3-4
       inc position
   if position > 3 then have_learnt_all
       goto waiting_to_learn_loop
    end if
    if starting_lite = 2 then                'if starting with 2nd lamp, sequence = 2-1-4-3
       if position > 0 then                  'don't dec if position=0, will cause error
          dec position
       else
          position = 3                       'position was 0 before dec, set to "3"
       end if
   if position = 1 then have_learnt_all  'if position=1 then we have come full circle
       goto waiting_to_learn_loop            'not finished, loop and learn more switches
    end if
    if starting_lite = 3 then                'if starting with 3rd lamp, sequence = 3-4-1-2
       inc position
       if position > 3 then                  'if position greater greater than 4th lamp, reset to "0"
          position = 0
       end if
   if position = 2 then have_learnt_all  'if position=2 then we have come full circle
       goto waiting_to_learn_loop            'not finished, loop and learn more switches
    end if
    if starting_lite = 4 then                'if starting with 4th lamp, sequence = 4-3-2-1
       if position > 0 then                  'don't dec if position=0, will cause error
          dec position
       else
          goto have_learnt_all               'position is "0", we have learned last position.
       end if
           goto waiting_to_learn_loop
    end if   
; Toute manipulation sur les inters reset la variable time
; Si time >= timeout, la nouvelle séquence est validée.
have_learnt_all:
    if switch1 = 1 then
        high light0
        time=0
    else
        low light0
    end if
    if switch2 = 1 then
        high light1
        time=0
    else
        low light1
    end if
    if switch3 = 1 then
        high light2
        time=0
    else
        low light2
    end if
    if switch4 = 1 then
        high light3  
        time=0
    else
        low light3
    end if
'******** Set which bulb will start next round. (only if switches all learned)
    if b0 = 15 and switch1=1 and switch2=0 and switch3=0 and switch4=0 then  ' if switch 1 on alone, set lamp 1 first
        starting_lite=1
    end if
    if b0 = 15 and switch1=0 and switch2=1 and switch3=0 and switch4=0 then  ' if switch 2 on alone, set lamp 2 first
        starting_lite=2
    end if
    if b0 = 15 and switch1=0 and switch2=0 and switch3=1 and switch4=0 then  ' if switch 3 on alone, set lamp 3 first
        starting_lite=3
    end if
    if b0 = 15 and switch1=0 and switch2=0 and switch3=0 and switch4=1 then  ' if switch 4 on alone, set lamp 4 first
        starting_lite=4
    end if
    if time>timeout then do_reset
     goto have_learnt_all
bulbset:
    if position=0 then
       bulb = bulb1
    end if
    if position=1 then
       bulb = bulb2
    end if
    if position=2 then
       bulb = bulb3
    end if       
    if position=3 then
       bulb = bulb4
    end if
    return
audience_lockdown:
    if switch1 = 1 then
        high bulb1
    else
        low bulb1
    end if
    if switch2 = 1 then
        high bulb2
    else
        low bulb2
    end if
    if switch3 = 1 then
        high bulb3
    else
        low bulb3
    end if
    if switch4 = 1 then
        high bulb4
    else
        low bulb4
    end if
    goto audience_lockdown
;FIN DE PROGRAMME

 

 
Afficher la suite de cette page



Créer un site
Créer un site