Definição do tipo de comunicação wireless

Boa noite!

Gostaria de uma ajuda para definir a comunicação/dispositivo wireless que seja mais simples de se trabalhar para um projeto.

Quero utilizar um módulo sensor hall para medir a velocidade e um módulo sensor de tensão para medir o nível da bateria de um carrinho de controle remoto. Um Arduino UNO fica no carrinho para pegar e enviar(por meio de um módulo wireless) as informações e um outro Arduino UNO recebe as informações dos dois sensores via wireless(por meio de outro módulo) e exibe em um display LCD 20x4 que ficará próximo ao controle remoto do carrinho.

O carrinho irá rodar dentro de casa, em curtas distâncias e com piso normal. Pesquisei e achei essas opções, porém não sei qual utilizar. Poderia me ajudar na escolha priorizando o módulo mais fácil de se trabalhar, por favor!?

Módulo RF nRF24L01+; Módulo Wireless ESP8266; Módulo RF 433Mhz (transmissor e receptor) + PAR HT12D e HT12E; Módulo Xbee; Pode citar se tiver alguma outra sugestão de módulo.

E com relação ao controle remoto do carrinho, pode gerar interferências com esses dispositivos?

Muito obrigado!

Boas O Xbee talvez seja o mais fácil de usar mas também é o mais caro dessa lista.Se tiveres wireless em casa e tenhas bom sinal onde pretendes andar com o carrinho podes optar pelo ESP8266 já que é barato e dá outros horizontes ao projeto pois trabalha na rede ... O nrf é um pouco "manhoso" tenho os a trabalhar mas as bibliotecas que andam por ai têm algumas falhas e tem de se ter uma alimentação muito certinha(ripple ao mínimo possível).

Existem também módulos de 433MHz... mas são talvez um pouco mais manhosos que os nRF de colocar a funcionar. A beleza deles é mesmo o facto de consumirem menos.

Ok, entendi. Obrigado!

Estou pensando em utilizar o nRF24L01+, porém estou com receio de ter interferências entre o controle (TX 27MHZ) e o nR (2.4GHz). Alguém saberia me dizer?

Grato!

Talvez tb vale a pena incluir na sua lista o modulo RF69. Trabalha em frequencias subGhz com otimo alcance. Existem duas opcoes de bibliotecas (RadioHead e LowPowerLab), ambas mto bem documentadas e facil de utilizar.

Valeu!

Olá!

Eu optei por utilizar o módulo nRF24L01+ mesmo. Agora estou com uma dúvida com relação as portas do Arduino UNO.
Em um Arduino UNO ficará o display lcd 20x4 junto com o módulo nRF24L01+ e no outro Arduino UNO os dois sensores juntamente com o outro módulo nRF24L01+. E gostaria de colocar um módulo micro SD card em um dos dois Arduinos.

Interface SPI por meio dos pinos MOSI, SCK e MISO.

Um UNO com nRF > pin 11, 12 and 13 / SD card > pin 11, 12 and 13

Outro UNO com nRF > pin 11, 12 and 13 / lcd > pin 11, 12, 2, 3, 4 and 5

Como faço pra ligar nas mesma entradas? Posso ligar em paralelo?

Grato.

Normalmente é assim que o SPI funciona.

As saídas Miso, MOSI e SCK são ligadas em paralelo e depois tens de indicar um pino para seleccionar o chip que queres aceder.

Eu nunca usei dois periféricos com SPI, mas existem várias pessoas e exemplos na net com isso a funcionar.

Blz, eu irei tentar e dou o retorno depois.

Teria uma outra opção para enviar as informações dos sensores para o computador? Existe algum adaptador para ligar o modulo nRF24L01+ direto no computador?

Obrigado!

Que eu saiba, não existe nada desse género porque o nRF24L01 funciona com SPI.

Para ligar directo do computador acho que terias de olhar para outro sistema como o XBee ligado através dum XBee explorer.

Olá.

Estou tentando fazer o nRF funcionar junto com o cartão SD, mas não estou conseguindo.

Sem o cartão SD estava funcionando normal, quando coloco o cartão SD, somente ele funciona e os dados dos sensores não são enviados pelo nRF.

PIN 13 - SCK , 12 - MISO and 11 - MOSI iguais para os dois. PIN 8 para nRF CE, PIN 9 para nRF CS e PIN 10 to SD CS.

Não sei quando e nem onde devo colocar os PINs CSN_PIN and SS_PIN HIGH ou LOW.

