Skip to content

Wildcard Week

Process Not Covered in Other Assignments

For this assignment, I connected a FlySky FS-A8S micro receiver to an Arduino Uno R3 and used the i-BUS communication protocol to read remote-control signals.

This process is different from other Fab Academy assignments because it focuses on integrating an RC receiver and wireless communication instead of using standard sensors, output devices, or simple wired interfaces.

This setup for wireless control.

Hardware Used

  • Arduino Uno R3

FlySky FS-A8S micro receiver

FlySky transmitter

  • Jumper wires
  • USB cable
  • Computer with Arduino IDE

Wiring Connections

  • FlySky FS-A8S → Arduino Uno R3
  • GND (Black) → GND
  • VCC +5V (Red) → 5V
  • i-BUS Signal (White) → RX (D0)

Arduino Library Setup

I used the IBusBM library.

Installation steps

Open Arduino IDE.

  • Go to Sketch → Include Library → Manage Libraries.

  • Search for IBusBM (by bmellink). Click Install.

This library allows Arduino to communicate with the FlySky receiver through the i-BUS protocol.

Programming Process

The program reads the signal from channel 2 of the FlySky receiver and controls two output pins.

I defined:

  • Pin 2 as the forward output;
  • Pin 3 as the backward output.

A center value of 1500 was used because RC receivers typically send values around 1500 when the joystick is in the neutral position.

A dead zone of 50 was added to prevent unwanted movement caused by small signal fluctuations.

Inside the loop function:

Arduino reads channel 2 from the receiver. * If no valid signal is detected, both outputs remain off. * If the joystick moves forward, pin 2 turns on. * If the joystick moves backward, pin 3 turns on. * If the joystick is centered, both outputs remain off.

The program repeats continuously every 50 milliseconds.

Source Code

#include <IBusBM.h>

IBusBM ibus;

const int PIN_FORWARD = 2;
const int PIN_BACKWARD = 3;

const int CENTER_VALUE = 1500;
const int DEAD_ZONE = 50;

void setup() {

  pinMode(PIN_FORWARD, OUTPUT);
  pinMode(PIN_BACKWARD, OUTPUT);

  digitalWrite(PIN_FORWARD, LOW);
  digitalWrite(PIN_BACKWARD, LOW);

  Serial.begin(115200);

  ibus.begin(Serial);
}

void loop() {

  int ch2 = ibus.readChannel(1);

  if (ch2 < 900) {

    digitalWrite(PIN_FORWARD, LOW);
    digitalWrite(PIN_BACKWARD, LOW);

    return;
  }

  if (ch2 > (CENTER_VALUE + DEAD_ZONE)) {

    digitalWrite(PIN_FORWARD, HIGH);
    digitalWrite(PIN_BACKWARD, LOW);

  }

  else if (ch2 < (CENTER_VALUE - DEAD_ZONE)) {

    digitalWrite(PIN_FORWARD, LOW);
    digitalWrite(PIN_BACKWARD, HIGH);

  }

  else {

    digitalWrite(PIN_FORWARD, LOW);
    digitalWrite(PIN_BACKWARD, LOW);

  }

  delay(50);
}

Code Explanation

  • #include <IBusBM.h> imports the i-BUS communication library.
  • IBusBM ibus; creates an i-BUS object.
  • PIN_FORWARD and PIN_BACKWARD define the output pins.
  • CENTER_VALUE = 1500 sets the neutral joystick position.
  • DEAD_ZONE = 50 prevents accidental movements.
  • ibus.begin(Serial) starts communication with the receiver.
  • ibus.readChannel(1) reads channel 2 from the FlySky receiver.
  • If no valid signal is detected, both outputs are turned off.
  • Moving the joystick forward activates pin 2.
  • Moving the joystick backward activates pin 3.
  • Returning the joystick to the center turns both outputs off.

What I Learned

During this assignment, I learned:

  • how to use the FlySky FS-A8S receiver;
  • how the i-BUS protocol works;
  • how to install and use the IBusBM library;
  • how to read RC signals with Arduino;
  • how to create a dead zone for stable control;
  • how to integrate wireless control into a project.

Hero Shots