- FM Radio Allgemeines Arbeiten
- Erforderliche Komponenten
- RDA5807 Empfänger
- Audio-Verstärker
- Schaltplan des Arduino FM-Empfängers
- Arduino FM Radio Code Erklärung
- Arbeiten von Arduino FM Radio
Heutzutage benutzt fast jeder sein Handy, um Musik, Nachrichten, Podcasts usw. zu hören. Aber vor nicht allzu langer Zeit waren wir alle auf lokale FM-Radios angewiesen, um die neuesten Nachrichten und Songs zu erhalten. Langsam verlieren diese Radios an Popularität, aber in Notfällen im Internet Wenn die Funkgeräte ausfallen, spielen sie eine wichtige Rolle bei der Übertragung von Informationen an die Benutzer. Funksignale sind immer in der Luft vorhanden (die von den Sendern gesendet werden), und wir benötigen lediglich eine FM-Empfängerschaltung, um diese Funksignale zu erfassen und auf Audiosignale zu übertragen. In unseren vorherigen Tutorials haben wir auch einige andere FM-Sender und -Empfänger gebaut, die unten aufgeführt sind.
- Himbeer Pi FM Sender
- Raspberry Pi FM Empfänger Radio
- FM-Senderschaltung
- FM-Senderschaltung ohne Induktivität
In diesem Tutorial werden wir einen Arduino FM-Empfänger konstruieren und ihn unserem Projektarsenal hinzufügen. Wir werden den RDA5807 FM Receiver IC mit Arduino verwenden und so programmieren, dass jeder FM-Radiosender abgespielt wird, der vom Benutzer mit einem Potentiometer eingestellt werden kann. Wir werden auch einen Audioverstärker zusammen mit der Schaltung verwenden, um die Ausgangslautstärke unseres Arduino FM-Radios zu regeln. Klingt interessant, oder? Also lasst uns anfangen.
FM Radio Allgemeines Arbeiten
Die Radiosender wandeln elektrische Signale in Radiosignale um, und diese Signale müssen moduliert werden, bevor sie über die Antenne übertragen werden. Es gibt zwei Methoden, mit denen ein Signal moduliert werden kann, nämlich AM und FM. Wie der Name schon sagt, moduliert die Amplitudenmodulation (AM) die Amplitude vor dem Senden eines Signals, während bei der Frequenzmodulation (FM) die Frequenz des Signals vor dem Senden durch die Antenne moduliert wird. Bei den Radiosendern verwenden sie Frequenzmodulation, um das Signal zu modulieren und dann die Daten zu übertragen. Jetzt müssen wir nur noch einen Empfänger bauen, der auf bestimmte Frequenzen abgestimmt werden kann und diese Signale empfängt und später diese elektrischen Signale in Audiosignale umwandelt. Wir werden das benutzenRDA5807 FM-Empfängermodul in diesem Projekt, das unsere Schaltung vereinfacht.
Erforderliche Komponenten
- Arduino Nano
- RDA5807 Empfänger
- Audio-Verstärker
- Kabel anschließen
- Topf - 100K
- Perf Board
RDA5807 Empfänger
RDA5807 ist ein Single-Chip- FM-Stereo-Radio-Tuner-Modul mit einem vollständig integrierten Synthesizer. Das Modul unterstützt das weltweite Frequenzband von 50 - 115 MHz, Lautstärkeregelung und Stummschaltung, programmierbare Deemphasis (50 / 75us), Empfangssignalstärkeanzeige und SNR, 32,768-kHz-Quarzoszillator, digitale automatische Verstärkungsregelung usw. Die folgende Abbildung zeigt die Blockschaltbild des Tuners RDA5807M.
Es verfügt über eine digitale Low-IF-Architektur und integriert einen rauscharmen Verstärker (LNA), der das FM-Broadcast-Band (50 bis 115 MHz) unterstützt, eine programmierbare Verstärkungsregelung (PGA), einen hochauflösenden Analog-Digital-Wandler und ein High-Fidelity-Digital-Analog-Wandler (DACs). Der Begrenzer verhindert eine Überlastung und begrenzt die Anzahl der Intermodulationsprodukte, die von benachbarten Kanälen erzeugt werden. Der PGA verstärkt das Mischerausgangssignal und digitalisiert dann mit ADCs. Der DSP-Kern verwaltet die Kanalauswahl, die FM-Demodulation, den Stereo-MPX-Decoder und das ausgegebene Audiosignal. Das Pinbelegungsdiagramm RDA5807 für den IC ist unten angegeben.
Das Modul arbeitet an der Stromversorgung von 1,8 - 3,3V. Wenn die Ruhe- und Steuerschnittstelle ausgewählt ist, setzt sich das Modul zurück, wenn VIO eingeschaltet ist, und unterstützt auch das Soft-Reset durch den Trigger von Bit1 von 0 auf 1 der 02H-Adresse. Das Modul verwendet die I2C-Kommunikation, um mit der MCU zu kommunizieren, und die Schnittstelle beginnt mit der Startbedingung, einem Befehlsbyte und Datenbytes. Der RDA5807 verfügt über 13 16-Bit-Register, die jeweils eine bestimmte Funktion ausführen. Die Registeradressen beginnen mit 00H, das der Chip-ID zugeordnet ist, und enden mit 0FH. In allen 13 Registern sind einige Bits reserviert, während andere R / W sind. Jedes Register führt Aufgaben wie das Variieren der Lautstärke, das Ändern der Kanäle usw. in Abhängigkeit von den ihnen zugewiesenen Bits aus.
Wir können das Modul nicht direkt verwenden, wenn wir es an einen Stromkreis anschließen, da die Pins durch geschlossen sind. Also habe ich eine Perf-Platine und einige Stecknadeln verwendet und jeden Stift des Moduls mit jedem Stecknadel verlötet, wie im Bild unten gezeigt.
Audio-Verstärker
Ein Audioverstärker ist ein elektronisches Gerät, das elektronische Audiosignale mit geringem Stromverbrauch auf einen Pegel verstärkt, der hoch genug ist, um Lautsprecher oder Kopfhörer anzusteuern. Wir haben einen einfachen Audioverstärker mit LM386 gebaut. Die Schaltung dafür ist unten dargestellt. Sie können auch den Link überprüfen, um mehr über diese Schaltung zu erfahren. Überprüfen Sie auch andere Audioverstärkerschaltungen.
Schaltplan des Arduino FM-Empfängers
Wir haben zwei Potentiometer verwendet, um das FM-Band abzustimmen und die Lautstärke des Audioverstärkers zu steuern. Um die Lautstärke zu ändern, kann man entweder den Topf variiert, die zwischen 1 und 8 verbunden ist, tH Stift LM386 oder den Topf, die am Pin 3 des LM386 verbunden ist. Das folgende Bild zeigt den vollständigen Schaltplan für Arduino FM Radio.
Ich habe kleine Änderungen am Verstärker vorgenommen. Anstatt zwei Potentiometer im Verstärker zu verwenden, habe ich nur eines verwendet. Ich habe den Topf, mit dem die Verstärkung geändert wird, gegen einen Widerstand ausgetauscht. Unser Projekt verfügt nun über zwei Potentiometer, eines zum Einstellen und eines zum Ändern der Lautstärke. Das Potentiometer, mit dem der Kanal eingestellt wird, ist mit dem Arduino Nano verbunden. Der mittlere Stift des Topfes ist mit dem A0-Stift des Arduino Nano verbunden, und einer der verbleibenden zwei Stifte ist mit 5 V verbunden, und der andere ist mit dem GND verbunden. Ein weiterer Topf dient zur Steuerung der Lautstärke des Radios und wird wie in der obigen Abbildung gezeigt angeschlossen.
Der Pin A4 und A5 des Arduino sind mit dem SDA- und SCL-Pin des RDA5807M verbunden. Beachten Sie, dass das Empfängermodul nur mit 3,3 V arbeitet. Verbinden Sie also den 3v3-Pin des Nano mit dem VCC-Pin des Empfängermoduls. Sobald die Verbindungen hergestellt waren, sah mein Setup so aus
Arduino FM Radio Code Erklärung
Der Code initialisiert das Empfängermodul und stellt dann den Kanal mit der voreingestellten Frequenz ein. Wenn sich der vom Nano am A0-Pin gelesene Wert ändert (durch Ändern des Potis), ändert sich die Frequenz, was wiederum den Kanal ändert. Der vollständige Code ist am Ende der Seite angegeben.
Wir beginnen unser Programm mit dem Hinzufügen der erforderlichen Drahtbibliothek für die Kommunikation mit RDA5807. Dann setzen wir in der Variablen "Kanal" den Wert des Kanals. Jedes Mal, wenn das Radio startet, wird es automatisch auf diesen Kanal eingestellt.
#einschließen
Als nächstes laden wir Bytes in jedes Register auf unserem RDA5807-IC, um unsere Erstkonfiguration festzulegen. Zu diesem Zeitpunkt setzen wir den Empfänger zurück.
uint8_t boot_config = {/ * Register 0x02 * / 0b11000001, 0b00000011, / * Register 0x03 * / 0b00000000, 0b00000000, / * Register 0x04 * / 0b00001010, 0b00000000, / * Register 0x05 * / 0b10001000 / 0 * 0b00000000, 0b00000000, / * Register 0x07 * / 0b01000010, 0b00000010,};
Nachdem wir das Gerät zurückgesetzt haben, können wir das Gerät einstellen. Zum Einstellen des Kanals müssen nur die ersten 4 Bytes programmiert werden. Dieser Teil des Codes ändert den Kanal auf die gewünschte Frequenz. In I2C beginnen wir zuerst mit der Übertragung, schreiben oder lesen die Daten und beenden dann die Übertragung. In diesem Empfänger-IC müssen wir die Adresse nicht angeben, da das Datenblatt eindeutig angibt, dass die I2C-Schnittstelle ein festes Startregister hat, dh 0x02h für eine Schreiboperation und 0x0Ah für eine Leseoperation.
uint8_t tune_config = {/ * Register 0x02 * / 0b11000000, 0b00000001, / * Register 0x03 * / (Kanal >> 2), ((Kanal & 0b11) << 6) - 0b00010000};
Im Setup initialisieren wir die Boot-Konfiguration (Reset) und stellen dann einen Kanal ein, indem wir Tuning-Konfigurationsbytes auf den RDA5807M schreiben.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Verbindung zum FM-Tuner RDA5807M herstellen: * / 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 (); }}
Bei der Verwendung von Pot zum Einstellen einer Frequenz hatte ich ein Problem. Die vom A0-Pin gelesenen Werte sind nicht konstant. Es gibt ein Geräusch mit dem gewünschten Wert. Ich habe einen Keramikkondensator mit 0,1 uF verwendet, der zwischen A0 und GND angeschlossen ist. Obwohl das Rauschen minimiert wurde, entspricht es nicht dem gewünschten Pegel. Also musste ich einige Änderungen am Code vornehmen. Zuerst habe ich die Messwerte notiert, die vom Rauschen beeinflusst werden. Ich fand heraus, dass der Maximalwert des Rauschens 10 ist. Deshalb habe ich das Programm so geschrieben, dass es den neuen Wert nur berücksichtigt, wenn die Differenz zwischen dem neuen Wert und dem alten Wert desselben Pins größer als 10 ist und stellt dann den gewünschten Kanal ein.
void loop () {int channel1 = 187, avg = 0, newA; statisch int oldA = 0; int result = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (Kanal); oldA = newA; }}} // Schleifenende
Diese Funktion wird verwendet, um die Bytes des Tune_config- Arrays festzulegen und die Daten dann unter Verwendung des I2C-Protokolls an den RDA5807M-IC zu übertragen.
void myChangeChannel (int channel) {/ * void wenn nichts zurückgegeben wird else int * / tune_config = (channel >> 2); tune_config = ((Kanal & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }}
Arbeiten von Arduino FM Radio
Wenn das Modul eingeschaltet wird, setzt unser Code den RDA5807-M-IC zurück und stellt ihn auf einen Kanal des gewünschten Benutzers ein (Hinweis: Diese Frequenz wird als Basisfrequenz verwendet, auf der die Frequenz erhöht wird). Durch Ändern des Potentiometers (verbunden mit A0) ändern sich die vom Arduino Nano gelesenen Werte. Wenn der Unterschied zwischen dem neuen und dem alten Wert größer als 10 ist, berücksichtigt unser Code diesen neuen Wert. Der Kanal wird abhängig von der Änderung des neuen Werts vom alten Wert geändert. Das Erhöhen oder Verringern der Lautstärke hängt vom Potentiometer ab, das zwischen Pin 3 und GND angeschlossen ist.
Am Ende der Konstruktion und Codierung haben Sie Ihr eigenes FM-Radio. Die vollständige Funktionsweise des UKW-Radios finden Sie im Video, das unten auf dieser Seite verlinkt ist. Ich hoffe, Ihnen hat das Projekt gefallen und Sie haben etwas Nützliches gelernt. Wenn Sie Fragen haben, wie Sie dieses Projekt zum Laufen bringen können, können Sie diese im Kommentarbereich hinterlassen oder unsere Foren für andere technische Hilfe nutzen.