Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construire une radio FM fiable avec des composants SparkFun et Arduino

Composants et fournitures

Construire une radio FM fiable avec des composants SparkFun et Arduino
SparkFun FM Tuner Basic Breakout - Si4703
× 1
Haut-parleur SparkFun - 0,5 Watt (8 Ohm)
Un excellent haut-parleur pour un petit projet radio
× 1
Écran graphique OLED monochrome Adafruit 0,96" 128x64
Un petit écran au contraste excellent
× 1
Texas Instruments LM386 - Amplificateur audio - DIP-8
Célèbre amplificateur opérationnel pour petits projets audio sur batterie
× 1
Construire une radio FM fiable avec des composants SparkFun et Arduino
Arduino Nano R3
× 1
Clavier à membrane Adafruit 1x4
× 2
Convertisseur de niveau logique I2C bidirectionnel 4 canaux Adafruit
Je ne l'ai pas utilisé mais il devrait fonctionner
× 1
Antenne télescopique FM pour connecteur F
× 1
Connecteur F type à vis pour montage panneau ken
× 1

À propos de ce projet

Enfant, je construisais des radios AM mais je n'ai jamais réussi à en faire une FM. C'était trop complexe. Aujourd'hui, on trouve des tuners FM complets sur une seule puce, mais ce sont des composants CMS difficiles à manipuler pour un amateur. Heureusement, SparkFun propose une carte d'extension (breakout) pour la puce Silicon Laboratories Si4703, qui rend tous les broches accessibles. Je vais vous montrer comment construire une radio FM complète autour de cette carte et utiliser un Arduino pour contrôler le tuner via son interface de commande à deux fils. SparkFun fournit une bibliothèque complète qui simplifie grandement la programmation.

Parallèlement, j'ai ajouté un petit écran OLED au projet, offrant un contraste très élevé et une consommation d'énergie très faible. Enfin, je vais vous montrer comment construire un amplificateur audio mono de qualité à partir d'un minimum de composants. La radio terminée fonctionne avec trois piles AA pendant de très nombreuses heures.

Carte d'extension SparkFun FM Tuner Basic et bus série I2C

La carte de base est facile à utiliser. Soudez d'abord les connecteurs mâles pour pouvoir l'utiliser sur une platine d'essai. Voir la disposition des broches ci-dessous. Un fil fin d'un mètre soudé sur la broche ANT sert d'antenne pour l'instant.

Construire une radio FM fiable avec des composants SparkFun et Arduino
Construire une radio FM fiable avec des composants SparkFun et Arduino

