0% found this document useful (0 votes)
11 views2 pages

Servo and Ultrasonic Sensor Sweep Code

The document contains an Arduino sketch that controls a servo motor and an ultrasonic sensor. It sweeps the servo from 0 to 180 degrees and back, measuring the distance at each angle using the ultrasonic sensor. The measured angle and distance are printed to the Serial Monitor in a comma-separated format.

Uploaded by

isherali485
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views2 pages

Servo and Ultrasonic Sensor Sweep Code

The document contains an Arduino sketch that controls a servo motor and an ultrasonic sensor. It sweeps the servo from 0 to 180 degrees and back, measuring the distance at each angle using the ultrasonic sensor. The measured angle and distance are printed to the Serial Monitor in a comma-separated format.

Uploaded by

isherali485
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

#include <Servo.

h>

// --- Pin Definitions ---


const int SERVO_PIN = 11;
const int TRIG_PIN = 8;
const int ECHO_PIN = 9;

// --- Constants for Servo ---


const int MIN_ANGLE = 0;
const int MAX_ANGLE = 180;
const int ANGLE_STEP = 1;
const int SWEEP_DELAY = 15; // Delay between servo movements in milliseconds

// --- Constants for Ultrasonic Sensor ---


// The speed of sound is 343 m/s or 29.1 microseconds per centimeter.
// The pulseIn() function measures the round trip time.
// So, the distance in cm is (duration / 2) / 29.1 = duration / 58.2
const float SOUND_SPEED_FACTOR = 58.2;

Servo myServo;

void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
[Link](SERVO_PIN);
[Link](9600);
}

void loop() {
// Sweep from MIN_ANGLE to MAX_ANGLE
sweepAndMeasure(MIN_ANGLE, MAX_ANGLE, ANGLE_STEP);

// Sweep back from MAX_ANGLE to MIN_ANGLE


sweepAndMeasure(MAX_ANGLE, MIN_ANGLE, -ANGLE_STEP);
}

/**
* @brief Sweeps the servo motor and measures the distance at each step.
* @param startAngle The starting angle of the sweep.
* @param endAngle The ending angle of the sweep.
* @param step The increment or decrement for the angle.
*/
void sweepAndMeasure(int startAngle, int endAngle, int step) {
for (int angle = startAngle; (step > 0) ? (angle <= endAngle) : (angle >=
endAngle); angle += step) {
[Link](angle);
delay(SWEEP_DELAY);
int distance = calculateDistance();
printData(angle, distance);
}
}

/**
* @brief Calculates the distance using the ultrasonic sensor.
* @return The calculated distance in centimeters.
*/
int calculateDistance() {
// Trigger the ultrasonic sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);

// Read the echo pulse


long duration = pulseIn(ECHO_PIN, HIGH);

// Calculate the distance in centimeters


return static_cast<int>(duration / SOUND_SPEED_FACTOR);
}

/**
* @brief Prints the angle and distance data to the Serial Monitor.
* @param angle The current angle of the servo.
* @param distance The measured distance.
*/
void printData(int angle, int distance) {
[Link](angle);
[Link](",");
[Link](distance);
[Link](".");
}

You might also like