La mejor manera de enviar lecturas de sensores a través de una simple conexión de RF

5

Compré un par de 315MHz TX / RX . Quiero usar estos para conectar un ATTiny85 alimentado por batería a una estación base Arduino. El ATTiny necesita despertarse regularmente y enviar una lectura del sensor a la estación base.

En teoría, debería poder simplemente escribir datos en el TX y leerlos desde el módulo RX. Sin embargo, ¿cómo me aseguro de escribir / leer a la velocidad correcta? ¿Qué código necesito usar para transmitir a una velocidad particular (bytes / segundo)? ¿Cuál es la mejor manera de hacer la corrección / detección de errores?

Dado que quiero que el transmisor funcione con baterías, ¿podría usar un transistor para apagar el VCC del módulo TX cuando está inactivo? ¿Qué recibirá el módulo RX cuando se apague el módulo TX?

    
pregunta mchr

7 respuestas

10

Esos módulos básicamente hacen que el pin del receptor se mueva en respuesta a cómo se maneja el pin del transmisor. No saben nada de lo que crees que significa mover el pin, y no contienen un UART. Más detalles no fueron inmediatamente obvios sin excavar. Ese es tu trabajo, así que no me molesté en ir más lejos. Debe proporcionar un enlace a la hoja de datos, no a la página de presentación del producto.

Estos módulos funcionan en la modulación AM. La breve reseña dice ASK, pero es probable que solo esté activada / desactivada el transmisor (que técnicamente es un subconjunto de ASK). El problema con este esquema es que el receptor no puede saber inherentemente el nivel cuando el transmisor está encendido. Por lo tanto, lo más probable es que mire las intensidades de señal recibidas recientemente y elija un valor en el medio para decidir entre activar y desactivar. Esto se denomina división de datos .

Si no está transmitiendo regularmente los complementos, el receptor pierde la pista de qué niveles están activados y desactivados, y ya no puede cortar los datos correctamente. Esto generalmente se trata de dos maneras. Primero, se envía un preámbulo . Esto contiene un montón de complementos en una rápida sucesión para que el receptor pueda establecer un buen umbral de segmentación de datos. Se espera que algunos o todos estos bits no sean interpretados correctamente por el receptor, por lo que, por lo tanto, no son realmente "recibidos". La segunda estrategia es enviar datos para que siempre haya un encendido y apagado recientes para que el receptor haga referencia. Algunos receptores, particularmente los baratos que hacen la división de datos en forma analógica, simplemente cortan la intensidad de señal recibida media filtrada de paso bajo. Para tales receptores, no solo necesita variar entre encendido y apagado con frecuencia, sino que el promedio debe estar cerca de 1/2 encendido.

Esta es la razón por la cual la codificación de Manchester es tan popular para dichos enlaces de RF. No voy a entrar en codificación Manchester aquí ya que esto es bien conocido y no tendrá ningún problema en encontrar mucha información al respecto. Una buena característica del código de Manchester es que promedia a 1/2 en cada bit. Un bit se divide en dos mitades. On-off puede significar 1 y off-on 0. Manchester es probablemente el esquema de codificación más fácil de hacer.

Puede utilizar un UART, pero debe tener cuidado y perderá algo de ancho de banda (energía de la batería). Mira lo que un UART transmitirá. Si envía los caracteres inmediatamente seguidos, cada uno tomará 10 bits más. Habrá un bit de inicio, 8 bits de datos y un bit de parada. Los bits de inicio y parada son siempre de polaridad opuesta. Puede hacer arreglos para usar códigos en los 8 bits restantes que tienen un número igual de 0 y 1 para mantener el umbral del cortador de datos en el medio. Esto significa que solo puedes enviar 4 bits de información en cada carácter UART. También tendrás que pensar cuidadosamente en el preámbulo.

En general, debe suponer que cualquier transmisión de RF tiene una posibilidad significativa de errores de bits. Esto significa que algún tipo de suma de control es una buena idea. Puede enviar datos en paquetes e incluir algo así como una suma de comprobación CRC de 16 o 20 bits con cada paquete. Si el paquete no se recibe intacto, se descarta como si nunca hubiera ocurrido.

El sistema también tiene que lidiar con el ruido aleatorio recibido cuando se apaga el transmisor. En ese caso, el umbral del receptor se reducirá y comenzará a dividir los datos independientemente del ruido aleatorio que capte. Con un preámbulo y una suma de comprobación adecuadamente diseñados, puede hacer que la posibilidad de que el ruido aleatorio se vea como datos válidos sea extremadamente pequeña.

    
respondido por el Olin Lathrop
2

He terminado usando una biblioteca de codificación de Manchester. La última versión de esta biblioteca se ha publicado aquí: enlace

Los detalles sobre mi uso de esta biblioteca se pueden ver aquí: enlace

    
respondido por el mchr
1

Esta pregunta es directamente dirigida por el Nodo malvado / Wicked Receiver Shield que hago (divulgación) en Wicked Device . Por favor, echa un vistazo a ellos. Constituyen un enlace de radio ASK unidireccional de bajo costo a 433 MHz para obtener hasta cuatro lecturas de sensores analógicos (por nodo maligno) de forma inalámbrica a su Arduino a intervalos prescritos. Utilicé un ATTiny24A en lugar de un ATTiny85 principalmente para las entradas analógicas adicionales. El software utiliza los modos de reposo de forma extensiva y el nodo malvado está diseñado para funcionar con una batería de 9V durante varios meses.

    
respondido por el vicatcu
0

Recomiendo mirar la biblioteca VirtualWire, que implementa la transmisión de RF para pares transmisores / receptores de rango ISM con salida ASK. Consulte enlace . Lo he utilizado con éxito para recopilar datos de sensores inalámbricos distribuidos por mi casa.

    
respondido por el Dmitry Dzhus
0

Dependiendo de cuánta interoperabilidad con los dispositivos existentes desea, pero si desea mucho, enlace podría valer la pena mirar. Es solo un enlace serial Bluetooth muy barato y casi cualquier computadora con bluetooth podría leerlo. Bluetooth también tiene un excelente rendimiento (relativamente) incluso en entornos con comunicaciones de 2.4GHz muy ruidosas.

    
respondido por el nemik
0

Echa un vistazo aquí:

enlace

La mayoría de las respuestas que busca en el documento.

    
respondido por el David
0

Aunque el cartel original ya encontró una solución. Solo añadiré información para las personas que terminen aquí. Básicamente hay 2 formas establecidas para enviar datos inalámbricos entre los de arduino / Attiny: VirtualWire y Manchester. Ambos tienen bibliotecas disponibles. Entiendo que Virtualwire solo puede enviar caracteres (aunque existe una solución), Manchester puede enviar números. Al usar la biblioteca de Manchester, asegúrate de tener la última. Tanto VirtualWire como Manchester se pueden poner en un Attiny. Con respecto a encender o apagar el transmisor para ahorrar el uso de la batería, le sugiero que ponga el Attiny en reposo y cuando se despierte, encienda la fuente de alimentación del transmisor a través de un transistor (atornille la clavija a la base, aumente, etc.) . Hay un ejemplo (probablemente más de uno) en instructables: enlace

    
respondido por el user69308

Lea otras preguntas en las etiquetas