(Si vous ne souhaitez pas construire votre propre amplificateur, vous pouvez acheter la carte d'évaluation, utilisable directement avec un casque).

Le Si4703 possède une interface à deux fils, un bus série permettant de contrôler le tuner depuis un Arduino via communication série. Plus précisément, ce bus est l'I2C (Inter-Integrated Circuit ; se prononce « I-deux-C » ou « I-carré-C ») et utilise seulement deux lignes bidirectionnelles :

Dans le Si4703, SDA s'appelle SDIO et SCL s'appelle SCLK. Tous les Arduino intègrent l'I2C. Pour en savoir plus sur le bus I2C, Tom Igoe et Jeff Feddersen ont réalisé une excellente vidéo. Sur notre bus I2C, l'Arduino agit en maître tandis que le Si4703 et l'écran OLED agissent en esclaves.

Tensions du bus I2C et choix de l'Arduino

Les tensions utilisées par le Si4703 et l'écran OLED sur le bus I2C sont de 3,3 V. Pour cette raison, SparkFun recommande dans son guide de connexion d'utiliser un Arduino 3,3 V, comme l'Arduino Pro Mini, plus difficile à programmer car il n'a pas de connecteur USB et nécessite un adaptateur FTDI. Mais il y a un autre problème : le Pro Mini tourne à 8 MHz, soit la moitié de la vitesse d'un Uno ou Nano. Mes tests ont montré que c'est trop lent pour piloter l'écran OLED. Comme je tenais absolument à garder l'écran, j'ai opté pour un Arduino Nano (16 MHz) qui a un niveau de signal 5 V sur le bus I2C, et j'utilise des convertisseurs de niveau logique I2C bidirectionnels (décaleurs I2C) pour connecter les signaux 3,3 V de l'écran et de la puce radio. J'avais sous la main des décaleurs I2C à deux signaux chacun, que j'ai utilisés dans le projet. Nous devons décaler trois signaux au total : SDA, SCL et RST. J'ai dû utiliser deux décaleurs I2C. (J'ai indiqué dans la description un lien vers un décaleur 4 signaux qui permet de réduire le câblage).

Le Nano est presque identique à l'Uno mais dans un format bien plus compact. Si vous préférez, vous pouvez utiliser l'Uno. Je l'ai fait pour les premiers tests. Les deux ont un connecteur USB et sont faciles à utiliser avec l'IDE Arduino.

Schéma de câblage : connexions Arduino vers radio et écran

Examinons maintenant le câblage autour du Nano et les détails des connexions du bus I2C. (S'il n'y a pas de point, les fils se croisent simplement).

Construire une radio FM fiable avec des composants SparkFun et Arduino

Comme vous pouvez le voir, le projet est alimenté par trois piles AA (4,5 V). Les piles sont connectées directement à la broche 5 V de l'Arduino Nano, en contournant le régulateur de tension. Ainsi, un Nano fonctionne parfaitement avec 3 piles AA. ATTENTION ! Débranchez toujours les piles avant de connecter le Nano via USB à votre ordinateur ! Sinon, le 5 V de l'ordinateur sera mis en court-circuit avec vos piles. Pendant la phase de test initiale, alimentez le circuit via l'USB sans piles ! Pour plus de sécurité, utilisez six piles AA (9 V) et connectez le pôle positif à la broche VIN (au lieu de la broche 5 V) du Nano. Ainsi, la gestion d'alimentation du Nano coupera automatiquement les piles quand vous brancherez l'USB. (Vous pouvez utiliser une pile 9 V bloc mais elle ne durera que quelques heures).

Les broches Arduino SDA (A4) et SCL (A5) sont connectées au côté 5 V du décaleur I2C. De plus, nous utilisons D2 comme signal RST. Du côté 3,3 V du décaleur, nous connectons SDIO, SCLK et RST du Si4703. Pour l'écran OLED, il suffit de connecter SDA et SCL. (J'ai acheté le mien sur banggood.com car il était bicolore : jaune en haut et bleu, et n'avait pas de broche RST).

Connectez tous les composants à la sortie 3,3 V du Nano et à la masse. Le décaleur I2C a également besoin de 5 V du côté haute tension.

Les broches E/S D5-D12 sont connectées aux deux claviers. Appuyer sur un bouton relie l'entrée à la masse.

Amplificateur audio basse tension LM386

J'ai utilisé la puce LM386 pour construire un amplificateur mono. Le LM386 existe depuis les années 70. C'est un amplificateur de puissance conçu pour les applications grand public à basse tension (fiche technique). Le gain est fixé en interne à 20 pour limiter le nombre de composants externes, mais l'ajout d'une résistance et d'un condensateur externes entre les broches 1 et 8 permet d'augmenter le gain à n'importe quelle valeur entre 20 et 200. Nous travaillerons avec le gain minimal de 20, amplement suffisant avec un haut-parleur de 8 Ω.

Construire une radio FM fiable avec des composants SparkFun et Arduino

Voici le schéma de la partie amplificateur audio du projet :

Construire une radio FM fiable avec des composants SparkFun et Arduino

Regardons d'abord le Si4703. Sur le côté gauche, les connexions des signaux I2C vers l'Arduino sont indiquées. Les canaux de sortie audio doivent être connectés comme suit : la résistance R4 sur LOUT et R5 sur ROUT. Les deux signaux sont ensuite combinés en un signal MONO. Il y a des condensateurs sur les sorties de la carte d'extension, donc nous n'avons pas besoin d'en ajouter. R2 et R3 forment un diviseur de tension pour réduire le niveau du signal d'entrée vers l'amplificateur. Vous pourriez remplacer R2 et R3 par un potentiomètre pour régler le volume. Mais nous voulons contrôler le volume numériquement. Le niveau de sortie du Si4703 peut être augmenté par I2C par paliers de 1 à 15. Avec R2/R3, vous pouvez adapter cela à l'amplificateur en expérimentant différentes résistances. Par exemple, si vous augmentez R3, le volume augmente.

Le circuit est tiré directement de la fiche technique. C2 doit être d'au moins 220 µF. Des valeurs plus petites atténueront la réponse dans les basses. Si vous voulez booster les basses, consultez la fiche technique. Montez le circuit sur une platine d'essai et expérimentez en ajoutant/supprimant des composants : C3 doit être placé près de la puce. C3 et C1 sont optionnels.

Il y a beaucoup de vidéos YouTube sur les projets LM386 et beaucoup se plaignent du mauvais son. La plupart manquent probablement d'une bonne mise à la terre. Si vous regardez le schéma, vous verrez comment j'ai gardé la masse d'entrée séparée de la masse de sortie, ce qui est crucial. Elles se rejoignent à la broche 4, la broche de masse de la puce. Pour en savoir plus, regardez cette vidéo de JohnAudioTech (et celle-ci pour un projet LM386 complet).

Le LM386N-1 a besoin d'au minimum 4 V et délivre quelques centaines de mW. Je l'alimente avec 3 piles AA (4,5 V) et peux varier le volume entre 1 et 10 avec un son vraiment bon. Cependant, à une tension d'alimentation aussi basse, il est important d'utiliser un haut-parleur de 8 Ω (pas 4 Ω). Si je monte le volume à 15, la distorsion apparaît. Pour écouter plus fort, augmentez la tension d'alimentation à 9 V.

Prototypage

Je vous conseille vivement de construire d'abord tout le projet sur deux platines d'essai. Gardez l'Arduino, le décaleur I2C et l'écran OLED ensemble sur une platine, tandis que la carte d'extension Si4703 et l'amplificateur audio sont proches sur l'autre platine pour minimiser les distorsions acoustiques. Dans mon premier prototype, j'avais mis le Si4703 près de l'Arduino avec de longs câbles vers la partie audio (voir photo) et cela causait des distorsions.

Construire une radio FM fiable avec des composants SparkFun et Arduino

Alimentez l'Arduino depuis l'USB avec la sortie 3,3 V régulée de l'Arduino alimentant l'écran et la puce radio. Alimentez le LM386 depuis les piles (4,5 - 9 V).

Le code du programme

Les bibliothèques suivantes doivent être incluses :

#include <SparkFunSi4703.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Si vous ne savez pas comment installer des bibliothèques, consultez ce guide. La bibliothèque SparkFun se trouve ici et fournit des fonctions de haut niveau pour dialoguer avec le Si4703 sans se soucier des détails. Les bibliothèques d'affichage Adafruit avec tutoriel sont ici.

Ensuite, nous devons faire quelques définitions :

// Boutons d'entrée sur la radio
#define volDown 9
#define volUp 10
#define channelDown 11
#define channelUp 12

// Puce radio Si4703
#define resetPin 2
#define SDIO A4
#define SCLK A5
Si4703_Breakout radio(resetPin, SDIO, SCLK);
#define SI4703Address 0x10 // Adresse I2C du Si4703.

L'utilisation de #define rend le code source plus lisible. Une fois que vous avez défini que volDown fait référence à la broche 9, vous écrivez volDown chaque fois que vous voulez dire D9.

Regardons maintenant la section setup :

// Définition des variables
int channel;
int volume;

void setup() {
  // Résistances de tirage internes sur les entrées
  pinMode(volDown, INPUT_PULLUP);
  pinMode(volUp, INPUT_PULLUP);
  pinMode(channelUp, INPUT_PULLUP);
  pinMode(channelDown, INPUT_PULLUP);

  // Initialisation de la radio
  radio.powerOn();
  channel = 882;
  radio.setChannel(channel);
  volume = 4;
  radio.setVolume(volume);
}

Les broches 9-12 sont définies comme entrées. Le paramètre INPUT_PULLUP connecte une résistance de tirage interne (dans la puce ATmega) de +5 V vers la broche d'entrée. Par conséquent, le niveau de signal de la broche sera HAUT sauf si vous appuyez sur le bouton (bouton appuyé = BAS).

La bibliothèque SparkFun facilite le contrôle de la radio par I2C avec les fonctions principales powerOn(), setChannel() et setVolume().

La boucle principale écoute l'appui sur un bouton et agit en conséquence :

void loop() {
  // Volume bas
  if (digitalRead(volDown) == LOW) {
    if (volume > 0) volume--;
    radio.setVolume(volume);
    UpdateDisplay();
    delay(100);
  }
  // Volume haut
  if (digitalRead(volUp) == LOW) {
    if (volume < 15) volume++;
    radio.setVolume(volume);
    UpdateDisplay();
    delay(100);
  }
  // Canal bas
  if (digitalRead(channelDown) == LOW) {
    channel = radio.seekDown();
    UpdateDisplay();
    delay(100);
  }
  // Canal haut
  if (digitalRead(channelUp) == LOW) {
    channel = radio.seekUp();
    UpdateDisplay();
    delay(100);
  }
}

Consultez le code source complet ci-dessous. Il inclut quatre boutons pour les stations préprogrammées (où vous pouvez mettre vos stations favorites) et tout le code nécessaire pour mettre à jour l'écran OLED, qui utilise presque toute la RAM disponible. Je vous renvoie à l'excellent tutoriel Adafruit si vous voulez en savoir plus sur la bibliothèque SSD1306. Sachez que la bibliothèque ne peut pas déterminer la taille de votre écran par logiciel. Vous devez la spécifier après avoir installé Adafruit_SSD1306.h. Ouvrez le fichier de la bibliothèque, lisez les instructions dans les commentaires et modifiez le fichier en conséquence.

Il y a une fonction « avancée » dans le code source pour mesurer le niveau de la batterie en la comparant à une référence interne de 1,1 V à l'intérieur de la puce AVR. Comme nous fonctionnons sur piles, nous n'avons pas de tension de référence constante de 5 V pour mesurer la tension de la batterie. Pour en savoir plus, consultez les articles : Secret Arduino Voltmeter et le forum Gammon.

Du prototype sur platine à la radio finie

Si vous en êtes arrivé là, vous avez un prototype entièrement fonctionnel sur deux platines. Transférons le circuit sur deux cartes à trous (perfboards) et mettons toute la radio dans un boîtier de projet sympa. Si vous n'avez jamais fait cela, n'ayez pas peur d'essayer. Il n'y a rien que vous puissiez vraiment rater et vous apprendrez les compétences nécessaires au fur et à mesure. Collin d'Adafruit a fait deux vidéos d'introduction très bien : Breadboards & perfboards et Perfboard prototyping.

J'ai décidé de mettre le Nano avec les décaleurs I2C (j'ai dû en utiliser deux, voir plus haut) sur une perfboard :

Construire une radio FM fiable avec des composants SparkFun et Arduino
Construire une radio FM fiable avec des composants SparkFun et Arduino

Pour réaliser cette perfboard de prototype, j'ai suivi un tutoriel que je recommande d'étudier en détail : How to Prototype without using printed circuit boards. L'étape 3 est particulièrement importante : faites votre plan de câblage ! La planification est l'étape la plus importante et fait la différence entre l'échec et le succès. Quelques conseils supplémentaires : j'ai utilisé du fil noir 22 AWG, trop épais et difficile à travailler comme on le voit sur la photo. Procurez-vous du « Wire Wrapping Wire » fin (30 AWG) en différentes couleurs. Et utilisez une perfboard plus grande ! J'ai fait des connecteurs à broches et utilisé des fils Dupont pour relier les différentes parties.

Placez le Si4703 et l'amplificateur audio ensemble sur une deuxième perfboard. Voici un petit tutoriel pour un amplificateur LM386, que vous pouvez utiliser comme inspiration : From Schematics to Veroboard. Je vous suggère toutefois d'utiliser un support de CI pour le LM386 ! Alternativement, JohnAudioTech a fait une belle vidéo pour un projet d'amplificateur LM386 complet avec un bon layout inclus, qui sépare les masses de puissance des masses de signal.

Ensuite, il vous faut un boîtier de projet sympa pour votre radio. Collin montre dans cette vidéo comment faire. J'ai particulièrement aimé l'idée du ruban de masquage pour marquer où percer. J'ai acheté du ruban de peintre pas trop collant. Outre le ruban de masquage et une perceuse, utilisez un pistolet à colle chaude. Collez simplement le haut-parleur, les perfboards, le boîtier de piles, etc. dans le boîtier, puis reliez les pièces avec des fils Dupont. Le produit final ressemble à ceci :

Construire une radio FM fiable avec des composants SparkFun et Arduino

J'étais trop optimiste et j'ai acheté un boîtier de projet plutôt petit comme vous pouvez le voir. Pour faire une ouverture carrée pour l'écran sur le panneau avant, j'ai découpé au cutter depuis l'intérieur (pour éviter les marques disgracieuses à l'extérieur). Pas très élégant, mais ça a très bien fonctionné. Ensuite, j'ai collé l'écran dans l'ouverture avec de la colle chaude. J'ai marqué la taille du haut-parleur sur le panneau avant, percé beaucoup de trous de 3 mm pour le son et collé le haut-parleur par l'arrière.

