ADDING A PIR MOTION SENSOR/SERVO TO MY CODING

Hi all,

I am very new to Arduino and I have had absolutely no coding background before, and I am basically desperate when it comes to figuring out how to finish this coding. I am trying to produce an autonomous robot that avoids obstacles and continuously travels around, but likewise (and this is the catch) when a PIR Motion Sensor detects a new motion I want the autonomous robot to stop moving for a certain amount of time and I also want this same motion that is detected to cause a servo to rotate 180 degrees and then return back to its original position. I will attach some files showing you guys the final product that I hope to have. So far this is my coding:

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>



#define TRIG_PIN A4 
#define ECHO_PIN A5 
#define MAX_DISTANCE 200 
#define MAX_SPEED 190 // sets speed of DC  motors
#define MAX_SPEED_OFFSET 20

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); 

AF_DCMotor motor1(1, MOTOR12_1KHZ); 
AF_DCMotor motor2(3, MOTOR12_1KHZ);

Servo myservo;   

boolean goesForward=false;
int distance = 100;
int speedSet = 0;

void setup() {

  myservo.attach(9);  
  myservo.write(115); 
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop() {
 int distanceR = 0;
 int distanceL =  0;
 delay(40);
 
 if(distance<=15)
 {
  moveStop();
  delay(100);
  moveBackward();
  delay(300);
  moveStop();
  delay(200);
  distanceR = lookRight();
  delay(200);
  distanceL = lookLeft();
  delay(200);

  if(distanceR>=distanceL)
  {
    turnRight();
    moveStop();
  }else
  {
    turnLeft();
    moveStop();
  }
 }else
 {
  moveForward();
 }
 distance = readPing();
}

int lookRight()
{
    myservo.write(50); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
}

int lookLeft()
{
    myservo.write(170); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
    delay(100);
}

int readPing() { 
  delay(70);
  int cm = sonar.ping_cm();
  if(cm==0)
  {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  motor1.run(RELEASE); 
  motor2.run(RELEASE);
  } 
  
void moveForward() {

 if(!goesForward)
  {
    goesForward=true;
    motor1.run(FORWARD);      
    motor2.run(FORWARD);      
   for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
   {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
    delay(5);
   }
  }
}

void moveBackward() {
    goesForward=false;
    motor1.run(BACKWARD);      
    motor2.run(BACKWARD);  
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
  {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
    delay(5);
  }
}  

void turnRight() {
  motor1.run(FORWARD);
  motor2.run(BACKWARD);     
  delay(300);
  motor1.run(FORWARD);      
  motor2.run(FORWARD);      
} 
 
void turnLeft() {
  motor1.run(BACKWARD);     
  motor2.run(FORWARD);     
  delay(300);
  motor1.run(FORWARD);     
  motor2.run(FORWARD);
}

This is the project that I am trying to replicate and “improve” Arduino Robot Project: A DIY obstacle avoiding robot using an SG90 servo from Banggood.com - YouTube

Any help with this coding would be very much appreciated.

If the PIR is mounted on the robot, won't it sense motion any time the robot moves?

I was thinking it wouldn't considering that it is an infrared motion sensor. The link that I bought the sensor had a description saying that it only detects pets/humans/etc.

dylanhickok:
I was thinking it wouldn't considering that it is an infrared motion sensor. The link that I bought the sensor had a description saying that it only detects pets/humans/etc.

As you said only pets/humans but not inanimate objects like walls and chairs.
You need another sort of sensor, look up Ultrasonic sensor.
Have you programmed anything before this project?
Tom.... :slight_smile:

Before we worry about the coding can you please explain how you think that using a PIR motion sensor would improve the robot. What do you think it would do that is better? And just to be clear are you intending to keep the ultrasonic sensor and servo that your code currently uses and add a new PIR sensor and a new servo?

I’d like to see what the physical design of that will look like.

Steve