Skip to content

Instantly share code, notes, and snippets.

@mskf1383
Last active August 3, 2024 08:45
Show Gist options
  • Select an option

  • Save mskf1383/dcf260b96f09312afe41d3e80a2ae3b8 to your computer and use it in GitHub Desktop.

Select an option

Save mskf1383/dcf260b96f09312afe41d3e80a2ae3b8 to your computer and use it in GitHub Desktop.
// import libraries
#include <Servo.h> // Michael Margolis, Arduino
#include <TM1637Display.h> // TM1637 by Avishay Orpaz
// set pins
#define clkPin 2
#define dioPin 3
#define triggerPin 7
#define echoPin 8
#define servoPin 9
#define piezoPin 10
// define objects
Servo baseMotor;
TM1637Display monitor(clkPin, dioPin);
// define variables
int angle;
long duration;
int distance[19] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int newDistance;
void setup() {
// setup serial
Serial.begin(9600);
// setup monitor
monitor.setBrightness(7);
monitor.clear();
//setup servo
baseMotor.attach(servoPin);
// setup ultrasonic
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
// setup piezo
pinMode(piezoPin, INPUT);
// setup environment
for (angle = 0; angle <= 180; angle += 10) {
// set angle
baseMotor.write(angle);
delay(1000);
// get distance
distance[angle/10] = getDistance();
}
// print distances
Serial.print("{");
Serial.print(distance[0]); Serial.print(", ");
Serial.print(distance[1]); Serial.print(", ");
Serial.print(distance[2]); Serial.print(", ");
Serial.print(distance[3]); Serial.print(", ");
Serial.print(distance[4]); Serial.print(", ");
Serial.print(distance[5]); Serial.print(", ");
Serial.print(distance[6]); Serial.print(", ");
Serial.print(distance[7]); Serial.print(", ");
Serial.print(distance[8]); Serial.print(", ");
Serial.print(distance[9]); Serial.print(", ");
Serial.print(distance[10]); Serial.print(", ");
Serial.print(distance[11]); Serial.print(", ");
Serial.print(distance[12]); Serial.print(", ");
Serial.print(distance[13]); Serial.print(", ");
Serial.print(distance[14]); Serial.print(", ");
Serial.print(distance[15]); Serial.print(", ");
Serial.print(distance[16]); Serial.print(", ");
Serial.print(distance[17]);
Serial.println("}\n");
}
void loop() {
for (angle = 180; angle > 0; angle -= 10) {
// set angle
baseMotor.write(angle);
delay(1000);
noTone(piezoPin);
monitor.clear();
// get distance
newDistance = getDistance();
// check
if (newDistance < distance[angle/10] - 5){
warn();
}
}
for (angle = 0; angle < 180; angle += 10) {
// set angle
baseMotor.write(angle);
delay(1000);
noTone(piezoPin);
monitor.clear();
// get distance
newDistance = getDistance();
// check
if (newDistance < distance[angle/10] - 5){
warn();
}
}
}
int getDistance() {
// reset ulterasonic
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// send signal
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// recive signal
duration = pulseIn(echoPin, HIGH);
// calculate distance
return duration*0.034/2;
}
void warn() {
// print in serial
Serial.print(" --Angle ");
Serial.print(angle);
Serial.print("-- Unwanted object in ");
Serial.print(newDistance);
Serial.println("cm!");
// play sound
tone(piezoPin, 1000);
// show in monitor
monitor.showNumberDec(newDistance, false);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment