Ви не увійшли.
Сторінки 1
Добрый день уважаемые Форумчане!
Я начинающий в вопросе Ардуино. Есть некоторые
познания в электронике на уровне любителя.
У ребенка поламалась радиоуправляемая машинка, решил переделать
ее в машинку объезжающую препятствия с ульразвуковым датчиком.
Но никак дело не движется. Наше на просторах интернета скетч подходящий (сам пока не програмирую).
Однако ведущие задние колеса машинки движутся в одну сторону и не останавливаются.
Не подскажете -- что не так.
База:
Ардуино УНО клон
Мотор Шилд драйвера двух моторов на L298P
Ультразвуковой датчик расстояния HC-SR04
Питание 9в
Скетч
#include <AFMotor.h>
#define DIST_MAX 60 // среднее расстояние, при котором робот начнет снижать скорость движения
#define DIST_RULE 40 // расстояние, при котором происходит руление
#define DIST_BACK 20 // расстояние, при котором робот едет назад
#define Trig_R A0
#define Echo_R A1
#define Trig_L A2
#define Echo_L A3
#define LED 13
#define RIGHT FORWARD
#define LEFT BACKWARD
#define CENTER RELEASE
AF_DCMotor MOTOR(1);
AF_DCMotor RULE(2);
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(Trig_R, OUTPUT);
pinMode(Trig_L, OUTPUT);
RULE.setSpeed(250);
}
void loop()
{
delay(50);
digitalWrite(LED, HIGH);
int dist_R = Ultrasonic(Trig_R, Echo_R); // Измеряем расстояние справа
digitalWrite(LED, LOW);
delay(50);
digitalWrite(LED, HIGH);
int dist_L = Ultrasonic(Trig_L, Echo_L); // Измеряем расстояние слева
digitalWrite(LED, LOW);
if(dist_R > DIST_BACK && dist_L > DIST_BACK)
{
MOTOR.run(FORWARD);
int dist = constrain((dist_R + dist_L)/2, DIST_BACK, DIST_MAX);
int speed = map(dist, DIST_BACK, DIST_MAX, 100, 255);
MOTOR.setSpeed(speed);
if(dist_R < DIST_RULE || dist_L < DIST_RULE)
{
if(dist_R < dist_L) RULE.run(LEFT);
if(dist_L < dist_R) RULE.run(RIGHT);
}
else RULE.run(CENTER);
}
else if(dist_R > 0 && dist_L > 0)
{
RULE.run(RELEASE);
MOTOR.run(BACKWARD);
MOTOR.setSpeed(200); // скорость заднего хода
delay(2000); // время заднего хода
}
}
int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
digitalWrite(Trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(Trig_pin, LOW);
return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}
Даже проверочный скетч для движения двигателя вперед назад приводит к вращению двигателя в одну сторону.
#include <AFMotor.h>
AF_DCMotor MOTOR(1);
void setup()
{
MOTOR.setSpeed(200);
}
void loop()
{
MOTOR.run(FORWARD);
delay(3000);
MOTOR.run(BACKWARD);
delay(1000);
}
Подскажите пожалуйста где же ошибка или я в корне неправ и надо учить материальную базу?
Сторінки 1