LOCODUINO

Aide
Forum de discussion
Dépôt GIT Locoduino
Flux RSS

samedi 27 avril 2024

Visiteurs connectés : 58

Adieu Uno, bonjour Uno !

.
Par : Christian

DIFFICULTÉ :

Que feriez-vous si Ferrari annonçait un nouveau modèle de voiture de sport à un prix inférieur à celui de votre berline ? Ne vous réjouissez pas trop vite : il y a peu de chance que Ferrari fasse une telle annonce. Mais c’est un peu ce qui se passe chez Arduino qui propose une nouvelle carte Uno pour un prix très inférieur à celui de la carte Uno R3 et qui est dotée d’un moteur de Ferrari et d’une mémoire d’éléphant. Voyons cela en détail.

<

Les nouvelles cartes Uno R4

La nouvelle carte Uno R4 (pour révision 4) est certainement appelée à remplacer la traditionnelle carte Uno R3 largement décrite et utilisée dans les articles de LOCODUINO. Elle se décline en deux versions, une minimaliste (si on peut dire) appelée Uno R4 Minima et une autre connectable en WiFi et Bluetooth appelée Uno R4 WiFi. Ces deux cartes sont en tous points similaires à une carte Uno (forme, dimensions et connecteurs) et travaillent en 5V, ce qui leur permet donc de remplacer la Uno R3 dans un projet déjà abouti sans qu’il soit nécessaire de revoir l’alimentation des composants électroniques reliés à la carte, sauf peut-être en ce qui concerne la consommation admissible sur une broche comme on l’explique plus loin. Ces deux cartes peuvent donc utiliser les cartes shield qui existaient pour la Uno R3. La grande différence est qu’elles utilisent un microcontrôleur 32 bits cadencé à 48 MHz, là où l’Uno R3 n’avait qu’un 8 bits cadencé à 16 MHz. La mémoire aussi a été augmentée puisque les cartes Uno R4 disposent de 256 kilo-octets de flash (32 pour la R3), 32 kilo-octets de SRAM (8 pour la R3) et 8 kilo-octets d’EEPROM (1 pour la R3) (voir au paragraphe suivant les remarques importantes au sujet de cette mémoire). Enfin, comme nous le verrons dans cet article, ces deux cartes disposent de ressources que n’avait pas la carte Uno R3 et qui peuvent se révéler très pratiques dans un projet de modélisme ferroviaire.

À l’heure où ces lignes sont écrites (juillet 2023), la carte Uno R4 Minima est proposée à 18 euros, la carte Uno R4 WiFi à 25 euros, alors que la carte Uno R3 est à 24 euros [1]. Nous allons décrire la carte Uno R4 Minima, puis nous rajouterons ce que la carte Uno R4 WiFi apporte encore en plus.

La carte Uno R4 Minima

Son prix attractif la prédestine à remplacer la carte Uno R3 dans la majorité des projets. La figure 1 montre cette carte et comme on peut le voir, son aspect est identique à celui d’une carte Uno R3 ; les connecteurs sont même mieux repérés sur leurs tranches, ce qui évite des erreurs de branchement. La prise USB est de type C, ce qui demande d’avoir un câble USB-C pour la programmer, mais c’est là la seule différence visible avec une carte R3 en dehors de la couleur et du design du circuit imprimé. La prise jack qui permet une alimentation autonome de la carte, accepte une tension comprise entre 6 et 24 V (la R3 était limitée à 20 V avec une recommandation à 12 V), ce qui est mieux car le 24 V est un standard industriel. Le régulateur est un convertisseur DC-DC avec une efficacité de 90% contrairement à la Uno R3 qui avait un régulateur linéaire (la chute de tension est convertie en chaleur), ce qui permettra d’alimenter sans chauffer une électronique externe.

Figure 1
Figure 1
La carte Uno R4 Minima (source Arduino)

La carte intègre un microcontrôleur 32 bits RA4M1 [2], un Arm Cortex M4 de marque Renesas, cadencé à 48 MHz, ce qui n’est pas un chiffre extraordinaire quand on sait que l’ESP32 peut aller jusqu’à 240 MHz. Ce microcontrôleur dispose d’une unité de traitement des nombres à virgule flottante (Floating Point Unit ou FPU), ce qui accélère les calculs en flottant uniquement, mais le fait d’être un 32 bits accélère les calculs entiers sur 16 et 32 bits. Il dispose également de 256 kB (kilo-octets) de mémoire Flash pour le programme (code flash memory), 32 kB de mémoire SRAM pour les données volatiles et 8 kB de mémoire Flash pour les données permanentes (data flash memory), équivalent de la mémoire EEPROM des cartes Uno R3.

La data flash memory est limitée à 100 000 cycles d’écriture/effacement d’après le constructeur (notice du microcontrôleur page 48), tout comme l’était la mémoire EEPROM des cartes R3. En conséquence, il ne faut jamais utiliser la fonction write() à l’intérieur de la boucle loop car, comme celle-ci est rejouée en permanence, la limitation serait vite atteinte. Cette data memory, appelée aussi EEPROM par Arduino, s’utilise de la même façon que l’EEPROM des cartes R3 grâce à la bibliothèque <EEPROM.h> . Des exemples d’utilisation sont donnés dans le Guide de l’EEPROM.

Au niveau des broches d’entrées-sorties, on retrouve comme sur la R3, 14 E/S numériques pouvant délivrer ou absorber 8 mA (c’était 20 mA pour la R3) et dont six délivrent un signal de type PWM (les mêmes broches que la R3), 6 entrées analogiques dont une peut être une véritable sortie analogique, pouvant donc délivrer une tension analogique comprise entre 0 et 5 V du fait que le microcontrôleur dispose d’un convertisseur numérique-analogique (DAC Digital to Analog Converter) sur 12 bits.

Les broches des cartes Uno R4 (Minima ou WiFi) délivrent ou absorbent un courant de 8 mA maximum alors que la carte Uno R3 permettait des courants de 20 mA. Afin de ne pas endommager la carte R4, il est nécessaire de tenir compte de cette limitation et de choisir des résistances de limitation de courant en conséquence. Une résistance de 1 ko limitera le courant à 3 mA à peu près, ce qui est suffisant pour une LED ; il est conseillé de ne jamais descendre en dessous de 470 ohms.

Au niveau communication, la carte dispose d’une UART sur les broches D0 (Rx) et D1 (Tx), d’un bus SPI (sur D10-D13 ou le connecteur ICSP), d’un bus I2C (sur A4 et A5) et d’un module CAN (sur D4 et D5) qui nécessite tout de même un transceiver (le bus CAN est largement utilisé par LOCODUINO dans certains projets de modélisme ferroviaire).

Enfin, la carte intègre une horloge temps réel (Real Time Clock ou RTC), ce qui permet de mieux gérer le temps au niveau de certains automatismes et un HID (Human Interface Device) qui permet, lorsque la carte est reliée à un ordinateur en USB, de simuler un clavier ou une souris. Il devient alors facile d’envoyer à l’ordinateur des caractères clavier ou des mouvements de souris.

La carte R4 Minima dispose également d’un connecteur SWD (Serial Wire Debug) [3] qui permet aux utilisateurs avancés et équipés de disposer d’options de debuggage.

La figure 2 montre les deux côtés du circuit imprimé d’une carte Uno R4 Minima.

Figure 2
Figure 2
Carte Uno R4 Minima (source Arduino)

Pour résumer, la carte Uno R4 Minima est une carte Uno telle que nous la connaissons, avec un microcontrôleur plus performant, une mémoire plus vaste (8 fois plus de Flash et 16 fois plus de SRAM), et qui dispose en plus d’une sortie analogique (sur A0), d’une horloge temps réel et d’un bus CAN (sur D4 et D5), le tout pour un prix beaucoup moins cher (75%).

Un sketch écrit pour la carte Uno R3 pourrait ne pas fonctionner sur les cartes Uno R4 (Minima ou WiFi), notamment s’il utilise directement les registres du microcontrôleur ou s’il utilise une bibliothèque externe non mise à jour pour les nouvelles cartes ou si une partie est écrite en assembleur. Les programmes qui utilisent le « langage Arduino » (encore appelé Arduino API) ne devraient pas présenter de problèmes sur les cartes R4 ; dans ce cas, il est alors possible d’améliorer le programme pour utiliser pleinement les nouvelles ressources des cartes R4.

Utilisation de la carte Uno R4 Minima

Il est bien-sûr nécessaire d’apprendre à utiliser ces nouvelles ressources et le site d’Arduino fournit une documentation abondante, mais hélas en anglais [4]. La curiosité nous ayant poussé à nous procurer ces deux cartes, nous décrirons en fin d’article quelques opérations dont vous pourrez vous inspirer pour vos propres programmes, surtout pour ceux qui ne comprennent pas l’anglais du site d’Arduino.

La description complète de cette carte se trouve sur cette page du site Arduino.

Juste après le tableau des spécificités techniques, vous pouvez accéder au schéma de la carte ainsi qu’à sa datasheet (Notice explicative) : je vous conseille de télécharger cette dernière sur votre ordinateur pour pouvoir vous y référer hors connexion (le code SKU Stock Keeping Unit ou UGS Unité de Gestion de Stock est ABX00080). Juste au-dessous se trouve un lien « ARDUINO DOCS » qui ouvre une nouvelle page qui vous permettra de choisir les sections qui vous intéressent, comme par exemple l’utilisation de la RTC ou bien du DAC. Ces sections vous proposent des exemples d’utilisation de la ressource avec schéma et programme : pas besoin d’être bilingue en anglais pour recopier le schéma et récupérer le programme et faire ainsi vos premières armes.

Auparavant, je vous conseille de faire un petit tour sur la « CHEAT SHEET » qui reprend tout ce qu’il y a à savoir pour utiliser la carte R4 Minima et qui renvoie vers les documentations nécessaires. Sur cette page, on trouve entre autre, la dénomination des broches d’entrée-sortie (numériques et analogiques), le DAC, la RTC, l’utilisation de l’EEPROM et des bus (SPI, I2C, USB Serial et UART, USB HID), le module CAN, et des indications sur le Bootloader.

Vous pouvez aussi développer le tableau des spécificités techniques ou consulter la compatibilité de la carte, notamment avec les logiciels de programmation ou bien avec les cartes shield qui existaient pour la carte Uno R3.

