#include <NewPing.h>
#define TRIGGER_PIN 6
#define ECHO_PIN 7
#define MAX_DISTANCE 400
#define INTERVAL_MS 1000 // Interval in milliseconds for calculating speed
#define NUM_MEASUREMENTS 10 // Number of measurements for calculating speed
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int measurements[NUM_MEASUREMENTS];
void setup() {
Serial.begin(9600);
}
void loop() {
// Take distance measurements
for (int i = 0; i < NUM_MEASUREMENTS; i++) {
measurements[i] = sonar.ping_cm();
delay(50);
}
// Calculate average distance
float sum_distance = 0;
for (int i = 0; i < NUM_MEASUREMENTS; i++) {
sum_distance += measurements[i];
}
float average_distance = sum_distance / NUM_MEASUREMENTS;
// Calculate speed
float initial_speed = measurements[0];
float final_speed = measurements[NUM_MEASUREMENTS - 1];
float speed = (final_speed - initial_speed) / (INTERVAL_MS / 1000.0); // Calculate speed (cm/s)
// Detect acceleration direction
String acceleration_direction;
if (final_speed > initial_speed) {
acceleration_direction = "Forward";
} else if (final_speed < initial_speed) {
acceleration_direction = "Reverse";
} else {
acceleration_direction = "No change";
}
// Print results
Serial.print("Average Distance: ");
Serial.print(average_distance);
Serial.println(" cm");
Serial.print("Speed: ");
Serial.print(speed);
Serial.println(" cm/s");
Serial.print("Acceleration Direction: ");
Serial.println(acceleration_direction);
// Delay for the next measurement
delay(INTERVAL_MS);
}