Introduction: AM Transmitter With Arduino

Cool things can be done with ATmega MCUs. So I got the idea to build an AM transmitter with an Arduino Nano (Arduino UNO is also possible) The question is, how to achieve amplitude modulation (AM) on a digital device? AM means that the amplitude of a carrier frequency is changed according to the amplitude of the input signal we want to transmit. Mathematically speaking, we multiply the carrier by the input signal. But since an ATmega has only digital outputs, it can only output two values: high and low. Frankly speaking, there is no way to get real AM out of an Arduino. However, it is possible to produce an output signal that can be clearly heard with an ordinary AM radio receiver! The solution is to convert the analog input signal into a PWM signal using the ADC and the 16-bit timer/counter1 of the ATmega MCU. The timer/counter2 generates the carrier signal, which can be varied in a wide range between 31 KHz and 8 MHz. This carrier signal is output beteen Pin 3 and 11 in time with the PWM signal.

The receiving AM radio behaves like a low pass filter on the PWM, so we get the original audio signal back there. This is just a proof of concept, so I kept it simple. If you really want to use this as an RF transmitter, you should add a low pass filter for anti-aliasing to the audio input and a low pass against harmonics to the RF output. Check out the video to see how it works.

Supplies

  • Arduino Nano or Uno
  • Capacitor 10 µF
  • 2 x Resistor 10k
  • Ferrite antenna.
  • Assortment of capacitors or tuning capacitor from radio ~10..470 pF

Step 1: Wire Up the Arduino

Join everything together like shown on the schematic. Although I made the project with an Arduino Nano, Arduino UNO can also be used, as it has the same MCU and pinout.

Step 2: Choose Frequency and Upload the Sketch

Find an unused frequency on your AM radio. Go to line 22 in the sketch and replace F_1600 with the frequency symbol closest to your desired frequency. For example, if you want to transmit at 533 kilohertz, line 22 should read

#define FRQ F_533.

Then upload the sketch to your Arduino.


Step 3: Optimizing the Antenna

A capacitance in series to the ferrite antenna coil will cause it to resonate and thus give it better coverage (3m /10ft at max). Try different values from an assortment (30+3.3pF in parallel worked best for me) or a tuning capacitor from an old radio. You have found the optimum value when the TX LED on the Arduino lights up.