How to connect a Spektrum satellite receiver?

A post at DIY Drones points out the possibility to read the channels of a Spektrum satellite receiver via a serial connection.

The receiver is 3.3V so I connected VCC to Arduino's 3.3V and GND to Arduino's ground pin. Then I connected the serial wire of the receiver to Arduino's digital pin 0 (no USB connection).

After powering the Arduino the receiver had the OK status light indicating that it was connected to the sender but the Arduino didn't receive any data (Serial.available() != true).

What am I doing wrong?

This is the link to the post at DIY Drones:
http://diydrones.ning.com/profiles/blog/show?id=705844%3ABlogPost%3A64228

Do you need to ask the receiver for information?

Do you have any details of the protocol?

Normally the satellite receiver is connected to the main receiver and because there is just one serial wire I assume that the communication is from the satellite to the main receiver. As described in the DIY Drones post the protocol is very simple. Maybe I'm wrong but no matter what data is sent, the Arduino should recognize that it has data at the serial input.

Maybe I'm wrong but no matter what data is sent, the Arduino should recognize that it has data at the serial input.

Yes you are wrong.

Can you post the code (use the hash box in the reply bar 9th from right).
Have you set up the baud rate right. What is the parity setting it is spitting out.

Arduino: 115200 Baud, 8N1
Receiver: 115200 Baud, 8N1

int greenLedPin = 12;
int redLedPin = 13;

void setup()  
{
  pinMode(greenLedPin, OUTPUT);
  pinMode(redLedPin, OUTPUT);
  Serial.begin(115200);
}

void loop()
{
  if (Serial.available() > 0) {
    Serial.print((char)Serial.read());
    digitalWrite(redLedPin, LOW);
    digitalWrite(greenLedPin, HIGH);
    delay(1);
  }
  else {
    digitalWrite(redLedPin, HIGH);
    digitalWrite(greenLedPin, LOW);
  }
}

Question: Is my wiring correct?

  • VCC to Arduino's 3.3V
  • GND to Arduino's ground pin
  • serial wire to Arduino's digital pin 0

Somewhere I read that the Arduino's digital pins are 5V for HIGH and 0V for LOW. How does that correspond with the 3.3V of the receiver?

VCC to Arduino's 3.3V

What Vcc is this? Is it the receiver? The rest of the wiring sounds Ok.

Somewhere I read that the Arduino's digital pins are 5V for HIGH and 0V for LOW.

Yes that is right but the threshold between a 0 and a 1 is around 3V so there should be enough to trigger the input.

Two points about the code:-

  1. You are always changing the LED into the "nothing received" state, so when you are receiving something you will miss it on the LEDs.
  2. You are using the serial port for monitoring and it is connected to your circuit. That will affect the threshold and might cause it not to work, so try the software serial for your input (and so use another pin).

Thanks for the answers so far.

Yes, the receiver is 3.3V. I've connected it to Arduino's 3.3V pin, that's what I meant.

I've tried the NewSoftSerial approach with no success that's why I switched to the serial port (digital pin 0). I wasn't sure if the NewSoftSerial library supports 115200 Baud. I'll give it another try.

In effect the USB chip is pulling up pin 0 to +5V through a 1K resistor. You might like to check if this is upsetting your receiver. If it is then you need a non inverting buffer between the two like two transistors or two inverters from a 74LS04 so you actually get serial signals into the Arduino.

Also, keep in mind the 3.3V supply (which is from the FTDI chip) can only source a comparatively small about of current.

--Phil.

I can receive non valid data via NewSoftserial with baud rates 57600 or less. According to the source code of the NewSoftSerial library it can transmit up to 115200 but only receive up to 57600 baud. (found here, reply #14)

I don't receive any data via digital pin 0 no matter what baud rate I select. According to your answers the problem could be the FTDI resistor.

Question 1: Could I use one of the Arduino Mega's serial ports to connect my receiver or would I encounter the same problem as with the digital pin 0 on my Duemilanove?

Question 2: Can I use an external 3.3V source for the receiver? Is there no need for a common GND for the Arduino and the receiver?

I trust you've grounded the receiver and the Arduino together? That's vitally important. Without that ground, you will never receive anything at all.

Here is what I found out so far:

I need a 3.3V voltage regulator to connect the receiver to the Arduino's 5V.

I need a 3.3 to 5V logic level converter to connect the receiver to the Arduino's digital pins (serial connection).

Question 1: Could I use one of the Arduino Mega's serial ports to connect my receiver or would I encounter the same problem as with the digital pin 0 on my Duemilanove?

Yes you could, there would be no problems like this as only one serial port is used by the USB leaving you with three free.

Question 2: Can I use an external 3.3V source for the receiver?

Yes

Is there no need for a common GND for the Arduino and the receiver?

No there is always a need for a common ground unless you use opto isolators.

I need a 3.3V voltage regulator to connect the receiver to the Arduino's 5V.

Only if the Arduino's 3V3 regualtor can't provide enough current.

I need a 3.3 to 5V logic level converter to connect

As I said before you don't because of the threshold of a 5V input

Old post, but... I just tried this, and it works fine with my Mega without any extra hardware. Just 3V3/GND/Serial RX connection.

I was finally able to find a way to connect my arduino duemilanove to the spectrum receiver. I was also able to make sens out of the transfer protocol, an wrote a library for pulling the different channels from the signal.

The library and a step by step guide on this topic may be found in this blog post:
http://www.dogfight.no/2011/01/spectrum-receiver-satellite-to-arduino.html