La carte Uno R4 WiFi

Maintenant que nous avons décrit la R4 Minima, voyons ce qu’apporte en plus la Uno R4 WiFi. Cette carte est architecturée autour du même microcontrôleur que la R4 Minima. La figure 3 montre les deux côtés de son circuit imprimé et déjà quelques différences notables nous sautent aux yeux : la présence d’une matrice de LED de 12 X 8, la présence d’un microcontrôleur ESP32-S3 de chez Espressif qui permet la connectivité de la carte en WiFi et Bluetooth et un connecteur Qwiic qui permet des connections en I2C avec des composants de l’écosystème Qwiic. De par sa connectivité, cette carte est compatible avec l’Arduino IoT Cloud (voir l’article « Entrez dans le monde des objets connectés » du Loco-Revue d’avril 2022 ainsi que l’article « Commandez une loco analogique avec votre smartphone » du loco-Revue de mai 2022). On le comprend, pour être exploitée au mieux de ses possibilités, cette carte est plutôt réservée à des gens confirmés qui ont déjà une solide expérience du monde d’Arduino.

Figure 3
Figure 3
Carte Uno R4 WiFi (source Arduino)
La carte Uno R4 WiFi opère en 5 V mais le microcontrôleur ESP32-S3 opère lui en 3,3 V. Il y a la possibilité de reprogrammer le firmware de l’ESP32-S3 mais cette opération peut se révéler dangereuse pour l’intégrité de la carte elle-même ; il faut donc avoir une très bonne raison de le faire et posséder les connaissances adéquates pour se lancer dans une telle opération.

On peut également remarquer sur la figure 3 un ensemble de trois broches additionnelles : OFF, GND et VRTC. La broche OFF permet de mettre la carte sur OFF alors que la broche VRTC permet de garder l’alimentation de l’horloge temps réel (RTC) pour que cette dernière puisse continuer à fonctionner.

La matrice de LED est idéale pour des projets qui nécessitent des animations ou l’affichage de courbes de données de certains capteurs sans recourir à d’autres composants.

Pour résumer, la carte Uno R4 WiFi pour un prix comparable à celui de la carte Uno R3, offre les mêmes ressources que la carte Uno R4 Minima avec en plus une matrice de LED de 12 X 8, une connectivité possible en WiFi ou en Bluetooth, une compatibilité totale avec l’IoT d’Arduino, et un connecteur Qwiic.

La carte R4 WiFi ne possède pas le connecteur SWD qui existe sur la carte R4 Minima.

Utilisation de la carte Uno R4 WiFi

La description complète de cette carte se trouve sur cette page du site Arduino.

Juste après le tableau des spécificités techniques, vous pouvez accéder au schéma de la carte ainsi qu’à sa datasheet : je vous conseille de télécharger cette dernière sur votre ordinateur pour pouvoir vous y référer hors connexion (le code SKU Stock Keeping Unit ou UGS Unité de Gestion de Stock est ABX00087). Juste au-dessous se trouve un lien « ARDUINO DOCS » qui ouvre une nouvelle page qui vous permettra de choisir les sections qui vous intéressent, quasiment les mêmes que celles décrites pour la R4 Minima avec en plus une section sur la matrice de LED.

Auparavant, je vous conseille de faire un petit tour sur la « CHEAT SHEET » qui reprend tout ce qu’il y a à savoir pour utiliser la carte R4 WiFi et qui renvoie vers les documentations nécessaires. Sur cette page, on trouve entre autre, la dénomination des broches d’entrée-sortie (numériques et analogiques), la matrice de LED, le DAC, la RTC, l’utilisation de l’EEPROM et des bus (SPI, I2C, connecteur Qwiic, USB Serial et UART, USB HID, le module CAN, l’ESP32-S3, le bridge USB), le WiFi et le Bluetooth.

Programmation des cartes Uno R4

