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

Radio FM

Composants et fournitures

SparkFun FM Tuner Basic Breakout - Si4703
× 1
Enceinte SparkFun - 0,5 Watt (8 Ohm)
Un excellent haut-parleur pour un petit projet radio
× 1
Affichage graphique OLED Adafruit Monochrome 0.96" 128x64
Un petit écran sympa avec un très bon contraste
× 1
Texas Instruments LM386 - Amplificateur audio - DIP-8
Célèbre ampli-op pour les petits projets audio alimentés par batterie
× 1
Arduino Nano R3
× 1
Clavier 1x4 à membrane Adafruit
× 2
Convertisseur de niveau logique bidirectionnel I2C 4 canaux Adafruit
Je n'ai pas utilisé celui-là mais ça devrait fonctionner
× 1
Antenne télescopique FM pour connecteur F
× 1
Vis de type F pour montage sur panneau kenable
× 1

À propos de ce projet

Enfant, je construisais des radios AM mais je n'ai jamais vraiment réussi à construire des radios FM. Ils étaient tout simplement trop compliqués. De nos jours, vous pouvez obtenir un tuner radio FM complet sur une puce, mais ces puces sont des composants à montage en surface et il est difficile pour un amateur de travailler avec. Heureusement, Sparkfun fait une percée pour la puce de tuner radio Silicon Laboratories Si4703 FM (fiche technique), qui brise toutes les broches. Je vais vous montrer comment vous pouvez construire une radio FM complète autour de cette évasion et utiliser un Arduino pour contrôler les fonctions du tuner via l'interface de contrôle à deux fils intégrée. Sparkfun fournit une bibliothèque complète facilitant la programmation.

En même temps, j'ai ajouté au projet un petit écran OLED sympa avec un contraste très élevé et une très faible consommation d'énergie. Enfin, je vais vous montrer comment vous pouvez construire un amplificateur audio mono au son exceptionnel à partir d'un minimum de pièces. La radio finie fonctionne avec trois piles AA pendant de nombreuses heures.

Sparkfun FM Tuner Basic Breakout et bus série I2C

L'évasion de base est facile à travailler. Première soudure sur l'embase mâle pour pouvoir utiliser le breakout avec une maquette. Voir la disposition des broches ci-dessous. La soudure sur un mètre de fil fin sert d'antenne à ANT pour le moment.

  • LOUT et ROUT sont les canaux de sortie gauche et droit que nous allons connecter à notre amplificateur.

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

  • La tension d'alimentation Vcc est de +3,3 Volts.
  • GND est la masse ou 0 Volt.

Le Si4703 possède une interface à deux fils, qui est un bus série qui permet de contrôler le tuner à partir d'un Arduino via une communication série. Plus précisément, le bus s'appelle I2C (Inter-integrated circuit; prononcé I-squared-C ou I-two-C) et n'utilise que deux lignes bidirectionnelles :

  • Ligne de données série (SDA) et
  • Ligne d'horloge série (SCL).
  • En plus vient la ligne de réinitialisation (RST).

Dans le Si4703, SDA est appelé SDIO et SCL est appelé SCLK. Tous les Arduinos ont I2C intégré. Si vous voulez 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 tant que maître tandis que le Si4703 et l'écran OLED agissent en tant qu'esclaves.

Tensions du bus I2C et choix de l'Arduino

Les tensions utilisées du Si4703 et de l'écran OLED sur le bus I2C sont de 3,3 volts. Pour cette raison, Sparkfun conseille dans son guide de connexion d'utiliser un Arduino de 3,3 volts. Cela signifie utiliser un Arduino Pro Mini qui est un peu plus difficile à programmer car il manque un connecteur USB et doit être programmé avec une sortie FTDI. Mais il y a un autre problème :l'Arduino Pro Mini fonctionne à 8 MHz, la moitié de la vitesse d'un Arduino Uno ou Nano. Mes tests ont montré que c'est trop lent pour piloter l'écran OLED. Comme je voulais vraiment garder l'affichage, j'ai décidé d'utiliser un Arduino Nano (16 MHz) qui a un niveau de signal de 5 volts sur le bus I2C et d'utiliser des convertisseurs de niveau logique I2C bidirectionnels (décaleurs I2C) pour se connecter aux signaux du bus de 3,3 volts de l'écran et de la puce radio. J'avais des shifters I2C qui traînaient avec deux signaux chacun que j'ai utilisés dans le projet. Nous avons besoin de décaler un total de trois signaux :SDA, SCL et RST. J'ai dû utiliser deux manettes I2C. (J'ai lié dans la description ci-dessus à un I2C-shifter avec 4 signaux qui peuvent vous aider à économiser du câblage).

Le Nano est presque identique au Uno mais avec un encombrement beaucoup plus petit. Si vous le souhaitez, vous pouvez utiliser le Uno à la place. Je l'ai fait pour le premier test. Les deux ont des connecteurs USB et sont faciles à utiliser avec l'IDE Arduino.

Schémas des connexions Arduino à la radio et à l'affichage

Examinons ensuite 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).

