Controlando 4 motores com um shield l293d em um mega2560 com um RF433

Amigos preciso esclarecer uma dúvida.

Estou com um projeto de um carro controlado por RF onde utilizo um Mega2560 um Shield l293d e um RF433 + 4 motores com redução.

O que ocorre é que quando envio o sinal "F" (Frente) por exemplo, ou qualquer um outro "T", "D" ou "E", os motores são acionados mas após isso eles param somente desligando a energia.

Observando o monitor no mega que é o receptor  percebo que é recebido somente duas vezes (as vezes 1 apenas) o "F" por exemplo. Isso também ocorre com os outros.

O transmissor é um UNO.

Todos estão carregados com fontes externar independentes.

 

Minha percepção é que o erro esta na forma de recepção de sinal do RF com o Mega. Me parece que quando os motores são acionados a recepção para.

Conto costumeiramente com a ajuda de vocês. Muito obrigado

Segue cód.
Transmissor:


//INICIO TRANSMISSOR______________________________________________________

#include <VirtualWire.h>
char *dado ; //Armazena variavel dos botões
int apaga; Auxiliar para envio de X e parar sem desligar motores


void setup() {

//Configura transmissor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(3);//Configura o pino 3 como tx
//Fin configura transmissor

Serial.begin(9600);

//Configura o estado das portas digitais
pinMode(3, OUTPUT); // Pino para o transmissor
pinMode(4, INPUT); //chave tátil 1
pinMode(5, INPUT); //chave tátil 2
pinMode(6, INPUT); //chave tátil 3
pinMode(7, INPUT); //chave tátil 4

}

void loop() {

// Vewrifica estado P4 tatil e envia caso pressionado
if (digitalRead(4) == 0) {

  apaga=1;
  dado = "F"; //Armazena para envio
  vw_send((uint8_t *)dado, strlen(dado)); //Envia dado
  vw_wait_tx(); //Aguarda o fim da tranmissão
  delay(100); //Aguarda um tempo para leitura
  Serial.println(dado);//Para observar possíveis erro através do serial
}

else if (digitalRead(5) == 0) {
  apaga=1;
  dado = "T";
  vw_send((uint8_t *)dado, strlen(dado));
  vw_wait_tx();
  delay(100);
  Serial.println(dado);
}

else if (digitalRead(6) == 0) {
  apaga=1;
  dado = "D";
  vw_send((uint8_t *)dado, strlen(dado));
  vw_wait_tx();
  delay(100);
  Serial.println(dado);
}

else if (digitalRead(7) == 0) {
  apaga=1;
  dado = "E";
  vw_send((uint8_t *)dado, strlen(dado));
  vw_wait_tx();
  delay(100);
  Serial.println(dado);
}

//Se nada pressionado envia "X" 3X
else {
  if (apaga == 1) {
    for (int i=1; i<4; i++) {
      dado = "X";
      vw_send((uint8_t *)dado, strlen(dado));
      vw_wait_tx();
     delay(100);
     Serial.println(dado);
     }
 }
apaga = 0;
}

}

//FIM TRANSMISSOR_____________________________________________________

COD. Receptor

//INICIO RECEPTOR_________________________________________

#include <AFMotor.h>
#include <VirtualWire.h>

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


void setup() {
int i;
//Configurareceptor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(50);//Configura o pino 30 como rx
vw_rx_start();// inicia recepcao
pinMode(50, INPUT);// configura pino30 para recepcao

Serial.begin(9600);

 }

void loop() {

char cod;//Cria uma variavel armazenar o dado recebido.
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Recebe os dados e armazena na var buf
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Armazena na tamanho dado recebido

if (vw_get_message(buf, &buflen)) {//observa dado recebido
 cod = buf[0]; //Converte em Char
 Serial.println(cod); /para observar possiveis erros

  if (cod == 'F') { // Compara a informação recebida e executa motores

motor1.setSpeed(75);

motor2.setSpeed(75);
motor3.setSpeed(75);
motor4.setSpeed(75);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
 }

else if (cod == 'T') {
motor1.setSpeed(75);
motor2.setSpeed(75);
motor3.setSpeed(75);
motor4.setSpeed(75);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
 }

else if (cod == 'D') {
motor1.setSpeed(75);
motor2.setSpeed(75);
motor3.setSpeed(75);
motor4.setSpeed(75);
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
 }


else if (cod == 'E') {


motor1.setSpeed(75);
motor2.setSpeed(75);
motor3.setSpeed(75);
motor4.setSpeed(75);
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
 }

else if (cod == 'X') {

 motor1.run(RELEASE);
 motor2.run(RELEASE);
 motor3.run(RELEASE);
 motor4.run(RELEASE);

 }


}
}

 

Exibições: 909

Anexos

Responder esta

Respostas a este tópico

Srs. pf... Não posso compreender qual motivo a recepção RF 433 é barrada quando conecto o  shield L293d no Mega. Existe alguma regra ou incompatibilidade que eu deveria saber?

Se não esta descobrindo uma solução, faça testes por eliminação:

- distancie (metros) o receptor do tranmissor.

- use uma bateria para Arduino/TX ou RX e outra bateria para o motor (não esqueça de interligar os terras) 

- coloque o circuito do motor dentro de um envolucro metálico, 

- etc.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço