Pages: [1]   Go Down
Author Topic: Ajuda na programação de um robô utilizando motor shield e 4 motores  (Read 749 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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);

}
« Last Edit: April 07, 2013, 08:42:42 am by Rodrigoadk » Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3282
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#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?
Logged

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).

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3282
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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.
Logged

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).

Pages: [1]   Go Up
Jump to: