No, no, PeterKantTropus, ninguna crítica, cada uno aporta sus ideas, lo cual es perfecto. Yo he imaginado este sistema a imitación del Loran, pero para usos concretos los puede haber mejores o más sencillos. Habría que probarlo. Por cierto no le respondí a Firius2010 sobre su comentario de posibles molestias a los perros, pero veo que tu si lo has hecho. Pienso lo mismo, los impulsos son tremendamente breves, muy separados y de baja potencia. Tal vez los oigan como un brevísimo "tic", pero no creo que les molesten demasiado...
Gracias por el esquema del HC-SR04, Surbyte, siempre ayuda a no ir a ciegas y se ahorra tiempo...
Mientras sigo trabajando con el hardware no debo descuidar el software. Para desarrollar el programa receptor de los frames necesitaré un generador de los mismos, lo cual puede hacerse a partir de una ligera modificación en el programa emisor...
La versión de "test" del emisor deberá olvidarse de la "capa física" de la comunicación por ultrasonidos y centrarse en la secuencia de señales digitales que le llegarían a través del transductor al Arduino receptor. La secuencia sería de cuatro señales de 125 uS separadas 10 mS entre ellas, y tras la última un tiempo de espera de 32,76 mS que actúa de indicador de sincronismo. Los tiempos de 10 mS han de poder variarse para simular distintas ubicaciones físicas del receptor con respecto a los emisores...
El montaje de prueba es muy sencillo. Un Arduino como emisor de señales (el de la derecha), conectado directamente a otro Arduino (de la izquierda) como receptor. Aquí, como digo, prescindo de la capa física de transmisión por ultrasonidos, y las señales pasan directamente sin "portadora" de 40 Khz del pin-8 de salida del emisor al pin-2 de entrada del receptor...
El programa emisor modificado para que la secuencia de los cuatro impulsos salga por el mismo pin:
// UPP_T_TEST_003. Llorens Mercadal, 28_agosto_2019. VERSIÓN OPERATIVA
// Emisor de pulsos de prueba del sistema de Situación por Enrejado Hiperbólico
//*************************************************************************
volatile byte Cont = 0; // Contador de ciclos de 40Khz
volatile unsigned int T1 = 12000; // Tiempo T1
volatile unsigned int T2 = 14000; // Tiempo T2
volatile unsigned int T3 = 16000; // Tiempo T3
volatile unsigned int T4 = 18000; // Tiempo T4
//*************************************************************************
void setup(){
pinMode(8, OUTPUT); // Configura Pin 8 como salida de señal
noInterrupts(); // Configurar Timer1, desactivamos interrupciones
TCCR1A = 0; // Registro de control A a 0
TCNT1 = 0; // Registro contador a 0
TCCR1B = 10; // Habilitamos CTC y Prescaler 8 (8+2)
TIMSK1 = 2; // Timer/Counter Interrupt Mask Register
OCR1A = 1; // Tiempo a 0,5 uS
interrupts(); // Activamos interrupciones nuevamente
}
//**************************************************************************
ISR(TIMER1_COMPA_vect){ // Código generador de 4 señales ultrasónicas en triángulo
Cont++;
switch (Cont){
case 1:
digitalWrite(8, HIGH); // Pin-8 a HIGH, marca 1
OCR1A = 250; // Tiempo 125 uS
break;
case 2:
digitalWrite(8, LOW); // Pin-8 a LOW, espacio 1
OCR1A = T1; // Tiempo T1 (10 mS)
break;
case 3:
digitalWrite(8, HIGH); // Pin-8 a HIGH, marca 2
OCR1A = 250; // Tiempo 125 uS
break;
case 4:
digitalWrite(8, LOW); // Pin-8 a LOW, espacio 2
OCR1A = T2; // Tiempo T2 (10 mS)
break;
case 5:
digitalWrite(8, HIGH); // Pin-8 a HIGH, marca 3
OCR1A = 250; // Tiempo 125 uS
break;
case 6:
digitalWrite(8, LOW); // Pin-8 a LOW, espacio 3
OCR1A = T3; // Tiempo T3 (10 mS)
break;
case 7:
digitalWrite(8, HIGH); // Pin-8 a HIGH, marca 4
OCR1A = 250; // Tiempo 125 uS
break;
case 8:
digitalWrite(8, LOW); // Pin-8 a LOW, espacio 4
OCR1A = T4; // Tiempo T4 (10 mS)
break;
case 9:
digitalWrite(8, HIGH); // Pin-8 a HIGH, marca 5
OCR1A = 250; // Tiempo 125 uS
break;
case 10:
digitalWrite(8, LOW); // Pin-8 a LOW, espacio 5
Cont = 0; // Resetea Contador
OCR1A = 65535; // Espacio de sincronismo (32,76 mS)
break;
}
}
//************************************************************************
void loop()
{}
En la siguiente imagen se ve la secuencia de salida resultante en el pin-8 del emisor, con los impulsos separados 10 mS (en teoría, como las tres separaciones son iguales y los 10 mS son en realidad un "pedestal" añadido para que las señales nunca puedan solaparse, en una situación real el receptor estaría situado en el centro geométrico del triángulo de emisores)...
...Enlace a la imagen de tamaño real...
Continuará...
Saludos