Problem with sensor readings and servo jitter

Hi, i am new to LMR and i dont whether this is the right forum for my question. So if i am in the wrong place, plz tell me where i should post this. I am having problems with my ping ultrasonic sensor readings going into the arduino because of the servo on which it is mounted. I added all the required caps and reduced a lot of noise, but still the sensor gives wrong readings. How can i make it work properly. 

Hi!

Can you post the code and some pictures how you wired all things up?

I can post the code and the

I can post the code and the way i added the caps but i cant take a picture of my robot cause it is all awfully connected and messy.

This is my code here-

/* Robot which can sense obstacles and choose a free path and can detect

   edges and decide whether to go or not.

 */ 

 

#include <Servo.h>       // include servo library in code

 

Servo servo1;

Servo servo2;

const int pingPin = 9;     // Obstacle sense pin

const int MBRRpin = 7;       // Motor back right red 

const int MBRBpin = 8;       // Motor back right black

const int MBLRpin = 12;       // Motor back left red

const int MBLBpin = 13;       // Motor back left black

const int danger = 15;        // thresh hold for obstacle dist. in cm 

const int danger2 = 15;

const int ground1sensepin = 11;

const int ground2sensepin = 10;

const int groundS = 10;

const int groundR = 11;

const int groundL = 11;

int incomingbyte = 0;

int scanleft;

int scanright;

int scanahead;

long duration;

 

void setup (){

  Serial.begin(9600);

  pinMode(MBRRpin, OUTPUT);      // set pin as output

  pinMode(MBRBpin, OUTPUT);      // set pin as output

  pinMode(MBLRpin, OUTPUT);      // set pin as output

  pinMode(MBLBpin, OUTPUT);      // set pin as output

  pinMode(ground1sensepin, INPUT);

  pinMode(ground2sensepin, INPUT);

  servo1.attach(6);               // servo is attached to this pin

  servo2.attach(5);

  servo1.write(90);

  servo2.write(180);

  delay(7000);

}

 

void loop(){

  int obstacle = ping();

  int ground1 = digitalRead(ground1sensepin);

  int ground2 = digitalRead(ground2sensepin);

 

  if(obstacle > danger && ground1 == LOW && ground2 == LOW){

    Serial.println(" No obstacle nor edge detected “);

    straight(); 

    sweep();              //servo sweep action

  }

  if(ground1 == HIGH || ground2 == HIGH){

    Serial.println(“Edge detected”);

    servo1.write(90);

    Serial.println(“Scaning ahead”);

    servo2.write(90);

    delay(500);

    scanahead = ping();

    delay(2000);

    servo1.write(110);

    delay(500);

    Serial.println(“Scaning left”);

    scanleft = ping();

    delay(2000);

    servo1.write(70);

    delay(500);

    Serial.println(“Scaning right”);

    scanright = ping();

    delay(2000);

    servo1.write(90);

    delay(500);

    compare2();

  }

  else if(obstacle <= danger){    // if obstacle is sensed

    delay(1000);

    Serial.println(” obstacle detected “);

    Serial.println(” Looking for path “);

    Serial.println(” Scaning Left “);

    servo1.write(180);

    delay(1000);

    scanleft = ping();

    delay(2000);

    Serial.println(” Scaning right “);

    servo1.write(0);

    delay(1000);

    scanright = ping();

    delay(2000);

    Serial.println(” Scaning ahead “);

    servo1.write(90);

    delay(1000);

    scanahead = ping();

    delay(1000);

    compare();

  }

}

 

void compare(){

  if(scanleft <= danger2 && scanright <= danger2 && scanahead <= danger2){

    Serial.println(” All sides are blocked, turning around “);

    back();

    delay(1000);

    left();

    delay(2500);

  }

  else if(scanleft < scanahead && scanright < scanahead){

    Serial.println(” Straight is less obstructed, procceding “);

    straight();

    delay(2500);

  }

  else if(scanleft < scanright){

    Serial.println(” Right is less obstructed, Moving right “);

    right();

    delay(2500);

  }

  else if(scanleft > scanright){

    Serial.println(” Left is less obstructed, Moving left ");

    left();

    delay(2500);

  }

}

 

void compare2(){

  if(scanahead <= groundS && scanleft <= groundL && scanright <= groundR){

    Serial.println(“Surface detected, procceding”);

    servo2.write(180);

    straight();

    delay(5000);

  }

  else{

    Serial.println(“No reachable surface, returning”);

    servo2.write(180);

    back();

    delay(1000);

    left();

    delay(2500);

  }

}

 

void sweep(){

  int pos = 20;

 

  for(pos = 20; pos < 160; pos++)

  {

    servo1.write(pos);

    delay(4);

  }

  for(pos = 160; pos > 20; pos–)

  {

    servo1.write(pos);

  }

}

 

void left(){

  digitalWrite(MBRRpin, HIGH);

  digitalWrite(MBRBpin, LOW);  

  digitalWrite(MBLRpin, LOW);  

  digitalWrite(MBLBpin, HIGH);

}

 

void right(){

  digitalWrite(MBRRpin, LOW);

  digitalWrite(MBRBpin, HIGH);

  digitalWrite(MBLRpin, HIGH);

  digitalWrite(MBLBpin, LOW);    

}

 

void straight(){

  digitalWrite(MBRRpin, HIGH);

  digitalWrite(MBRBpin, LOW);

  digitalWrite(MBLRpin, HIGH);

  digitalWrite(MBLBpin, LOW);

}

 

void back(){

  digitalWrite(MBRRpin, LOW);

  digitalWrite(MBRBpin, HIGH);

  digitalWrite(MBLRpin, LOW);

  digitalWrite(MBLBpin, HIGH);

}

 

long ping(){

  // establish variables for duration of the ping, 

  // and the distance result in inches and centimeters:

 

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.

  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

  pinMode(pingPin, OUTPUT);

  digitalWrite(pingPin, LOW);

  delayMicroseconds(2);

  digitalWrite(pingPin, HIGH);

  delayMicroseconds(5);

  digitalWrite(pingPin, LOW);

 

  // The same pin is used to read the signal from the PING))): a HIGH

  // pulse whose duration is the time (in microseconds) from the sending

  // of the ping to the reception of its echo off of an object.

  pinMode(pingPin, INPUT);

  duration = pulseIn(pingPin, HIGH);

  Serial.println(duration/29/2);

  return duration/29/2; 

}

I placed the caps as mentioned here- https://www.robotshop.com/letsmakerobots/node/12679

and these are the pics.Sorry icoudnt get a better picture and i am not a very good photographer.

DSC04042.jpg

DSC04044.jpg

Thx for ur help guys

Thx for ur help guys, i was able to fix the problem and when i get the bot runnig i will post the videos.