Afficher la fréquence
Les solutions envisagées.
Au départ j'avais envisagé de réutiliser l'œil magique existant sur le poste. Il existe des solutions pour piloter ce dispositif avec un micro contrôleur à base d'opto-coupleur par exemple. J'ai une certaine expérience dans l'utilisation des afficheurs haute tension de type "Nixie" :
NixieClock | Flip'heure | Quillomètre | DM71 | Vu-Mètre |
---|---|---|---|---|
![]() |
Mais le problème - comme toujours - c'est que les postes modifiés étaient souvent en mauvais état et que l'œil magique d'origine était souvent HS ou absent. Racheter un œil magique équivalent n'était pas envisageable compte tenu des tarifs pratiqués, surtout pour équiper un poste nécessitant déjà pas mal de frais.
Il existe également des solutions de remplacement comme celle de Radioelec https://www.radioelec.com/oeil-magique-electronique-frequencemetre-voltmetre-indicateur-daccord-ou-modulation-em34-em4-6af7-xml-354_384-834.html mais vu son tarif - entièrement justifié par ailleurs - j'ai cherché autre chose.
Les différents modèles d'afficheurs testés et ceux retenus.
Minuscules afficheurs 7 segments.
J'ai envisagé d'utiliser de tout petits afficheurs à LED de ce type :
Afficheurs LED |
---|
Mais cela conduisait à ne fournir que des informations très succinctes (valeur de la fréquence) et je n'avais pas beaucoup de ces afficheurs en stock, de toute façon...
Afficheur LCD de type Nokia 5110
Afficheur très complet mais demandant beaucoup de ressources.
Afficheurs 5110 (image Adafruit) |
---|
![]() |
Je n'ai pas pu l'utiliser car, en chargeant les bibliothèques de l'écran et celles du module radio, on excède les capacités de l'Arduino ! Comme le but est quand même d'écouter la radio, le choix a été rapide. Mais cet afficheur est à la base d'ersatz d'œil. Vous en trouverez un exemple sur l'excellent site d'Electro-Bidouilleur que je vous recommande chaudement.
Afficheurs OLED 0,96 pouce et 0,42 pouce.
0,96 et 0,42 |
---|
Disponibles facilement et à des tarifs vraiment abordables, ces petits afficheurs très lumineux sont intéressants.
Avantages.
Les modèles 0,96 pouce tiennent à peu près dans la fenêtre d'un œil magique rond et, en utilisant un simple cache en carton, on peut étalonner facilement la zone d'affichage utile.
Limites.
-
Comme pour les afficheurs 5110, la limite principale est l'occupation mémoire des bibliothèques associées. Par exemple, je n'ai pas réussi à conjuguer l'utilisation des bibliothèques graphiques (comme celles d'Adafruit) - qui offrent des possibilités très importantes - et une bibliothèque radio prenant en charge les informations RDS. Je ne dis pas que c'est impossible mais mes limites en optimisation du code Arduino sont vite atteintes :-)
-
Compte tenu des bibliothèques utilisables, il est difficile d'avoir un affichage très complet avec un œil positionné en vertical comme les EM81 ou EM85 très utilisés en FM. La bibliothèque ASCII réduite que j'utilise ne gère pas la rotation de l'écran.
Ces afficheurs existent avec deux interfaces : SPI et I2C. Comme le module radio est aussi en I2C j'ai opté pour cette interface. L'interface SPI est semble-t-il nettement plus rapide mais, compte tenu de la résolution réduite des écrans, cela ne fait pas vraiment de différence.
Exemples d'affichages obtenus.
Ne vous fiez pas à l'apparence floue de l'image, l'autofocus de l'appareil photo a du mal à s'adapter aux écrans très lumineux. L'affichage est en réalité très net et très visible même à distance.
Un peu de code.
Les bibliothèques et les paramètres principaux de l'écran utilisé. Attention à l'adresse I2C qui peut changer selon le modèle :
// pour l'ecran oled, bibliotheque light sinon ça passe pas en mémoire #include "SSD1306Ascii.h" #include "SSD1306AsciiAvrI2c.h" #define I2C_ADDRESS 0x3C #define RST_PIN -1 SSD1306AsciiAvrI2c oled;
La séquence d'initialisation de l'écran propre à la bibliothèque utilisée :
// Initialisation de l'écran OLED oled.begin(&Adafruit128x64, I2C_ADDRESS); oled.setFont(Callibri11); oled.clear(); oled.setCursor(40,0); oled.print("Radio FM"); oled.setCursor(40,4); oled.print(" 2023");
Un exemple d'affichage de la fréquence :
int afficheFreq(int frequence) { // decomposition de la frequence. Trouve sur Net, chapeau ! uint8_t millier=frequence/1000; frequence=frequence-millier*1000; uint8_t centaine=frequence/100; frequence=frequence-centaine*100; uint8_t dizaine=frequence/10; uint8_t unite=frequence-dizaine*10; oled.setFont(Arial_bold_14); oled.clear(); if(millier>0){ oled.setCursor(30,2); oled.print(millier); oled.print(centaine); oled.print(dizaine); oled.print(","); oled.print(unite); oled.print(" Mhz"); } else{ oled.setCursor(35,2); oled.print(centaine); oled.print(dizaine); oled.print(","); oled.print(unite); oled.print(" Mhz"); } }
Exemples 'en réel'.
Pour terminer, deux exemples de réalisation :