1

I am trying to build a quadcopter using an arduino. I Bought 4 30A ESC's from Ebay the link is http://www.ebay.co.uk/itm/4pcs-Brushless-speed-controller-ESC-MultiCopter-KK-Quad-rotor-X-copter-30A-S-/310950293677?pt=LH_DefaultDomain_3&hash=item486614f0ad and a A2212 2200KV motor, im also using a sparkfun arduino uno. I have connected the white (data) servo wire of the ESC to pin 9 of my arduino and the black (ground) servo wire of the ESC to gnd of the arduino. When i connect the battery to the esc i get the 3 beeps because of my 3 cell battery regardless of what code is on the arduino even if the arduino is not present. the code that is on the arduino is.

#include <Servo.h>

Servo motor;

void setup()
{
  Serial.begin(9600);
  motor.attach(0);
}
void loop()
{
  motor.write(100);
}

I'm not sure what is wrong. Can someone please help me.

migrated from electronics.stackexchange.com Apr 6 '15 at 20:35

This question came from our site for electronics and electrical engineering professionals, students, and enthusiasts.

  • If you were using an RC radio, what would the arming and/or calibrating process be for those ESC's? – BrettAM Apr 6 '15 at 20:38
  • im not sure about the arming process, im also not using a rc radio its being controlled by bluetooth from a phone, So if i need to arm it will need to be by code. – Root0x Apr 6 '15 at 20:40
  • ESC's like these are designed for use with RC radios and have an arming process (like full throttle two seconds, neutral 2 seconds or something) that someone with a radio needs to do so that the motors don't spin up while they are turning everything on. You will need to find the right one for those ESCs and replicate it with your code. – BrettAM Apr 7 '15 at 0:13
  • 1
    Gone quiet here.. If the ESC gives you 3 beeps then it's alive. Your code does nothing beyond start up & output a steady 100 p.w.m. - it needs to emulate the RC arming process next, likely a high-to-low transition, you should then get a nice warble to tell you it's about to belt off somewhere... try outputting 1024, delay 300, then 0? – Mark Williams Apr 7 '15 at 13:35
  • You may have the Servo library very helpful. Check out this answer – Jacksonkr Jul 26 '16 at 20:54
2

I had a similar problem. I solved it by using an oscilloscope to measure the arming sequence of an out-of-the-box RC remote controller and receiver.

The arming sequence through the controller-receiver was like this:

  1. Connect ESC to battery (arduino is connected to signal and ground prior to this)
  2. Wait for 3 beeps
  3. Set the throttle to the lowest possible
  4. Wait for another beep

I then adjusted my arduino code to output the same(similar) sequence.

Here is the code:

#include <Servo.h>
#define POT A0

Servo m1;

void setup() {
  m1.attach(6);
  Serial.begin(9600);
  delay(50);
  Serial.println("Serial ready:");
  arm(m1);
}

void loop() {
  int potValue = analogRead(POT);
  int s = map(potValue,60,930,1200,1700); //Map the pot values to motor values

  m1.write(s);
  Serial.println(s);
}

void arm(Servo m){
  Serial.print("Arming.");
  m.write(0);
  delay(100);
  m.write(1224); //A value at which the motor starts turning
  delay(2000);
  m.write(1024); //A value at which the motor stands still
  delay(3000);
  Serial.println(" Armed!");
}

You can also see a video of the whole thing in action here: A2212/13T brushless motor on a pivoting arm

EDIT: Further testing shows, that it suffices to output a low non zero value to arm this ESC. Simply doing Servo.write(1024); until you hear the confirmation beep seems to work.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.