Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

FM-Radio

Komponenten und Verbrauchsmaterialien

SparkFun FM Tuner Basic Breakout - Si4703
× 1
SparkFun-Lautsprecher - 0,5 Watt (8 Ohm)
Ein großartig klingender Lautsprecher für ein kleines Radioprojekt
× 1
Adafruit Monochrome 0,96" 128x64 OLED-Grafikdisplay
Ein cooles kleines Display mit sehr gutem Kontrast
× 1
Texas Instruments LM386 - Audioverstärker - DIP-8
Berühmter Operationsverstärker für kleine batteriebetriebene Audioprojekte
× 1
Arduino Nano R3
× 1
Adafruit Membran 1x4 Tastatur
× 2
Adafruit 4-Kanal-I2C-bidirektionaler Logikpegelwandler
Ich habe das nicht verwendet, aber es sollte funktionieren
× 1
Teleskopantenne FM für F-Anschluss
× 1
Kenable F-Schraube für Schalttafelmontage
× 1

Über dieses Projekt

Als Kind habe ich AM-Radios gebaut, es aber nie geschafft, FM-Radios zu bauen. Sie waren einfach zu kompliziert. Heutzutage können Sie einen kompletten FM-Radiotuner auf einem Chip erhalten, aber diese Chips sind oberflächenmontierte Komponenten und für einen Bastler schwierig zu bearbeiten. Glücklicherweise macht Sparkfun einen Durchbruch für den FM-Radiotuner-Chip Si4703 von Silicon Laboratories (Datenblatt), der alle Pins ausbricht. Ich zeige Ihnen, wie Sie um diesen Breakout herum ein komplettes FM-Radio bauen und ein Arduino verwenden können, um die Tuner-Funktionen über die eingebaute Zweidraht-Steuerungsschnittstelle zu steuern. Sparkfun bietet eine komplette Bibliothek, die die Programmierung erleichtert.

Gleichzeitig habe ich dem Projekt ein cooles kleines OLED-Display mit sehr hohem Kontrast und sehr geringem Stromverbrauch hinzugefügt. Zu guter Letzt zeige ich Ihnen, wie Sie aus wenigen Teilen einen großartig klingenden Mono-Audioverstärker bauen können. Das fertige Radio läuft viele, viele Stunden mit drei AA-Batterien.

Sparkfun FM-Tuner Basic Breakout und serieller I2C-Bus

Der grundlegende Breakout ist einfach zu handhaben. Löten Sie zuerst die Stiftleiste an, um den Breakout mit einem Steckbrett verwenden zu können. Siehe Pin-Layout unten. Löten Sie auf einen Meter dünnen Draht, der vorerst als Antenne für ANT dient.

  • LOUT und ROUT sind die linken und rechten Ausgangskanäle, die wir an unseren Verstärker anschließen.

(Wenn Sie keinen eigenen Verstärker bauen möchten, können Sie stattdessen das Evaluation Board kaufen, das Sie direkt mit Ihren Kopfhörern verwenden können).

  • Die Versorgungsspannung Vcc beträgt +3,3 Volt.
  • GND ist Masse oder 0 Volt.

Der Si4703 verfügt über eine Zweidraht-Schnittstelle, einen seriellen Bus, der es ermöglicht, den Tuner von einem Arduino über serielle Kommunikation zu steuern. Genauer gesagt heißt der Bus I2C (Inter-integrierte Schaltung; ausgesprochen I-squared-C oder I-two-C) und verwendet nur zwei bidirektionale Leitungen:

  • Serielle Datenleitung (SDA) und
  • Serielle Taktleitung (SCL).
  • Zusätzlich kommt die Reset-Leitung (RST).

Beim Si4703 heißt SDA SDIO und SCL heißt SCLK. Alle Arduinos haben integriertes I2C. Wenn Sie mehr über den I2C-Bus erfahren möchten, haben Tom Igoe und Jeff Feddersen ein tolles Video gemacht. Auf unserem I2C-Bus fungiert der Arduino als Master, während sowohl der Si4703 als auch das OLED-Display als Slaves fungieren.

I2C-Busspannungen und Arduino-Auswahl

Die verwendeten Spannungen des Si4703 und des OLED-Displays am I2C-Bus betragen 3,3 Volt. Aus diesem Grund rät Sparkfun in seiner Anschlussanleitung zur Verwendung eines 3,3-Volt-Arduinos. Dies bedeutet, dass ein Arduino Pro Mini verwendet wird, das etwas schwieriger zu programmieren ist, da es keinen USB-Anschluss hat und mit einem FTDI-Breakout programmiert werden muss. Aber es gibt noch ein weiteres Problem:Der Arduino Pro Mini läuft mit 8 MHz, halb so schnell wie ein Arduino Uno oder Nano. Meine Tests haben gezeigt, dass dies zu langsam ist, um das OLED-Display anzusteuern. Da ich das Display wirklich behalten wollte, entschied ich mich für einen Arduino Nano (16 MHz) mit 5 Volt Signalpegel auf dem I2C-Bus und bidirektionale I2C-Logikpegelwandler (I2C-Shifter) zum Anschluss an die 3,3-Volt-Bussignale des Displays und des Funkchips. Ich hatte einige I2C-Shifter mit jeweils zwei Signalen herumliegen, die ich im Projekt verwendet habe. Wir müssen insgesamt drei Signale pegelverschieben:SDA, SCL und RST. Ich musste zwei I2C-Shifter verwenden. (Ich habe in der obigen Beschreibung einen I2C-Shifter mit 4 Signalen verlinkt, der Ihnen helfen kann, Kabel zu sparen).

Der Nano ist fast identisch mit dem Uno, hat aber eine viel kleinere Grundfläche. Wenn Sie möchten, können Sie stattdessen das Uno verwenden. Das habe ich beim ersten Test gemacht. Beide haben USB-Anschlüsse und sind einfach mit der Arduino IDE zu verwenden.

Schaltpläne Arduino-Verbindungen zu Radio und Display

Schauen wir uns als Nächstes die Verkabelung um den Nano und die Details der I2C-Busverbindungen an. (Wenn kein Punkt vorhanden ist, kreuzen sich die Drähte einfach).

Wie Sie sehen, wird das Projekt mit drei AA-Batterien (4,5 Volt) betrieben. Die Batterien werden unter Umgehung des Spannungsreglers direkt an den 5-Volt-Pin des Arduino Nano angeschlossen. Auf diese Weise wird ein Nano glücklich mit 3 AA-Batterien betrieben. WARNUNG! Trennen Sie immer die Batterien, bevor Sie den Nano über USB mit Ihrem Computer verbinden! Andernfalls werden die 5 Volt Ihres Computers mit Ihren Batterien kurzgeschlossen. Betreiben Sie während der ersten Testphase die Schaltung über das USB-Netzteil ohne Batterien! Wenn du auf Nummer sicher gehen willst, verwende sechs AA-Batterien (9 Volt) und verbinde den Pluspol mit dem VIN-Pin (statt dem 5 Volt-Pin) des Nano . Auf diese Weise schaltet das Powermanagement des Nano die Akkus automatisch ab, wenn Sie das USB-Kabel anschließen. (Sie können stattdessen eine 9-Volt-Blockbatterie verwenden, die jedoch möglicherweise nur ein paar Stunden hält).

Arduino SDA (A4) und SCL (A5) werden an die 5 Volt Seite des I2C-Shifters angeschlossen. Außerdem verwenden wir D2 als RST-Signal. Auf der 3,3 Volt Seite des I2C-Shifters verbinden wir SDIO, SCLK und RST des Si4703. Für das OLED-Display reicht es, sich mit SDA und SCL zu verbinden. (Ich habe meine auf banggood.com gekauft, weil sie zweifarbig war:gelb (obere Reihen) und blau und es gab keinen RST-Pin).

Verbinden Sie alle Komponenten mit dem 3,3 Volt Ausgang des Nano und mit Masse. Der I2C-Shifter benötigt zusätzlich 5 Volt auf der Hochspannungsseite.

Die IO-Pins D5-D12 sind mit den beiden Tastaturen verbunden. Durch Drücken einer Taste wird der Eingang mit Masse verbunden.

Niederspannungs-Audioverstärker LM386

Ich habe den LM386-Chip verwendet, um einen Monoverstärker zu bauen. Den LM386 gibt es seit den 70er Jahren. Es handelt sich um einen Leistungsverstärker für den Einsatz in Niederspannungsverbraucheranwendungen (Datenblatt). Die Verstärkung ist intern auf 20 eingestellt, um die Anzahl der externen Teile niedrig zu halten, aber das Hinzufügen eines externen Widerstands und Kondensators zwischen den Pins 1 und 8 erhöht die Verstärkung auf einen beliebigen Wert von 20 bis 200. Wir arbeiten mit der niedrigsten Verstärkung von 20, das ist mehr als hoch genug, wenn Sie einen 8-Ohm-Lautsprecher verwenden.

Als nächstes werden die Schaltpläne für den Audioverstärkerteil des Projekts gegeben:

Schauen wir uns zuerst den Si4703 an. Auf der linken Seite werden die I2C-Signalverbindungen zum Arduino angezeigt. Die Audio-Ausgangskanäle sind wie folgt anzuschließen:Der Widerstand R4 ist an LOUT und R5 an ROUT anzuschließen. Die beiden Signale werden dann zu einem MONO-Signal kombiniert. An den Ausgängen der Breakout-Platine befinden sich Kondensatoren, sodass wir keinen hinzufügen müssen. R2 und R3 definieren einen Spannungsteiler, um den Eingangssignalpegel in den Verstärker zu verringern. Natürlich könnten Sie R2 und R3 durch ein Potentiometer ersetzen und damit die Lautstärke regulieren. Aber wir wollen die Lautstärke digital regeln. Der Ausgangspegel des Si4703 kann über I2C stufenweise von 1 bis 15 erhöht werden. Mit R2 / R3 können Sie dies durch Experimentieren mit verschiedenen Widerständen an den Verstärker anpassen. Wenn Sie beispielsweise R3 erhöhen, erhöht sich die Lautstärke.

Die Schaltung ist direkt dem Datenblatt entnommen. C2 muss mindestens 220 µF betragen. Kleinere Werte dämpfen die Basswiedergabe. Wenn Sie den Bass anheben möchten, sehen Sie sich das Datenblatt an. Bauen Sie die Schaltung auf einem Steckbrett auf und experimentieren Sie mit dem Hinzufügen / Entfernen von Komponenten:C3 muss in der Nähe des Chips platziert werden. C3 und C1 sind optional.

Auf Youtube gibt es viele Videos zu LM386-Projekten und viele beschweren sich über schlechten Ton. Den meisten von ihnen fehlt wahrscheinlich die richtige Bodenaufteilung. Wenn Sie sich die Schaltpläne ansehen, sehen Sie, wie ich die Eingangsmasse von der Ausgangsmasse getrennt habe, was sehr wichtig ist. Sie treffen sich an Pin 4, dem Massepin des Chips. Wenn Sie mehr darüber erfahren möchten, sehen Sie sich dieses Video von JohnAudioTech an (und dieses für ein vollständiges LM386-Projekt).

Der LM386N-1 benötigt mindestens 4 Volt und liefert einige hundert mWatt. Ich betreibe dieses mit 3 AA-Batterien (4,5 Volt) und kann die Lautstärke zwischen 1 und 10 variieren und es klingt wirklich gut. Bei einer so niedrigen Versorgungsspannung ist es jedoch sehr wichtig, einen 8 Ohm (nicht 4 Ohm) Lautsprecher zu verwenden. Wenn ich die Lautstärke auf 15 erhöhe, fängt es an, verzerrt zu klingen. Wenn Sie Ihr Radio richtig laut spielen möchten, erhöhen Sie die Versorgungsspannung auf 9 Volt.

Prototypenerstellung

Ich würde dringend raten, das gesamte Projekt zuerst auf zwei Steckbrettern aufzubauen. Halten Sie Arduino, I2C-Shifter und OLED-Display auf einem Steckbrett zusammen, während Sie den Si4703-Breakout und den Audioverstärker auf dem anderen Steckbrett dicht beieinander haben, um akustische Verzerrungen auf ein Minimum zu reduzieren. In meinem ersten Prototyp hatte ich den Si4703 in der Nähe des Arduino mit langen Signalkabeln zum Audioteil (siehe Bild) und dies verursachte Verzerrungen.

Versorgen Sie den Arduino über USB mit dem geregelten 3,3-Volt-Ausgang des Arduino, der das Display und den Funkchip mit Strom versorgt. Versorgen Sie den LM386 mit Batterien (4,5 - 9 Volt).

Der Programmcode

Folgende Bibliotheken müssen eingebunden werden:

#include  #include  #include  #include  #include   

Wenn Sie nicht wissen, wie Sie Bibliotheken installieren, sehen Sie sich die folgende Anleitung an. Die Sparkfun-Bibliothek befindet sich hier und bietet High-Level-Funktionen, um mit dem Si4703 zu kommunizieren, ohne sich um all die kleinen Details kümmern zu müssen. Die Adafruit-Displaybibliotheken mit Tutorial finden Sie hier.

Als nächstes müssen wir einige Definitionen machen:

// Eingabetasten am Radio #define volDown 9 #define volUp 10 #define channelDown 11 #define channelUp 12 // Si4703-Funkchip #define resetPin 2 #define SDIO A4 #define SCLK A5 Si4703_Breakout radio(resetPin, SDIO, SCLK); #define SI4703Address 0x10 // Si4703 I2C-Adresse.  