Comme vous pouvez le voir, le projet est alimenté par trois piles AA (4,5 volts). Les batteries sont connectées directement à la broche 5 volts de l'Arduino Nano, en contournant le régulateur de tension. De cette façon, un Nano fonctionnera avec plaisir à partir de 3 piles AA. ATTENTION ! Déconnectez toujours les batteries avant de connecter le Nano via USB à votre ordinateur ! Sinon le 5 Volt de votre ordinateur sera court-circuité avec vos batteries. Lors de la première phase de test, faites fonctionner le circuit depuis l'alimentation USB sans piles ! Si vous voulez jouer en toute sécurité, utilisez six piles AA (9 volts) et connectez le pôle plus à la broche VIN (au lieu de la broche 5 volts) du Nano . De cette façon, la gestion de l'alimentation du Nano éteint automatiquement les batteries lorsque vous connectez le câble USB. (Vous pouvez utiliser une pile bloc de 9 volts à la place, mais cela peut ne durer que quelques heures).

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

Connectez tous les composants à la sortie 3,3 volts du Nano et à la terre. Le levier de vitesses I2C a en outre besoin de 5 volts du côté haute tension.

Les broches IO D5-D12 sont connectées aux deux claviers. Appuyez sur un bouton pour connecter l'entrée à la terre.

Amplificateur audio basse tension LM386

J'ai utilisé la puce LM386 pour construire un amplificateur mono. Le LM386 existe depuis les années 70. Il s'agit d'un amplificateur de puissance conçu pour être utilisé dans des applications de consommation basse tension (fiche technique). Le gain est réglé en interne sur 20 pour maintenir le nombre de pièces externes bas, mais l'ajout d'une résistance et d'un condensateur externes entre les broches 1 et 8 augmentera le gain à n'importe quelle valeur de 20 à 200. Nous travaillerons avec le gain le plus bas de 20, ce qui est plus que suffisant si vous utilisez un haut-parleur de 8 ohms.

Les schémas de la partie amplificateur audio du projet sont donnés ci-dessous :

Regardons d'abord le Si4703. Sur le côté gauche, les connexions de signal I2C à l'Arduino sont indiquées. Les canaux de sortie audio sont à connecter comme suit :la résistance R4 est à connecter à LOUT et R5 à ROUT. Les deux signaux sont ensuite combinés en un signal MONO. Il y a des condensateurs sur les sorties de la carte de dérivation, nous n'avons donc pas besoin d'en ajouter un. R2 et R3 définissent un diviseur de tension pour diminuer le niveau du signal d'entrée dans l'amplificateur. Vous pouvez bien sûr remplacer R2 et R3 par un potentiomètre et l'utiliser pour régler le volume. Mais nous voulons contrôler le volume numériquement. Le niveau de sortie du Si4703 peut être augmenté par incréments sur I2C de 1 à 15. Avec R2 / R3, vous pouvez l'adapter à 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 faibles atténueront la réponse des basses. Si vous voulez booster les basses, jetez un œil à la fiche technique. Construisez le circuit sur une maquette et expérimentez l'ajout/le retrait de composants :C3 doit être placé près de la puce. C3 et C1 sont facultatifs.

Il y a beaucoup de vidéos sur youtube sur les projets LM386 et beaucoup se plaignent du mauvais son. La plupart d'entre eux n'ont probablement pas un bon aménagement du sol. Si vous regardez les schémas, vous voyez comment j'ai gardé la masse d'entrée séparée de la masse de sortie, ce qui est très important. Ils se rencontrent à la broche 4, la broche de masse de la puce. Si vous voulez en savoir plus à ce sujet, regardez cette vidéo de JohnAudioTech (et celle-ci pour un projet LM386) complet.

