Comunicação com fio entre dois arduinos

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Embora muitas vezes seja suficiente usar um único Arduino para ler de um sensor e exibir o resultado na janela serial ou em uma tela LCD, às vezes isso não é suficiente, e você pode dividir a tarefa entre 2 Arduinos. Um exemplo disso pode ser um Arduino detectando a rotação das pás da turbina de um medidor de fluxo de combustível em um motor diesel de emergência em espera (uma tarefa bastante ocupada) e enviando isso como uma taxa de fluxo periódica para um segundo Arduino em uma sala de controle.

Anúncio PCBWay

Neste tutorial, vamos usar um sensor de temperatura LM35 conectado a um Arduino e, em seguida, usar uma conexão de 3 fios (transmissão, recepção e terra comum) para retransmitir esses dados para um segundo Arduino a alguma distância. Se essa distância for superior a 10m, os fios devem ser torcidos.

Comunicação com fio entre dois arduinos 1

Como o LM35 funciona

O LM35 é um sensor de temperatura de 3 pinos. Os 2 pinos externos estão conectados a uma tensão de alimentação de 4V a 30V. O Centro Fora pin é uma fonte de tensão que fornece 10mV por grau Celsius. Em outras palavras, 25 graus C produzirão 250 mV no Fora PIN. Esta é uma voltagem analógica e, portanto, deve ser conectada a um pino analógico no Arduino. A faixa de temperatura é de -55 a +150 graus C. O Arduino pode convertê-lo em uma temperatura em graus C da seguinte maneira:

  • float tempC = analogRead(LM35_pin)
  • tempC = (tempC*500)/1023

ou, se desejar, em Farenheight, converta da seguinte maneira: tempF = (tempC*1.8) + 32.

Conectando Dois Arduinos

Agora, vamos tentar construir esse LM35 e dois Arduinos.

Leia Também  Então você pode encontrar muitas ideias de conteúdo com a ferramenta Ubersuggest + backlink

Pode parecer óbvio conectar as duas portas seriais dos Arduinos (pinos de dados 0 e 1). No entanto, se você fizer isso, seu sinal entrará em conflito ao tentar programar o Arduino a partir da porta USB, bem como da janela serial que, por padrão, usa esses pinos. Então, em vez disso, usaremos o SoftwareSerial biblioteca que vem como padrão com o Arduino IDE e cria um conjunto completamente independente de portas seriais para usarmos. Vamos conectar o LM35 à unidade remota, a uma bateria e ao link de 3 fios.

Alguns conselhos sábios: nunca conecte nada que não seja um dispositivo de rede elétrica com cabo “pneu de cabine” (azul, marrom, verde).

Para o Arduino local, apenas uma fonte de alimentação ou bateria, ou a energia da porta USB servirá. O resultado será exibido no monitor serial, mas você pode usar um display LCD.

Como conectar o LM35 a dois arduinos

Observe que o TX de um Arduino vai para o RX do outro e vice-versa.

Comunicação com fio entre dois arduinos 2
2 UNO’s conectados juntos

Instalando as Bibliotecas

Não há biblioteca necessária para o LM35 e a biblioteca SoftwareSerial já está disponível como uma biblioteca instalada padrão.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Comunicação com fio entre dois arduinos 3

Algo a ter em atenção, o tamanho do buffer na biblioteca padrão é bastante pequeno (64 bytes) e se você transmitir seqüências longas, você as verá truncadas (extremidades cortadas). Isso pode ser corrigido editando o arquivo SoftwareSerial.h em C: Arduino hardware arduino avr bibliotecas SoftwareSerial src mas não faça isso a menos que saiba o que está fazendo. (Faça uma cópia do arquivo primeiro!)

Nota sobre comunicações seriais: Geralmente é fácil esquecer que as portas seriais (UARTS) se comunicam de forma assíncrona. Isso significa que os dados que chegam ao receptor estarão em seu próprio tempo e não no sincronismo do loop do Arduino.

Leia Também  Melhores multímetros para entusiastas da eletrônica - nossas principais dicas e avaliações

Código Arduino para o Mestre

Observe que estou evitando o objeto problemático Arduino String e usando cadeias de caracteres do tipo C para maior estabilidade. Adicionei um LED verde a ambos para mostrar que as placas estão em execução.

//Transmitter Code
 #include 
 SoftwareSerial link(2, 3); // Rx, Tx
 byte lm35Pin = A0;
 float lm35V = 0;
 float tempC = 0;
 byte greenLED = 12;
 char text[20] ;
 char charVal[6];
  ////////////////////////////////////
  void setup() 
  {
    link.begin(9600);
    Serial.begin(9600);
    pinMode(greenLED, OUTPUT);
  }
  ///////////////////////////////////////////
  void loop()  
  {
   strcat(text, "Temp is: "); //append to empty string
   digitalWrite(greenLED, HIGH);
   delay(10);
   digitalWrite(greenLED, LOW);
   lm35V = analogRead(lm35Pin);
   tempC = (lm35V/1023) * 500;
   //this is a float we want it as a c-string:
   dtostrf(tempC, 5, 1, charVal);  
   //5 is min width, 1 is precision; float value is copied to charVal
   strcat(text, charVal); //append the value
   text[16] = 0; //terminate the cstring
   strcat(text, "C");  //append a C
   Serial.println(text); //print to local screen for debug
   link.println(text);
      
   delay(200);
  }
  ////////////////////////////////////////////////////

Código Arduino para o Escravo

Observe os 4 primeiros comentários comentados no loop(). Se você precisar depurar a conexão, descomente-os e comente o restante do loop() código para colocá-lo em funcionamento.

 //Receiver code
 #include 
 SoftwareSerial link(2, 3); // Rx, Tx
  
  byte greenLED = 12;
  char cString[20];
  byte chPos = 0;
  byte ch = 0;
  char dataStr[6];
  ////////////////////////////////////////////
  void setup() 
  {
    link.begin(9600); //setup software serial
    Serial.begin(9600);    //setup serial monitor
    pinMode(greenLED, OUTPUT);
  }
  ////////////////////////////////////////////
  void loop()  
  {  
 // if (link.available())
 //     Serial.write(link.read());
 // if (Serial.available())
 //     link.write(Serial.read());  
   
   
   while(link.available())
   {
    //read incoming char by char:
     ch = link.read();
     cString[chPos] = ch;
     chPos++;     
     
   digitalWrite(greenLED, HIGH); //flash led to show data is arriving
   delay(10);
   digitalWrite(greenLED, LOW);
   }
   cString[chPos] = 0; //terminate cString
   chPos = 0;
   
   Serial.print(cString);
    
  }
  //////////////////////////////////////////////////////

Usando o projeto e a saída da janela serial

Se tudo tiver sido conectado corretamente, aperte o LM35 com os dedos para mudar a temperatura. A janela serial deve mostrar o seguinte:

Comunicação com fio entre dois arduinos 4

Comunicação com fio entre dois arduinos 3
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br