Die Verwendung von #define ist eine Möglichkeit, den Quellcode lesbarer zu machen. Nachdem Sie ein für alle Mal definiert haben, dass sich volDown auf den Pin 9 bezieht, schreiben Sie jedes Mal volDown, wenn Sie D9 meinen.

Als nächstes schauen wir uns den Einrichtungsabschnitt an:

// Variablendefinition int channel; int-Volumen; Void setup () {// Setzen Sie interne Pull-Up-Widerstände an den Eingängen pinMode (volDown, INPUT_PULLUP); pinMode (volUp, INPUT_PULLUP); pinMode (channelUp, INPUT_PULLUP); pinMode (channelDown, INPUT_PULLUP); // Radio initialisieren radio.powerOn(); Kanal =882; radio.setChannel (Kanal); Volumen =4; radio.setVolume (Lautstärke); }  

Die Pins 9-12 sind als Eingangspins definiert. Der Parameter INPUT_PULLUP verbindet einen internen Pullup-Widerstand (im ATmega-Chip) von +5V mit dem Eingangspin. Folglich ist der Signalpegel des Pins HIGH, es sei denn, Sie drücken die Taste (gedrückte Taste =LOW).

Die Sparkfun-Bibliothek macht es einfach, das Radio über I2C mit den Hauptfunktionen powerOn(), setChannel() und setVolume() zu steuern.

Die Hauptschleife wartet darauf, dass eine Taste gedrückt wird und führt dann entsprechende Aktionen aus:

