Может кто-нибудь помочь мне понять, почему вращается только одно колесо?

Я пытаюсь использовать код, который я опубликовал ниже для двух колес. Однако при подключении к питанию вращается только одно колесо. Я использую батарею 9 В, которая была предложена, поэтому я не уверен, почему вращается только одно колесо. Когда оба колеса соединены, колесо, которое первоначально работало, перестало вращаться.

#include <SPI.h>      //Библиотека SPI для связи с nRF24L01+
#include "RF24.h"  //Основная библиотека nRF24L01+
#include "Wire.h"


RF24 radio (8, 9); // CE,CSN

//Create a pipe addresses for  communication
const uint64_t pipe = 0xE8E8F0F0E1LL;

struct package
{
  int X = 1;
  int Y = 1;
};

typedef struct package Package;
Package pos;

int buttonState;
int spinnerState = false ;
int motora_1 = 3;
int motora_2 = 4;
int motorb_1 = 5;
int motorb_2 = 6;
int spinner = 2;



void setup()
{
  Serial.begin(9600);
  radio.begin();                    //Start the nRF24 communicate
  radio.openReadingPipe(1, pipe);   //Задает адрес передатчика, на который программа будет получать данные.
  radio.startListening();
  pinMode(motora_1, OUTPUT);
  pinMode(motora_2, OUTPUT);
  pinMode(motorb_1, OUTPUT);
  pinMode(motorb_2, OUTPUT);
  pinMode(spinner, OUTPUT);
  digitalWrite(spinner, LOW);
  delay(100);
}

void loop()
{

  if (radio.available()) {
    radio.read(&pos, sizeof(pos));
    radio.read(&buttonState, sizeof(buttonState));
    Serial.print("X:");
    Serial.print(pos.X);
    Serial.print("      Y");
    Serial.print(pos.Y);
    Serial.print("      buttonState");
    Serial.println(buttonState);
  }

  int xAxis = pos.X;
  int yAxis = pos.Y;
  int forward = map(yAxis, 570, 1024, 0, 255);
  int backward = map(yAxis, 480, 0, 0, 255);
  int right = map(xAxis, 570, 1024, 0, 255);
  int left = map(xAxis, 480, 0, 0, 255);

  if (yAxis > 570) {          // Move Forward
    // Set Motor A forward
    analogWrite(motora_1, forward);
    analogWrite(motora_2, 0);
    // Set Motor B forward
    analogWrite(motorb_1, forward);
    analogWrite(motorb_2, 0);
  } else if (yAxis < 480) {                     //Move Backward
    // Set Motor A backward
    analogWrite(motora_1, 0);
    analogWrite(motora_2, backward);
    // Set Motor B backward
    analogWrite(motorb_1, 0);
    analogWrite(motorb_2, backward);
  } else if (xAxis > 570) {                     // Move Right
    // Set Motor A forward
    analogWrite(motora_1, right);
    analogWrite(motora_2, 0);
    // Set Motor B stop
    analogWrite(motorb_1, 0);
    analogWrite(motorb_2, 0);
  } else if (xAxis < 480) {                     // Move Left
    // Set Motor A stop
    analogWrite(motora_1, 0);
    analogWrite(motora_2, 0);
    // Set Motor B foward
    analogWrite(motorb_1, left);
    analogWrite(motorb_2, 0);
  } else  {     //stop
    // Set Motor A stop
    analogWrite(motora_1, 0);
    analogWrite(motora_2, 0);
    // Set Motor B stop
    analogWrite(motorb_1, 0);
    analogWrite(motorb_2, 0);
  }

  if (buttonState == 0 ) {
    spinnerState = ! spinnerState;
    delay(50);
  }

  if (spinnerState == true) {
    digitalWrite(spinner, HIGH);    //turn On spinner
    delay(100);
  } else {
    digitalWrite(spinner, LOW);      //turn Off spinner
    delay(100);
  }


}

, 👍1

Обсуждение

Под "батареей 9 В" вы подразумеваете стандартные блочные батареи 9 В, которые часто используются в детекторах дыма? Если да, пожалуйста, попробуйте использовать другой источник питания. Эти батареи предназначены для работы с очень низким энергопотреблением, а не для привода двигателей, @chrisl

Схема подключения была бы хороша!, @Fahad

У вас есть "int motora_2 = 4; и" Аналоговая запись(motora_2, назад)"; и тег "arduino-uno". Вывод 4 на Arduino UNO не является выводом с поддержкой ШИМ. Аналоговая запись "в основном становится" цифровой записью " при пороговом значении 0x80, когда вы используете ее с выводами без ШИМ. Таким образом, у вас есть по крайней мере одна проблема в вашем скетче, которая не может быть идентифицирована как *проблема* без *лучшего описания* проблемы., @timemage


1 ответ


2

Во-первых, 9V batery собирается бороться с управлением двумя двигателями. Замените эту батарею 9 В другим источником питания.

Как указывает @timemage в своем комментарии, вы используете команду PWM на штифте без ШИМ. Для Arduino Uno ШИМ - контакты: 3, 5, 6, 9, 10, 11. Переместите проводку и измените код так, чтобы он использовал контакт 9, 10 или 11 вместо контакта 4.

Это звучит так, как будто вы пытаетесь проверить свою аппаратную установку и прошивку одновременно. Гораздо проще сначала протестировать аппаратное обеспечение и убедиться, что оно работает должным образом, прежде чем тестировать прошивку. Я предлагаю написать более простую программу (чем проще, тем лучше), которая просто ведет двигатели вперед - по одному, а затем вместе. Убедитесь, что он работает, а затем измените программу тестирования, чтобы двигатели вращались в (полном) обратном направлении. Затем измените программу тестирования, чтобы она изменила скорость двигателей. Затем с известным рабочим оборудованием протестируйте свою прошивку.

,

Да, им может быть полезно разбить код на большее количество функций, чтобы сделать его более тестируемым., @timemage