AM-Musik-Transmitter mit Arduino Nano selbst bauen
Komponenten und Materialien
| Arduino Nano R3 | 1× |
| Widerstand 10 kΩ | 2× |
| Kondensator 10 µF | 1× |
| Steckbrett | 1× |
Software
- Arduino IDE
Projektbeschreibung
Mit einem ATmega-Mikrocontroller lässt sich ein einfacher AM-Sender realisieren. Da der Arduino nur digitale Ausgänge (High/Low) hat, ist echte Amplitudenmodulation (AM) nicht direkt möglich. Doch durch geschickte Nutzung von PWM und Timer-Hardware entsteht ein Signal, das ein normales AM-Radio empfangen kann.
Prinzip
- Analoges Audiosignal → ADC → PWM-Signal (16-Bit Timer1)
- Trägersignal → Timer2 (31 kHz bis 8 MHz, hier 600 kHz) auf Pin D11
- Träger wird im Rhythmus des PWM-Signals ausgegeben
- AM-Radio wirkt als Tiefpassfilter auf das PWM → originales Audiosignal hörbar
Dies ist ein Proof-of-Concept. Für echten Betrieb: Tiefpassfilter am Audioeingang (Anti-Aliasing) und am RF-Ausgang (Oberwellendämpfung) hinzufügen.
Code (Arduino AM Transmitter)
/* Creative Commons Attribution-ShareAlike 4.0 International License */
#define ANTENNA_PIN PB3 // Arduino Nano/Uno D11
void setup() {
Serial.begin(115200);
// Trägerfrequenz 600 kHz auf Timer2
uint32_t fTransmit = 600; // kHz
DDRB |= (1 << ANTENNA_PIN);
TCCR2A = (0 << COM2A1) | (1 << COM2A0); // Toggle OC2A on Compare Match
TCCR2A |= (1 << WGM21) | (0 << WGM20); // CTC Mode
TCCR2B = (0 << CS22) | (0 << CS21) | (1 << CS20); // No Prescaling
OCR2A = F_CPU / (2000 * fTransmit) - 1;
char strbuf[255];
sprintf(strbuf, "Sende bei %d kHz", (F_CPU / (2 * (1 + OCR2A)) / 1000));
Serial.println(strbuf);
// PWM Audio (10-bit Fast PWM) auf Timer1
TCCR1A = (1 << WGM11) | (1 << WGM10); // Fast PWM 10-bit
TCCR1B = (1 << WGM12) | (1 << CS10); // No Prescaling
TIMSK1 = (1 << OCIE1A) | (1 << TOIE1);
// ADC: interne 1,1 V Referenz, Free Running, 18,5 kSamples/s
ADMUX = (1 << REFS1) | (1 << REFS0);
ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE);
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (0 << ADPS0); // Prescaler 64
DIDR0 = (1 << ADC0D);
}
ISR(TIMER1_OVF_vect) {
uint8_t adcl = ADCL;
uint8_t adch = ADCH;
OCR1A = (adch << 8) + adcl;
DDRB |= (1 << ANTENNA_PIN);
}
ISR(TIMER1_COMPA_vect) {
DDRB &= ~(1 << ANTENNA_PIN);
}
void loop() {
// Alles interruptgesteuert
}
Schaltplan
Schaltplan als Bild verfügbar (Original-Link im Quellprojekt).
Herstellungsprozess
- Das Vermächtnis und die Evolution der klassischen Jukebox
- Notenblätter: Von mittelalterlichen Manuskripten zum modernen Verlag – Ein Branchenüberblick
- Verkehrsampeln: Technik, Geschichte und zukünftige Innovationen
- Eigenen LUMAZOID bauen: DIY Arduino Musik-Visualisierer
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- RC-Empfänger PPM-Signal mit Arduino auslesen – Schritt-für-Schritt
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Thermistor (NTC) einfach nutzen: Schritt-für-Schritt Arduino-Anleitung