Un plongeon dans l’informatique physique

Hier nous avons décide de faire un plongeon dans ce que les anglais appellent “Physical computing”, c’est a dire de l’informatique physique. Par “Informatique physique” ici signifie la construction de systèmes physiques interactifs en utilisant des logiciels et des matériels qui peuvent détecter des événements et répondre avec des réactions dans le monde analogique. Dans quelques mots, des systèmes que font de l’interaction avec le monde réel, à travers des composants electoniques.  D’abord nous avons entamé la discussion avec une comparaison des différents façons qui un micro-ordinateurs peut nous proposer pour interagir avec le monde réel.

Le monde réel est analogique, c’est pour ça qui nous faudrait des portes analogiques pour lire les données directement depuis un senseur analogique, comme une photorésistance, qui mesure la luminosité ambiance (pour allumer automatiquement une ampoule de sécurité pendant la nuit par exemple). Ces portes analogique sont disponibles sur des micro-contrôleurs comme le arduino one (dans l’image ici en bas).

Faute de portes analogique il faut soit acheter des convertisseurs analogique-numérique, ou s’inventer quelque chose. L’arduino est un micro-contrôleur, les prochaines possibilités qu’on regardera seront des micro-ordinateurs complets.

Plusieurs possibilités existent: Raspberry Pi, Banana Pi, Dragonboard… On a tout ça, nous nous concentrerons sur le Raspberry Pi version 3 (la courante) et nous jouerons avec ses pins GPIO (General Purpose Input Output) que sont tous digitales.

Plusieurs librairies pour Python existent pour faire interagir le Rasperry Pi avec le monde réel. Nous regarderons d’abord très brièvement la RPi.GIO et après nous jouerons un peu avec la gpiozero, beaucoup plus facile a manier pour les débutants. Dans un autre article, on verra comment lire un senseur analogique avec des condensateurs.

La librairie RPi.GPIO s’adresse a tout les fonctions de base du raspberry pi, tandis que la gpiozero est une librairie simplifiée et avec une couche autour des composants électroniques que nous utilisons et elle est partagée en deux parties: inputs (Buttons, senseurs de lumière etc) et outputs (LED,  RGBLED, Moteurs etc). Ici le pin-out du Raspberry pi.

Exemple d’utilisation de RPi.GPIO

# Importer la librairie RPi.GPIO 
import RPi.GPIO as GPIO 
from time import * 

# Modalité pour addresser les pins 
GPIO.setmode(GPIO.BOARD) 

# Le pin 7 est un pin de output 
GPIO.setup(7, GPIO.OUT) 

# Courant sur le pin 
GPIO.output(7, GPIO.HIGH) 

# Attendons 10 secondes 

sleep(10) 
# Plus de courant sur le pin 
GPIO.output(7, GPIO.LOW)

La librarie gpiozero est evidemment plus facile:

# Nous simulons un feux rouge, il y a aussi un DEL (ou LED) pour les 
# pietons et un "buzzer" pour signaler le passage pieton est permis 

# Import des librairies
from gpiozero import LED
from time import *

# Ici 4 est le GPIO 4, le pin 7 du connecteur
vert = LED(4)

# Faire reference à l'image du connecteur pour 
# Les autres pins... 
jaune = LED(5)
rouge = LED(13)
pieton = LED(26)
buzzer = LED(21)

# Nous attrappons une interruption clavier...
try:
    while True:
        vert.on()
        sleep(10)

        jaune.on()
        sleep(2)
        jaune.off()
        vert.off()

        rouge.on()
        pieton.on()
        
        for i in range(500): 
            buzzer.on()
            sleep(0.02)
            buzzer.off()
        pieton.off()
        rouge.off()
        
except KeyboardInterrupt:
    pass
# Si nous interrompons le feux rouge, tout s'eteigne 
finally:
    jaune.off()
    vert.off()
    rouge.off()
    pieton.off()

Et voilà! Nous avons démarré notre exploration dans le monde de l’informatique physique! La prochaine fois, on va réaliser un senseur de luminosité!

Et pour qui en veut savoir plus, voila des ressources utiles!

Librairie RPi.GPIO

Librairie gpiozero

Le numéro 3 du magazine MagPi en français avec simple article pour débutants.