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
 
 

Stop and Go

pour piste mini z

Le projet "Stop and Go" est la réponse proposée à une question de laurentby sur un forum d'électronique, voir ICI
En résumé, il s'agit d'installer une barrière de pénalité sur une piste de voitures télécommandées mini z.

Le cahier des charges :
Le Sart and Go est une sorte de sas constitué d'un portique avec cinq leds rouges, d'une barrière "Arrivée" et d'une barrière "Départ".
A la mise sous tension, le programme entre dans une boucle d'attente. Pendant ce temps, plusieurs actions sont possibles:
  • le temps d'alarme est réglable par un potentiomètre, de 0 à 10 s
  • l'appui sur le poussoir permet de tester les barrières, si le tsop récepteur fonctionne et est éclairé par la led émettrice, la led correspondante du portique est éteinte. Si une barrière ne fonctionne pas, cette led est allumée (voir démo sur la vidéo maquette).
    En relâchant le poussoir, on lit en binaire sur les leds le temps de pénalité enregistré en mémoire. Ex: 1010 =8+2=10s.
On sort de cette boucle lorqu'une voiture coupe la barrière "arrivée", les cinq leds du portique s'allument. Après le dépassement complet de cette barrière, le décompte du temps de pénatité commence (réglable de 1 à 15 s). Les cinq dernières secondes éteignent les leds une à une.

Lorsque toutes les leds sont éteintes, la voiture peut franchir la barrière "départ" sans provoquer d'alarme. Dans le cas contraire, l'allumage des leds est figé et une alarme visuelle et sonore se déclenche (temps réglable de 0 à 10 s), ce temps peut être abrégé en appuyant sur le poussoir.
Après l'alarme et le dégagement de la barrière "départ", le système est automatiquement recyclé.
Le schéma:

La maquette:

La très belle réalisation de laurentby:

Le code:
Un programme en basic se lit assez facilement, avec quelques mots d'anglais simples. Ce qui suit le caractère ";" est un commentaire.

A la mise sous tension, le système entre dans une boucle d'attente. Un appui sur le poussoir pendant cette boucle envoie dans un sous programme de test barrière et réglage du temps de pénalité (regtempo). Sans appui pendant 3s, le programme retourne dans la boucle d'attente.
Le franchissement complet de la barrière "arrivée" déclenche le comptage du temps de pénalité. Le franchissement de la barrière "départ" envoie le programme dans le sous programme d'interruption (interrupt), on teste la variable temps (time), si cette valeur est inférieure au temp de pénalité, une alarme est déclenchée.
;StopAndGo MM 20/03/2022
#picaxe 14M2    ;pour vérif syntaxe en ft spéfifications du 14M2
setfreq M16        ;Fréquence horloge à 16 MHz; réglage 38kHz plus précis
symbol LedIR = C.0    ;sortie leds IR
symbol recepA = pinC.1      ;valeur logique entrée TSOP arrivée
symbol recepD = pinC.2        ;idem TSOP départ
symbol pous=pinC.3            ;valeur entrée poussoir sur C.3
symbol alarm=B.5        ;sortie alarme        
symbol potar=C.4        ;réglage temps alarme
symbol tempo=b1        ;temps pénalité
symbol rest=b2            ;temps restant
symbol Talarm=b3        ;valeur temps alarme
symbol test=b4            ;pour visu test barrières    
dirsB=%11111    ;désignation broches B0 à B4 en sorties, pour fonctionnement de pinsB
    read 0,tempo    ;lecture de la tempo mémorisée en EEPROM
;***** option 10s par défaut *******
    If tempo=0 then    ;Si la lecture EEPROM donne 0 (Ex. après programmation)
        tempo=10            ;tempo pénalité à 10s par défaut    
    endif                    ;Pour enregistrer une mémo à 0 => 3 lignes à supprimer
;*******************************
    pwmout LedIR, 104,209 ;activation Emetteur IR PWM 38 kHz à 16 MHz; RC=50%    
    pullup %100000000000        ;pullup sur C.3, R interne au +5V
    do        ;boucle principale
        low alarm        ;sortie alarm niveau bas        
        do     ;boucle attente barrière arivée
            if pous=0 then        ;poussoir appuyé
                gosub regtempo    ;sous prog réglages
            endif
            pinsB=0        ;toutes sorties B à 0
            readadc potar,Talarm        ;lecture tempo alarme
            Talarm= 10 * Talarm/240        ; calibrage de 0 à 10 s    
        loop while recepA=0    ;boucle tant que tsop éclairé
        pinsB=%11111         ;allumage les 5 leds
        do loop while recepA=1    ;attente passage après barrière
        setint %100,%100    ;interruption sur C.2 (barr départ) niveau haut    
        time=0                ;RAZ compteur de secondes (timer 1s)
        do            ;boucle selectcase
            rest=tempo-time        ;écart temporisation et temps attente
            select case rest    ;selection en ft valeur de rest            
                case 4
            pinsB=%1111            ;4 leds allumées
                case=3    
            pinsB=%111    
                case=2    
            pinsB=%11    
                case=1
            pinsB=%1    
                case=0
            pinsB=%0                ;tout éteint
            exit                     ;case=0 => sortie de boucle
            end select                
        loop
    loop    ;fin boucle principale
;*************************************
interrupt:    ;interruption si barrière départ franchie
    if time<tempo then ;Oh lala, il a grillé le feu!!!
        time=0        
        do        ;boucle alarme
            high alarm        ;alarme ON
            pause 1000        ;=250ms à 16MHz
            low alarm        ;alarme off
            pause 1000
        loop while time<Talarm or pous=0    ;temps alarme
        low alarm
        do loop while pous=0    ;attente arret poussoir    
    endif
    do loop while recepD=1  ;attente sortie barrière départ    
    reset            ;RAZ du programme (soluce facile RAZ piles sub/return)
;******************************************
regtempo:        ;réglage temporisations tempo et temps larme
    do
        test=recepD*2+recepA    ;test des barrières: led allumée=défaut
        pinsB=test                ;visu test sur portique
    loop while pous=0        ;attente relachement    
    pinsB=tempo            ;visu tempo pénalité sur portique en binaite: %1010 = 8+2=10
    do
        time=0
        do         
            if time>2 then     ;sortie auto après 3 secondes sans appui
                write 0,tempo    ;mémo temps pénatité en EEPROOM
                return            ;retour boucle principale
            endif
        loop while pous=1        ;fin boucle attente sans appui    
        do loop while pous=0    ;boucle attente relachement
        inc tempo        ;comptage appuis poussoir
        if tempo>15 then    ;bouclage sur 15s
            tempo=0
        endif
        pinsB=tempo        ;visualisation tempo sur leds
    loop



Créer un site
Créer un site