Pasar datos digitales por ultrasonido es mucho más complicado de lo que parece a primera vista. Estamos haciendo esto en un producto actualmente en pruebas de campo, pero cuando comenzamos a diseñar había muy poca información al respecto.
La mayoría de los problemas provienen del hecho de que el sonido se propaga lentamente (aproximadamente 3 ms por metro), y puede reflejarse y hacer eco en una habitación por un tiempo. Hicimos algunos experimentos y aproximadamente, debe asumir que cualquier sonido emitido rebotará alrededor de 10 m de propagación o 30 ms. Esto significa que el protocolo debe permitir que el receptor capte copias duplicadas de la señal emitida y señales fuera de servicio de hasta 30 ms. Dicho de otra manera, imagine que todo lo que envía se reordena o se duplica de manera impredecible dentro de una ventana de 30 ms.
Otro problema es que los transductores de ultrasonido son Q bastante altos. Toman unos pocos ciclos para ponerse en marcha y luego continúan sonando unos pocos ciclos después de que no haya más información. Tenga en cuenta que los datos nuevos y antiguos dentro del período de 30 ms también pueden interferir de forma constructiva o destructiva ciclo por ciclo. Esto, junto con el desorden de propagación hará que la velocidad de datos sea muy baja. Hay cosas como la codificación de Manchester, ya que la portadora puede aparecer y desaparecer debido a la interferencia si algo se emitió en los 30 ms anteriores.
Para resolver estos problemas, creamos nuestro propio esquema de codificación en nuestro sistema. Por lo que podemos decir, nadie había hecho esto antes. No estoy seguro, pero nuestro cliente puede haber presentado una patente sobre la técnica. Todos los datos están codificados en la diferencia de tiempo entre los bordes iniciales de las ráfagas cortas. Creo que enviamos alrededor de 8-10 ciclos a 40kHz por cada ráfaga. 10 ciclos son solo 250us, y tiene una longitud de 80-85 mm propagándose a través del aire. El receptor busca los bordes iniciales de estas ráfagas y registra su tiempo. Después de recibir una ráfaga, el receptor se apaga por un poco menos de 30 ms, ya que todo lo que se reciba en ese período solo será un eco. Los datos se codifican en el tiempo entre ráfagas sucesivas. En nuestro sistema, la diferencia horaria está en el rango de 30-50ms. Usamos una resolución de la cantidad de tiempo de curso de aproximadamente 2 ms debido a otras razones dentro de los receptores en los que no voy a entrar. Usando este método, podemos enviar uno de 9 caracteres entre dos ráfagas. Tenemos un carácter especial para el inicio del mensaje, y luego los valores 0-7. En otras palabras, enviamos 3 bits de información por ráfaga durante un mensaje. En nuestro sistema solo necesitamos enviar 10 bits de datos a la vez. En realidad, enviamos 6 caracteres por mensaje, el SOM y 5 caracteres de datos para un total de 15 bits. Utilizamos los 5 bits adicionales para una suma de comprobación CRC.
Nuestra cantidad de tiempo de aproximadamente 2 ms es más larga de lo que debe ser si se trata únicamente de los problemas de ultrasonido. El límite inferior proviene de la incertidumbre de recoger el borde anterior de una ráfaga en el receptor y los cambios en la longitud de la trayectoria debidos al movimiento. Probablemente podrías usar una cantidad de tiempo hasta 500 us si eres realmente cuidadoso, aunque no lo intentamos.