Pages: [1]   Go Down
Author Topic: Run Servo with Accelerometer strange problem  (Read 770 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,

I'm new to arduino, but not necessarily to programming so I'm guessing the code is written okay, just the idea might be wrong.
I am now facing a problem with my ADXL335 accelerometer, which is supposed to control a servo.

I wrote code which averages 10 values and maps that average value to the servo. Also puts the servo value out on the serial monitor.

Now the strange problem is:

Serial monitor shows perfectly averaged, non jumpy, values, even when accelerometer is moved quickly. But as soon as I plug the servo to the Arduino Uno and Digital 9 (PWM), the accelerometer values become jumpy on the serial monitor and you can see that in erratic servo movement.

Can anyone help with this issue? I have seen the ADXL335 work nicely on videos, but can't get it to work.

If you have time on your hand, you could look at my code.

Thank you!

-Phil

Code:
#include <Servo.h>

Servo myservo;

const int xPin = 0;
int val;
int xRead[10];
int i =0;
int total=0;

void setup(){
 
  myservo.attach(9);
  Serial.begin(9600);
}

void loop(){
//set total to zero when restarting loop:

total=0;

 //loop to get 10 values and average them
 
 for(i=0;i<10;i++){
   
  xRead[i] = analogRead(xPin);
 
  //throw out bad values:
 
 //if bad value bigger than last value+20
 if(i>0){
  if(xRead[i]>xRead[i-1]+20){
 
    xRead[i]=xRead[i-1];
    }
  }
 
  //if bad value smaller than last value-20
  if(i>0){
  if(xRead[i]<xRead[i-1]-20){
   
      xRead[i]=xRead[i-1];
    }
  }
 
  total= total + xRead[i];
 }
 
 //calculate average:
 
 val=total/10;
 val= map(val,269,404,0,179);
 
 //limit servo:
 
 if(val>179){
   val=179;
 }
 if(val<0){
   val=0;
 }
 
 
 
 
  Serial.println(val);
 
  myservo.write(val);
  delay(30);
 
 
 
 
}
Logged

Rapa Nui
Offline Offline
Edison Member
*
Karma: 60
Posts: 2066
Pukao hats cleaning services
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

..you cannot power the servo from arduino, use a separate power source with enough current. Servo needs a lot of power..
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi and thanks for your quick reply!

I have a BEC now, which connects to servos ground and v-pin with 5V. Signal connected to D-Out 9, like before, but servo doesn't move anymore at all now, not even if I set a fix value for it in the program.

As soon as I connect ground and v-pin to the Uno again, it works like before, very jittery and the values jump.

Weird.

Can you help me sort this out?
Anyone had the same trouble?

Thank you again!

-Phil
Logged

Rapa Nui
Offline Offline
Edison Member
*
Karma: 60
Posts: 2066
Pukao hats cleaning services
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I do not know how the setup looks like, but gnd of arduino and gnd of servo and gnd of the power source for the servo must be connected together - common ground..
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi!

Thanks for your answer.

Having a common ground didn't help!

Anyone an idea?

-Phil
Logged

Rapa Nui
Offline Offline
Edison Member
*
Karma: 60
Posts: 2066
Pukao hats cleaning services
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

show schematics
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here it is:


* Accelerometer&Servo.jpg (451.61 KB, 3183x1794 - viewed 44 times.)
Logged

Rapa Nui
Offline Offline
Edison Member
*
Karma: 60
Posts: 2066
Pukao hats cleaning services
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

..do not power the servo from arduino, use separate power source for the servo instead - that wiring (the servo powered from an external source) needs to be seen so we can help you..
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Alright, I didn't know how to show that in fritzing.

1) As I said I have hooked up the servo like shown above.
2) Only difference servo Voltage pins both hooked up to external BEC which outputs 5 Volts and definitely works, cause I use it for other stuff.
3) Additionally I connected the BEC ground to the arduino ground and the servo ground.
Logged

Pages: [1]   Go Up
Jump to: