Entrées - sorties analogiques
Entrée analogique
Dans cette partie, nous allons voir comment récupérer l'information depuis un capteur analogique. Cela peut être un potentiomètre, une photorésistance pour lire la luminosité ambiante, un capteur de température type LM35, etc...
Sur Arduino, on utilise la fonction analogRead()
qui renvoie un entier entre 0 et 1023 car le convertisseur analogique-numérique (ADC) fonctionne sur 10 bits.
Sur les cartes Adafruit M0 et M4, nous avons un convertisseur ADC sur 12 bits, ce qui permet une bien meilleure précision dans la lecture des informations.
Méthode : Lecture d'une information analogique
Dans notre exemple, nous allons lire la luminosité ambiante à partir d'une photorésistance. Nous utiliserons le montage suivant. C'est un grand classique quand il s'agit d'utiliser une photorésistance. On crée un pont diviseur de tension entre la photorésistance et une résistance de 10Kohms puis on lit la tension variable au milieu.
Attention toutefois : la carte Adafruit - contrairement à l'Arduino - accepte des tensions maximales sur ses broches de 3,3V. On alimente donc notre montage depuis la sortie 3,3V et non 5V !
import time
import board
import analogio
adc = analogio.AnalogIn(board.A0)
while True:
tension = adc.value * adc.reference_voltage / 65535
print((tension, ))
time.sleep(1)
Complément : Explications
Nous utilisons cette fois-ci la librairie analogio. Celle-ci gère les entrées via AnalogIn, mais aussi les sorties via AnalogOut. Les sorties analogiques n'existent pas sur l'Arduino.
La lecture de la broche se fait depuis l'objet
adc
.adc.reference_voltage
contient 3.3. C'est la tension de référence.adc.value
renvoie un entier non signé sur 16 bits - donc entre 0 et 65535. Néanmoins la carte n'échantillonne que sur 12 bits. Les valeurs sont donc comptées de 16 en 16.
Sortie analogique
La plupart des cartes n'ont pas de sortie analogique. Elles utilisent une sortie numérique modulée en largeur d'impulsion (PWM) pour simuler une tension intermédiaire. La carte Adafruit Metro M4 possède deux sorties analogiques (DAC) sur A0 et A1 (La carte Metro M0 comme la CPX n'en possède qu'une seule sur A0). L'utilisation est très simple. Nous allons dans l'exemple qui suit en voir une illustration.
Méthode :
Dans le montage ci-contre, nous allons mesurer l'illumination à l'aide d'un voltmètre : plus la luminosité ambiante est forte, plus la tension mesurée sera élevée.
Le code est très simple. Il faut simplement noter que les valeurs pour la sortie analogique sont sur 12 bits donc entre 0 et 4095.
Comme on peut le constater, les valeurs lues sur le voltmètres sont cohérentes avec les lectures faites à la partie précédente.
import time
import board
import analogio
adc = analogio.AnalogIn(board.A0)
dac = analogio.AnalogOut(board.A1)
while True:
tension = adc.value * adc.reference_voltage / 65535
dac.value = adc.value//16
print(adc.value)
time.sleep(1)