Page 1 of 1

Module Python afficheur 7 segments TM1637 TI-Nspire CX II

Unread postPosted: 02 Jun 2021, 10:27
by critor
12212Texas Instruments fait de gros efforts pour rendre la programmation de ses calculatrices accessible à tous et toutes. Le constructeur a prêté une attention toute particulière aux plus jeunes et non initiés, souhaitant leur permettre de créer tous les projets imaginables sans avoir à se concentrer sur des difficultés annexes. :)

Sur les calculatrices TI-Nspire CX, TI-83 Premium CE et TI-84 Plus CE, il était possible de connecter l'interface TI-Innovator Hub, le robot pilotable TI-Innovator Rover, la grille programmable TI-RGB Array ou encore l'adaptateur TI-SensorLink pour capteurs analogiques Vernier.
Tous ces éléments ont de plus le gros avantage d'être utilisables directement avec le langage Python des derniers modèles TI-Nspire CX II, TI-83 Premium CE Edition Python et TI-84 Plus CE Python, faisant de l'écosystème Texas Instruments le seul Python connecté ! :bj:

Un superbe support pour les enseignements scientifiques au lycée maintenant qu'ils partagent le même langage de programmation, notamment en SNT, spécialité NSI, SI et Physique-Chimie, avec le gros avantage de la mobilité. En effet, les programmes produits et données collectées restent présents dans la calculatrice apportée par chaque élève à chaque cours, ce qui allège la charge logistique de l'enseignant. Données et algorithmes peuvent donc être traités / travaillés à la prochaine séance, en devoir à la maison ou même de façon transdisciplinaire en collaboration avec un autre enseignant ! :D

7757Le TI-Innovator Hub dispose de plusieurs actionneurs intégrés :
  • LIGHT : diode rouge
  • COLOR : diode RGB
  • SOUND : haut-parleur

En plus de ceci, le TI-Innovator Hub te permet de connecter des actionneurs externes :
  • soit sur ses ports OUT 1, OUT 2 et OUT 3 des actionneurs Grove
  • soit sur son port breadboard à 10 broches programmables

Nombre d'actionneurs différents sont gérés et contrôlables directement d'une simple ligne.

Commençons déjà par les actionneurs les plus simples supportés aussi bien au format Grove que breadboard :
  • LED : diode
  • SPEAKER : haut-parleur
  • DCMOTOR : moteur à courant continu
  • BUZZER : buzzer
  • RELAY : relais
  • SQUAREWAVE : générateur de signal rectangulaire
7591139557517


D'autres actionneurs plus évolués sont supportés uniquement au format Grove :
  • POWER : transistor de puissance
  • VIB.MOTOR : moteur à vibrations
  • SERVO : servomoteur (uniquement sur le port OUT3 dédié à l'alimentation en 5 Volts)
75897588


Et d'autres uniquement au format breadboard :
  • RGB : diode RGB
  • SERVO.CONTINUOUS

Le TI-Innovator Hub te permet également d'utiliser des actionneurs non supportés, aussi bien analogiques (ANALOG.OUT) que numériques (DIGITAL.OUT).

Pour les plus simples une connexion Grove peut suffire, tu auras juste à calculer correctement la valeur à écrire.

Pour les actionneurs les plus complexes il faut écrire un véritable pilote.

Parmi ce large éventail d'actionneurs directement gérés par le TI-Innovator Hub, on pouvait regretter l'absence d'afficheurs à segments.

D'autant plus dommage qu'il existe des afficheurs à segments utilisant le format Grove et donc déjà connectables directement...

7601Les afficheurs à segments sont constitués de cellules permettant chacune d'afficher un chiffre ou une lettre. On distingue :
  • les cellules numériques : dédiées à l'affichage de chiffres, elles sont constituées de 7 ou 8 segments (selon si le chiffre peut être accompagné du séparateur décimal)
  • les cellules alphanumériques : pouvant afficher à la fois des chiffres et des lettres, elles sont constituées de 14 segments

Aujourd'hui nous allons nous intéresser plus particulièrement aux afficheurs numériques à 4 cellules.

On pourrait imaginer relier directement les différentes broches de l'afficheur au port breadboard du TI-Innovator Hub, puis ensuite coder un pilote comme évoqué.

C'est certes envisageable, mais c'est une solution très lourde dans le sens où les afficheurs bruts nécessitent un grand nombre de broches, 12 pour celui ci-contre.

Outre la lourde connectique que l'utilisateur aura alors à gérer (de préférence sans se tromper), cela occuperait de plus entièrement le port breadboard du TI-Innovator Hub, empêchant ainsi l'utilisateur de brancher autre chose.


1396213963Il existe toutefois des interfaces permettant de réduire le nombre de broches pour l'utilisateur, comme par exemple le contrôleur TM1637. Il permet de réduire le nombre de broches de contrôle à seulement 2, DIO et CLK.

En rajoutant bien évidemment l'alimentation et la masse, cela ne fait malgré tout que 4 broches, soit une utilisation très légère et raisonnable du connecteur breadboard de ton TI-Innovator Hub.

1395613957Double avantage, ce brochage est également compatible avec le format Grove. :bj:

On trouve ainsi des afficheurs munis du contrôleur TM1637 aussi bien au format Grove qu'au format breadboard.

Les spécifications du TM1637 sont disponibles publiquement, et il existe déjà un pilote écrit en langage C++ pour cartes Arduino.
Toutefois les TI-Nspire CX II ne gèrent hélas pas le langage C++, du moins pas officiellement...

Et bien justement Hans-Martin Hilbig, formateur T3 pour Texas Instruments, vient de nous réaliser un nouvel exploit : une réécriture intégrale du pilote C++ du TM1637 mais cette fois-ci dans le langage Python officiellement supporté sur les TI-Nspire CX II ! :D

Voici donc M1637driver1.py, un module Python additionnel rajoutant à ta TI-Nspire CX II le support des afficheurs numériques à contrôleur TM1637 ! :bj:

Le module est à installer de préférence dans le dossier /PyLib/ de ta calculatrice. Il est alors rajouté au menu des modules Python et ainsi directement importable pour tes projets.

13958Nous allons te guider rapidement dans la prise en main de l'afficheur TM1637 et de son pilote.

Si tu utilises la version Grove de l'afficheur, tu peux la connecter aux ports OUT 1 ou OUT 2 du TI-Innovator Hub.
Attention, la mise à jour TI-Innovator Hub 1.5 est nécessaire au bon fonctionnement du TM1637 en format Grove.


Si tu utilises la version breadboard, il te faudra réaliser les connexions suivantes :
  • BB1 : clk
  • BB2 : dio
Note que dans les deux cas l'afficheur TM1637 génère une consommation importante. Pour en garantir le bon fonctionnement tu devras connecter ton TI-Innovator Hub à une source d'alimentation USB externe via son port micro-USB, batterie ou secteur.

M1637driver1.tns n'utilise visiblement pas les nouvelles possibilités de l'OS 5.3 permettant de lister ses fonctions au menu, alors nous allons te les expliquer rapidement.

Tout d'abord il te faut construire un objet Python pour pouvoir ensuite contrôler ton afficheur. Au choix selon la connexion que tu as réalisée :
  • mydis = TM1637display('OUT 1')
  • mydis = TM1637display('OUT 2')
  • mydis = TM1637display('BB')
L'objet alors obtenu te fournit différentes méthodes pour piloter ton afficheur.

Mais première chose à faire obligatoirement, régler la luminosité de l'afficheur avec la méthode .setBrightness(niveau).
niveau peut aller ici de 0 à 6, et pour la luminosité maximale nous appellerons donc myset.setBrightness(6).

L'affichage se passe via la méthode .setSegments(données). données est ici une liste de 4 nombres entiers, un par cellule donc.

Dans un premier temps, commençons par afficher des chiffres. Il n'y a ici pas encore besoin de comprendre le format de la liste, car nous avons une méthode .encodeDigit(chiffre) permettant d'en générer automatiquement le contenu.

13960On peut par exemple s'en servir pour construire une fonction rudimentaire permettant d'afficher un nombre :
Code: Select all
def showNumber(num, dis):
  l = []
  while num:
    l.append(dis.encodeDigit(num % 10)
    num //= 10
  l.reverse()
  dis.setSegments(l)

Et voilà donc ci-contre par exemple le résultat de l'appel showNumber(1637, mydis).

Tentons maintenant d'aller plus loin et de contrôler directement les segments pour afficher librement tout ce que l'on veut, et entre autres des lettres.

Les 4 nombres de la liste passée à .setSegments() indiquent en binaire les segments à allumer, selon la numérotation ci-contre.

Voilà pourquoi par exemple l'appel .encodeDigit(1) nous retourne 6, c'est-à-dire en binaire 0b00000110 avec les bits 1 et 2 armés pour allumer les 2 segments permettant d'afficher le chiffre 1.

Petit cas particulier, le bit 7 si armé est pris en compte uniquement pour le 2ème nombre de la liste, et permet alors d'allumer le séparateur horaire : au centre de l'afficheur.

13959Maintenant que nous avons donc compris le format, nous ne sommes plus limités aux simples chiffres et pouvons enfin nous amuser à afficher librement tout ce que nous voulons, comme par exemple le mot done :
Code: Select all
l = [
  0b01011110, #d
  0b00111111, #O
  0b01010100, #n
  0b01111001, #E
]

mydis.setSegments(l)

Ta TI-Nspire CX II peut donc enfin exploiter pleinement en Python un afficheur 4 chiffres à 7 segments, de tout nouveaux horizons pour tes projets ! :D


Téléchargements :

Source : https://resources.t3europe.eu/t3europe- ... 86f390a4a7