Lectura de datos desde el conector de audio de 3.5mm

1

Me pregunto si sería un ejercicio relativamente sencillo leer datos de un conector de audio de 3.5 mm con un Arduino y un Raspberry Pi. La comunicación será de una sola vía: la frambuesa pi transmite datos a Arduino, por lo que Arduino hará la lectura. ¿Alguien sabe cómo se puede lograr esto sin usar un módem?

    
pregunta John M.

3 respuestas

5

Las otras respuestas parecen involucrar el uso de conectores de 3,5 mm y un cable de audio solo para transmitir una señal digital serie típica de los puertos GPIO de la Raspberry Pi: por ejemplo, cableado de serie asíncrono, SPI o I2C a un conector externo dedicado de 3.5 mm que no es ni el conector de audio en la Pi.

Interpreté la pregunta más a lo largo de las líneas "¿Puedo transmitir datos digitales a un microcontrolador utilizando la salida de audio de la Raspberry Pi"

Sí, pero se vuelve más complicado. La salida de audio de la frambuesa pi se ve así:

Broadcomm SoC (fuera de pantalla) produce dos ondas cuadradas de ancho de pulso (PWM) producidas por Broadcomm SoC. y luego se filtran en paso bajo (para producir una forma de onda analógica) y se introducen en el conector de 3,5 mm. Los condensadores de bloqueo de CC aseguran que la salida no tenga compensación de CC. Los diodos protegen contra los transitorios de tensión.

La salida de audio es (capacitivamente) AC acoplada; Los condensadores de bloqueo de CC junto con la carga y la impedancia de la fuente actuarán como un filtro de paso alto, bloqueando las frecuencias por debajo de unas pocas decenas de Hertz. Por lo tanto, no puede utilizar las señales de DC-desequilibrado para comunicarse.

Tienes que codificar o modular los datos digitales de alguna manera, para que puedas pasarlos a través de una línea acoplada de CA. Hay muchos esquemas de codificación adecuados, especialmente codificación de Manchester , codificación 8b / 10b o codificación 4b / 5b . Dichas señales se pueden decodificar en el extremo arduino alimentando la señal a la entrada del comparador analógico, alimentando la salida del comparador a la unidad de captura de entrada del Temporizador 1 (de modo que cada flanco ascendente y descendente revelado obtenga una marca de tiempo) y luego decodifique el flujo en el software. Como la salida de audio está diseñada teniendo en cuenta el rango de audición humana, no esperaría una tasa de bits superior a unos 10 kbps (probablemente mucho menos, dependiendo del esquema de codificación utilizado).

También hay varios esquemas simples de modulación como Frequency Shift Keying , Phase Shift Keying , Pulse Position Modulation y On- Off Keying que se puede demodular con relativa facilidad con solo el comparador analógico y un temporizador de hardware.

Si desea volverse irritable, también puede sintetizar una forma de onda analógica modulada digitalmente en el extremo pi raspberry, muestrearla con el arduino ADC y demodular en el dominio digital. Con algo como modulación de amplitud de cuadratura , puede obtener una tasa de datos bastante respetable incluso con el ancho de banda limitado y la potencia de procesamiento disponible, a la Coste de mayor complejidad del software.

La modulación difiere de la codificación en que modifica las propiedades de una forma de onda de repetición constante con los datos que se transmiten en lugar de modificar la señal en sí. La modulación permite transmitir una señal de un cierto rango de frecuencia en un rango de frecuencia diferente, lo cual es crucial para, por ejemplo. la comunicación por radio, pero no es necesaria en este caso, ya que su señal original (banda base) ya se encuentra en el rango de frecuencia del canal de comunicación , por lo que se puede utilizar la codificación sin ninguna modulación. También es posible combinar la modulación de codificación y .

    
respondido por el jms
2

Una conexión en serie unidireccional requiere solo 2 líneas: tierra y señal. Las dos tarjetas que menciona exponen las interfaces seriales de hardware que permiten una comunicación serial razonablemente rápida, y tienen soporte de software para la comunicación serial.

Es posible, aunque mal aconsejado, conectar UART a UART directamente. Más razonablemente, una resistencia de pull-up, algunas resistencias en serie para limitar la corriente cuando se cortocircuitan o si la entrada Arduino se cambia accidentalmente a la salida y se puede agregar protección contra ESD, manteniendo los niveles invertidos. La Pi es de 3.3V y la mayoría de los Arduinos son de 5V, pero se garantiza que el chip ATMega leerá una entrada de 3.0V como 1 con un suministro de 5V, por lo que debería funcionar.

O agregue un controlador RS-232 a un lado y un receptor RS-232 al otro para usar niveles RS-232 estándar, a expensas de algo como un chip MAX232 y 5 condensadores en cada extremo. Los voltajes más altos de los niveles de RS-233 podrían ser más confiables con un conector de baja calidad, y la inmunidad al ruido sería muchas veces mayor.

Si no necesita enviar montones de datos, un protocolo común es de 9600 baudios, sin paridad, 1 bit de parada, que permite transmitir casi 1K bytes por segundo.

    
respondido por el Spehro Pefhany
1

Al ver cómo una conexión de conector de 3,5 mm le da 2, 3 o 4 líneas (tal vez más, sin duda, otros pueden decirnos). Puede utilizarlo fácilmente para transmitir datos digitales a través de cualquiera de los protocolos de comunicación en serie. Desde la parte superior de mi cabeza: RS232, SPI, I2C, Interfaz de un solo cable, sin duda muchos otros, incluido el tuyo si te sientes tan inclinado.

Lo difícil será asegurarse de que tanto el emisor como el receptor estén configurados correctamente, lo cual podemos detallar una vez que sepamos cuántas líneas tiene su conector de 3.5 mm, qué protocolo desea usar, la distancia física de Comunicaciones y tarifas de datos requeridas.

Alternativamente, si solo desea leer la onda de sonido de la toma de audio, puede conectarse a los ADC del Arduino, asumiendo que los niveles de voltaje están dentro del rango de operación seguro. Las limitaciones de esto serán la rapidez con la que desea muestrear los datos, la cantidad de rechazo de ruido que desea, el rango de voltaje, la resolución y la precisión de la lectura.

Básicamente lo que estoy diciendo es: sí. Si desea más detalles, haga una pregunta más específica.

    
respondido por el Puffafish

Lea otras preguntas en las etiquetas