Distancia entre 2 arduino's usando enlaces rf

0

Actualmente tengo una configuración a la que le envío un char con una Tx de 434MHz y un Uno a un Mega con un Rx. El Mega cuenta cuántas veces recibe el char y luego, si cae por debajo de cierto número, activa una alarma. ¿Es esta una forma viable de medir la distancia entre dos microcontroladores en interiores o hay una mejor manera?

Transmisor (Mega)

#include <SoftwareSerial.h>

int rxPin=2; //Goes to the Receiver Pin
int txPin=5; //Make sure it is set to pin 5 going to input of receiver

SoftwareSerial txSerial = SoftwareSerial(rxPin, txPin);
SoftwareSerial rxSerial = SoftwareSerial(txPin, rxPin);
char sendChar ='H';

void setup() {
  pinMode(rxPin, INPUT);
  pinMode(txPin,OUTPUT);
  txSerial.begin(2400);
  rxSerial.begin(2400);
}

void loop() {
  txSerial.println(sendChar);
  Serial.print(sendChar);
}

Receptor

#include <SoftwareSerial.h>

//Make sure it is set to pin 5 going to the data input of the transmitter
int rxPin=5; 
int txPin=3; //Don't need to make connections
int LED=13;
int BUZZ=9;
int t=0;

char incomingChar = 0;
int counter = 0;

SoftwareSerial rxSerial = SoftwareSerial(rxPin, txPin);

void setup() {
  pinMode(rxPin, INPUT); //initilize rxpin as input
  pinMode(BUZZ, OUTPUT); //initilize buzz for output
  pinMode(LED, OUTPUT); //initilize led for output
  rxSerial.begin(2400); //set baud rate for transmission
  Serial.begin(2400); //see above
}

void loop() {
  for(int i=0; i<200; i++) {
    incomingChar = rxSerial.read(); //read incoming msg from tx

    if (incomingChar =='H') {
      counter++; //if we get bit "h" count it  
    }
    delay(5); //delay of 10 secs
  }
  Serial.println(incomingChar);
  Serial.println(counter); //prints the the bits we recieved

  if(counter<55) {
    //if we receive less than 100 bits than print out of range triggers alarm
    Serial.println("out of range"); 
    tone(BUZZ,5000,500);digitalWrite(LED,HIGH);
  }
  else {
    noTone(BUZZ);digitalWrite(LED, LOW);
    //if we get more than 100 bits than we are within range turn off alarm
    Serial.println("in range"); 
  }

  counter = 0;
  incomingChar=0;
}
    
pregunta teddywestside

2 respuestas

6

Eso es ingenioso, pero desafortunadamente es probable que sea un sistema muy inexacto con poca repetibilidad. El rango se verá afectado por las características de la antena y la alineación. El nivel de potencia variaría entre unidades. Las condiciones locales y el ruido de RF tendrán algún efecto.

Otras opciones incluyen

  • Acústico, generalmente ultrasónico: tiempo de vuelo o triangulación. A veces la amplitud como lo estás haciendo.

  • RF: tiempo de vuelo o radar Doppler barrido o triangulación.

  • LASER. Similar a RF, detección de fase, ...

Muchos de los sitios de robots discuten métodos de búsqueda de rango.

    
respondido por el Russell McMahon
2

Al hacerlo, no puedes medir la distancia. Solo puedes saber si el enlace está vivo o no, y el porcentaje de tiempo que ha estado vivo.

Medir la distancia es una tarea muy compleja. Un método sería medir los tiempos de viaje de ida y vuelta (o tiempos de ida, si ambos sistemas compartían una referencia de tiempo muy precisa). Dado que las ondas de RF viajan a la velocidad de la luz, debe medir tiempos muy cortos y, por lo tanto, debe tratar con circuitos de alta frecuencia.

    
respondido por el Telaclavo

Lea otras preguntas en las etiquetas