Go Down

Topic: Ajuda na programação de um robô utilizando motor shield e 4 motores (Read 986 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?
This... is a hobby.

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.
This... is a hobby.

Go Up