Le projet
Peu de temps après le premier article sur le Raspberry et le montage aux trois DELs (ici), j’y ai ajouté un bouton afin de déclencher un cycle d’allumage/extinction des DELs (Ouais, l’article arrive un peu tard). Le premier montage tournait en boucle (rouge -> jaune -> vert) maintenant, il s’arrête au rouge et attend que l’on presse le bouton pour recommencer.
Le but était de dérouiller mes connaissances électroniques dans la partie détection.
La réalisation
Pour réaliser ce montage, on reprend exactement le même montage que dans l’article précédent. On va simplement y ajouter un bouton (et deux résistances) et modifier un peu le code Python.
Liste du matériel :
- un bouton poussoir;
- deux résistances (peu importe la valeur).
Le hardware
Voilà donc ce que nous devrons réaliser :
Nous relions la sortie de 3,3 volt du Raspberry à une résistance. L’autre côté de la résistance sera relié à une autre résistance qui elle même sera connectée au GPIO n°23 du Raspberry. La première (R2) résistance est là uniquement pour protéger la Raspberry d’un court circuit, c’est pour cela que ça valeur importe peu : des résistances de 90Ohms comme dans le montage précédent suffiront. La seconde est complétement inutile, c’est juste que lorsque j’ai fait le montage j’avais jugé utile d’en mettre une …
Ensuite, entre les deux résistances, nous ajoutons le dit bouton et nous relierons sa deuxième borne à la masse.
En temps normal, lorsque le circuit est au repos (lorsque l’on n’appuie PAS sur le bouton), le GPIO n°23 est à l’état haut. Lorsque l’on appuie sur le bouton, tout le courant part par la masse, le GPIO est donc à l’état bas.
Le montage final :
Le software
L’enjeu de la modification du programme est de lui faire prendre en compte la passage de l’état haut à l’état bas. Ce n’est pas bien difficile, la bibliothèque que nous utilisons gère cela.
Le code python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | """ Feu tricolore en Python """ import time import RPi.GPIO as GPIO import signal import sys rouge = 22 jaune = 17 vert = 18 bouton = 23 GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(rouge, GPIO.OUT) GPIO.setup(jaune, GPIO.OUT) GPIO.setup(vert, GPIO.OUT) GPIO.setup(bouton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #Ici, on ajoute la configuration du GPIO23 en entrée. def signal_handler(signal, frame): print "Fermeture en cours" GPIO.cleanup() sys.exit(0) def allume(couleur): GPIO.output(couleur, GPIO.HIGH) print "allume %d" % couleur def eteint(couleur): GPIO.output(couleur, GPIO.LOW) print "eteint %d" % couleur def changeCouleur(index): if(index == 0): allume(vert) eteint(rouge) return 1 elif(index == 1): allume(jaune) eteint(vert) return 1 elif(index == 2): allume(rouge) eteint(jaune) return 3 else: return 0 # Cette fonction gère un cycle def makeCycle(): i = 0 while i < 3: t = changeCouleur(i) i += 1 time.sleep(t) signal.signal(signal.SIGINT, signal_handler) makeCycle() while True: GPIO.wait_for_edge(bouton, GPIO.FALLING) # On attends le passage à l'état bas print "Bouton presse" makeCycle() # Une fois le passage à l'état bas détecté, on fait un cycle. print "Cycle termine" GPIO.cleanup() |
Voilà, le montage est terminé. Lorsque l’on appuie sur le bouton, un cycle Rouge -> Vert -> Jaune -> Rouge et attends que l’on appuie à nouveau pour recommencer.
C’est totalement inutile, mais formateur ;).
2 thoughts on “Un feu tricolore à base de Raspberry Pi”