Estrategia de módulos inalámbricos de bajo consumo

Estoy diseñando módulos de sensores de baja potencia que se distribuirán en un área razonablemente pequeña. Todos los módulos funcionan con baterías y deberían funcionar durante un tiempo decentemente largo sin tener que recargar/reemplazar las baterías (cuanto más tiempo, mejor, piense al menos unas pocas semanas, si no meses o años). La idea es que cada media hora u hora el módulo se active desde el modo de bajo consumo, tome algunas muestras y transmita los datos a un registrador de datos central. El registrador de datos central probablemente estará alimentado por la pared, por lo que el bajo consumo de energía no es tan necesario. No espero que ningún módulo esté a más de 100 m del registrador central, probablemente mucho menos.

He identificado algunos posibles módulos transceptores que potencialmente podrían funcionar:

  1. ALFA-TRX433S, 433 MHz
  2. ALFA-TRX915S, 915 MHz
  3. Microchip MRF89XAM8A, 868 MHz
  4. Microchip MRF89XAM9A, 915 MHz

Por lo que he leído, todos estos módulos funcionan en bandas no reguladas por la FCC y deberían ser seguros de usar. Los módulos Alpha anuncian un rango de 300 m, pero no puedo descifrar cuál sería el rango máximo esperado de los módulos Microchip. ¿Cómo haría para calcular esto?

Además, dado que tengo mi elección de bandas, ¿cuál debo elegir y por qué (es decir, qué obtengo de 915 MHz sobre 433 MHz y qué pierdo)? En orden de qué parámetros consideraría más importantes:

  1. bajo consumo
  2. Rango de transmisión (más es mejor, dentro de lo razonable)
  3. Inmunidad a otros factores ambientales (es decir, wifi/redes celulares, hornos de microondas en funcionamiento, paredes/obstáculos físicos, temperatura, etc.). El uso objetivo es en un entorno residencial y es probable que haya variaciones de temperatura significativas (por ejemplo, de -20 °C a 50 °C).
  4. Velocidad de datos. Esto no es muy importante ya que espero muy pocos datos por muestra (pocos bytes como máximo).

Otra pregunta que tengo es cómo manejar varios módulos que intentan transmitir datos al mismo tiempo. Tengo algunas ideas sobre cómo mitigar esto, pero no estoy seguro de con qué solución proceder:

  1. Utilice un desplazamiento de tiempo aleatorio para cuando se transmiten los datos. La esperanza es que las colisiones simplemente se eviten. Este sería probablemente el más simple de implementar y potencialmente usará la menor cantidad de energía. Sin embargo, esto no garantiza que no habrá colisiones. Además, obtener una buena fuente de aleatoriedad o una semilla pseudoaleatoria única puede causar problemas, aunque no irresolubles.

  2. Al despertar e intentar transmitir, verifique si hay alguna transmisión actualmente en curso. Solo espere el final de la transmisión antes de enviar datos. Entonces, el problema es cómo manejo varios sensores en el estado de espera, ya que ambos podrían decidir que la última transmisión ha terminado y ambos comienzan a transmitir al mismo tiempo.

  3. Alguna otra solución.

Tenga en cuenta que el rango de 300 m es para comunicación de 'Línea de visión clara' y, por lo general, puede caer a 50 o 100 m (o incluso menos) en interiores, dependiendo del no. y tipo de paredes entre Tx/Rx. He usado un par ASK/OOK Tx/Rx de 433MHz en un proyecto, con un perfil de uso algo similar, con 4x1.5VDC AA (estándar sin mercurio), durante más de 6 meses.
En cuanto al manejo de múltiples transmisiones simultáneas, sus primeras soluciones están cerca de lo que uso. En mi caso, mi transmisor usa una entrada de sensor de temperatura no calibrada como semilla PRNG para convertir a una compensación de hasta 3000 ms, y luego también uso retransmisiones.

Respuestas (3)

Tengo un sensor de código abierto y hardware abierto que le daría un punto de partida funcional: está conectado a Internet y transmite su temperatura, humedad y voltaje de la batería cada dos minutos y durará de 3 a 5 años con baterías 2xAA. Se basa en el módulo M12 6LoWPAN .

Haré todo lo posible para responder a todas sus preguntas:

