Boa tarde,

Estou num projecto em que tenho de comunicar com um master ( arduino mega) em que recebe escreve a informação em lcd 16x4, a informação de outros dois arduinos (arduinos uno).

A informação que vou enviar para o master é de um a info de um dht11 e do outro o valor de um HY-SRF 05 ( sensor de distância ultrasonico).

Estou a utilizar um transciever  (ER400TRS - modulo RF 433Mhz), que faz comunicação através de porta serie.

A comunicação entre 2 arduinos é fácil, agora com 3 ou mais é que a coisa complica devido aos endereços.

O meu problema é como faço para fazer o endereço nos arduinos para o master receber a informação quando faz o pedido. Podem-me ajudar?

Exibições: 463

Responder esta

Respostas a este tópico

Boa tarde HFTG, (se não gosta que te chame pelas iniciais, avise),

Não entendi bem a descrição do seu projeto.

Para facilitar o nosso entendimento e poder tentar ajuda-lo, post aqui um desenho esquemático mostrando

todo o projeto.. Arduino Mega, UNO, LCD,  sensores, módulos 433, etc.

RV

espero que ajude esta foto.

Não sei fazer o endereçamento/ ID dos arduinos.

Todas as ajudas são bem vindas

Olá Helder,

Observei pela foto que você deseja fazer comunicação em ambas direções, ou seja, cada Arduino vai transmitir e receber dados via RF 433Mhz, portanto imagino que de fato o módulo seja um transcienver capaz de gerenciar os canais e garantir comunicação sem interferência de forma bidirecional.

Se seu módulo pode de fato gerenciar vários canais na banda de 433Mhz, imagino que você possa por software alocar os canais de recepção e transmissão e assim alocar canais fixos para cada perna de envio de dados, correto?

Caso contrário, ou seja, não possa alocar canais fixos para cada perna e os dados cheguem todos juntos pela mesma porta UART sem identificação do canal no pacote de dados, você mesmo terá que criar esse pacote e um protocolo de comunicação, onde por exemplo, o primeiro byte do quadro da mensagem seja o endereço de origem, o segundo byte seja o endereço de destino, seguido pelo número de bytes da carga de dados (payload), seguido dos bytes do próprio payload, e finalizado por alguma informação para validar os bytes, como por exemplo um CRC (cyclic redundancy check).

Ou seja, em poucas palavras, vai construir um Frame próprio para enviar os dados entre os nós de sua rede mesh.

Boa sorte!

Importante: maioria dos módulo RF 433MHz são apenas de recepção ou apenas de transmissão, portanto não são bidirecionais. Sofrem com interferência eletromagnética e se transmitem ao mesmo tempo nada funciona bem.

Minha sugestão seria para você usar ESP8266 (no próprio IDE Arduino), no lugar dos UNOs e MEGA, com uma rede própria entre eles, usando o protocolo ESP-NOW. Com ele você poderá criar sua rede MESH com muita mais facilidade.

Acredito que sairá inclusive mais barato!

Dê uma olhada neste tutorial:

https://randomnerdtutorials.com/esp-now-esp8266-nodemcu-arduino-ide/

Não posso.

Tenho de uasr estes transcievers.

O que me foi pedido, foi :

O master chama o slave1 e o slave1 responde e o master escreve a info no lcd

O master chama o slave2 e o slave 2 responde e o master escreve a info no lcd. 

Vi que estes transciever travalhavam bem com uart. São um pouco antigos.

Para trabalhar com 2 arduinos é fácil, um manda e o outro recebe.

Agora com 3 preciso mesmo de ajuda.

Obrigado pela ajuda

Boa noite HFTG,

se é imperativo o uso de arduino Mega/UNO e estes transcievers, vamos

estudar as possibilidades:

UNO   :   0(RX), 1(TX)

Mega :   0(RX), 1(TX)    19(RX), 18(TX)    17(RX), 16(TX)   15(RX), 14(TX)

Os Unos transmitem e recebem do MEGA pela serial básica deles.

O Mega como tem 4 seriais, ao enviar para ou receber do UNO1,

usa a serial 1 e ao enviar ou receber do UNO 2 usa a serial 2.

Use 2 módulos de transcievers no arduino Mega

Segunda possibilidade;

Use um modulo em cada arduino, mas monte um protocolo de comunicação com um byte informando que é quem.

RV

Mega_dht11_lcd.ino

UNO_dht11.ino

O uno envia informação, mas o mega não entende o que está a receber.

O que estou a fazer mal?

Olhe bem para UNO_dth11.ino

Nunca se envia qualquer dado através do uso do objeto TesteDHT11.

Apenas há a leitura do sensor DTH e o envio dos dados para a porta serial padrão pelo uso do objeto Serial.

Como devo fazer para enviar a informação pelo software serial?

Bom dia Sr, HFTG,

o mais correto no seu caso seria usar comunicação usando o protocolo formal

conhecido com "JSON".

Ele é um protocolo básico para pacotes de dados.

Mas acredito que iria complicar seu projeto (e sua cabeça).

Então escrevi um sketch que poderá ser usado para montar os "pacotes" para o seu

projeto.

Este sketch tem 2 funções que podem ser incorporadas no seu sketch.

Depois conta o resultado.

RV

https://pastebin.com/YTyDQstz

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço