Arduino UKW-Radio

Arduino UKW-Radio – Musik hören ohne Internet

Inhalt

Wer hat nicht schon einmal davon geträumt, sein eigenes Radio zu bauen? Bei Pollux Labs findest du ein Internetradio, aber solange es die klassische UKW noch gibt, spricht auch nichts gegen einen passenden Empfänger. In diesem Projekt lernst du, wie du aus wenigen, günstigen Bauteilen ein UKW-Radio mit Sendersuchlauf erstellen kannst. Das Herzstück des Projekts ist ein Arduino Uno, der als Gehirn des Radios dient. Dazu kommt ein spezielles Radio-Modul (Si470x), das den Empfang übernimmt, und einen LM386-Verstärker, um den Sound auf einen Lautsprecher zu bringen.

Dieses Projekt ist perfekt für Einsteiger geeignet, die erste Erfahrungen mit dem Arduino, I²C-Kommunikation und einfachen Audioschaltungen sammeln möchten. Am Ende hast du nicht nur ein cooles, selbstgebautes Gadget, sondern auch ein tieferes Verständnis dafür, wie diese Komponenten zusammenspielen. Los geht’s!

Diese Bauteile brauchst du

Für dieses Projekt benötigst du die folgenden Bauteile:

  • Mikrocontroller: Arduino UNO*
  • Radio-Modul: Si4703*
  • Verstärker: LM386 Audioverstärker-IC*
  • Audio-Ausgabe: 1x kleiner Lautsprecher (0,5 Watt mit 8 Ohm)
  • Bedienelemente: 2x Push Buttons
  • Verkabelung: Breadboard und diverse Jumper-Kabel
  • Antenne: Ein ca. 75 cm langes Stück Draht

Der Aufbau auf dem Breadboard

Orientiere dich beim Aufbau des UKW-Radios an der folgenden Skizze.

Aufbau des Arduino UKW-Radios auf dem Breadboard

___STEADY_PAYWALL___

Da auf dem Breadboard ziemlich viel los ist, hier noch einmal alle Verbindungen in einer Tabelle.

Bauteil (Von)Pin am BauteilVerbindung zuAnmerkung
Si4703 Radio-Modul3.3V / VCC3.3V am ArduinoWichtig: Nicht an 5V anschliessen!
GNDGND am ArduinoGemeinsame Masse
SDIO (SDA)A4 am ArduinoI²C Datenleitung
SCLK (SCL)A5 am ArduinoI²C Taktleitung
RSTD2 am ArduinoReset-Leitung
LOUT (Left Out)Input / + am LM386Audio-Signal zum Verstärker
ANTca. 75cm DrahtDie Antenne, ins Leere hängend
LM386 VerstärkerVS5V am ArduinoStrom für den Verstärker
GNDGND am ArduinoGemeinsame Masse
+INPUTLOUT vom RadioDas Audiosignal geht hier rein
-INPUTGNDDient als Referenz für +INPUT
VOUTZum Lautsprecher mit 100uF KondensatorVerstärkter Audio-Ausgang
Taster 1Ein PinD13 am ArduinoSendersuche aufwärts (Seek Up)
Anderer PinGND am Arduino
Taster 2Ein PinD12 am ArduinoSendersuche abwärts (Seek Down)
Anderer PinGND am Arduino

So funktioniert das Radio

Ohne Antenne kein Radioempfang, klar. Hierfür reicht bereits ein langes, isoliertes Kabel (ca. 75 – 100cm) aus der Werkstatt. Du kannst die Antenne direkt an das Radio-Modul löten oder es in dein Breadboard stecken.

Mit den beiden Buttons startest du die Sendersuche: Der rechte sucht aufwärts nach Frequenzen mit Empfang, der linke Button entsprechend abwärts.

Und noch einige Worte zum Lautsprecher: Diesen schließt du nicht direkt an den Ausgang des LM386 an, sondern mit einem dazwischengeschalteten Elektrolyt-Kondensator (Elko) mit 100uF. Der Kondensator wirkt wie ein Filter: Er blockiert Gleichspannung und lässt nur das Audiosignal zum Lautsprecher durch. Man nennt ihn auch Koppelkondensator. Achte beim Einbau des Elkos unbedingt auf die Polarität – Plus kommt an den LM386 und Minus (gekennzeichnet durch einen Streifen) vor den Anschluss des Lautsprechers.

Ein genauerer Blick: Der LM386 Audioverstärker

Das Audiosignal, das direkt aus dem Radio-Modul kommt, ist viel zu schwach, um einen Lautsprecher anzutreiben. Hier kommt der LM386 ins Spiel. Er ist ein klassischer und sehr robuster Audioverstärker-Chip, perfekt für Hobby-Projekte. Seine Aufgabe ist es, das leise Signal vom LOUT-Pin des Radios aufzunehmen und es so zu verstärken, dass wir es deutlich hören können.