Nous allons parler dans ce paragraphe de ce qu’il faut faire pour pouvoir utiliser ces nouvelles cartes avec l’IDE d’Arduino. Afin de relier la carte à l’ordinateur, il faut disposer d’un câble USB de type C (prise A normale du côté ordinateur et prise USB-C du côté carte, câble souvent repéré par la mention « USB > USB-C » sur l’emballage) [5]. La figure 4 montre un tel câble qui ne doit pas être confondu avec un câble mini USB ou micro USB (pour connaître les différentes prises USB, vous pouvez consulter ce site. On trouve ce genre de câble dans les boutiques de produits informatiques ou de téléphonie ou bien sur internet.

Figure 4
Figure 4
Prises d’un câble USB > USB-C

Ensuite, il faut importer dans l’IDE les fichiers nécessaires à la programmation des cartes Uno R4.

Avec l’IDE 2 :

Sélectionnez l’icône « Gestionnaire de carte » (1) et entrez dans la case de recherche Uno R4 (2) ; vous obtenez un package qui est fait pour les deux cartes Uno R4 Minima et Uno R4 WiFi. Il suffit alors de cliquer sur « INSTALLER » (3) comme le montre la figure 5.

Figure 5
Figure 5
IDE 2

Vous aurez à accepter que le logiciel modifie votre ordinateur, comme c’est le cas lorsqu’on veut installer un nouveau logiciel, et pour cela il faut que vous soyez administrateur. Après quelques secondes, vous obtenez le message « Platform arduino:renesas_uno@1.0.2 installed » (ou une version supérieure à la 1.0.2).

Avec l’IDE 1 :

La procédure est identique en allant chercher le Gestionnaire de carte dans le menu « Outils » ; dans la case de recherche, on tape Uno R4 pour obtenir le package Arduino UNO R4 boards et l’installer.

Premier essai avec Blink

Vous pouvez maintenant connecter la carte à l’ordinateur ; comme elle est alimentée, vous pouvez constater que la LED clignote puisque la carte est livrée programmée avec Blink. Modifiez Blink pour modifier le rythme de clignotement et téléversez le programme dans la carte après avoir choisi le bon type de carte ; cette fois le clignotement est modifié. Le programme Blink utilise 33576 octets de Flash soit 12% (le maxi étant 262144 octets) et 2524 octets de SRAM (le maxi étant 32768 octets, il reste donc 30244 octets disponibles).

Utilisation des nouvelles ressources des cartes Uno R4

Dans ce paragraphe, nous allons dire quelques mots au sujet des nouvelles ressources des cartes Uno R4 par rapport à ce que pouvait faire la Uno R3 que vous devez parfaitement connaître.

L’horloge RTC

Cette horloge temps réel est incluse dans le microcontrôleur de la carte et permet d’obtenir une datation de certains événements, ce qui peut être utile en modélisme ferroviaire pour faire partir des trains selon un horaire précis, ou bien gérer selon un certain ordre plusieurs arrivées en gare qui se succèdent. L’utilisation de la RTC nécessite une bibliothèque distribuée avec le noyau Arduino Renesas mais qu’il faut tout de même inclure dans le programme avec #include <RTC.h>. Les méthodes de la bibliothèque permettent d’initialiser l’horloge à une certaine date, puis d’extraire certaines informations comme le jour, le mois, l’heure afin de les afficher dans le moniteur série ou les traiter.

Le site Arduino propose un exemple pour afficher le temps qui s’écoule. De même qu’il existe Serial.begin(9600) ; pour initialiser la communication carte-ordinateur, il existe ici un RTC.begin() ; pour initialiser le fonctionnement de l’horloge (ligne 6). La ligne 8 permet de définir une date précise (startTime) : on remarque que le jour est un nombre mais que le mois est donné avec son nom (de même pour le jour de la semaine). La ligne 10 initialise l’horloge avec cette date précise. La ligne 17 extrait le temps de l’horloge puis arrivent les affichages. Notez que la ligne 22 transforme le mois en un nombre qui peut être affiché.

La bibliothèque est aussi capable d’afficher le temps qui s’écoule sous le format Unix (Unix Timestamp) qui représente le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. Cette façon de faire est sans doute plus facile pour relativiser des événements entre eux.

Enfin, on peut générer une interruption à intervalle régulier, ce qui peut être pratique en modélisme ferroviaire pour surveiller périodiquement l’état d’un capteur. Comme le programme donné sur le site Arduino doit être complété pour fonctionner, je vous propose le programme suivant qui fait clignoter la LED de la carte à la fréquence d’un Hertz (il faut donc l’allumer ou l’éteindre deux fois par seconde). Le setup initialise l’horloge comme nous l’avons vu, puis la ligne 8 crée l’interruption qui exécute la fonction appelée « periodic_cbk ». Cette fonction change l’état de la LED puis imprime un message dans le moniteur avec un compteur qui augmente d’une unité à chaque appel.

#include <RTC.h>

void setup(){
  Serial.begin(9600);
  RTC.begin();
  RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
  RTC.setTime(startTime);
  RTC.setPeriodicCallback(periodic_cbk, Period::N2_TIMES_EVERY_SEC);
}

void loop() {
}

void periodic_cbk() {
  static int compteur = 0;
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  Serial.print("PERIODIC INTERRUPT : ");
  Serial.println(compteur);
  compteur++;
}

Vous pouvez trouver d’autres informations sur l’utilisation de la RTC en consultant cette page du site Arduino ou la bibliothèque sur le site de Github. Comme je l’ai dit, ceci peut être d’un intérêt certain en modélisme ferroviaire.

La carte Uno R4 WiFi comprend une broche appelée VRTC utilisée pour maintenir l’horloge en fonction même lorsque la carte n’est plus alimentée : il suffit d’appliquer une tension comprise entre 1.6 et 3.6 V sur cette broche.

Le DAC (Digital to Analog Converter)

La carte Uno R3 comprenait 6 entrées analogiques, pouvant recevoir une tension positive comprise entre 0 et 5 V : la fonction analogRead() convertissait cette tension en un nombre compris entre 0 et 1023, 0 pour 0 V et 1023 pour 5 V. Il n’était pas possible de réaliser l’opération inverse, c’est-à-dire partir d’un nombre compris entre 0 et 1023 et afficher la tension correspondante sur une sortie analogique. Avec les cartes Uno R4, c’est possible sur une seule sortie, la broche A0 car le microcontrôleur est muni d’un DAC (Digital to Analog Converter) ou encore convertisseur numérique vers analogique qui opère avec une résolution maximale de 12 bits. Par défaut, la résolution du DAC est de 8 bits mais il est possible de la régler avec la fonction analogWriteResolution(12) ;

On peut afficher un signal de type PWM sur certaines sorties (voir série d’articles PWM) : ce signal numérique constitué des deux tensions 0 et 5 V peut être considéré comme une tension de valeur moyenne dépendant du rapport cyclique du signal. Cela permet de moduler la brillance d’une LED mais dans certains cas ce n’est pas aussi précis qu’une vraie tension de valeur analogique, notamment dans le domaine d’un signal audio.

On peut donc utiliser cette nouvelle ressource pour reconstituer une forme d’onde : c’est un exemple qui était proposé [6] sur le site d’Arduino avec un montage utilisant un buzzer. Le code était fourni en deux parties, d’une part le programme utilisant la bibliothèque <Waveforms.h> et un header contenant la forme d’onde voulue (ici un signal en dents de scie). Ce code ayant été retiré, je vous le fournis ci-dessous.

Programme signal en dents de scie
(contient deux onglets : programme et fichier .h)

Notez que la résolution est sur 12 bits (voir sous-paragraphe suivant), ce qui signifie que le nombre (en lecture ou écriture) est maintenant compris entre 0 et 4095 au lieu de 1023. La figure 6 montre le signal obtenu sur la broche A0 observé avec un oscilloscope.

Figure 6
Figure 6
Signal analogique sur A0

L’exemple donné aujourd’hui sur le site Arduino utilise la bibliothèque <analogWave.h> et reconstitue une onde sinusoïdale dont la fréquence dépend du potentiomètre relié à l’entrée A5 (Figure 7). Comme indiqué, le son sur le buzzer reste tout de même très faible mais pourrait être amplifié en utilisant un haut-parleur de 4 ou 8 Ω et un module d’amplification trouvé sur internet. Il est aussi possible de jouer des mélodies, celle de Frère Jacques étant donnée en exemple.

Figure 7
Figure 7
Signal sinusoïdal sur A0
Allez bien copier le programme d’onde sinusoïdale sur le site Arduino car ce programme est aussi donné dans les exemples pour Arduino Uno R4 de l’IDE mais il contient actuellement deux erreurs aux lignes 9 et 14 qu’il faut corriger en remplaçant A0 par A5 (le point milieu du potentiomètre réglant la fréquence est sur l’entrée A5).

En modélisme ferroviaire, on peut utiliser cette ressource pour définir plusieurs sons différents qui peuvent alerter l’utilisateur d’un automatisme en cas de différents problèmes (panne de système, conflits de circulation, etc.).

La résolution de l’ADC (Analog to Digital Converter)

Le convertisseur analogique vers numérique transforme un signal analogique en un signal numérique. Par défaut, la résolution est réglée sur 10 bits, mais pour une meilleure précision, cette résolution peut être portée à 12 ou 14 bits avec la fonction analogReadResolution(). La résolution du DAC (inverse de l’ADC) est au maximum de 12 bits et peut être réglée avec la fonction analogWriteResolution(). Une fois la résolution réglée, on peut utiliser les fonctions analogRead() ou analogWrite() dans le programme. Lorsque l’ADC opère sur 10 bits, la valeur du signal numérique est comprise entre 0 et 1023, sur 12 bits elle est comprise entre 0 et 4095, sur 14 bits elle est comprise entre 0 et 16383.

Le HID (Human Interface Device)

De façon générale, les HID sont des composants conçus pour les humains, tels que claviers, souris, contrôleurs de jeux, etc. qui envoient des données à un ordinateur. Les cartes Uno R4 ont de construction, une interface pour les HID et peuvent ainsi émuler un clavier ou bien une souris grâce aux API Keyboard ou Mouse. Cependant, cette nouveauté ne présente pas un grand intérêt car il y avait la possibilité, grâce à Processing, d’utiliser une souris comme cela a été décrit dans l’article Ménage à trois (Ordinateur, Arduino, réseau). Nous renvoyons donc le lecteur qui voudrait découvrir le HID à cette page pour la R4 Minima ou à cette page pour la R4 WiFi.

Le bus CAN

CAN signifie Controller Area Network : c’est un protocole série principalement utilisé dans l’industrie et notamment l’industrie automobile. Sa robustesse, sa rapidité et sa fiabilité font que nous l’avons largement utilisé sur le site LOCODUINO. Les cartes Uno R4 possèdent un contrôleur CAN [7] incorporé au microcontrôleur, qui nécessite tout de même l’emploi d’un transceiver externe pour fonctionner [8]. Le bus CAN quant à lui utilise deux câbles pour communiquer : CAN high et CAN low. Sur les cartes Uno R4, les broches sont CAN0_RX pour recevoir et CAN0_TX pour transmettre, qui doivent respectivement être connectées avec CANRX et CANTX du transceiver.

Les broches CAN0_RX et CAN0_TX correspondent dans le microcontrôleur aux ports P102 et P103 respectivement (voir schémas des cartes). Sur une carte R4 Minima, les broches CAN0_RX et CAN0_TX (encore appelées CANRX et CANTX dans la doc Arduino) sont respectivement sur les broches numériques D5 et D4, alors que sur les cartes R4 WiFi, elles sont respectivement sur D13 et D10.

Entre les deux transceivers (un pour la carte R4 et un pour le périphérique), les broches CANH (high) doivent être reliées ensemble ainsi que les broches CANL (low). Ensuite, il est possible d’envoyer des messages grâce à la bibliothèque <Arduino_CAN.h> . Cette bibliothèque qui permet d’exploiter le bus CAN et qui n’existait pas pour les cartes Due à leur sortie, est donnée avec de nombreux exemples pour écrire ou lire le bus.

Sans transceiver externe, il n’est pas possible de communiquer avec d’autres composants CAN.

Le lecteur intéressé pour utiliser le bus CAN pourra consulter les articles du site LOCODUINO qui en parlent. La présence du contrôleur CAN est un plus indéniable sur ce genre de cartes en modélisme ferroviaire.

Broches de l’ampli opérationnel

Le microcontrôleur des cartes Uno R4 contient un ampli opérationnel qui peut être utilisé dans certains montages. La broche A1 est reliée à l’entrée non inverseuse (OPAMP+) et la broche A2 est reliée à l’entrée inverseuse (OPAMP-). La sortie de l’ampli opérationnel (OPAMP OUT) est reliée à la broche A3.

La matrice de LED

La carte Uno R4 WiFi incorpore une matrice de LED rouges et brillantes organisée en 8 lignes de 12 colonnes (voir figure 3). Cela permet d’afficher des motifs animés, du texte défilant ou encore des courbes de valeur de capteur, sans avoir besoin de composants additionnels. Une carte neuve est programmée avec une petite animation se terminant par l’affichage d’un cœur ; vous pouvez la retrouver dans les exemples pour cartes Uno R4 sous le nom « MatrixIntro ». La figure 8 montre comment ces 96 LED sont reliées aux différentes broches du microcontrôleur. Seulement onze broches sont nécessaires grâce à la technique de Charlieplexing qui exploite le fait que les sorties sont à trois états (HIGH, LOW ou haute impédance).

Figure 8
Figure 8
Branchement des LED de la matrice (source Arduino)

La matrice et son API (Application Programming Interface) sont développées pour être programmées de différentes façons selon les besoins. La bibliothèque utilisée est <Arduino_LED_Matrix.h> et il faut créer un objet de type LED Matrice. Ensuite, on démarre le fonctionnement de la matrice avec matrix.begin() ; dans la fonction setup. Il faut ensuite créer un motif (frame) et le charger dans un buffer qui l’affiche sur la matrice. Une animation est une série de motifs affichés les uns après les autres.

Pour contrôler 96 LED, il faut un espace mémoire qui soit au moins de 96 bits en taille, chaque bit donnant l’état de la LED correspondante, allumée ou éteinte. La bibliothèque propose deux façons de faire.

La première, c’est de recourir à un tableau d’octets à deux dimensions byte frame[8][12] composé de 0 et de 1 (la valeur 1 commande l’allumage de la LED et l’ensemble des 1 constitue le motif à afficher). Cette méthode permet de visualiser simplement le motif ou de modifier simplement un pixel mais prend plus d’espace mémoire que nécessaire puisqu’on utilise un octet là où un bit serait suffisant. La méthode pour afficher le motif est matrix.renderBitmap(frame, 8, 12) ;

La seconde méthode, moins gourmande en mémoire, est d’utiliser un tableau de trois entiers de 32 bits (soit au total 96 bits pour les 96 LED) unsigned long motif[], mais remplir un tel tableau de trois entiers de 32 bits n’est pas chose facile. Le mieux est de dessiner sur une feuille le motif avec des 0 et des 1 organisés en 8 lignes de 12 colonnes, puis grouper les 0 et les 1 par 32 en partant du coin supérieur gauche vers le coin inférieur droit. On obtient alors trois valeurs binaires qu’on peut facilement transformer en hexadécimal avec la calculette de Windows (ou de Mac OS) en mode programmeur. La méthode d’affichage est matrix.loadFrame(motif) ;

La page led-matrix du site d’Arduino explique les différentes méthodes de la bibliothèque. On y trouve aussi un outil qui permet de générer des motifs pour la matrice de LED. Les deux exemples proposés (affichage de smiley/cœur et clin d’œil) ont fonctionné sans problème sur ma carte Uno R4 WiFi.

Le connecteur Qwiic

La carte Uno R4 WiFi comprend sur sa partie arrière un connecteur Qwiic/STEMMA comme le montre la figure 9. Ce connecteur permet de relier plusieurs modules et de les contrôler en I2C ; il a été développé par SparkFun et Adafruit sous les noms de Qwiic ou STEMMA. Comme il intègre des broches I2C, il permet une simplification du câblage entre les différents modules reliés.

Figure 9
Figure 9
Le connecteur Qwiic (source Arduino)
La carte Uno R4 WiFi possède deux bus I2C et le connecteur Qwiic est relié au bus secondaire qui utilise un objet de type Wire1 plutôt qu’un objet de type Wire (un exemple est donné sur la page Arduino cheat sheet). Notez également que ce connecteur opère en 3.3 V seulement.

WiFi et Bluetooth

La carte Uno R4 WiFi peut être connectée en WiFi ou Bluetooth grâce à son microcontrôleur ESP32-S3 embarqué. Le WiFi et le Bluetooth partagent la même antenne et ne peuvent pas être utilisés en même temps.

Le WiFi dont le taux est de 150 Mbps, utilise la bibliothèque WiFiS3 incluse dans le noyau Uno R4. De nombreux exemples d’utilisation sont donnés à cette page.

Bluetooth 5 et Bluetooth LE sont disponibles avec une vitesse pouvant atteindre 2 Mbps.

La carte Uno R4 WiFi et l’IoT d’Arduino

La carte Uno R4 WiFi est parfaitement compatible avec l’IoT d’Arduino (Internet of Things) qui permet de créer très simplement des objets connectés. L’IoT d’Arduino utilise le cloud et constitue une façon différente de développer une application grâce à une interface conviviale qui écrit le programme à votre place, programme que vous n’avez plus qu’à compléter en fonction de vos besoins. L’interface vous permet également de créer un tableau de bord pour contrôler votre application depuis un smartphone ou une tablette, grâce à des widgets que vous placez où vous voulez sur votre écran.

Pour vous initier à l’IoT d’Arduino, vous pouvez vous référer aux deux articles de Loco-Revue précédemment cités ou bien à cette page si vous lisez l’anglais.

Allons voir sous le capot

Pour cela, il faut consulter la datasheet du microcontrôleur RA4M1 du fondeur Renesas dont le lien est donné sur le site d’Arduino. Celle-ci fait pas loin de 1500 pages en anglais, mais ce genre de document ne se lit pas d’une traite mais par morceaux en fonction de ce qu’on cherche. C’est là qu’on se rend compte que le microcontrôleur cache d’autres ressources qui n’ont pas été exploitées par la carte elle-même, par exemple, un DAC sur 8 bits à deux canaux, un SSIE (Serial Sound Interface Enhanced), quatre amplis opérationnels, 2 timers 32 bits et 6 timers 16 bits, une unité de toucher sensitif (CTSU pour Capacitive Touch Sensing Unit), un contrôleur DMA (Direct Memory Access) à quatre canaux permettant d’adresser 4 Giga-octets de mémoire, un contrôleur de segments LCD, et d’autres choses encore.

Contrairement au microcontrôleur ATmega328P qui utilisait une architecture de type Harvard, c’est-à-dire une mémoire pour le programme séparée de la mémoire pour les données (donc avec deux bus d’adresses distinctes), le microcontrôleur RA4M1 utilise une architecture de type von Neumann, soit un seul espace de stockage pour les instructions et pour les données. La section 4 de la datasheet (page 90) montre l’espace adressable qui va de l’adresse 0000 0000h à l’adresse FFFF FFFFh, soit 4 Giga-octets au total. Tout n’est pas à la disposition de l’utilisateur, mais on peut remarquer que la mémoire program flash va de 0000 0000h à 0004 0000h, soit 262144 octets (256 kB), la mémoire SRAM va de 2000 0000h à 2000 8000h, soit 32768 octets (32 kB) et la mémoire data flash va de 4010 0000h à 4010 2000h, soit 8192 octets (8 kB).

Comme le but d’un programme est de faire communiquer la carte avec d’autres composants, il peut être intéressant de chercher dans cette notice comment sont organisés les ports d’entrées-sorties : il y en a 10 numérotés de 0 à 9, suivi du numéro de broche (exemple P304). Tous les ports ne sont pas accessibles : le modèle de microcontrôleur à 100 broches accède à 84 ports mais le modèle à 64 broches qui équipe les cartes Uno R4 n’accède qu’à 52 ports. Et comme les cartes Uno R4 ne proposent que 20 broches pour communiquer (14 numériques et 6 analogiques), un choix a dû être fait par le constructeur (on peut trouver la correspondance entre carte et microcontrôleur dans les datasheets des cartes R4, section Pinout, et cette correspondance n’est pas forcément la même en fonction de la carte R4).

Le microcontrôleur est aussi doté d’une interface USB 2.0 Full Speed (USBFS) qui permet des vitesses de communication bien plus élevées comparé à la ligne série d’une carte Uno R3. Cet USBFS dispose d’un tranceiver USB interne qui permet tous les types de transferts définis dans la norme USB 2.0.

La page 48 de la datasheet du microcontrôleur résume ses caractéristiques. Pour un utilisateur expert, c’est toute une aire de jeu qui reste à explorer. Pour le modéliste ferroviaire, c’est sans doute trop jusqu’au jour où il trouve une application possible à ces ressources cachées.

Conclusion

Les cartes Uno R4 ont été créées pour upgrader la carte Uno R3 qui est devenue un standard du monde Arduino fortement utilisé. Si on les compare avec d’autres cartes à microcontrôleur 32 bits, elles sont perdantes car pour respecter ce standard, elles sous-utilisent le microcontrôleur de Renesas. Une carte ESP32 est sans aucun doute bien plus performante que la R4 WiFi. Et si on compare les deux versions de cartes R4, on peut aussi regretter que les ports du microcontrôleur ne se retrouvent pas sur les mêmes broches des connecteurs des cartes comme le montre la figure 10 (comme par exemple le bus CAN sur D4 et D5 ou bien sur D10 et D13 comme on l’a dit plus haut). Il faudra donc être extrêmement prudent si on veut remplacer, dans un projet abouti, une R4 Minima par une R4 WiFi.

Figure 10
Figure 10
Pinout des cartes R4 Minima et R4 WiFi (source Arduino)

Pour autant, si on reste dans le projet de remplacer une carte Uno R3 par une des deux cartes Uno R4, alors ces deux cartes sont parfaites. En effet, pour un prix inférieur (Uno R4 Minima) ou comparable (Uno R4 WiFi) à celui de la carte Uno R3, nous avons là une carte qui travaille en 5 V et dont l’agencement des broches est en tout point identique, mais avec un microcontrôleur plus rapide, plus puissant et de la mémoire en quantité supérieure. Il est donc tentant d’acheter cette carte qui, dans un montage déjà réalisé, peut remplacer la Uno R3 et permettre une mise à jour du programme pour avoir une réaction plus rapide, une précision augmentée et d’autres ressources utilisables, comme par exemple la matrice de LED de la R4 WiFi. Bien évidemment, la plupart des montages de modélisme ferroviaire peut se contenter d’un microcontrôleur 8 bits, mais pourquoi se priver si on peut avoir un 32 bits pour le même prix ? D’autant que rien ne nous garantit la disponibilité des cartes Uno R3 dans l’avenir même si Arduino affirme qu’elles continueront à être produites. Et même si la R4 WiFi s’adresse plutôt à des utilisateurs confirmés, la R4 Minima peut être utilisée par les débutants tout comme la Uno R3 l’était en son temps. J’espère vous avoir convaincu.

[1À ces prix, il faut ajouter les taxes et le transport.

[2C’est la version à 64 broches qui équipe la carte, mais il existe aussi des versions à 40, 48 et 100 broches.

[3Protocol spécifique ARM.

[4On peut utiliser le traducteur du navigateur lorsque l’option existe.

[5Si votre ordinateur est muni d’une interface USB-C, vous pouvez utiliser un câble USB-C > USB-C muni de deux prises identiques.

[6Cet exemple a été changé le 14 juillet 2023.

[7Au standard CAN2.0A/CAN2.0B.

[8Celui des exemples d’Arduino est un SN65HVD230 opérant en 3,3 V seulement, mais on peut aussi utiliser le MCP2551 ou le TJA1050 qui opèrent en 5 V.

16 Messages

Réagissez à « Adieu Uno, bonjour Uno ! »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Matériel »

Le microcontrôleur ATtiny45 (1)

Le microcontrôleur ATtiny45 (2)

Le microcontrôleur ATtiny45 (3)

Le microcontrôleur ATtiny45 (4)

Le microcontrôleur ATtiny45 (5)

Le microcontrôleur ATtiny45 (6)

Le microcontrôleur ATtiny45 (7)

Le microcontrôleur ATtiny45 (8)

Le microcontrôleur ATtiny45 (9)

Le microcontrôleur ATtiny45 (10)

Ma première manette DCC (1)

Une station DCC complète, polyvalente et économique avec JMRI.

Écran couleur tactile Kuman

Capteurs à effet Hall

Programmation des ATtiny Digispark

Ma première centrale DCC

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (5)

Une station DCC minimale avec boutons de commande et écran Oled

Ma première manette DCC (2)

Le Raspberry Pi Pico

Signalisation et sonorisation du va-et-vient pour deux trains

Configurateur de CV sur base de la station DCC minimale

Fabrication d’un programmateur pour microcontrôleurs ATtiny

Détection RailCom© avec ESP32 (ou Arduino)

Adieu Uno, bonjour Uno !

Ma nouvelle manette DCC avec ESP32 (1)

Ma nouvelle manette DCC avec ESP32 (2)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (1)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (2)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (3)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (4)

Fonctionnement et pilotage d’une DEL

La carte Arduino Uno

Qu’est ce qu’une carte Arduino ?

Amplifier le signal de sortie d’un ARDUINO avec un ULN 2803

Un minimum pour jouer rapidement avec un Arduino

Où acheter ?

Résistances, kézako ?

Les cartes Teensy

Relais électromagnétique

Les diodes classiques

Détecteurs à ultrasons

De nouveaux composants pour continuer à jouer

Choisir sa carte Arduino

Bouton poussoir

Les différents types de mouvements d’un servomoteur

Les encodeurs en quadrature

Les indispensables du prototypage

Les écrans LCD alphanumériques

Des bus de communication pour l’Arduino

Les interrupteurs

Signaux lumineux et Arduino

Les shields de prototypage et de connexion

Commande de moteur à courant continu

Les derniers articles

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (5)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (4)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (3)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (2)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (1)


bobyAndCo

Détection RailCom© avec ESP32 (ou Arduino)


bobyAndCo, catplus

Ma nouvelle manette DCC avec ESP32 (2)


msport

Ma nouvelle manette DCC avec ESP32 (1)


msport

Adieu Uno, bonjour Uno !


Christian

Fabrication d’un programmateur pour microcontrôleurs ATtiny


Christian, Dominique, Jean-Luc

Les articles les plus lus

Commande de moteur à courant continu

Une station DCC complète, polyvalente et économique avec JMRI.

Capteurs à effet Hall

La carte Arduino Uno

Programmation des ATtiny Digispark

Relais électromagnétique

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (1)

Configurateur de CV sur base de la station DCC minimale

Ma première centrale DCC

Les diodes classiques