void loop () {// Lautstärke verringern if (digitalRead (volDown) ==LOW) { if (volume> 0) volume--; radio.setVolume (Lautstärke); UpdateDisplay(); Verzögerung (100); } // Lautstärke erhöhen if (digitalRead (volUp) ==LOW) { if (volume <15) volume ++; radio.setVolume (Lautstärke); UpdateDisplay(); Verzögerung (100); } // Kanal runter wenn (digitalRead (channelDown) ==LOW) {channel =radio.seekDown (); UpdateDisplay(); Verzögerung (100); aufrechtzuerhalten. // Kanal hoch if (digitalRead (channelUp) ==LOW) {channel =radio.seekUp(); UpdateDisplay(); Verzögerung (100); } }  

Sehen Sie sich unten den vollständigen Quellcode an. Es enthält vier Tasten für voreingestellte Sender (wo Sie Ihre Lieblingssender eingeben können) und den gesamten Code, der zum Aktualisieren des OLED-Displays erforderlich ist, das fast den gesamten verfügbaren Arbeitsspeicher verbraucht. Ich verweise Sie auf das hervorragende Adafruit-Tutorial, wenn Sie mehr über die SSD1306-Bibliothek erfahren möchten. Beachten Sie, dass die Bibliothek die Bildschirmgröße Ihres Displays nicht per Software ermitteln kann. Sie müssen es nach der Installation von Adafruit_SSD1306.h angeben. Öffnen Sie die Bibliotheksdatei, lesen Sie die Anweisungen in den Kommentaren und bearbeiten Sie die Datei entsprechend.

Es gibt eine "erweiterte" Funktion im Quellcode, um den Batteriestand zu messen, indem er mit einer internen 1,1-Volt-Referenz im AVR-Chip verglichen wird. Da wir mit Batterien betrieben werden, haben wir keine konstante Referenzspannung von 5 Volt, um die Batteriespannung zu messen. Wenn Sie mehr erfahren möchten, verweise ich Sie auf die folgenden Artikel:Secret Arduino Voltmeter und das Gammon-Forum.

Vom Steckbrett-Prototyp zum fertigen Radio

Wenn Sie so weit gekommen sind, haben Sie einen voll funktionsfähigen Prototyp auf zwei Steckbrettern. Lassen Sie uns die Schaltung auf zwei Perfboards übertragen und das gesamte Radio in eine schöne Projektbox bringen. Wenn Sie dies noch nicht getan haben, haben Sie keine Angst, es zu versuchen. Es gibt nichts, was man wirklich falsch machen kann und man lernt die nötigen Fähigkeiten im Laufe der Zeit. Collin von Adafruit hat zwei schöne Einführungsvideos gemacht, die du dir ansehen kannst:Breadboards&perfboards und Perfboard Prototyping.

Ich habe mich entschieden, den Nano zusammen mit den I2C-Schalthebeln (ich musste zwei Schalthebel verwenden, siehe oben) auf einem Perfboard unterbringen:

Um dieses Prototyp-Perfboard herzustellen, habe ich ein Tutorial befolgt, das ich empfehle, im Detail zu studieren:Wie man einen Prototyp erstellt, ohne Leiterplatten zu verwenden. Besonders wichtig ist Schritt 3:Erstellen Sie Ihren Verdrahtungsplan! Planung ist der wichtigste Schritt und der Unterschied zwischen Misserfolg und Erfolg. Einige weitere Tipps:Ich habe schwarzen 22 AWG Draht verwendet, der zu dick und schwer zu verarbeiten war, wie Sie auf dem Bild sehen können. Holen Sie sich stattdessen einen dünnen "Wire Wrapping Wire" (30 AWG) in verschiedenen Farben. Und verwende ein größeres Perfboard! Ich habe Stiftleisten hergestellt und Dupont-Überbrückungsdrähte verwendet, um die verschiedenen Teile miteinander zu verbinden.

Platzieren Sie den Si4703 und den Audioverstärker zusammen auf einem zweiten Perfboard. Hier ist ein kleines Tutorial für einen LM386-Verstärker, das Sie als Inspiration verwenden können:From Schematics to Veroboard. Ich würde jedoch vorschlagen, dass Sie für den LM386 einen IC-Sockel verwenden! Alternativ hat JohnAudioTech ein schönes Video für ein komplettes LM386-Verstärkerprojekt mit einem guten Layout erstellt, bei dem die Leistungsmasse von der Signalmasse getrennt ist.

Als nächstes benötigen Sie ein schönes Projektgehäuse für Ihr Radio. Auch hier zeigt Collin in diesem Video, wie es geht. Besonders gut hat mir die Idee mit dem Kreppband zum Markieren der Bohrstellen gefallen. Ich habe Painter's Tape gekauft, das nicht zu klebrig ist. Verwenden Sie außer Kreppband und Bohrmaschine eine Heißklebepistole. Einfach Lautsprecher, Perfboards, Akkupack etc. in das Gehäuse kleben und dann die Teile mit Dupont-Überbrückungsdrähten verbinden. Das Endprodukt sieht so aus:

Ich war zu optimistisch und habe mir, wie man sieht, eine eher kleine Projektbox gekauft. Um eine quadratische Öffnung für das Display in der Frontplatte zu machen, schneide ich mit einer Stanley-Klinge von innen (um hässliche Markierungen außen zu vermeiden). Nicht sehr elegant, aber es hat gut funktioniert. Dann habe ich das Display mit Heißkleber in die Öffnung geklebt. Ich habe die Größe des Lautsprechers auf der Frontplatte markiert, viele 3 mm Löcher für den Sound gebohrt und den Lautsprecher von der Rückseite angeklebt.

Auf dem Bild sieht man noch das Antennenkabel. Als nächstes kaufte ich einen F-Typ-Anschluss für die Panelmontage und eine ausziehbare FM-Antenne. Obwohl die Antenne nur 50 cm lang ist, ist der Empfang sehr gut und der kleine Lautsprecher klingt überraschend gut. Am erstaunlichsten ist jedoch die Tatsache, dass ich die Batterien noch kein einziges Mal gewechselt habe, obwohl ich seit vielen Tagen mein kleines Radio höre.

Andere Radioprojekte

Zu diesem Projekt wurde ich zunächst inspiriert, als ich das Video von Great Scott sah, der in einem späteren Video auch eine schöne Holzprojektbox für sein Radio baute. Viel näher im Detail an meinem Radio ist jedoch das Si4703 Pocket FM Radio von John Owen, da er den Sparkfun Breakout nutzt und man sich seine Projektbeschreibung genau anschauen sollte. Ich habe seinen Quellcode für die Mono-Funktion und für die Messung der Batteriespannung verwendet.

Code

FM-Radio
Github-Repository mit Quellcode für Arduino Nanohttps://github.com/Notthemarsian/FM-radio

Schaltpläne

Fritzing-Diagramme FM-Radio
Sowohl original Fritzing-Dateien als auch Bilder / PDFhttps://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

Herstellungsprozess

  1. Audioverstärker der Klasse B
  2. 555 Hysteretischer Oszillator
  3. Funkstrecken
  4. Grundsätze des Radios
  5. Radio
  6. Boden-Boden-Funkausbreitung
  7. UnifiedWater v1
  8. Pi-Arduino Internetradio
  9. Arduino-basiertes FM-Radio in Duschkabine
  10. Atombasierte Funkkommunikation