Realización de una cadena de comunicación por infrarrojos flexible pero tolerante a fallos

2

La tarea recayó en mí para realizar un sistema de comunicación inalámbrico en cadena. La comunicación debe ser inalámbrica, esp. A través de diodos infrarrojos. El extremo de la cadena está conectado a una PC (cableada). Todo el sistema consta de n miembros. Cada miembro tiene dos lados con un diodo de envío y recepción.

Elobjetivoes:

  • LaPCdebepoderenviaruncomandodeinicializaciónyelsistemaquecontienenmiembrosdebeaveriguarcuántosmódulosestáninstalados("encontrar n").
  • La PC debe poder enviar un comando a todos los módulos
  • La PC debe poder enviar un comando a un determinado módulo
  • Los módulos están muy juntos, pero la distancia debe poder variar entre aproximadamente 1 y 3 pulgadas.

Mi enfoque hasta ahora:

  • La PC envía un comando al módulo 1. El Módulo 1 envía su presencia a la PC, así como de manera inalámbrica al segundo módulo. Hasta ahora la PC sabe que 1 módulo está presente. Cuando el módulo 2 recibe el comando de inicio, envía su acuse de recibo al primer módulo que transfiere el mensaje de 2 a la PC. Además, el módulo 2 envía el comando de inicio al módulo 3, y así sucesivamente. La fase de inicio finaliza, cuando el último módulo (n) recibe el comando de inicio y su mensaje de presencia llega a la PC. Después de eso, no llega más mensaje al lado de la PC y sabe que hay n módulos presentes.
  • Los comandos adicionales contienen un byte de encabezado que se dirige al módulo "destino". O, si todos los módulos están destinados, el comando comienza con un byte "cero" (0x00).

El desafío es:

  • Físicamente: no sé cómo evitar el hecho de que el módulo x podría "hablar" con el módulo x + 1 y x + 2 simultáneamente (habla cruzada) por reflexiones o reflejos. Necesito obtener el sistema de autoaprendizaje. Hasta ahora, atenúo los diodos hasta que solo pueden alcanzar una distancia muy pequeña. Pero esto no es muy tolerante a las fallas.
  • Lógicamente: la luz del día y otras fuentes de luz infrarroja causan muchos mensajes borrosos e incomprensibles. Los mensajes reales están actualmente precedidos o incluso perturbados por influencias externas.
pregunta Norbert

2 respuestas

1

Las señales de infrarrojos rebotan: se atenúan o se reflejan de forma inesperada. Como dijiste, esto tiene que ser atendido.

Si estos dispositivos están en una habitación, los dispositivos 2 y n-1 pueden ver la misma señal del dispositivo 1 y responder al mismo tiempo: ¿qué sucede entonces?

Me parece que primero necesitarás descubrir dispositivos y construir una red, luego estructurar mensajes para usar la red.

Por ejemplo:
Etapa 1) Descubrimiento de la red. Asumo que (a) sabes cuántos (n) es, (b) puedes programar variaciones en cada dispositivo individual (c) cada dispositivo puede medir la intensidad de la señal (o la calidad de la señal de alguna manera).

El dispositivo 1 transmite un mensaje de difusión. Todos los dispositivos de recepción esperan (una hora diferente en cada caso para evitar colisiones) y responden con las intensidades de la señal. Algunos mensajes regresan, otros no.

El dispositivo 1 ahora tiene una lista de estaciones con las que puede hablar de manera confiable, ordenadas por calidad de señal bidireccional, y a cuáles no puede llegar. Llama al más fuerte "Dispositivo 2".

Ahora le pide al Dispositivo 2 que haga lo mismo, y le devuelve su lista. Esto aumenta la carga en el dispositivo 1 o en la computadora host para crear las rutas más eficientes para cada dispositivo, y las reservas.

etapa 2) Uso de la red: cada mensaje incluye 2 direcciones: el destino final y el destino inmediato (generalmente el Dispositivo 2, desde el Dispositivo 1). Solo el objetivo inmediato responderá al mensaje, evitando colisiones sin necesidad de los retrasos utilizados en el descubrimiento de la red.

    
respondido por el Brian Drummond
0

Proporcione a cada unidad su propia identificación intrínseca de nodo codificada, que ayudará a ciertos problemas y algoritmos. O puede generar uno "al azar" si lo desea como un GUID.

Dé a cada "mensaje" un "ID de mensaje" único y eso puede ayudarlo a decidir si un mensaje dado ha sido visto / procesado / reenviado una o más veces por un nodo determinado.

Dé a cada mensaje un "tipo" como "SOLICITUD DE COMANDO INIT", "RESPUESTA DE COMANDO INIT", "TRANSMISIÓN DE BEACON", lo que sea.

Use indicadores como "mensaje reenviado", "mensaje original" si lo desea.

Use los datos de carga útil del mensaje, como "cuenta de saltos reenviados" (incrementa cada vez que se reenvía), "tiempo de vida" (número de episodios de reenvío antes de que caduque un mensaje) si lo desea.

Utilice algoritmos, como los nodos, si así lo desea, reenvíe a otros nodos o nodos en una secuencia determinada.

Por supuesto, es probable que puedas usar módulos XBEE o WiFly o algo así si quieres renunciar a IR por RF. O puedes hacer algo divertido (por encima, sí, pero divertido) como usar TinyOS, Contiki, UDP o lo que sea si quisieras y usar nodos suficientemente potentes. O puedes portar SimpliciTI o similar. Puerto cualquiera de las capas de red para utilizar el medio infrarrojo.

En cuanto al ruido ambiental, use fototransistores con filtro IR que reducirán el ruido no IR. Si el ruido IR de banda base sigue siendo un problema, utilice los módulos IRDA que tienen filtros ópticos y de banda base para ayudar. O puede utilizar la modulación de CA en una portadora analógica infrarroja y recibir los datos en formato analógico o digital. Podrías hacer todos los canales FDM si quisieras entre 1kHz y 10kHz o lo que sea. En forma analógica, puede usar un decodificador de tono PLL como el NE567 o el HC4046 para recibir modulación de FM, pero ¿por qué molestarse si hacer algunos filtros digitales es solo unas pocas líneas de código MCU? Heck use DTMF, hay un código fuente para eso. O salida PWM FSK y filtro digital para recibir.

La corrección de errores hacia adelante podría ayudar a la verificación e integridad del mensaje. O una suma de comprobación simple o CRC.

    
respondido por el whatever102904

Lea otras preguntas en las etiquetas