SR04, Arduino, and Servo help

Thread Starter

djg26

Joined Jan 10, 2018
15
Hello. I am currently working on making an autoflush circuit for my toilet and I am having some programming-related issues. I am using an Arduino Uno, an HC-SR04 ultrasonic distance sensor, and a servo. I have succesfully written code for the SR04 to display the distance from the sensor. The issue that I am having is programming on the IDE so that if an object is in front of the sensor for long enough (30 seconds), then leaves, for a signal to be sent from the arduino to the servo to rotate 180 degrees to flush the toilet, then rotate back to position 0. I am not a programmer, any assistance is appreciated. AAC won't let me attach the arduino file, so I've appended my code below. Thanks again.


/*
HC-SR04 Ping distance sensor:
VCC to arduino 5v
GND to arduino GND
Echo to Arduino pin 7
Trig to Arduino pin 8

*/


#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);

//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;

if (distance >= maximumRange || distance <= minimumRange){
/* Send a negative number to computer and Turn LED ON
to indicate "out of range" */
Serial.println("-1");
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println(distance);
}

//Delay 50ms before next reading.
delay(50);
}
 
Hello. I am currently working on making an autoflush circuit for my toilet and I am having some programming-related issues. I am using an Arduino Uno, an HC-SR04 ultrasonic distance sensor, and a servo. I have succesfully written code for the SR04 to display the distance from the sensor. The issue that I am having is programming on the IDE so that if an object is in front of the sensor for long enough (30 seconds), then leaves, for a signal to be sent from the arduino to the servo to rotate 180 degrees to flush the toilet, then rotate back to position 0. I am not a programmer, any assistance is appreciated. AAC won't let me attach the arduino file, so I've appended my code below. Thanks again.
Hi,

One of the hardest parts of writing programs when one is "not a programmer" is spending the time to figure out all that your program should do, before you start to write the code. When you take that approach, you can write the code in discrete sections that can be tested and refined.

The alternative is to go right to the keyboard and get things going. Personally, I do not think that will save you time.

In this case, and to the point, I would suggest that you start thinking about manageable functions that can be called within your main() function.
Off the top of my head:

A global variable that is set when an object is detected and the time associated with detection.

A function that returns True if an object is detected and FALSE if there is no detection.

A function that operates the servo as you intend.

IOW start thinking about how you can track how long an object is in range...and, therefore, be able to tell when it has been in range and for how long. If it is not there - was it there the last time you checked and if so, has enoug time passed to operate the flush?

Go through all of the steps on paper before you commit to any code. Then, write the code in testable chunks.

Make sense?

Finally, AAC uses code tags to display code in a more readable fashion - see below. The Arduino IDE makes it easy. 1) format your code in the IDE 2) copy for forum then you can just paste into your message (assuming windows and a recent version of the IDE)

Code:
/*
  HC-SR04 Ping distance sensor:
  VCC to arduino 5v
  GND to arduino GND
  Echo to Arduino pin 7
  Trig to Arduino pin 8

*/


#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

}

void loop() {
  /* The following trigPin/echoPin cycle is used to determine the
  distance of the nearest object by bouncing soundwaves off of it. */
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);

  //Calculate the distance (in cm) based on the speed of sound.
  distance = duration / 58.2;

  if (distance >= maximumRange || distance <= minimumRange) {
  /* Send a negative number to computer and Turn LED ON
  to indicate "out of range" */
  Serial.println("-1");
  }
  else {
  /* Send the distance to the computer using Serial protocol, and
  turn LED OFF to indicate successful reading. */
  Serial.println(distance);
  }

  //Delay 50ms before next reading.
  delay(50);
}
 
Top