Arduino - Detectar tono

2

Tengo una configuración extraña:

Fondo: Estoy construyendo un transmisor binario inalámbrico con un par de radios CB de baja potencia. He vuelto a soldar el botón activador y el micrófono en uno; que envía dos tonos diferentes (1500 hz para 1, 1000 hz para 0); este extremo de la configuración se ejecuta maravillosamente con mi Arduino.

Mi problema es con el extremo receptor: he intentado leer directamente desde los pines del altavoz usando analogRead, pero no puedo ver ninguna diferencia en los valores desde antes de que se reciban los sonidos, hasta después.

Mi pregunta: ¿cómo puedo parchear en el altavoz del segundo CB a Arduino para que pueda leer el valor de tono / tono?

Tipo de lo que tengo:

simular este circuito : esquema creado usando CircuitLab

    
pregunta Shane Gadsby

1 respuesta

3

Editar: salta a la parte inferior para obtener una solución decente.

De forma predeterminada, analogRead () es demasiado lento para muestrear correctamente las señales a 1kHz +. Hay varias cosas que puede / debe hacer si desea utilizar el ADC Arduino para la detección de tonos:

  • Cambia el prescaler de reloj ADC. A 16 MHz, he podido establecer ADPS tan bajos como 3, aunque la precisión se reducirá.

  • Deje de usar analogRead () y escriba su propio contenedor de lectura ADC. Hay una gran cantidad de cruft en analogRead () que no necesitas si sabes lo que estás haciendo.

  • Ponga el ADC en modo de ejecución libre, para que no tenga que esperar a que se muestre.

Al hacer todas estas cosas, es posible acercar la frecuencia de muestreo del ADC a 10 kHz o más, lo que es lo suficientemente rápido para sus propósitos. Tenga en cuenta que a menos que sea bastante inteligente con su código, es probable que este proceso consuma casi todos sus ciclos, lo que le deja un Arduino poco útil.

Sin embargo, hay una alternativa: buenos filtros analógicos. Cree dos filtros de picos con una Q alta en sus frecuencias de interés, colóquelos en los detectores de picos y, a continuación, su Arduino solo necesita mirar dos señales digitales.

Editar: otra forma de hacerlo. Rectifique el audio y péguelo a una señal digital. Luego cuente los pulsos en un intervalo de tiempo constante con el Arduino. Esta es la forma más fácil de hacer las cosas (menos hardware, no requiere demasiados ciclos, puede ejecutarse en una interrupción).

    
respondido por el uint128_t

Lea otras preguntas en las etiquetas