Komponendid:
- Arduino Uno 1tk
- Ultraheli kaugusandur (HC-SR04) 1tk
- Mootorid ja rattad 2tk
- Šassii 2tk
- Mootori juhtimismoodul (nt L298N) 1tk
- Akupakk 1tk 9V
- Juhtmed ja pistikud
- Raam 1tk
- Montaaživahendid: kruvid, mutrid ja muud tööriistad roboti kokkupanekuks.
Tööprotsess:
Auto sõidab, märkab takistust, sõidab tagasi, pöörab ümber ja sõidab teises suunas.
Skeem:

Programm:
//DISTANCE VARIABLES
const int trigPin = 3;
const int echoPin = 2;
int dist_check1, dist_check2, dist_check3;
long duration, distance;
int dist_result;
//MOTORS VARIABLES
const int mot1f = 6;
const int mot1b = 5;
const int mot2f = 11;
const int mot2b = 10;
int mot_speed = 100; //motors speed
int k = 0; //BRAKE
//LOGICS VARIABLES
const int dist_stop = 30;
const int max_range = 800;
const int min_range = 0;
int errorLED = 13;
//INITIALIZATION
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(errorLED, OUTPUT);
}
//BASIC PROGRAM CYCLE
void loop() {
delay(1000);
int result = ping(); //Check distance
if (result <= min_range) { digitalWrite(errorLED, HIGH); delay(500); } if (result == max_range || result > max_range) {
digitalWrite(errorLED, HIGH);
delay(500);
}
if (result == dist_stop || result < dist_stop) {
digitalWrite(errorLED, LOW);
motors_back();
delay(1000);
motors_stop();
delay(200);
motors_left();
delay(300);
motors_stop();
delay(200);
}
else {
digitalWrite(errorLED, LOW);
motors_forward();
delay(100);
}
}
//CHECK DISTANCE FUNCTION (3x)
int ping() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
dist_check1 = distance;
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
dist_check2 = distance;
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
dist_check3 = distance;
int dist_check_sum = dist_check1 + dist_check2 + dist_check3;
dist_result = dist_check_sum / 3;
return dist_result;
}
//MOTORS FORWARD FUNCTION
void motors_forward() {
analogWrite(mot1f, mot_speed);
analogWrite(mot2f, mot_speed);
digitalWrite(mot1b, LOW);
digitalWrite(mot2b, LOW);
}
//MOTORS BACK FUNCTION
void motors_back() {
digitalWrite(mot1f, LOW);
digitalWrite(mot2f, LOW);
analogWrite(mot1b, mot_speed);
analogWrite(mot2b, mot_speed);
}
//MOTORS STOP FUNCTION
void motors_stop() {
digitalWrite(mot1f, HIGH);
digitalWrite(mot2f, HIGH);
digitalWrite(mot1b, HIGH);
digitalWrite(mot2b, HIGH);
}
//MOTORS LEFT FUNCTION
void motors_left() {
analogWrite(mot1f, mot_speed);
digitalWrite(mot2f, LOW);
digitalWrite(mot1b, LOW);
analogWrite(mot2b, mot_speed);
}
Video: