
Kasutatud komponentid:
2 mootorit, kaugusandur, arduino uno, L298N draiver, juhtmed ühendamiseks.
video: https://drive.google.com/file/d/1m-3BcUMD37_eoKS_Xelrfq6uMpW71ioo/view?usp=sharing
skeem:

//Robi v1.0 // Control of 2WD-1 robot platform using Arduino UNO. // with obstacle avoidance using HC-SR04 ultrasonic sensor. //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 = 5; const int mot1b = 6; const int mot2f = 10; const int mot2b = 11; int mot_speed = 225; //motors speed //LOGICS VARIABLES const int dist_stop = 25; const int max_range = 800; const int min_range = 0; int errorLED = 13; //INITIALIZATION void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(errorLED, OUTPUT); } //BASIC PROGRAM CYCLE void loop() { autopilot(); } //***********************FUNCTIONS******************************* void autopilot() { while (true) { if (Serial.available() > 0) { char command = Serial.read(); if (command == 'x') { motors_stop(); return; } } int result = ping(); //Check distance if (result <= min_range || result >= max_range) { // Check range digitalWrite(errorLED, HIGH); delay(500); } else if (result < dist_stop) { // Check stop range digitalWrite(errorLED, LOW); motors_back(); delay(1000); motors_stop(); delay(200); motors_left(); delay(300); motors_stop(); delay(200); } else { // If all is OK, go forward motors_forward(); delay(100); } } } int ping() { //CHECK DISTANCE FUNCTION (3x) long sum = 0; for (int i = 0; i < 3; i++) { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration / 58; sum += distance; } dist_result = sum / 3; return dist_result; } void motors_forward() { //MOTORS FORWARD FUNCTION analogWrite(mot1f, mot_speed); analogWrite(mot2f, mot_speed); digitalWrite(mot1b, LOW); digitalWrite(mot2b, LOW); } void motors_back() { //MOTORS BACK FUNCTION digitalWrite(mot1f, LOW); digitalWrite(mot2f, LOW); analogWrite(mot1b, mot_speed); analogWrite(mot2b, mot_speed); } void motors_stop() { //MOTORS STOP FUNCTION digitalWrite(mot1f, LOW); digitalWrite(mot2f, LOW); digitalWrite(mot1b, LOW); digitalWrite(mot2b, LOW); } void motors_left() { //MOTORS LEFT FUNCTION analogWrite(mot1f, mot_speed); digitalWrite(mot2f, LOW); digitalWrite(mot1b, LOW); analogWrite(mot2b, mot_speed); } void motors_right() { //MOTORS RIGHT FUNCTION digitalWrite(mot1f, LOW); analogWrite(mot2f, mot_speed); analogWrite(mot1b, mot_speed); digitalWrite(mot2b, LOW); } void motors_forward_left() { //FORWARD LEFT FUNCTION int k = mot_speed * 0.8; analogWrite(mot1f, mot_speed); analogWrite(mot2f, k); digitalWrite(mot1b, LOW); digitalWrite(mot2b, LOW); } void motors_forward_right() { //FORWARD RIGHT FUNCTION int k = mot_speed * 0.8; analogWrite(mot1f, k); analogWrite(mot2f, mot_speed); digitalWrite(mot1b, LOW); digitalWrite(mot2b, LOW); } void motors_back_left() { //BACK LEFT FUNCTION int k = mot_speed * 0.8; digitalWrite(mot1f, LOW); digitalWrite(mot2f, LOW); analogWrite(mot1b, k); analogWrite(mot2b, mot_speed); } void motors_back_right() { //BACK RIGHT FUNCTION int k = mot_speed * 0.8; digitalWrite(mot1f, LOW); digitalWrite(mot2f, LOW); analogWrite(mot1b, mot_speed); analogWrite(mot2b, k); }