Articles

Affichage des articles du décembre, 2019

Musique & Mathématiques

Image
Lorsqu'on cherche à émettre de la musique sur un ordinateur, le paramètre à passer est une fréquence. Le présent article rappelle le principe de calcule des fréquences pour chaque note. Gamme tonale En musique tonale, la gamme majeure définit huit degrés. Les espaces entre les degrés sont définis en tons. En général, l'espace entre deux degrés fait un ton, sauf pour les espaces Médiante-Sous-dominante et Note sensible-Octave qui ne font qu'un demi-ton. Une octave fait donc 12 demi-tons. Le tableau ci-dessous illustre ces définitions pour la gamme de Do Majeur : Degré Note (en DO Majeur) Espace (en tons) Tonique Do Sus-tonique Ré 1 Médiante Mi 1 Sous-dominante Fa 1/2 Dominante Sol 1 Sus-Dominante La 1 Note sensible Si 1 Octave Do 1/2 Intervalles Les intervalles entre les degrés font aussi l'objet de leur propre terminologie. Voici un tableau résumant ceux-ci : Intervalle Nombre de demi-tons Exemples en Do Majeur Prime (Uni...

Jouer un fichier .wav en Python sur la brique EV3

Image
Méthode de la classe Sound pour jouer un fichier Wav L'affichage d'un fichier image s'effectue par l'invocation de la méthode play_file() de la classe Sound . Cette instruction est équivalente à la brique graphique ci-dessous : Elle est déclarée comme ci-dessous : play_file(wav_file, volume=100, play_type=0) Programmation from ev3dev2.sound import Sound HP = Sound() HP.play_file("res/sounds/Fanfare.wav") Explications La classe Sound est importée à partir du module sound de la bibliothèque ev3dev2 . La classe Sound  n'est instanciée qu'une seule fois. Cette instance est affecté à une constante globale HP . Pour jouer un fichier son, on invoque la méthode play_file() de la classe Sound sur l'instance HP . Le paramètre wav_file de la méthode  play_file () est une chaîne de caractères contenant le chemin relatif par rapport au fichier du programme Python qui l'utilise. Utilisation des fichiers sons de Lego Le lo...

Effets sonores sur la brique EV3 en Python

Image
La brique EV3 du Lego MindStorm est dotée d'un haut-parleur à partir duquel on peut entendre des sons générés par programmation. Ce haut-parleur est assez rudimentaire et de qualité médiocre. Mais il permet de générer quelques effets sonores intéressants.  La programmation du son sur la brique EV3 passe par la classe Sound de la bibliothèque ev3dev2 . Cette classe doit être instanciée et les sons sont émis par l'invocation des méthodes de cette classe. La documentation de cette classe est disponible « ici ». Jouer des sons sur la brique EV3 Le logiciel de programmation par briques graphiques livré avec le kit du robot Lego MindStorm propose une brique Action pour les effets sonores. En fonction des données à jouer, cette brique est déclinée de plusieurs façons. En Python, la classe Sound expose les méthodes correspondantes. La classe Sound La classe Sound  se trouve dans le module ev3dev2.sound  et doit être instanciée une fois pour être utilisée. ...

Ecrire en Python sur l'écran de la brique EV3

Image
La brique graphique d'action Affichage proposée par le logiciel de programmation des robots livré propose des déclinaisons permettant d'écrire sur l'écran LCD de la brique EV3. La bibliothèque ev3dev2 propose des fonctions équivalentes dans la classe Display . Méthodes d'écriture de la classe Display Ces méthodes permettre d'écrire une chaîne de caractères sur l'écran. Elles correspondent aux variantes des briques graphiques d'affichage ci-dessus. Elle sont déclarées comme suit : text_pixels(text, clear_screen=True, x=0, y=0, text_color='black', font=None) text_grid(text, clear_screen=True, x=0, y=0, text_color='black', font=None) Les paramètres passés correspondent aux paramètres des briques graphiques : text est la chaîne de caractères à afficher. clear_screen  indique si l'écran doit être effacé avant l'affichage. Par défaut, ce paramètre est initialisé à  True . Mais, la plupart du temps, l'affichage nécessit...

Afficher sur l'écran de la brique EV3 en Python

Image
La brique EV3 du Lego MindStorm est dotée d'un écran LCD sur lequel on peut afficher un contenu par programmation. Cet écran, assez rudimentaire, et monochrome et a une taille de 178 x 128 pixels.  La programmation de l'écran passe par la classe Display de la bibliothèque ev3dev2 . Cette classe doit être instanciée et les affichages sont effectué par l'invocation de l'une des méthodes exposée. La documentation de cette classe est disponible « ici ». Afficher sur l'écran de la brique EV3 Le logiciel de programmation par briques graphiques livré avec le kit du robot Lego MindStorm propose une brique Action pour afficher des données sur l'écran LCD. En fonction des données à afficher, cette brique est déclinée de plusieurs façons. En Python, la classe Display expose les méthodes correspondantes. La classe Display La classe Display s'appuie sur la bibliothèque  PIL . Cette bibliothèque permet de manipuler les images en langage Python. Les pro...

Afficher une image en Python sur l'écran de la brique EV3

Image
Le logiciel de programmation par briques graphiques livré avec le kit du robot Lego MindStorm dispose de nombreuses images. Pour les utiliser, il faut le recopier dans le projet du programme. En principe les fichiers des images Lego se trouvent dans le répertoire C:\Program Files\LEGO Software\LEGO MINDSTORMS EV3 Home Edition\Resources\BrickResources\Retail\Images\files . Une bonne pratique consiste à créer un répertoire res dans le projet pour les ressources, que l'on peut subdiviser en deux sous répertoires images qui contient tous les fichiers des images utilisées par le projet et sounds pour les fichiers des sons. Méthode d'affichage des images de la classe Display L'affichage d'un fichier image s'effectue par l'invocation de la méthode display_image() de la classe Display . Cette instruction est équivalente à la brique graphique ci-dessous : Elle est déclarée comme ci-dessous : image_filename(filename, clear_screen=True, x1=0, y1=0, x...

Dessiner en Python sur l'écran de la brique EV3

Image
La brique graphique d'action Affichage proposée par le logiciel de programmation des robots livré propose des déclinaisons permettant de dessiner sur l'écran LCD de la brique EV3. La bibliothèque ev3dev2 propose des fonctions équivalentes dans la classe Display . Méthodes de dessin de la classe Display Ces méthodes permettent de dessiner sur l'écran. Elles correspondent aux variantes des briques graphiques d'affichage ci-dessus. Elles sont déclarées comme suit : line(clear_screen=True, x1=10, y1=10, x2=50, y2=50, line_color='black', width=1) rectangle(clear_screen=True, x1=10, y1=10, x2=80, y2=40, fill_color='black', outline_color='black') circle(clear_screen=True, x=50, y=50, radius=40, fill_color='black', outline_color='black') point(clear_screen=True, x=10, y=10, point_color='black') Les paramètres passés correspondent, à quelques exceptions près, aux paramètres des briques graphiques : clear_screen ...

Utilisation du squelette robot.py (IV - La classe RobotExplorer)

Image
Cet article constitue le quatrième d'une série consacrée à la programmation d'applications robotiques en langage Python. Dans cette série, cinq classes sont présentées successivement : La classe Robot . La classe RobotTask . La classe RobotError . La classe RobotExplorer . La classe IRControlledTankTask . La classe RobotExplorer s'appuie sur la classe Robot . Cette classe se trouve dans le module robot.py . Ce module, téléchargeable  ici , doit être inclus dans le projet dans lequel il est utilisé.  La classe RobotExplorer Dériver la classe Robot n'offre que peu d’intérêt car toute l'intelligence se trouve en réalité dans les tâches qui lui sont attachées. Cependant, cela peut être utile pour rassembler toutes les constantes structurelles d'un robot comme les moteurs, les capteurs et les constantes géométriques ou mécaniques. Voici un exemple adapté au robot Explorer dont la construction a fait l'objet d'un article intitulé «  Construct...

Utilisation du squelette robot.py (V - La classe IRControlledTankTask)

Image
Cet article constitue le cinquième et dernier de la série consacrée à la programmation d'applications robotiques en langage Python. Dans cette série, cinq classes ont été présentées successivement : La classe Robot . La classe RobotTask . La classe RobotError . La classe RobotExplorer . La classe IRControlledTankTask . La classe  IRControlledTankTask  s'appuie sur la classe RobotTask . Cette classe se trouve dans le module robot.py . Ce module, téléchargeable  ici , doit être inclus dans le projet dans lequel il est utilisé.  La classe  IRControlledTankTask L’essentiel de la programmation d'un robot en Python consiste à créer une nouvelle tâche définissant la liste des instructions permettant de lire les différents capteurs pour effectuer les actions adéquates. En principe, les tâches doivent fonctionner en mode parallèle ( multithreading ) et être associées à un robot. Le plus simple consiste à dériver la classe RobotTask pour surcharger d...

Squelette d'un programme de robotique (III - La classe RobotError)

Image
Cet article constitue le troisième d'une série consacrée à la programmation d'applications robotiques en langage Python. Dans cette série, cinq classes sont présentées successivement : La classe Robot . La classe RobotTask . La classe RobotError . La classe RobotExplorer . La classe IRControlledTankTask . Les classes Robot , RobotTask et RobotError sont rassemblées dans un module Python : robot.py . Ce module, téléchargeable  ici , doit être inclus dans le projet dans lequel il est utilisé. Bien que les exemples soient donnés dans le contexte d'un robot Lego MindStorm EV3, ce module peut servir de base pour n'importe quel robot programmé en Python. La classe RobotError Les classes Robot et RobotTask sont intimement associées dans la programmation robotique. Les différentes méthodes qui les composent contrôlent la nature des paramètres passés. En cas de paramètres erronés, une exception est levée. Afin de distinguer les exceptions propres à ces classe...

Squelette d'un programme de robotique (II - La classe RobotTask)

Image
Cet article constitue le second d'une série consacrée à la programmation d'applications robotiques en langage Python. Dans cette série, cinq classes sont présentées successivement : La classe Robot . La classe RobotTask . La classe RobotError . La classe RobotExplorer . La classe IRControlledTankTask . Les classes Robot , RobotTask et RobotError sont rassemblées dans un module Python : robot.py . Ce module, téléchargeable à  ici , doit être inclus dans le projet dans lequel il est utilisé. Bien que les exemples soient donnés dans le contexte d'un robot Lego MindStorm EV3, ce module peut servir de base pour n'importe quel robot programmé en Python. La classe RobotTask La classe RobotTask constitue la classe de base de toutes les tâches robotiques pouvant être affectées un robot de classe Robot . Comme elles sont toutes structurées de la même façon, il est utile de disposer d'un modèle facile à dériver pour les adapter à chaque contexte nécessaire....