Alguma luz!? por favor!

#include <SD.h>
#include <SPI.h>
#include <RF24.h>
#include <LiquidCrystal.h>

RF24 radio (8, 9);

const int CE_PIN = 8;
const int CSN_PIN = 9;
const int SS_P = 10;

byte enderecos[][6] = {"1node"};

File dataFile;

LiquidCrystal lcd(3, 2, 7, 6, 5, 4);

String dadosrecebidos[2];

void setup () 
{

pinMode(CSN_PIN, OUTPUT); // RF
pinMode(CE_PIN, OUTPUT); // RF
pinMode(SS_P, OUTPUT); // SD 
  
  SPI.begin();
  delay(50);
  
  digitalWrite(SS_P, HIGH); 
  digitalWrite(CSN_PIN, HIGH); 
  digitalWrite(CE_PIN, HIGH);
  			
  digitalWrite(CSN_PIN, LOW);                 
  digitalWrite(CE_PIN, LOW);
    
  radio.begin();
  radio.openReadingPipe(1, enderecos[0]);
  radio.startListening();
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setCursor(5, 0);
  lcd.print("Teste 1.6");
  delay(5000);
  lcd.setCursor(3, 2);
  lcd.print("Carregando...");
  delay(5000);
  lcd.clear();
  
  digitalWrite(CE_PIN, HIGH);
  digitalWrite(CSN_PIN, HIGH); 
  digitalWrite(SS_P, LOW);
    
    if (SD.begin(SS_P))
  {
    lcd.setCursor(0, 0);
    lcd.print("Cartao presente!");
    lcd.setCursor(0, 1);
    lcd.print("Pronto para gravar.");
    delay(5000);
    lcd.setCursor(3, 3);
    lcd.print("Iniciando...");
    delay(5000);
  }
  else
  {
    lcd.setCursor(0, 0);
    lcd.print("Insira o cartao!");
    lcd.setCursor(0, 1);
    lcd.print("Se ja inseriu,");
    lcd.setCursor(0, 2);
    lcd.print("verifique o");
    lcd.setCursor(0, 3);
    lcd.print("cartao");
    delay(5000);
  }
    dataFile = SD.open("datalog.txt", FILE_WRITE);
    if (dataFile)
    { 
    dataFile.println("Tensão e velocidade");
     
    dataFile.close();
    }
    else 
    {
    dataFile.println("Erro");
    }

}

void recebido ()
{
    digitalWrite(SS_P, HIGH);
    digitalWrite(CE_PIN, LOW);
    digitalWrite(CSN_PIN, LOW); 
   
   if (radio.available())
   {
    while (radio.available())
    {
      radio.read(&dadosrecebidos, sizeof(dadosrecebidos));
    }
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("TENSAO");
    lcd.setCursor(7, 0);
    lcd.print(dadosrecebidos[0]);
    lcd.print("VOLTS");
    lcd.setCursor(0, 1);
    lcd.print("VELOCIDADE");
    lcd.setCursor(11, 1);
    lcd.print(dadosrecebidos[1]);
    lcd.print("KM/H");
   }

  digitalWrite(CE_PIN, HIGH);
  digitalWrite(CSN_PIN, HIGH);
  digitalWrite(SS_P, LOW); 
} 


void gravar()
{


  // make a string for assembling the data to log:
  String dataString = ""; //this line simply erases the string
  dataString += "Tensao ";
  dataString += (dadosrecebidos[0]);
  dataString += " VOLTS";
  dataString += " / ";     //puts a comma between the two bits of data
  dataString += "Velocidade ";
  dataString += (dadosrecebidos[1]);
  dataString += " KM/H";
  delay (1000);

  dataFile = SD.open("datalog.txt", FILE_WRITE);
 
  // if the file is available, write to it:
  if (dataFile) 
  {
    dataFile.println(dataString);
    dataFile.close();
  }
  // if the file isn't open, pop up an error:
  else 
  {
    dataFile.println("Erro");
  }

}

void loop () 
{
  recebido();
  gravar();
}

Olá!
Consegui fazer o que queria!!! Achei uma biblioteca que modifica o SD card e usa os pinos A0-A3 por software SPI.

O link segue abaixo, caso alguém queira:

http://www.iforce2d.net/sketches/SD-hardcode-use-pins-A0-A3.zip

SD-hardcode-use-pins-A0-A3.zip (56.7 KB)