Le LM386N-1 a besoin d'un minimum de 4 Volts et délivre quelques centaines de mWatt. Je l'utilise avec 3 piles AA (4,5 volts) et je peux varier le volume entre 1 et 10 et ça sonne vraiment bien. Cependant, pour une tension d'alimentation aussi faible, il est assez important d'utiliser un haut-parleur de 8 Ohm (et non 4 Ohm). Si j'augmente le volume à 15, le son commence à être déformé. Si vous voulez faire jouer votre radio très fort, augmentez la tension d'alimentation à 9 volts.

Prototypage

Je vous conseille fortement de construire d'abord l'ensemble du projet sur deux maquettes. Gardez l'Arduino, le shifter I2C et l'écran OLED ensemble sur une planche à pain, tandis que vous avez le breakout Si4703 et l'amplificateur audio rapprochés sur l'autre planche à pain pour minimiser les distorsions acoustiques. Dans mon premier prototype, j'avais le Si4703 près de l'Arduino avec de longs câbles de signal vers la partie audio (voir photo) et cela provoquait des distorsions.

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

Le code du programme

Les bibliothèques suivantes doivent être incluses :

#include  #include  #include  #include  #include   

Si vous ne savez pas comment installer les bibliothèques, consultez le guide suivant. La bibliothèque Sparkfun se trouve ici et fournit des fonctions de haut niveau pour parler au Si4703 sans avoir à se soucier de tous les petits détails. Les bibliothèques d'affichage Adafruit avec tutoriel se trouvent 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 // Si4703 Adresse I2C.  

L'utilisation de #define est un moyen de rendre le code source plus lisible. Après avoir défini une fois pour toutes que volDown fait référence à la broche 9, vous écrivez volDown chaque fois que vous voulez dire D9.

Ensuite, nous regardons la section de configuration :

// Définition des variables int channel ; volume entier ; void setup() { // Définir les résistances de rappel internes sur les entrées pinMode(volDown, INPUT_PULLUP); pinMode(volUp, INPUT_PULLUP); pinMode(channelUp, INPUT_PULLUP); pinMode(channelDown, INPUT_PULLUP); // Initialiser la radio radio.powerOn(); canal =882 ; radio.setChannel(canal); volume =4 ; radio.setVolume(volume); }  

Les broches 9-12 sont définies comme des broches d'entrée. Le paramètre INPUT_PULLUP connecte une résistance de rappel interne (à l'intérieur de la puce ATmega) de +5V à la broche d'entrée. En conséquence, le niveau de signal de la broche sera HAUT à moins que vous n'appuyiez sur le bouton (bouton appuyé =BAS).

La bibliothèque Sparkfun permet de contrôler facilement la radio via I2C avec les fonctions principales powerOn(), setChannel() et setVolume().

La boucle principale écoute la pression d'un bouton, puis agit en conséquence :

void loop() { // Volume bas if (digitalRead(volDown) ==LOW) { if (volume> 0) volume--; radio.setVolume(volume); Mettre à jourAffichage(); retard (100); } // Augmenter le volume if (digitalRead(volUp) ==LOW) { if (volume <15) volume++; radio.setVolume(volume); Mettre à jourAffichage(); retard (100); } // Canal vers le bas if (digitalRead(channelDown) ==LOW) { channel =radio.seekDown(); Mettre à jourAffichage(); retard (100); } // Canal vers le haut if (digitalRead(channelUp) ==LOW) { channel =radio.seekUp(); Mettre à jourAffichage(); retard (100); } }  

Jetez un œil au code source complet ci-dessous. Il comprend quatre boutons pour les stations préréglées (où vous pouvez mettre vos stations préférées) 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 souhaitez en savoir plus sur la bibliothèque SSD1306. Sachez que la bibliothèque ne peut pas déterminer la taille de l'écran de votre affichage via un logiciel. Vous devez le spécifier après avoir installé Adafruit_SSD1306.h. Ouvrez le fichier de bibliothèque, lisez les instructions dans les commentaires et modifiez le fichier en conséquence.

Il existe une fonction "avancée" dans le code source pour mesurer le niveau de la batterie en le comparant à une référence interne de 1,1 volt à l'intérieur de la puce AVR. Comme nous fonctionnons sur batteries, nous n'avons pas de tension de référence constante de 5 volts pour mesurer la tension de la batterie. Si vous voulez en savoir plus, je vous renvoie aux articles suivants :Secret Arduino Voltmeter et le forum Gammon.

Du prototype de maquette à la radio finie

Si vous êtes arrivé jusqu'ici, vous disposez d'un prototype entièrement fonctionnel sur deux maquettes. Transférons le circuit sur deux perfboards et mettons toute la radio dans une jolie boîte à projet. Si vous ne l'avez pas encore fait, n'ayez pas peur d'essayer. Il n'y a rien que vous puissiez vraiment faire de mal et vous apprenez les compétences nécessaires au fur et à mesure que vous avancez. Collin d'Adafruit a réalisé deux belles vidéos d'introduction que vous pouvez regarder :Breadboards&perfboards et Perfboard prototyping.

J'ai décidé de mettre le Nano avec les manettes I2C (j'ai dû utiliser deux manettes, voir ci-dessus) sur un seul perfboard :

