Logo Mon Club Elec

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d’une impulsion PWM par saisie d’une valeur à l’aide d’un numpad (clavier numérique )

Le pcDuino est une plateforme de développement open source qui permet aux développeurs de créer des applications et des systèmes embarqués. Avec Pyduino, un langage de programmation Python spécialement conçu pour le pcDuino, les développeurs peuvent facilement contrôler les périphériques connectés à la plateforme. Dans cet article, nous allons voir comment utiliser Pyduino pour fixer la largeur d’une impulsion PWM par saisie d’une valeur à l’aide d’un numpad (clavier numérique).

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d’une impulsion PWM par saisie d’une valeur à l’aide d’un numpad (clavier numérique )

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d’une impulsion PWM par saisie d’une valeur à l’aide d’un numpad (clavier numérique )

Ce que l’on va faire ici

  • Dans ce code, la saisie d’une valeur numérique sur un numpad va fixer la largeur de l’impulsion PWM appliquée sur une broche dite PWM, ici la broche PWM0 (correspondant à la broche 3 sur le pcduino).
  • Ce programme exploite l’instruction analogWritePercent(broche, largeur) qui permet de générer très simplement une impulsion PWM (Pulse Width Modulation en anglais ou Modulation de Largeur d’Impulsion (MLI) en français). Cette instruction permet de moduler la largeur d’impulsion en %, la fréquence restant fixe aux alentours de 520 hz par défaut.
  • IMPORTANT : L’instruction analogWrite() n’est disponible que sur les broches 3, 5,6,9,10,11.

Par accès VNC, il est possible avec ce code de contrôler à distance la largeur de l’impulsion PWM : y compris par tablette tactile ! (en saisissant au sein du client VNC sur la tablette la valeur voulue suivi de <entrée> puis envoi)

  • Remarquer que l’on utilise ici la fonction input() qui permet la saisie d’une valeur à la différence de l’instruction raw_input() qui permet la saisie d’une chaîne.

Noter que l’utilisation d’un keypad numérique USB (ou numpad) permet de remplacer simplement et avantageusement (ne coûte que quelques euros) un clavier numérique matriciel 4×4 (avec signes d’opération et touche de validation!), même si aucun écran n’est connecté, tant que le programme Pyduino a le focus, ce qui est obligatoirement le cas une fois le programme lancé, tant qu’on n’utilise pas de souris ! De plus, le code de gestion du clavier est très simple, puisqu’il est géré par le système !

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

Pré-requis

Pour Comprendre

Une impulsion PWM est une impulsion (ou onde) carrée, c’est à dire que le niveau de l’onde est soit HAUT soit BAS. Cette impulsion se répète dans le temps de façon continue.

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

Une telle onde, comme toute onde est caractérisée par sa période, c’est à dire la durée entre 2 impulsions. La définition d’une onde PWM (Pulse Width Modulation en anglais ou Modulation de Largeur d’Impulsion (MLI) en français) se fait en modifiant la largeur du niveau HAUT par rapport à la durée de la période : la largeur du niveau HAUT est appelée « duty cycle ».

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

Avec l’instruction analogWrite(broche, largeur), on va pouvoir générer une impulsion PWM avec une largeur de « duty cycle » voulue :

  • si valeur = 0, le duty cycle sera de 0% de la période
  • si valeur = 255, le duty cycle sera de 100% de la période
  • si valeur = 127, le duty cycle sera de 50% de la période
  • si valeur = n, le duty cycle sera de (n/255)*100% de la période.

Schéma fonctionnel

  • Le numpad numérique est utilisé ici avec une LED en sortie sur la broche 3 permettant de visualiser la sortie PWM :
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

Matériel nécessaire

Système

  • Le pcDuino
  • Un clavier numérique (numpad) :
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

E/S

  • une plaque d’essai pour montage sans soudures,
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )
  • des straps,
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )
  • une LED rouge 5mm,
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )
  • une résistance 1/4w de 270 Ohms environ,
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

Instructions de montage

  • Connecter le Numpad sur un port USB.
  • Connecter sur une des broches PWM une LED et sa résistance (270 Ohms) en série connectée au 0V

Le montage à réaliser

Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )

Le fichier *.py

Copier/coller ce code dans l’éditeur Geany :

#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino – par X. HINAULT – www.mon-club-elec.fr
# Juin 2013 – Tous droits réservés – GPLv3
# voir : https://github.com/sensor56/pyDuino

# la saisie d’une valeur fixe l’impulsion pwm

from pyduino import * # importe les fonctions Arduino pour Python

# entete declarative

#— setup —
def setup():
        return  # si vide

# — fin setup —

# — loop —
def loop():

        # try.. except.. permet d’éviter le blocage si erreur de saisie
        try:
                reponse=input(« Veuillez saisir une valeur entre 0 et 100% « )  # attention : encadrer chaine avec «  »
                # sinon elle sera consideree comme le nom d’une variable – voir raw_input pour saisie de chaine
        except: # erreur
                print (« Veuillez recommencer ! »)
                return  # sort de la fonction loop

        print (« Vous avez saisi : «  + str(reponse) )

        pwmValue=constrain(reponse,0,100)
        print « Valeur pwm = «  + str(pwmValue) + « % »

        analogWritePercent(PWM0,pwmValue) # largeur impulsion en 0-100% sur PWM0 = broche 3 pcduino

# — fin loop —

#— obligatoire pour lancement du code —
if __name__==« __main__ »: # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin

 

Ce code est également disponible ici : https://raw.github.com/sensor56/pyduino-exemples/master/Periph/InputPwm.py

Utilisation

  • Réaliser le montage et connecter le clavier sur le port USB
  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal doit apparaître :
    • saisir une valeur entière comprise entre 0 et 100% et valider avec entrée. La valeur saisie doit s’afficher.
    • la luminosité de la LED varie en conséquence.
  • Si vous disposez d’un oscilloscope, vous pourrez vérifier que la largeur d’impulsion correspond à la valeur saisie.
Programmer le pcDuino : Pyduino : périphériques : Fixer la largeur d&rsquo;une impulsion PWM par saisie d&rsquo;une valeur à l&rsquo;aide d&rsquo;un numpad (clavier numérique )
  • Une fois, le programme lancé, plus besoin d’accès VNC, ni d’écran : il est possible de saisir des valeurs utilisables par le programme à partir du seul numpad.

Discussion technique

  • L’utilisation de try… except… permet d’éviter tout blocage en cas d’erreur de saisie.
Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.