Сервопривод Arduino и двигатель постоянного тока не работают должным образом

#c #visual-studio-code #arduino #output #servo

#c #visual-studio-code #arduino #вывод #сервопривод

Вопрос:

Я очень новичок в мире Arduino, но у меня есть некоторый опыт программирования на других языках.

Я пытаюсь сделать свой первый автомобиль-робот, у меня есть 2 двигателя постоянного тока, подключенных к модулю L298N, все они подключены к батарее 9 В и Arduino Uno.

Двигатели постоянного тока подключены к порту 5,6,7 для двигателя 1 и порту 8,9,10 для двигателя 2.

Код работает нормально, чтобы двигаться вперед и назад.

На этом этапе я хочу подключить сервопривод постоянного тока, который я подключил к порту 13, к 5 вольтам и к земле, и вот в чем проблема:

С помощью следующего кода движутся только один двигатель постоянного тока и сервопривод, но второй двигатель постоянного тока застрял!

Я замечаю, что если я удалю из void setup() команды servo_motor.attach(13); , оба двигателя постоянного тока будут работать.

Он должен перемещать сервопривод и оба двигателя постоянного тока…

Есть причина, почему?

Спасибо за помощь.

 #include <Arduino.h>
#include <Servo.h>

const int mot2 = 10;
const int ava2 = 9;
const int ind2 = 8;
const int mot1 = 5;
const int ava1 = 6;
const int ind1 = 7;
Servo servo_motor;  // create servo object to control a servo
int pos = 0;

void moveForward() {
  Serial.print("Going Forwardn");

  // turn on motor A
  digitalWrite(ava1, HIGH);
  digitalWrite(ind1, LOW);

  // set speed to 200 out of possible range 0~255
  analogWrite(mot1, 100);

  // turn on motor B
  digitalWrite(ava2, LOW);
  digitalWrite(ind2, HIGH);

  // set speed to 200 out of possible range 0~255
  analogWrite(mot2, 100);

  delay(2000);
}

void moveBack() {
  Serial.print("Going BACKn");

  // turn on motor A
  digitalWrite(ava1, LOW);
  digitalWrite(ind1, HIGH);

  // set speed to 200 out of possible range 0~255
  analogWrite(mot1, 250);

  // turn on motor B
  digitalWrite(ava2, HIGH);
  digitalWrite(ind2, LOW);

  // set speed to 200 out of possible range 0~255
  analogWrite(mot2, 250);
 
  delay(2000);
}

void moveServo() {
  for (pos = 0; pos <= 180; pos  = 1) {
    servo_motor.write(pos);             
    delay(15);                       
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    servo_motor.write(pos);             
    delay(15);                       
  }
}


void setup() {
  Serial.begin(9600);
  servo_motor.attach(13); //  why if i remove this both DC motor work and if i put only one DC motor work??
  pinMode(mot2, OUTPUT);
  pinMode(ava2, OUTPUT);
  pinMode(ind2, OUTPUT);
  pinMode(mot1, OUTPUT);
  pinMode(ava1, OUTPUT);
  pinMode(ind1, OUTPUT);
}

void loop() {
  moveServo();
  delay(2000);
  moveForward();
  delay(2000);
  moveBack();
}
 

Ответ №1:

Вы пытались использовать другой вывод вместо вывода 13 для управления сервоприводом? Вывод 13 не рекомендуется для управления сервоприводом, поскольку к выводу 13 подключен светодиод. Попробуйте контакт 3, потому что у него есть ШИМ, и к нему не подключен подтягивающий резистор.

Комментарии:

1. я обнаружил, что проблема связана с библиотекой servo.h, при использовании на arduino uno вывод 9/10 отключается.. именно там, где у меня подключен двигатель