Con respecto a la compensación de bandas:

433 MHz, 915 MHz, 2,4 GHz

El alcance frente al tamaño de la antena es la clara compensación aquí. La pérdida de trayectoria en el espacio libre es una función de la longitud de onda, por lo que las frecuencias más bajas viajan mucho más lejos con la misma atenuación. PERO, para sacar provecho de esto, también necesitará una antena adecuada que también se adapte a la longitud de onda. La antena de 2,4 GHz en el M12 ocupa aproximadamente 2 cm cuadrados de área de PCB.

Un segundo factor es la concesión de licencias. 2.4GHz puede tener estaciones sin licencia en todo el mundo. 915 MHz solo no tiene licencia en EE. UU. (es una banda GSM en cualquier otro lugar). No estoy seguro de las restricciones en 433MHz.

La velocidad de datos también se ve afectada por la elección de la frecuencia de acuerdo con el teorema de Shannon-Hartley ; puede meter más datos en una banda de frecuencia más alta. Sin embargo, esto no siempre se usa para una tasa de datos más final. 802.15.4, por ejemplo, tiene 4 bits de redundancia por cada bit real visto en la capa de datos. Los 32 símbolos son pseudoortogonales, por lo que debe corromper varios bits de bajo nivel para provocar un error. Esto permite que 802.15.4 opere bajo el nivel mínimo de ruido (la investigación sugiere una SNR de -5dB) y lo hace relativamente resistente a las interferencias.

Ahora vamos al siguiente tema difícil,

operación de radio de baja potencia :

En comparación con las fuentes de baterías domésticas (por ejemplo, alcalinas AA), incluso los SoC de "baja potencia" como el mc13224v no son de muy baja potencia. Los transmisores son de alrededor de 30 mA a 2-3,5 V y los receptores son de 25 mA más o menos. Sin apagar la radio y poner la CPU en reposo, esta carga consumirá 2 AA en unos pocos días. El alto consumo de energía del receptor a menudo sorprende a las personas y probablemente sea el mayor dolor en el desarrollo de sistemas de radio de baja potencia. La implicación es que para funcionar durante años, casi nunca se puede transmitir o escuchar.

El objetivo de lograr un funcionamiento de "un año" con pilas alcalinas 2xAA es conseguir que la corriente media del sistema sea < 50uA. Si lo hace, lo pone en años y frente a los efectos secundarios de las baterías, como la autodescarga y la vida útil de 7 años para las baterías domésticas.

La mejor manera de obtener un promedio inferior a <50uA es si su transceptor no necesita recibir. Si esto es cierto, puede "chirriar" los datos lo más rápido posible y poner el sistema en un modo de bajo consumo (digamos aproximadamente 10 uA) durante la mayor parte del tiempo. El TH12 , por ejemplo, transmite durante aproximadamente 10 ms, pero hay otra sobrecarga en el sistema relacionada con el tiempo de procesamiento y los tiempos de configuración del sensor involucrado. Los detalles se pueden resolver con una sonda de corriente y una hoja de cálculo:

A partir de ese tipo de análisis, puede calcular cuál será la vida útil (suponiendo que tenga una curva de descarga precisa para su batería).

Si necesita recibir datos en el lado de baja potencia (por ejemplo, para hacer un enrutador inactivo en una red de malla), entonces el estado del arte actual se enfoca en las técnicas de división de tiempo. Algunos sincronizan estrechamente la red, como las balizas 802.15.4, y otros usan un sistema "suelto" como ContikiMAC (que puede ser más fácil de implementar, especialmente si su hardware no tiene una base de tiempo estable).

Independientemente, mi experiencia muestra que estos métodos tienen un promedio de alrededor de 400 uA, lo que lo coloca en el tiempo de ejecución de "meses a tal vez un año" con 2xAA.

Colisiones :

Mi consejo: no te preocupes por ellos por ahora. En otras palabras, haga "aloha" (su opción n. ° 1) donde, si tiene datos, envíelos. Si choca, entonces tal vez vuelva a enviarlo. (esto depende de tus objetivos). Si no necesita asegurarse de que se reciban todas las muestras, simplemente inténtelo una vez y duerma de inmediato.

