Skip to content

Radio Shield

Discontinued Product

This product has been discontinued. Information is provided for reference only.

Assembled Radio Shield

The Radio Shield is an add-on kit for the Arduino development board that provides AX.25 packet radio send and receive capability, a prototyping area, and an HD44780-compatible LCD interface.

Packets are sent and received in AX.25 UI frames at 1200 baud. This allows operation on the VHF APRS network.

Radio Shield 2

The Radio Shield 2 replaces the original Radio Shield and comes pre-assembled, except for the pin headers that connect it to the Arduino. The interface is unchanged. Further documentation will be posted soon.

Assembly

Radio Shield Schematic

Parts list

Part Number Value Notes
R1, R5, R10 10k brown-black-orange
R4 10m brown-black-blue
R3, R12, R13 680 blue-gray-brown
R7 6.8k blue-gray-red
R9 240k red-yellow-yellow
R6 2.2k red-red-red (optional, for HT PTT mode)
R2 2.2k red-red-red
Q1 2N7000
Y1 29.4912 MHz crystal
C4, C5 18pF
C1, C3, C6 0.1uF
C2 10uF negative lead toward C2 marking
D14 Red/Green LED Install with longest lead toward board edge

Construction Steps

  1. Check parts list to ensure you have all necessary parts.
  2. Locate part locations on PCB next to their silk screen labels.
  3. Begin by inserting lowest profile parts and soldering into place first, working up to the taller pieces.
  4. Install parts in the following order for easiest construction:
  5. Resistors (R1-7, R9-13) — R6 is not needed for Kenwood and Chinese import radios, do not install if it is not needed!
  6. Capacitors (C1, C3-6) — not C2 yet
  7. Crystal (Y1) — be sure to fold crystal over as seen in photo.
  8. IC socket — don’t install the IC yet
  9. Push button (P1)
  10. LED — longest lead toward board edge
  11. Taller Capacitor (C2)
  12. Transistor (Q1) — note the orientation on the silk screen
  13. Component side pin headers (remove jumpers after soldering)
  14. Arduino side pin headers
  15. Insert U3 into socket
  16. Solder on data cable paying attention to the pinout for your particular radio
  17. Program Arduino with sample code from below, connect radio and insert shield to Arduino. Ensure that jumpers are on RUN side of pin header.

Radio Interfacing

Four interface lines are provided at one edge of the board for connecting a radio:

Pin Function
GND Ground
TX Transmit audio (mic)
RX Receive audio (speaker)
PTT Push-to-talk (active low)

For hand-held radios without a separate PTT line, install the provided 2.2k resistor in position R6.

Usage

  • Keep both JP7 jumpers in RUN position to communicate with Arduino.
  • Use PROG for serial pass-through.
  • Remove jumpers (or shield) when programming the Arduino.
  • Serial communication: Serial.begin(4800);
  • Configuration parameters are persistent (store in setup()).

LCD Commands

Command Function
W<text> Write to LCD
G<line,column> Go to line (0/1), column
C LCD clear
H LCD home
B<n> Set contrast (0–1023)

Note: Pin 16 of the LCD may need to be grounded for backlight.

Radio Commands

Command Function
!<text> Send plain text packet
@<text> Send Morse code
M<callsign> Set my callsign
S Status (returns 1)
V Version (added in v1.1)
L<0–255> Set TX audio level
D<0–255> Set TX delay (1/120 sec units)
P<path> Set AX.25 path (e.g., WIDE1-1,WIDE2-1)

Received Packet Format

N1VG-14>APOTW1:!3455.15N/12026.29W_301/005g009t067P000h36b10187OTW1

Sample Applications

LCD Counter

int counter = 0;

void setup()
{
  Serial.begin(4800);
  delay(3);
}

void loop()
{
  Serial.print("C\r\n");
  delay(10);
  Serial.print("WCount");
  Serial.print(counter);
  Serial.print("\r\n");
  delay(8000);
  counter++;
}

Display Incoming Packets

char inbyte = 0;
char buf[260];
int buflen = 0;

void setup()
{
  Serial.begin(4800);
  delay(3);
  Serial.println("B100");
  Serial.println("C");
  delay(10);
  Serial.println("WWaiting");
}

void loop()
{
  while (Serial.available() > 0)
  {
    inbyte = Serial.read();
    if (inbyte == '\n')
    {
      Serial.println("C");
      delay(10);
      Serial.print("W");
      Serial.println(buf);
      buflen = 0;
    }
    else if (inbyte > 31 && buflen < 260)
    {
      buf[buflen++] = inbyte;
      buf[buflen] = 0;
    }
  }
}

Transmit Packets

int counter = 1;

void setup()
{
  Serial.begin(4800);
  delay(3);
  Serial.print("MW1AW\r\n");
  delay(10);
  Serial.print("PWIDE1-1,WIDE2-1\r\n");
  delay(10);
}

void loop()
{
  Serial.print("!>This is RadioShield test message #");
  Serial.print(counter);
  Serial.print("\r\n");
  counter++;
  delay(30000);
}

Note: delay() is from command issue, not transmission end.

Revision History

Firmware 1.1 (4/23/2013) - Fixed buffer overrun in P command - Added V (version) command

Useful Links