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);
}
}
}
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por