Radio Shield
Discontinued Product
This product has been discontinued. Information is provided for reference only.
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
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
- Check parts list to ensure you have all necessary parts.
- Locate part locations on PCB next to their silk screen labels.
- Begin by inserting lowest profile parts and soldering into place first, working up to the taller pieces.
- Install parts in the following order for easiest construction:
- Resistors (R1-7, R9-13) — R6 is not needed for Kenwood and Chinese import radios, do not install if it is not needed!
- Capacitors (C1, C3-6) — not C2 yet
- Crystal (Y1) — be sure to fold crystal over as seen in photo.
- IC socket — don’t install the IC yet
- Push button (P1)
- LED — longest lead toward board edge
- Taller Capacitor (C2)
- Transistor (Q1) — note the orientation on the silk screen
- Component side pin headers (remove jumpers after soldering)
- Arduino side pin headers
- Insert U3 into socket
- Solder on data cable paying attention to the pinout for your particular radio
- 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