Go Down

Topic: Ajuda na programação de um robô utilizando motor shield e 4 motores (Read 785 times) previous topic - next topic

Rodrigoadk

Apr 07, 2013, 03:33 pm Last Edit: Apr 07, 2013, 03:42 pm by Rodrigoadk Reason: 1

Estou trabalhando em um projeto e to com dificuldade , peço ajuda a quem souber resolver. Estou usando um arduíno Uno e um motor shield igual o esse AdafruitMotorShield, estou com 4 rodas ligadas no shield e estou controlando com controle remoto com receptor infravermelho e controlinho simples, estou com 4 rodas ligadas no shield porém só o M3 e o M4 do shield funcionam, o M1 e o M2 não funcionam com o código utilizando o controle remoto. Já fiz um programa sem o controle remoto e as quatro funcionaram. Alguém sabe o erro ou alguma ligação que estou fazendo errado?
Segue o programa que estou com problemas.
#include
#include


int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);

AF_DCMotor motor1(1, MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_64KHZ);
AF_DCMotor motor3(3, MOTOR12_64KHZ);
AF_DCMotor motor4(4, MOTOR12_64KHZ);

decode_results results;

void setup() {

motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
irrecv.enableIRIn();

}

void loop() {
if (irrecv.decode(&results)) {
if(results.value == 16724175){ // botão 1 do controle
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD) ;
motor4.run(FORWARD);

}
if(results.value == 16718055){ //botão 2 do controle
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD) ;
motor4.run(BACKWARD);


}
if(results.value == 16743045){ //botão 3 do controle
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE) ;
motor4.run(RELEASE);

}
if(results.value == 16716015){ //botão 4 do controle
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD) ;
motor4.run(FORWARD);

}
irrecv.resume();
}
delay(2000);
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE) ;
motor4.run(RELEASE);

}

bubulindo

Code: [Select]

#include
#include


int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);

AF_DCMotor motor1(1, MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_64KHZ);
AF_DCMotor motor3(3, MOTOR12_64KHZ);
AF_DCMotor motor4(4, MOTOR12_64KHZ);

decode_results results;

void setup() {

motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
irrecv.enableIRIn();

}

void loop() {
if (irrecv.decode(&results)) {
Serial.print ("cmd");
Serial.print (results.value);

if(results.value == 16724175){ // botão 1 do controle
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD) ;
motor4.run(FORWARD);

}
if(results.value == 16718055){ //botão 2 do controle
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD) ;
motor4.run(BACKWARD);


}
if(results.value == 16743045){ //botão 3 do controle
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE) ;
motor4.run(RELEASE);

}
if(results.value == 16716015){ //botão 4 do controle
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD) ;
motor4.run(FORWARD);

}
irrecv.resume();
}
delay(2000);
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE) ;
motor4.run(RELEASE);

}


O que aparece quando corres este código e carregas em todos os botões?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Rodrigoadk

Não aparece nada na porta serial , usei este código sem controle remoto e funcionou os 4 motores.
#include <AFMotor.h>
#include <Servo.h>
#define SERVO1_PWM 10
Servo servo_1;
AF_DCMotor motorDirTras(1, MOTOR12_64KHZ);
AF_DCMotor motorDirFront(2, MOTOR12_64KHZ);
AF_DCMotor motorEsqFront(3, MOTOR12_64KHZ);
AF_DCMotor motorEsqTras(4, MOTOR12_64KHZ);
int IRpin = 1;

void setup() {
  Serial.begin(9600);         
  Serial.println("Motor test!");
  servo_1.attach(SERVO1_PWM);
}

void loop() {
  servo_1.write(30); 
  delay(1000);
  servo_1.write(120);
  delay(2000);
  motorDirTras.setSpeed(150);   
  motorDirFront.setSpeed(150);
  motorEsqFront.setSpeed(150);
  motorEsqTras.setSpeed(150);
  float volts = analogRead(IRpin)*0.0048828125;
  float distance = 65*pow(volts, -1.10);         
  Serial.println(distance);                       
 
  if (distance > 30){
motorDirTras.run(FORWARD);   
     motorDirFront.run(FORWARD);
     motorEsqFront.run(FORWARD) ;
     motorEsqTras.run(FORWARD);
  }

  if (distance <= 30){
    motorDirTras.setSpeed(255);   
    motorDirFront.setSpeed(255);
    motorEsqFront.setSpeed(255) ;
    motorEsqTras.setSpeed(255); 
   Serial.println("Obstaculo encontrado, virando a esquerda");
 
   motorDirTras.run(RELEASE);   
  motorDirFront.run(RELEASE);
   motorEsqFront.run(RELEASE) ;
   motorEsqTras.run(RELEASE); 
   motorDirTras.run(FORWARD);   
   motorDirFront.run(FORWARD);
   motorEsqFront.run(BACKWARD) ;
   motorEsqTras.run(BACKWARD); 
    delay(1000);
  }
  delay(500);
}

Quando coloquei com o controle remoto funcionou só o motor 3 e o motor 4

bubulindo

Desculpa lá... mas se pretendes ajuda tens de decidir o que pretendes fazer e o que usar.

Mostras um código e dizes que não funciona com o comando IR mas funciona sem o comando. Depois mostras um programa que não tem nada a ver com o primeiro e dizes que foi esse que usaste.

Assim não se sai do sítio. Como é que eu posso saber se a biblioteca do primeiro código para controlar os motores está correcta se não a testaste?

Experimenta este programa para testar o IR:

Code: [Select]
#include <IRremote.h>

const int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.decode_type == NEC) {
      Serial.print("NEC: ");
    } else if (results.decode_type == SONY) {
      Serial.print("SONY: ");
    } else if (results.decode_type == RC5) {
      Serial.print("RC5: ");
    } else if (results.decode_type == RC6) {
      Serial.print("RC6: ");
    } else if (results.decode_type == UNKNOWN) {
      Serial.print("UNKNOWN: ");
    }
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}


Ao carregar nos botões, deves receber o que o comando te está a enviar. Toma nota dos valores que aparecem no serial port para cada tecla.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up