#1 Програмування Arduino » Переделка радиоуправляемой машинки. » 2017-02-12 20:35:57

Smiliksed
відповідей: 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);
}

Подскажите пожалуйста где же ошибка или я в корне неправ и надо учить материальную базу? smile

Підвал форуму