Da der Chip selbst keine Beschriftung hat, ist ein Pinout-Diagramm unerlässlich, um die Anschlüsse zu identifizieren. Achte auf die Kerbe an einer der kurzen Seiten des Chips – damit identifizierst du die linke und rechte Seite des LM386.

Die wichtigsten Anschlüsse für dieses Projekt:

  • Pin 6 (Vs) & Pin 4 (GND): Hier wird der Verstärker mit Strom versorgt (5V und Masse).
  • Pin 3 (+INPUT): An diesen „nicht-invertierenden“ Eingang legen wir unser Audiosignal vom Radio an.
  • Pin 2 (-INPUT): Der „invertierende“ Eingang dient als Referenz und wird einfach mit Masse (GND) verbunden.
  • Pin 5 (Vout): Hier kommt das verstärkte Signal für den Lautsprecher heraus.

Die übrigen Pins (Gain, Bypass) benötigen wir für eine einfache Schaltung nicht, sie könnten aber für eine höhere Lautstärke oder bessere Rauschunterdrückung genutzt werden.

Noch ein Hinweis: Das Radio-Modul gibt es auch mit einer Kopfhörer-Buchse. Bei dieser Version kannst du dir die Verstärkung über den LM386 und sogar die Antenne sparen. Sowohl der Ton als auch der Empfang kommt dann über die Kopfhörer bzw. deren Kabel.

Die passende Bibliothek für das Si403 Radio-Modul

Damit dein Arduino mit dem Radio-Modul sprechen kann, benötigt er eine passende Bibliothek. Diese findest du im Bibliotheksmanager deiner Arduino IDE. Suche dort einfach nach SI470x und installiere die aktuelle Version der Bibliothek PU2CLR SI470X. Das X steht hier für die verschiedenen Varianten des Modul – neben dem 4703 gibt es auch die Modelle 4701 und 4702.

Der Sketch für das Arduino UKW-Radio

Nun zur Software für deinen Radioempfänger. Kopiere den folgenden Sketch und lade ihn auf deinen Arduino:

/*
  UKW-Radio mit Arduino Uno, Si470x und LM386
*/

#include <Arduino.h>
#include <Wire.h>      // Für die I2C-Kommunikation
#include <SI470X.h>    // Die Bibliothek für das Radio-Modul

// Pin-Definitionen
const int RESET_PIN = 2;       // Pin für den Reset des Radio-Moduls
const int SEEK_UP_PIN = 13;    // Taster für Sendersuche aufwärts
const int SEEK_DOWN_PIN = 12;  // Taster für Sendersuche abwärts

// Radio-Objekt erstellen
SI470X radio;

// --- Funktion zur Ausgabe der aktuellen Sender-Informationen ---
void printRadioStatus() {
  // Aktuelle Daten vom Radio-Chip holen
  float currentFrequency = radio.getFrequency() / 100.0; // Frequenz von kHz in MHz umrechnen
  int currentRSSI = radio.getRssi();

  // --- AUSGABE IM SERIELLEN MONITOR ---
  Serial.println("--------------------");
  Serial.print("Aktueller Sender: ");
  Serial.print(currentFrequency, 2); // Zeigt zwei Nachkommastellen an
  Serial.println(" MHz");
  Serial.print("Signalstaerke: ");
  Serial.print(currentRSSI);
  Serial.println(" dBuV");
  Serial.println("--------------------");
}

void setup() {
  // Starte die serielle Kommunikation für die Ausgabe am Computer
  Serial.begin(9600);
  Serial.println("\n\nArduino UKW-Radio wird gestartet...");

  // Konfiguriere die Taster-Pins als Eingänge mit internem Pull-up-Widerstand.
  pinMode(SEEK_UP_PIN, INPUT_PULLUP);
  pinMode(SEEK_DOWN_PIN, INPUT_PULLUP);

  // Initialisiere die I2C-Kommunikation und das Radio-Modul
  Wire.begin();
  radio.setup(RESET_PIN, A4); // A4 ist der SDA-Pin beim Arduino Uno
  Serial.println("Si470x Radio initialisiert.");
  
  // Setze einen Schwellenwert für den Sendersuchlauf.
  radio.setSeekThreshold(45); 
  Serial.println("Sendersuchlauf-Schwelle auf 45 dBuV gesetzt.");
  
  // Stelle eine mittlere Lautstärke ein (0-15)
  radio.setVolume(5);
  Serial.println("Lautstaerke auf 5 gesetzt.");
  
  // Suche automatisch den ersten verfügbaren Sender nach dem Start
  Serial.println("Suche ersten Sender...");
  radio.seek(0, 1); // Mode 0 = am Bandende weitersuchen, Direction 1 = aufwärts
  
  // Gib den Status des ersten Senders aus
  printRadioStatus();
  
  Serial.println("Setup abgeschlossen. Radio ist bereit.");
}