Pour réaliser ce prototype de perfboard, j'ai suivi un tutoriel, que je recommande d'étudier en détail :Comment Prototyper sans utiliser de circuits imprimés. L'étape 3 est particulièrement importante :faites votre plan de câblage ! La planification est l'étape la plus importante et la différence entre l'échec et le succès. Quelques conseils supplémentaires :j'ai utilisé du fil noir 22 AWG, qui était trop épais et difficile à travailler comme vous pouvez le voir sur la photo. Procurez-vous plutôt du "Wire Wrapping Wire" fin (30 AWG) de différentes couleurs. Et utilisez un perfboard plus grand ! J'ai fabriqué des en-têtes de broches et utilisé des cavaliers Dupont pour connecter les différentes pièces entre elles.

Placez le Si4703 et l'amplificateur audio ensemble sur un deuxième panneau perforé. Voici un petit tutoriel pour un amplificateur LM386, que vous pouvez utiliser comme source d'inspiration :From Schematics to Veroboard. Je suggérerais cependant que vous utilisiez une prise IC pour le LM386 ! Alternativement, JohnAudioTech a réalisé une belle vidéo pour un projet d'amplificateur LM386 complet avec une bonne disposition incluse, dont les masses d'alimentation sont séparées des masses de signal.

Ensuite, vous avez besoin d'un joli boîtier de projet pour votre radio. Encore une fois, Collin montre dans cette vidéo comment le faire. J'ai particulièrement aimé l'idée du masking tape pour marquer où percer. J'ai acheté du scotch Painter qui n'est pas trop collant. En plus du ruban adhésif et d'une perceuse, utilisez un pistolet à colle chaude. Collez simplement le haut-parleur, les panneaux perforés, la batterie, etc. dans le boîtier, puis connectez les pièces avec des câbles de raccordement Dupont. Le produit final ressemble à ceci :

J'étais trop optimiste et j'ai acheté une boîte de projet plutôt petite comme vous pouvez le voir. Pour faire une ouverture carrée pour l'affichage dans le panneau avant, j'ai coupé avec une lame Stanley de l'intérieur (pour éviter les marques laides à l'extérieur). Pas très élégant, mais cela 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é de nombreux trous de 3 mm pour le son et collé le haut-parleur par l'arrière.

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

Autres projets radio

J'ai d'abord été inspiré pour faire ce projet lorsque j'ai vu la vidéo de Great Scott, qui a également construit une jolie boîte de projet en bois pour sa radio dans une vidéo ultérieure. Cependant, la radio Si4703 Pocket FM de John Owen est beaucoup plus détaillée de ma radio, car il utilise le module 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 tension de batterie.

Code

Radio FM
Dépôt Github avec code source pour Arduino Nanohttps://github.com/Notthemarsian/FM-radio

Schémas

Schémas Fritzing radio FM
Fichiers et images Fritzing originaux / PDFhttps://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

Processus de fabrication

  1. Amplificateur audio de classe B
  2. Oscillateur hystérétique 555
  3. Circuits radio
  4. Principes de la radio
  5. Radio
  6. Propagation radio sol-sol
  7. UnifiedWater v1
  8. Radio Internet Pi-Arduino
  9. Communications radio basées sur Atom