Pages: [1] 2   Go Down
Author Topic: Arduino com o RX/TX da Tato...  (Read 2329 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá pessoal, comprei um RX/TX da Tato e estou tendo problemas na comunicação.

Alguém poderia me ajudar com o código?

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#include <Stdio.h>                      

int val = 0;
int PreVal = 0;
int flag = 0;
int dado = 0;

SoftwareSerial rfSerial = SoftwareSerial(rxPin, txPin);

void setup() {
 pinMode(rxPin, INPUT);      
 pinMode(txPin, OUTPUT);
 rfSerial.begin(9600);      
 Serial.begin(9600);        
}

void loop()
{  
  if (flag == 0)
  {
  Serial.println("Arduino Pronto!");
  flag = 1;  
  }
  if (Serial.available() > 0)
  {    
   dado = Serial.read();
   Serial.print("Dado a ser transmitido: ");
   Serial.println(dado);
 }
if (dado == 49)      // 49 == 1
{
     val = dado;    
     if(val != PreVal)  
     {
     Serial.print("Transmitir: ");
     Serial.println(val);
     rfSerial.print(val);
     PreVal = val;
     delay(100);
     }
receptor();
}
if (dado == 50) // 50 == 2
{
     val = dado;      
     if(val != PreVal)    
     {
     Serial.print("Transmitir: ");
     Serial.println(val);
     rfSerial.print(val);
     PreVal = val;
     delay(100);
     }
receptor();
}
}
void receptor()
{
               val = rfSerial.read();  
               Serial.print("Receptor: ");
               Serial.println(val);    
               delay(100);
 }

Obrigado!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 48
http://arduinors.net
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Amigo, q tipo de problema está tendo mais especificamente? Tens como passar mais detalhes? Que módulo está usando da Tato?? Tá flndo dos módulos de RF? A qts metros tá fazendo o teste??
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá,

Os módulos que estou usando são estes...

http://www.tato.ind.br/files/TXMRXM.pdf

A distância está de 1 cm, pois estou testando eles na protoboard...

O programa que fiz, coleta um dado pelo teclado e manda para o TX, porém não consigo coletar o mesmo dado pelo RX...

Obrigado.
Logged

Brasilia,Brasil
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Erick , a faixa de frequencia de 433mhz possui uma infinidade de ruidos devido ao grande numero de dispositivos que a utilizam , tais como controle remoto de carro , portoes de garagem etc. O pdf que voce linkou não esclarece o tipo de codificação usada pelo componente. Se for OOK (http://en.wikipedia.org/wiki/On-off_keying)  o tipo de codificação usada por estes componentes, ela tambem sofre grande influencia de ruidos , numa proxima vez sugiro usar do tipo FSK (http://en.wikipedia.org/wiki/Frequency-shift_keying) .

Faço as seguintes sugestões:
1 - comece a testar com velocidades mais baixas tipo 300 bps mandando um caracter só e va subindo a velocidade e o tamanho das mensagens conforme os resultados .
2 - repita a mesma mensagem 3 vezes
3 - use um protocolo simples para identificar no meio do ruido os dados que realmente estão vindo do seu transmissor , exemplo :
     . um byte de sincronização AA em hexa;
     . dois bytes de dados a serem transmitidos
     . um byte de checksum simples com XOR ( ou exclusivo) dos dados transmitidos

No receptor voce fica escutando a porta serial até receber o byte de sincronização ;  na hora que voce identifica-lo ; descarte-o e pegue os tres bytes seguinte , faça a conta do checksum  com os dois bytes de dados , compare com o checksum recebido , se não estiver correto , descarte a mensagem ou melhore mais um pouco o software e informe ao transmissor que ele precisa retransmitir a mensagem.

Esses modulos são baratos e faceis de ligar mas em contrapartida e' necessário ter um software bem elaborado . Eles são muito sensiveis a ruido e a problemas de sincronização quando voce manda bytes com uma sequencia assimetrica de zeros e uns e então o receptor não recebe nada ou recebe lixo. Ai para resolver isso , voce vai ter que usar uma codificação para os dados conhecida como Manchester ( http://en.wikipedia.org/wiki/Manchester_code) que equilibra a quantidade de uns e zeros em cada caracter.
É uma grande alegria quando funciona. Divirta-se !!!!
« Last Edit: October 14, 2008, 09:17:23 am by jeroavf » Logged

Sorte = Preparo + Oportunidade

http://www.blogdoje.com.br
Avr, Arduino, AVR32, Renesas , ARM e tecnologia em geral

PoA - RS - Brasil
Offline Offline
Newbie
*
Karma: 0
Posts: 27
-protect-
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boa noite, Erick.

Eu e o Rafael já tivemos esse problema em um dos nosso projetos, realmente o problema é o formato dos dados que você deve usar com esses rádios.

Com o protocolo serial você dificilmente vai conseguir fazer eles conversarem, recomendo que você use a lib VirtualWire (http://www.open.com.au/mikem/arduino/VirtualWire.pdf, http://www.open.com.au/mikem/arduino/VirtualWire-1.1.zip), que implementa o procolo Manchester, o correto para uso com esse tipo de rádio.

Uma dica: não deixe o conjunto TX/RX tão próximo, pois pode haver sobremodulação no receptor, o que impossibilita a comunicação, mesmo usando o protocolo correto.
« Last Edit: October 14, 2008, 10:20:18 pm by celsoffraga » Logged


PoA - RS - Brasil
Offline Offline
Newbie
*
Karma: 0
Posts: 27
-protect-
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Detalhe... essa lib já implementa as sugestões que o Jeronimo indicou (header/sincronização e verificação de integridade por checksum).
« Last Edit: October 14, 2008, 10:20:32 pm by celsoffraga » Logged


Brasilia,Brasil
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Essa biblioteca é uma boa dica, Celso . Acho que ela resolve o problema de hobbistas e controles remotos com mensagens curtas com um link de baixo custo. Ha alguns anos atrás montei um prototipo de um coletor de dados wireless e usei estes chips ligados a um atmega88. Tive que implementar uma serie de controles em software para que funcionassem minimamente para demonstrar o conceito. Mesmo assim não deu para usar no projeto final , já que o cliente queria mais de um coletor conversando na mesma rede e acabei usando um transceiver da Radiometrix ( muito mais caro $$$) que deu conta do recado. Hoje em dia eu experimentaria os transceivers ZigBee Maxstream para resolver o mesmo problema
Logged

Sorte = Preparo + Oportunidade

http://www.blogdoje.com.br
Avr, Arduino, AVR32, Renesas , ARM e tecnologia em geral

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá Jeronimo,
E olha que o Site e o Pdf da Tato dizia que era super simples e fácil a comunicação!!!
Pelo visto é muito mais complicado do que eu imaginava!!!
Obrigado pelas dicas...
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá Celso,
Eu baixei, estudei, instalei a biblioteca, porém ainda não rolou...
Precisei adicionar outra biblioteca para compilar o programa no Arduino e ainda estou em dúvidas quanto á configuração dos Pinos do Tx/Rx, e do motivo que não funcionou!!!
A distância entre os módulos ainda está pequena, cerca de 25cm, mas é a maior distância que consegui com a minha Protoboard...
Estou á espera de outro Arduino, que está atrasado em uma semana já...
Assim que chegar terei melhores condições de realizar o teste!!!
Obrigado pelas dicas...
Logged

Brasilia,Brasil
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Celso , qual foi a maior distancia que conseguiu comunicação entre transmissor e receptor usando esta biblioteca ?  Qual a maior velocidade que voce conseguiu transmitir ?
Logged

Sorte = Preparo + Oportunidade

http://www.blogdoje.com.br
Avr, Arduino, AVR32, Renesas , ARM e tecnologia em geral

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ops...
Talvez não tenha ficado claro uma coisa que escrevi...
O meu Rx está a 25 cm do Tx, não pq ele só consegue se comunicar a esta distância, mas sim, pq só tenho uma Protoboard... E essa é a distância máxima que consegui deixá-los... E acredito que essa pequena distância entre os dois está interferindo...
Abraços.
Logged

Brasilia,Brasil
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eric,
Da primeira vez que usei passei pela mesma situação, li o exemplo da Tato , testei e só chegava lixo do outro lado, vasculhei a internet,consultei os amigos e no final cheguei a um programa em C que funcionava de forma estavel. Verifiquei que aconteciam muitos pedidos de retransmissao que para comunicação ponto a ponto dava até para aceitar mas não quis arriscar com mais terminais em comunicação multiponto.
« Last Edit: October 16, 2008, 05:37:12 am by jeroavf » Logged

Sorte = Preparo + Oportunidade

http://www.blogdoje.com.br
Avr, Arduino, AVR32, Renesas , ARM e tecnologia em geral

0
Offline Offline
Newbie
*
Karma: 0
Posts: 48
http://arduinors.net
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pessoal, não esqueçam de colocar uma antena (pode ser um pedaço de fio maciço) de mais ou menos 17cm.

No nosso projeto, conseguimos alcanças uma distância de 35m sem barreiras, usando módulos da Telecontrolli.

Rx: http://www.telecontrolli.com/pdf/receiver/rr3.pdf
Tx: http://www.telecontrolli.com/pdf/transmitter/rt4.pdf

Mas a lógica é a mesma, referindo-se a lib e tal.

Nós estávamos mandando msgs de mais ou menos 10 bytes...

Flw
Logged


PoA - RS - Brasil
Offline Offline
Newbie
*
Karma: 0
Posts: 27
-protect-
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erick, recomendo não usar os pinos RX/TX (0/1) do Arduino, pois um trem de pulsos chegando na serial pode disparar interrupções indesejadas.

Outra coisa, não precisa incluir a biblioteca software serial, e olhando rapidamente seu código, nem a stdio. A própria VirtualWire faz as devidas "configurações" dos pinos.

Se continuar tendo problemas, manda o seu novo código que a gente dá uma olhada.

Uma coisa que achei estranha... Você está tentando comunicar os 2 módulos com 1 só Arduino? Com certeza isso não vai funcionar, pois enquanto você estiver transmitindo, não poderá receber nada... Apenas a serial "de verdade" (pinos 0/1) consegue receber dados enquanto o processador estiver fazendo outra coisa, pois é um módulo assíncrono independente no hardware, com seu próprio buffer...
« Last Edit: October 16, 2008, 03:46:38 pm by celsoffraga » Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá Jeronimo,
Pois é, no meu caso, eu não posso me dar ao luxo do Receptor sofrer alguma interferencia, visto que irei usá-lo em uma situação "crítica"...

Abraços...
Logged

Pages: [1] 2   Go Up
Jump to: