Arduino AM radio receiver

Arduino can be used to generate AM carrier signal frequency which lies in the range 550KHz to 1700KHz. And by applying the carrier signal generated with Arduino and received AM signal to RF de-modulator or RF mixer IC MC1496 we can detect and recover message signal from the received AM signal. Here we show how Arduino along with MC1496 RF de-modulator IC can be used as AM radio receiver.

Before continuing reading this you might want to read the earlier related tutorials;

- AM Transmitter using Arduino

- AM Radio Communication System Simulation in Proteus

- AM Detector Demodulator with MC1496 

The following shows the circuit diagram of Arduino AM radio receiver.

Arduino AM radio receiver circuit diagram

In the circuit drawing above, the Arduino generates square wave signal on pin 9 using the CTC(Clear Timer Compare) match mode. The frequency of the square wave is the AM frequency band. The frequency of the square wave is determined by the following equation.

\[F_{w}=\frac{F_{cpu}}{2N(C+1)}\]

where N is pre-scalar(either 1, 8, 64, 256 or 1024) and C is the count value to be loaded into the OCR1A register or ICR1 register. \(F_{cpu}\) is clock frequency of 16MHz for Arduino. 

Here we have used Timer 1 channel A of Arduino and so the the CTC square wave is generated on pin 9. By calculating the count value to be loaded into the OCR1A register we can generate square wave of particular frequency. For frequency in the range 550KHz to 1700KHz the count value to be loaded is in the range 4 to 14. Using an external potentiometer we can control the count value to be loaded into the OCR1A register and thus generate square in the AM frequency band. The count value to be loaded into the OCR1A register can be calculated using the online Timer1 Online Calculator as shown below.

timer 1 ctc mode calculator

In the above example, for generating  570KHz square wave the value to be loaded into OCR1A is 13. 

Once the square wave is generated, it is filtered using 3rd order RC low pass filter with cutoff frequency of 482KHz to produce a sine wave from the square wave. This means resistor and capacitor values are 330Ohm and 1nF which can be calculated using the 1st order Passive Filter Calculator and then cascade the same filter 3 times to produced 3rd order RC low pass filter.

3rd order RC low pass filter

 For more on filtering Arduino signal see how to generate Sine Wave with Arduino. After the LPF the signal is ac coupled using 0.1uF capacitor and the 1k potentiometer is used as load which attenuates the sine wave to required carrier amplitude level. Thus using the Arduino and low pass filter we have a local oscillator for our AM receiver.

In the following picture, the top yellow signal is the CTC square wave signal from Arduino on pin 9 and the blue waveform is the filtered sine wave signal.

signal waveform

See the following video how the Arduino with the low pass filter and amplitude attenuator can be used as RF carrier signal generator in the AM frequency band.

The received AM signal is generated using the function generator.


The transmitted message signal(modulating signal) has frequency of 1KHz. This signal needs to be recovered. The AM signal carrier frequency lies in the AM frequency band. Instead of the above function generator one can also use the AM signal produced by AM modulator using MC1496 modulator.

 The following video demonstrates how the Arduino AM radio receiver works.

So in this tutorial we showed how one can build a DIY Arduino based AM radio receiver. For source code please leave comment below and optionally write or provide your email address to sent the code.

Post a Comment

Previous Post Next Post