Descubrirá que el problema del consumo de energía es tan difícil que la única solución será una red que no transmita mucho. Si lo intentas, probablemente lo lograrás. Si no es así, siempre puedes volver a intentarlo más tarde.

Si necesita asegurarse de que todos los datagramas se transmiten, tendrá que hacer algún tipo de esquema ACK. En el mundo 6LoWPAN, puede usar TCP, que seguirá intentándolo hasta que se agote la batería. También hay CoAP que usa UDP y tiene un mecanismo de reintento (pero no promete entrega). Pero cada elección aquí tendrá un impacto en el tiempo de ejecución. Si está operando durante años, el impacto será en meses.

Su opción #2 está integrada en el hardware 802.15.4 como CCA. La idea es que el receptor se encienda durante 8 símbolos y devuelva verdadero o falso. Luego puede tomar una decisión sobre qué hacer a continuación. Puedes jugar con estos esquemas todo el día/semana. Pero cada vez que haces algo como esto, eliminas más semanas del tiempo de ejecución. Es por eso que sugiero comenzar simple por ahora. Funcionará bastante bien si está intentando largos tiempos de ejecución.

¡Tu enlace no funciona!
Me gustaría agregar a este Microchip XLP Estimator , que le mostrará el tiempo de ejecución esperado para varias configuraciones de baterías y estados/períodos de ejecución. Además, si todos los sensores son transceptores, podría implementar un esquema de 'redondo' o 'token-ring' donde el maestro le pide repetidamente al dispositivo 0 que norte "¿Cualquier cosa para mi?" El sensor espera su turno (digamos 10 ms), transmite y luego se apaga. Recomendaría usar algún tipo de suma de verificación CRC, para evitar aceptar datos distorsionados.

Puede que le interese JeeNodes, que es básicamente un Arduino Uno emparejado con un módulo de radio RFM-12B de HopeRF. Si escribe su código directamente en los "nodos" remotos, puede obtener fácilmente meses de un juego de baterías, dependiendo de sus sensores, etc.

Echa un vistazo a su sitio web, el consumo de energía es algo que está bien documentado. Una cosa ideal sobre esto es que puede usar bibliotecas arduino estándar para sus sensores, o usar los sensores en la tienda jeelabs y usar la biblioteca JeeLib que hace que todo sea muy fácil.

Hice un pequeño control remoto para una lámpara con un JeeNode v6 y apagué una batería Nokia vieja (alrededor de 1 Ah, pero probablemente menos ahora), ha estado funcionando durante 3 meses y el voltaje de la batería aún supera los 3.9v (es decir, todavía bastante lleno). Simplemente se sienta allí en modo de suspensión de baja potencia, despertándose cada pocos ms para verificar si los botones están presionados.

Compré los PCB en la tienda JeeLabs, pero obtuve todos los componentes de lugares como eBay, Element14, etc., así terminó siendo un poco más barato.

Con un poco de atención al diseño de la antena, aparentemente puede obtener unos cientos de metros fuera de ellos, línea de visión. Fácilmente obtengo cobertura en toda la casa con un simple cable vertical.

TASA DE DATOS "La tasa de datos también se ve afectada por la elección de la frecuencia de acuerdo con el teorema de Shannon-Hartley; puede meter más datos en una banda de frecuencia más alta". ¡¡¡Equivocado!!!

La tasa de datos tiene que ver con el ancho de banda, no con la frecuencia de la portadora. Puede tener una frecuencia portadora baja, pero un ancho de banda alto y una velocidad de datos alta.

FRECUENCIA PORTADORA La frecuencia portadora más baja es buena para el rango. Si la frecuencia se reduce a la mitad, el rango aumentaría cuatro veces. Pero el tamaño de la antena también aumentaría. Normalmente, las antenas son lamba/2 o lambda/4 (lambda es la longitud de onda en metros).

CONTENCIÓN DE CANAL Esto parece bastante obvio a primera vista, pero puede ser complicado. Como otros han señalado, la estrategia más simple sería despertarse y transmitir una vez y luego irse a dormir. Si el número de transmisores no es tan grande y la duración del sueño es mucho mayor que la duración de la transmisión, esto funcionaría. Pero debe estar preparado para perder algunos datos en raras ocasiones.