Radioduino !!

radio-011-Large.jpg

Après le bureau, la cuisine !!!!
En trainant mes guetres sur le site de sparkfun, j’ai repéré un tuner FM piloté un bus I2C (changement de fréquence, recherche auto de station, données RDS), une nouvelle idée farfelue à germée….Réaliser une radio FM pour la cuisine avec pele-mèle: Un barometre, une horloge temps reel, un decodeur RDS avancé (refonte en profondeur de la bibliothèque d’origine fournie par sparkfun), un compte minute pour cuisiner, un ampli audio commandé par un simple potard, un joystick comme moyen d’interagir……et bien-sur, tout ça devant tenir dans un boitier de moins d’un mètre cube!!!!!!!!!!!!!

Pour changer un peu, j’ai utilisé un nouveau venu: l’arduino Micro, qui se distingue du nano par le fait qu’il intégrè le même microcontrôleur que l’arduino leonardo – un ATmega32u4. Cette puce a le gros avantage d’intégrer un port usb natif évitant de passer par un convertisseur série/usb, donc moins de composants sur le PCB. L’ATmega32u4 et sa gestion de l’usb permet aussi à l’arduino micro de simuler un clavier ou une souris.

radio 008 (Medium)

D’un point de vue composants/modules, beaucoup de déjà vu: horloge temps réel I2C snootlab, capteur de pression atmo Bosch BMP085, écran  LCD 4×20 sur bus I2C.

les trois nouveautés sont:
– le tuner FM I2C Si4703
– l’ampli miniature a base d’un TPA2005D1
joystick analogique avec click provenant des manettes de PS2

Pas de grand mystère pour le joystick, il est composé de deux potentiomètres dont on récupère la valeur de la tension issue du pont diviseur sur une entrée analogique de l’arduino.
Concernant le tuner FM, beaucoup de travail concernant la bibliothèque de traitement des signaux RDS. Celle fournie par sparkfun étant plutôt embryonnaire, il a fallu que je me plonge dans les spécifications de la norme RDS, afin de développer ma propre version de la bibliothèque pour afficher le RadioText en plus de la station (et pour ne pas m’arrêter en si bon chemin, j’ai implémenté la quasi totalité des fonctions RDS possibles AF-TA-PS-CT-RT-PI-TP-PTY). La bibliothèque est un fork de l’originale: https://github.com/Chnalex/Si4703_FM_Tuner_Evaluation_Board/tree/master/Libraries/Si4703_Breakout
elle est en court d’intégration dans le source initial….mais ce n’est pas très réactif coté sparkfun….. 😉
L’ampli, pour sa part,  est très simple d’emploi (entrée,sortie, emplacement pour un potentiomètre, alim). Il est de classe D, il fonctionne comme une alimentation à découpage (signal PWM comme pour l’horloge à galva) la bobine de l’HP servant à lisser le signal. Ce qui donne une très bonne qualité de restitution pour un ampli de cette taille (2cm X 2cm, conso quelques dizaines de mA, rendu 1.4W, rapport signal/bruit 97Db), et surtout sans effet de chauffe.

radio 007 (Medium)

La façade… c’est aussi une des composantes de la réussite du projet. J’ai trouvé sur un forum une référence à un site en Allemagne permettant de concevoir en ligne (via une appli web type CAO) des objets en 2D (découpe et gravure) sur différents matériaux :
http://www.formulor.de/createDesign
pour la façade, j’ai choisi une plaque d’acrylique très fine (1.5mm) de couleur noire

radio 005 (Medium)

un peu de scotch double-face avant d’appliquer la façade sur le boitier

 

 

radio 004 (Medium)

 

 

 

 

la façade avant

radio 006 (Medium)

 

 

 

 

 

le résultat ….

 

 

 

 

 

une petite vidéo du démarrage (init, splashscreen, infos RDS ->PS puis RT)

 

vidéo du fonctionnement  du compte-minutes ….. 😉

comme toujours, un petit tour par le source:

https://github.com/Chnalex/arduino/blob/master/radioduino.ino

 

Horloge à galvanomètres

IMG_0848

Quoi de mieux qu’une petite horloge de bureau atypique, avec un look analogique (comble de la supercherie totalement numérique dans les faits).
Et comme afficher l’heure c’est bien mais que donner un semblant de prévision météo c’est mieux, pourquoi ne pas y adjoindre un capteur de pression atmosphérique ainsi qu’un capteur de température.

comme toujours, un arduino nano sera au cœur du montage pour son coté compact. Le pilotage des trois  galvanomètres (heures, minutes, secondes) est assuré par les sorties « analogiques » (qui n’ont d’analogique que le nom, puisqu’il s’agit de sorties PWM en réalité  <- modulation de largeur d’impulsion 0-5V avec une fréquence d’environ 500Hz). Mais, oh miracle de l’électronique à l’ancienne, le galvanomètre étant composé d’une bobine (et souvent d’une résistance en plus), celle-ci lisse le signal pour donner une valeur continue (l’idéal eut été d’y adjoindre un petit condensateur…mais cela fonctionne parfaitement sans). Pour la partie, horloge temps réel le même Module I2C pour pour la domotique est utilisé, idem pour le capteur de température où un DS18B20 Onewire sera installé.
IMG_0852

La petite nouveauté réside dans l’utilisation d’un capteur I2C BMP085 de chez Bosh (module bleu vertical à droite de l’image)

Donc au final beaucoup d’analogique piloté, une pincé d’I2C, un soupçon de Onewire,
ce qui donne ça… dans le boitier définitif:

IMG_0851

les trois boutons poussoirs visibles sur le dessus sont là pour régler/recaler manuellement l’horloge interne (cf code source), ils sont alimentés en +5V et chacun ferme un circuit de pont diviseur. La lecture de la valeur étant effectuée sur l’une des entrées analogiques.

Le source sur GitHub: https://github.com/Chnalex/arduino/blob/master/horloge-galvanometre.ino