void loop() {
  // Prüfe, ob der "Suchen Aufwärts"-Taster gedrückt wurde
  if (digitalRead(SEEK_UP_PIN) == LOW) {
    Serial.println("Taster 'Seek Up' gedrueckt -> Suche naechsten Sender...");
    radio.seek(0, 1);
    delay(200); // Entprellung des Tasters
    printRadioStatus();
  }

  // Prüfe, ob der "Suchen Abwärts"-Taster gedrückt wurde
  if (digitalRead(SEEK_DOWN_PIN) == LOW) {
    Serial.println("Taster 'Seek Down' gedrueckt -> Suche vorigen Sender...");
    radio.seek(0, 0); // Direction 0 = abwärts
    delay(200);
    printRadioStatus();
  }

  // Kurze Pause, damit der Loop nicht überlastet wird
  delay(50);
}

So funktioniert der Sketch

Auch wenn der Code auf den ersten Blick komplex aussieht, lässt er sich in drei logische Blöcke unterteilen. Schauen wir uns die wichtigsten Befehle genauer an.

  • Der setup()-Block: Die Vorbereitung Dieser Teil wird nur einmal beim Start des Arduinos ausgeführt.
    • Serial.begin(9600);: Startet die Kommunikation mit dem Computer, damit wir uns Nachrichten im Seriellen Monitor ansehen können.
    • pinMode(..., INPUT_PULLUP);: Konfiguriert die Pins für die Buttons zur Sendersuche. Der Arduino aktiviert einen internen Widerstand, der dafür sorgt, dass der Pin ein klares HIGH-Signal hat, solange der Taster nicht gedrückt wird. Das macht die Schaltung stabiler.
    • radio.setup(RESET_PIN, A4);: Weckt das Radio-Modul auf und stellt die I²C-Kommunikation her.
    • radio.setSeekThreshold(45);: Setzt den „Qualitätsfilter“ für den Suchlauf. Nur Sender mit einer Signalstärke von mindestens 45 dBuV werden berücksichtigt. Falls du zu wenige Sender empfängst, wähle einen niedrigeren Wert.
    • radio.setVolume(5);: Stellt die Grundlautstärke ein. Auch diese kannst du bei Bedarf anpassen.
    • radio.seek(0, 1);: Startet den ersten automatischen Suchlauf, um direkt nach dem Einschalten einen Sender zu finden.
  • Der loop()-Block: Die Endlosschleife Dieser Code wird immer wieder ausgeführt, solange das Radio eingeschaltet ist.
    • Der Arduino prüft ständig, ob die Buttons für die Sendersuche gedrückt wurden.
    • Wenn einer der Buttons gedrückt wird, wird der Befehl zum Suchen an das Radio gesendet.
  • Die printRadioStatus()-Funktion: Jedes Mal, wenn sie aufgerufen wird, holt sie sich die aktuelle Frequenz (radio.getFrequency()) und Signalstärke (radio.getRssi()) vom Modul und gibt sie sauber formatiert im Seriellen Monitor aus.

So erweiterst du das Arduino Radio

Der bisherige Aufbau ist vielleicht nur der Anfang: Du kannst ein OLED-Display anschließen und darauf die aktuelle Frequenz anzeigen. Eine sehr sinnvolle Erweiterung ist ein Potentiometer, mit dem du die Lautstärke regeln kannst. Und zuletzt bietet das Si403 Radio-Modul auch RDS (Radio Data System) – damit kannst du weitere Informationen empfangen, sofern sie die Sender zur Verfügung stellen bzw. über ihre Frequenz mitsenden.

Auch interessant

Taschenbuch
Vom Anfänger
zum Maker
Lerne C++ und Elektronik, indem du spannende Projekte baust und programmierst: - Wetterstation - Code-Schloss - Ultraschall-Theremin - ESP32 Webserver ... und mehr!
Mehr Arduino & ESP8266 Projekte
Von der Wetterstation bis zum eigenen Webserver: Lerne C++ und Elektronik, indem du spannende Projekte baust.
Taschenbuch & E-Book
Arduino Wetterstation UNO R4

Nimm eine Anleitung mit

Arduino Wetterstation

Dein nächstes Projekt wartet schon. Sichere dir jetzt die kostenlose Schritt-für-Schritt-Anleitung und baue deine eigene Arduino Wetterstation.