(par le protocole ”Firmata Express”)
Pour utiliser une broche de l’Arduino en sortie analogique (mode PWM), il faut au préalable la déclarer avec la commande suivante :
loop.run_until_complete(board.set_pin_mode_pwm(pin))
où :
– ”board” est l’objet créé lors de l’appel de la méthode ”PymataExpress” du module ”pymata-express”,
– ”pin” est le numéro de la broche du microcontrôleur que l’on souhaite déclarer en sortie analogique,
– ”loop” est la boucle des tâches ”asyncio” déclarée ainsi :
loop = asyncio.get_event_loop()
Le plus simple est de créer une fonction qui sera appelée dans nos programmes en Python pour déclarer une broche en sortie analogique :
def Set_AnalogOutput_Pin(board,pin): loop.run_until_complete(board.set_pin_mode_pwm(pin)) |
Ainsi, l’instruction pour déclarer la broche ”11”, de l’objet ”board”, en sortie analogique est:
Set_AnalogOutput_Pin(board, 11)
La tension de la broche N°11 déclarée en sortie analogique est réglable en modifiant le rapport cyclique du signal PWM entre val = 0 (0 %) et val = 255 (100%) :
loop.run_until_complete(board.analog_write(pin, val))
–> si val = 0, alors la tension est de 0 V
–> si val = 255, alors la tension est de 5 V
–> si val = 128, alors la tension est de 2,5 V
De même, on peut définir une fonction pour l’écriture sur une sortie analogique :
def Analog_Write(board, pin, val): loop.run_until_complete(board.digital_write(pin, val)) |
Ainsi, l’instruction pour régler la sortie analogique ”11”, de l’objet ”board”, à 2,5 V est :
Analog_Write(board, 11, 128)
Exemple :
L’exemple d’application de la gestion des sorties analogiques avec ”Firmata Express” est le même que celui avec ”Firmata Standard”.
Le programme (”LedRVBAnalogOutput.py”) va demander à l’utilisateur de saisir un nombre entier entre 0 et 255 de façon à régler la tension de la broche sur laquelle la DEL rouge est connectée entre 0 et 5 V.
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 Express”,
. La bibliothèque ”asyncio” nécessaire au fonctionnement de ”PymataExpress”
. Fonction ”Set_AnalogOutput_Pin” pour déclarer une broche en sortie analogique,
. Fonction ”Analog_Write” pour modifier la tension d’une broche analogique,
. Fonction ”Arduino_Exit” pour fermer le port COM et se déconnecter de l’Arduino
– Déclaration des constantes et variables :
. PinLedR = 11 (constante correspondant au n° de la broche sur laquelle la DEL rouge est connectée)
. ChoixRP =False (variable booléenne indiquant si la saisie du rapport cyclique a été réalisée)
. PortComArduino (port COM sur lequel l’Arduino est connecté)
– Connexion à l’Arduino :
. Détection du port COM :
PortComArduino = SelectPortCOM()
. Tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:
board = OpenPortCom(PortComArduino)
. Si la connexion à l’Arduino est réussie:
–> Définition d’une boucle asyncio :
loop = asyncio.get_event_loop()
–> Déclaration de la broche de la DEL rouge en sortie analogique :
Set_AnalogOutput_Pin(board, PinLedR)
– Boucle principale du programme (boucle ”while True”) :
. Demande de saisie de la valeur de la luminosité souhaitée entre 0 et 255 (un test est effectué sur la valeur saisie):
saisie = input(””)
. La luminosité de la DEL rouge est réglée à la valeur saisie :
AnalogWrite(board,PinLedR,saisie)
– Fin du programme en appuyant sur Ctrl-C :
–> La DEL rouge est éteinte et le port série est fermé.