Gestion des entrées analogiques

(par le protocole ”Firmata standard”)

 


Pour lire la valeur de la tension d’une entrée analogique (par exemple, la broche A0), il faut la déclarer au préalable en entrée analogique avec la commande suivante :               

pinA0 = board.get_pin(‘a:0:i’) 

La syntaxe est:

.a” pour analogique,

. 0” est le numéro de la broche A0,

. i” pour input ,

. ”board” est l’objet créé lors de l’appel de la méthode ”Arduino” du module ”pyfirmata”.

On peut définir une fonction déclarant plus facilement une broche en entrée analogique :

def AnalogInput(board,pin):

AnalogInputPin=board.get_pin(‘a:’+ str(pin) +’:i’)

return AnalogInputPin


La syntaxe pour déclarer la broche A0 en entrée analogique est alors plus simple :

pinA0 = AnalogInput(board,0)

Ensuite, on utilise la fonction read()” pour lire la valeur de la tension de la broche :

pinA0.read() 

Attention :

. La fonction read()” pour une broche déclarée en entrée analogique retourne une valeur décimale entre 0 et 1 (alors qu’en langage Arduino, ”analogRead()” retourne un entier entre 0 et 1023).  

. Il faut également utiliser un itérateur afin d’éviter de saturer la communication série entre l’Arduino et l’ordinateur hôte.

Exemple :

Notre circuit, support des exemples, dispose d’un potentiomètre dont le ”point milieu” est relié à la broche A0 de l’Arduino. Suivant la position du ”point milieu”, la tension appliquée à la broche A0 varie entre 0 et 5 V. On peut donc utiliser le potentiomètre pour régler la luminosité de la DEL rouge, par exemple.

Le programme (LedRVBAnalogInput.py) suivant, lit la valeur de la broche A0 et règle la luminosité de la DEL rouge à cette valeur :

 


Déroulement du programme
 :

Importation des librairies et définition de fonctions :

. Le module ”ConnectToArduino.py”, contenant les fonctions de connexion à l’arduino via le protocole ”Firmata standard”,

. Toutes les fonctions utiles à l’utilisation de PyFirmata” (fonction de déclaration des entrées et sorties, d’itérateur, d’écritures…) que nous avons définies jusqu’à présent ont été regroupées dans un fichier Python, nommé PyFirmataDef.Py” que l’on peut importer dans tous les programmes, à condition que le fichier des fonctions soit dans le même dossier que le fichier du programme, avec l’instruction :

from PyFirmataDef import *

. ”time” pour la gestion des temps de pause.

Déclaration des constantes et variables :

. PinLedR = 11 (constante correspondant au n° de la broche sur laquelle la DEL rouge est connectée)

. PinPot = 0 (constante correspondant au n° de la broche A0 sur laquelle le potentiomètre est connecté)

. ValPot = 0 (variable pour stocker la valeur de l’entrée analogique A0)

. PortComArduino (port COM sur lequel l’Arduino est connecté)
 

Connexion à l’Arduino (Idem programme précédent)

. Détection du port COM , tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:

PortComArduino = SelectPortCOM()

board = OpenPortCom(PortComArduino)

. Si la connexion à l’Arduino est réussie :

–> Déclaration de la broche de la DEL rouge en sortie analogique :

PinPWM = AnalogOutput(board, PinLedR)

–> Déclaration de la broche du potentiomètre en entrée analogique :

InputPin = AnalogInput(board, PinPot))

–> Lancement de l’itérateur :

ArduinoIterateur = Iterateur(board)

Boucle principale du programme (boucle ”while True”) :

. Lecture de la valeur (nombre décimal flottant entre 0 et 1) de la broche du potentiomètre :

ValPot = InputPin.read()

. La luminosité de la DEL rouge est réglée à cette valeur :

AnalogWrite(board,PinLedR, ValPot)

– Fin du programme en appuyant sur Ctrl-C

–> La DEL rouge est éteinte et le port COM est fermé.