Sur la photo, on voit encore le fil d'antenne. Ensuite, j'ai acheté un connecteur F type à montage panneau et une antenne télescopique FM. Bien que l'antenne ne fasse que 50 cm, la réception est très bonne et le petit haut-parleur sonne étonnamment bien. Le plus incroyable est que je n'ai pas changé les piles une seule fois alors que j'écoute ma petite radio depuis plusieurs jours.

Autres projets radio

J'ai été initialement inspiré pour ce projet en voyant la vidéo de Great Scott, qui a aussi construit un joli boîtier en bois pour sa radio dans une vidéo ultérieure. Beaucoup plus proche en détails de ma radio est cependant le Si4703 Pocket FM Radio de John Owen, car il utilise la carte d'extension SparkFun et vous devriez examiner de près la description de son projet. J'ai utilisé son code source pour la fonction Mono et pour la mesure de la tension de la batterie.

Code

FM-radio

Dépôt GitHub avec le code source pour Arduino Nano
https://github.com/Notthemarsian/FM-radio

Schémas

Diagrammes Fritzing FM radio

Fichiers Fritzing originaux et images / PDF
https://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

Processus de fabrication

  1. Construction d'un amplificateur audio push-pull classe B haute performance avec AO TL082
  2. Oscillateur hystérétique 555 — Construction d'un multivibrateur RC classique
  3. Circuits Radio à Cristal et Transistor : Du Détecteur de Base aux Récepteurs AM/FM Intégrés
  4. Fondamentaux de la radio : comment les ondes électromagnétiques sont générées et transmises
  5. L'évolution et l'ingénierie de la technologie radio
  6. Propagation Radio Sol-Sol : Comprendre l'Impact sur les Liaisons Sans Fil
  7. UnifiedWater v1 – Kit complet de capteur de qualité d'eau Arduino
  8. Construire une radio Internet Wi-Fi avec Raspberry Pi et Arduino : diffuser des stations mondiales
  9. Capteur radio à base d'atomes révèle la direction du signal pour communications plus pures