- Fonctionnement général de la radio FM
- Composants requis
- Récepteur RDA5807
- Amplificateur audio
- Schéma du circuit du récepteur Arduino FM
- Explication du code de la radio Arduino FM
- Fonctionnement de la radio Arduino FM
Aujourd'hui, presque tout le monde utilise son téléphone portable pour écouter de la musique, des nouvelles, des podcasts, etc. Mais il n'y a pas si longtemps, nous dépendions tous des radios FM locales pour obtenir les dernières nouvelles et chansons, lentement ces radios perdent de leur popularité mais en cas d'urgence lorsque l'Internet est en panne, les radios jouent un rôle important dans la transmission d'informations aux utilisateurs. Les signaux radio sont toujours présents dans l'air (qui sont diffusés par les stations), et tout ce dont nous avons besoin est un circuit récepteur FM pour capter ces signaux radio et les transférer vers des signaux audio. Dans nos tutoriels précédents, nous avons également construit quelques autres émetteurs et récepteurs FM répertoriés ci-dessous.
- Émetteur FM Raspberry Pi
- Radio récepteur FM Raspberry Pi
- Circuit émetteur FM
- Circuit émetteur FM sans inductance
Dans ce tutoriel, nous allons construire un récepteur Arduino FM et l'ajouter à notre arsenal de projet. Nous utiliserons le récepteur IC RDA5807 FM avec Arduino et le programmerons de manière à ce que nous jouions n'importe quelle station de radio FM qui peut être réglée par l'utilisateur avec un potentiomètre. Nous utiliserons également un amplificateur audio avec le circuit pour contrôler le volume de sortie de notre radio Arduino FM, cela semble intéressant, non? Alors, commençons.
Fonctionnement général de la radio FM
Les stations de radio convertissent les signaux électriques en signaux de radio, et ces signaux doivent être modulés avant d'être transmis par l'antenne. Il existe deux méthodes dans lesquelles un signal peut être modulé, à savoir AM et FM. Comme son nom l'indique, la modulation d'amplitude (AM) module l'amplitude avant de transmettre un signal alors que, en modulation de fréquence (FM), la fréquence du signal est modulée avant de transmettre à travers l'antenne. Dans les stations de radio, ils utilisent la modulation de fréquence pour moduler le signal puis transmettre les données. Maintenant, tout ce que nous devons construire est un récepteur qui peut être réglé sur certaines fréquences et recevoir ces signaux, et plus tard pour convertir ces signaux électriques en signaux audio. Nous allons utiliser leModule récepteur FM RDA5807 dans ce projet, ce qui simplifie notre circuit.
Composants requis
- Arduino Nano
- Récepteur RDA5807
- Amplificateur audio
- Fils de connexion
- Pot - 100K
- Conseil Perf
Récepteur RDA5807
Le RDA5807 est un module tuner radio FM stéréo à puce unique avec un synthétiseur entièrement intégré. Le module prend en charge la bande de fréquence mondiale de 50 à 115 MHz, le contrôle du volume et la mise en sourdine, la désaccentuation programmable (50 / 75us), l'indicateur de force du signal de réception et le SNR, l'oscillateur à quartz 32,768KHz, le contrôle automatique du gain numérique, etc. schéma de principe du tuner RDA5807M.
Il a une architecture numérique à faible IF et intègre un amplificateur à faible bruit (LNA), qui prend en charge la bande de diffusion FM (50 à 115 MHz), un contrôle de gain programmable (PGA), un convertisseur analogique-numérique haute résolution, et un convertisseur numérique-analogique (CNA) haute fidélité. Le limiteur évite les surcharges et limite le nombre de produits d'intermodulation créés par les canaux adjacents. Le PGA amplifie le signal de sortie du mélangeur puis numérisé avec des ADC. Le cœur DSP gère la sélection des canaux, la démodulation FM, le décodeur MPX stéréo et le signal audio de sortie. Le schéma de brochage RDA5807 pour le CI est donné ci-dessous.
Le module fonctionne sur une alimentation de 1,8 - 3,3V. Lorsqu'il s'arrête et que l'interface de contrôle est sélectionnée, le module se réinitialise lorsque VIO est sous tension et prend également en charge la réinitialisation logicielle par le déclenchement du bit1 de 0 à 1 de l'adresse 02H. Le module utilise la communication I2C pour communiquer avec le MCU, et l'interface commence par une condition de démarrage, un octet de commande et des octets de données. Le RDA5807 dispose de 13 registres 16 bits, chacun exécutant une fonction particulière. Les adresses de registre commencent par 00H, qui est attribuée à l'ID de puce et se termine par 0FH. Dans les 13 registres, certains bits sont réservés tandis que d'autres sont R / W. Chaque registre effectue des tâches telles que la variation du volume, le changement de canaux, etc. en fonction des bits qui leur sont attribués.
Nous ne pouvons pas utiliser directement le module lors de sa connexion à un circuit car les broches sont fermées par. J'ai donc utilisé une carte de performance et des broches mâles et j'ai soudé chaque broche du module à chaque broche mâle, comme indiqué sur la photo ci-dessous.
Amplificateur audio
Un amplificateur audio est un appareil électronique qui amplifie les signaux audio électroniques de faible puissance à un niveau où il est suffisamment élevé pour alimenter des haut-parleurs ou des écouteurs. Nous avons construit un simple amplificateur audio à l'aide du LM386, le circuit correspondant est illustré ci-dessous et vous pouvez également vérifier le lien pour en savoir plus sur ce circuit, ainsi que d'autres circuits d'amplification audio.
Schéma du circuit du récepteur Arduino FM
Nous avons utilisé deux potentiomètres pour régler la bande FM et contrôler le volume de l'amplificateur audio. Pour changer le volume, vous pouvez soit varier le potentiomètre, qui est connecté entre 1 et 8 ème broche du LM386, soit le potentiomètre, qui est connecté à la broche 3 du LM386. La photo ci-dessous montre le schéma de circuit complet de la radio Arduino FM.
J'ai fait de petits changements dans l'amplificateur. Au lieu d'utiliser deux potentiomètres dans l'amplificateur, j'en ai utilisé un seul. J'ai interchangé le pot, qui sert à changer le gain, avec une résistance. Alors maintenant, notre projet a deux potentiomètres, un pour régler et un pour changer le volume. Le potentiomètre, qui est utilisé pour régler le canal est connecté à l'Arduino nano. La broche centrale du pot est connectée à la broche A0 de l'Arduino nano, et l'une des deux broches restantes est connectée au 5V et l'autre est connectée au GND. Un autre potentiomètre est utilisé pour contrôler le volume de la radio et est connecté comme indiqué sur la fig.
Les broches A4 et A5 de l'Arduino sont connectées aux broches SDA et SCL du RDA5807M. gardez à l'esprit que le module récepteur ne fonctionne que sur 3,3 V. Alors, connectez la broche 3v3 du Nano à la broche VCC du module récepteur. Une fois les connexions établies, ma configuration ressemblait à ceci
Explication du code de la radio Arduino FM
Le code initialisera le module récepteur, puis définira le canal avec la fréquence prédéfinie. Lorsque la valeur lue par le nano à la broche A0 change (en changeant le potentiomètre), la fréquence change, ce qui change à son tour le canal. Le code complet est donné en fin de page.
Nous commençons notre programme en ajoutant la bibliothèque de fils requise pour communiquer avec RDA5807. Ensuite, dans la variable «canal», nous définissons la valeur du canal. Chaque fois que la radio démarre, elle sera automatiquement syntonisée sur cette chaîne.
#comprendre
Ensuite, nous chargerons des octets dans chaque registre sur notre IC RDA5807 pour définir notre configuration initiale. À ce stade, nous réinitialisons le récepteur.
uint8_t boot_config = {/ * registre 0x02 * / 0b11000001, 0b00000011, / * registre 0x03 * / 0b00000000, 0b00000000, / * registre 0x04 * / 0b00001010, 0b00000000, / * registre 0x05 * / 0b10001000, 0b00001111, / * registre 0x06000, 0b00001111, / * 0b00000000, 0b00000000, / * registre 0x07 * / 0b01000010, 0b00000010,};
Après avoir réinitialisé l'appareil, nous pouvons régler l'appareil. Pour syntoniser la chaîne, il suffit de programmer les 4 premiers octets. Cette partie du code changera le canal à la fréquence désirée. Dans I2C dans un premier temps, nous commençons la transmission, écrivons ou lisons les données puis terminons la transmission. Dans ce récepteur IC, nous n'avons pas à spécifier l'adresse car la fiche technique indique clairement que l'interface I2C a un registre de démarrage fixe, c'est-à-dire 0x02h pour une opération d'écriture et 0x0Ah pour une opération de lecture.
uint8_t tune_config = {/ * registre 0x02 * / 0b11000000, 0b00000001, / * registre 0x03 * / (canal >> 2), ((canal & 0b11) << 6) - 0b00010000};
Dans la configuration, nous initialisons la configuration de démarrage (réinitialisation), puis nous nous accordons sur un canal en écrivant des octets de configuration de réglage sur le RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Connexion au tuner FM RDA5807M: * / Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (boot_config, BOOT_CONFIG_LEN); Wire.endTransmission (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Lors de l'utilisation du potentiomètre pour régler une fréquence, j'avais rencontré un problème. Les valeurs lues par la broche A0 ne sont pas constantes. Il y a un bruit matraqué avec la valeur souhaitée. J'ai utilisé un condensateur céramique de 0,1 uF connecté entre A0 et GND, bien que le bruit ait été minimisé, il n'est pas au niveau souhaité. J'ai donc dû apporter quelques modifications au code. Au début, j'ai noté les lectures qui sont affectées par le bruit. J'ai découvert que la valeur maximale du bruit est de 10. J'ai donc écrit le programme de telle manière qu'il ne considérera la nouvelle valeur que si la différence entre la nouvelle valeur et l'ancienne valeur de cette même broche est supérieure à 10 puis syntonise le canal souhaité.
boucle vide () {int channel1 = 187, avg = 0, newA; statique int oldA = 0; résultat int = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (canal); oldA = nouveauA; }}} // fin de la boucle
Cette fonction est utilisée pour définir les octets du tableau tune_config , puis transmet les données au RDA5807M IC en utilisant le protocole I2C.
void myChangeChannel (int channel) {/ * void si rien n'est retourné else int * / tune_config = (channel >> 2); tune_config = ((canal & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Fonctionnement de la radio Arduino FM
Lorsque le module est mis sous tension, notre code réinitialise le RDA5807-M IC et le règle sur un canal de l'utilisateur souhaité (Remarque: cette fréquence est considérée comme la fréquence de base sur laquelle la fréquence sera incrémentée). En changeant le potentiomètre (connecté à A0), les valeurs lues par l'Arduino Nano changent. Si la différence entre la nouvelle et l'ancienne valeur est supérieure à 10, notre code prendra en compte cette nouvelle valeur. Le canal est modifié en fonction du changement de la nouvelle valeur par rapport à l'ancienne. L'augmentation ou la diminution du volume dépend du potentiomètre, qui est connecté entre la broche 3 et GND.
À la fin de la construction et du codage, vous aurez votre propre radio FM. Le fonctionnement complet de la radio FM peut être trouvé dans la vidéo liée au bas de cette page. J'espère que vous avez apprécié le projet et appris quelque chose d'utile. Si vous avez des questions pour faire fonctionner ce projet, vous pouvez les laisser dans la section des commentaires ou utiliser nos forums pour obtenir une aide technique.