Construya una Red de Sensores Inalámbrica Económica para su Hogar
Este tutorial le enseñará a crear una red de módulos de sensores inalámbricos rentables. Muchos módulos inalámbricos listos para usar pueden ser demasiado caros para usar en múltiples unidades de sensores. Aunque los módulos Wi-Fi y Zigbee son populares y fáciles de usar, su coste puede hacer impracticable su uso en un array de sensores. Existen, sin embargo, módulos RF de bajo coste sin todas las características caras que funcionarán perfectamente para estos propósitos. La plataforma Arduino puede usar módulos de radio de gama baja para comunicarse fácil y fiablemente.
Una vez ensamblado el hardware, aprovechará la plataforma Raspberry Pi para enviar los datos al servicio Internet of Things de Xively donde puede rastrear los valores en el tiempo y disparar condiciones de umbral.
Reúna Componentes y Herramientas
Este proyecto incluye tres partes: dos unidades transmisoras y una unidad receptora. Los transmisores se componen de una placa Arduino, sensor y transmisor RF. La unidad receptora se compone de una placa Arduino, un receptor RF, un conversor de nivel lógico y una Raspberry Pi.
Hay una amplia gama de placas compatibles con Arduino que pueden usarse para este proyecto. El requisito mínimo para la placa es dos pines GPIO digitales y un pin analógico. Seleccione una placa compatible con Arduino que se ajuste a las necesidades de coste y simplicidad para este proyecto.
En este tutorial he usado un conjunto de placas Arduino Nano que encajan bien en una protoboard y son simples de programar. Sin embargo, las versiones de 5V del Arduino Pro Mini o Trinket también funcionarán bien y a un precio mucho menor. Estas requieren un poco más de experiencia para programar y usar. Elija sabiamente.
Receptor
- Raspberry Pi – Modelo B con fuente de alimentación, carcasa y tarjeta SD – Asegúrese de que los pines GPIO sean accesibles con la carcasa que elija
- Adaptador Wi-Fi compatible con Pi
- Arduino
- Cables jumper para protoboard
- Cables jumper macho-hembra
- Conversor de nivel lógico
- Receptor RF de 434 MHz
- Media protoboard
Transmisores (dos unidades)
- 2 x Arduino
- 2 x Sensores de temperatura/humedad
- 2 x Transmisores RF de 434 MHz
- 2 x Media protoboard
- 2 x Jack de barril DC 2.1mm compatible con protoboard
- 2 x Adaptador de alimentación 9V con 2.1mm x 5
- Cables jumper para protoboard
Herramientas
- PC/Mac con IDE de programación Arduino instalado
- Cable USB para programar placas Arduino
- Teclado y Ratón USB. Ya sea combinados o con un hub para que ambos puedan usarse con un solo puerto USB.
- El paquete fuente asociado a este tutorial en su estación de trabajo de programación
Ensamble los Transmisores
Los transmisores son circuitos relativamente simples. Solo un pin se usa para recuperar información del sensor de temperatura y humedad y un pin para enviar esos datos al transmisor RF. El diagrama de protoboard se muestra a continuación.
La alimentación de 9V se conectará al conector de barril haciendo los rails inferiores 9V. El regulador de potencia en el Arduino producirá 5V que es seguro para usar con la radio y sensores, el rail superior del diagrama.
El sensor viene con una resistencia de 10k ohm que conecta el pin de datos a la alimentación como resistencia pull-up mientras otro cable lo conecta al GPIO D3.
Tenga cuidado de seguir la configuración siguiente y asegúrese de revisar la hoja de datos del sensor y módulo RF para garantizar que los componentes estén posicionados correctamente en la protoboard y los pines de alimentación, tierra y señal estén conectados a los pines correctos. El diagrama Fritzing está incluido en el paquete fuente para más detalle.
La antena es una parte importante de la placa porque el módulo RF no tiene antena integrada. Usé un cable jumper hembra-macho de 6 pulgadas enchufado en la protoboard y funcionó lo suficientemente bien para permitir recepción desde todas las partes de mi casa y un poco fuera. Como se nota en el diagrama, 6.5 pulgadas es óptimo para esta antena si necesita alcance adicional.
Una nota sobre uso RF. Hay diferentes leyes y reglas sobre uso de frecuencias en diferentes países. Asegúrese de cumplir estas reglas antes de transmitir. Dicho esto, las señales de estos módulos apenas son lo suficientemente potentes para salir de su casa. En condiciones perfectas, estos módulos pueden transmitir hasta 500 pies.
Descargue Bibliotecas para Componentes
El transmisor usa dos bibliotecas que no vienen incluidas con el IDE de Arduino. Descargue las bibliotecas como se describe a continuación y descomprímalas en su directorio de sketches en un subdirectorio llamado Libraries.
- Descargue el paquete fuente VirtualWire para este tutorial y descomprima la carpeta wirelesstransmitter en su carpeta de sketches de Arduino
- En la carpeta wirelesstransmitter cree una carpeta llamada Libraries
- Descargue la última versión del código VirtualWire, 1.23 a fecha de esta escritura, desde la página del proyecto
- Extraiga la carpeta VirtualWire en la carpeta wirelesstransmitter/Libraries/ para tener otra subcarpeta llamada VirtualWire
- Descargue la biblioteca del sensor DHT desde su página github del proyecto
- Extraiga la carpeta DHT en la carpeta Libraries también. Ahora debería tener las dos carpetas de biblioteca requeridas DHT y VirtualWire en su carpeta wirelesstransmitter/Libraries.
Programe la Placa Arduino
Este tutorial asume que tiene algo de experiencia con Arduino y cómo programarlos usando el IDE de Arduino. Si no, hay muy buenas instrucciones en el sitio oficial de Arduino.
- Abra el sketch wirelesstransmitter del archivo fuente en el IDE de Arduino y guarde una copia local
- Asegúrese de que el Arduino NO esté conectado a la alimentación vía el conector de barril
- Conecte la placa a su estación de trabajo de programación con un cable USB apropiado
- Establezca el tipo de placa a su Arduino seleccionado bajo el menú Tools > Board
- Establezca el puerto serie al puerto detectado cuando conectó la placa Arduino bajo el menú Tools > Port
- Asegúrese de que la definición MYID esté establecida en 1 y que TRANSPIN y DHTPIN estén correctamente establecidos en los pines conectados al módulo transmisor RF y sensor DHT respectivamente. Si construyó su placa según el diagrama anterior, todo esto debería estar ya configurado. Vea el ejemplo de código a continuación.
- Asegúrese de que UNIT esté configurado correctamente para su preferencia Fahrenheit o Celsius.
| 12345 |
#define MYID 1 //el número ID de esta placa. Cambie esto para cada placa que flashee.
//El ID se transmitirá con los datos para saber qué dispositivo está transmitiendo
#define TRANSPIN 3 //en qué pin transmitir
#define DHTPIN 4 // en qué pin está conectado el DHT
#define UNIT 0 // 0 para Fahrenheit y 1 para Celsius
|
La definición MYID es un ID numérico que el transmisor usa para identificarse de forma única. Como tendrá múltiples transmisores en diferentes ubicaciones es importante tener un ID único para cada uno. Este número se usará nuevamente cuando configure el script del receptor.
- Verifique el código pulsando Control-R para asegurar que las bibliotecas se incluyen y compilan correctamente.
- Suba el código a la placa haciendo clic en el botón Upload en la barra de herramientas.
- Abra la ventana Serial Monitor pulsando Control-Shift-M
La ventana Serial Monitor reinicia el Arduino así que debería ver una línea de código en pantalla que se parece a:
| 12 |
Humidity: 44.00 % Temperature: 60.80 *F
Sending Message: ID:1:TS:23143:TF:60.79:RH:44.00
|
El mensaje está compuesto de pares Nombre:Valor que el receptor manejará. El transmisor leerá y transmitirá su señal en un intervalo aleatorio largo. Los sensores no cambian mucho ni frecuentemente, así que transmitir más a menudo que una vez por minuto no añade valor. El tiempo de espera aleatorio permite que múltiples sensores coexistan.
Incluso si hay colisión y se pierde la señal de ambos transmisores, el intervalo aleatorio asegurará que sus próximas transmisiones no se solapen. La semilla aleatoria para este intervalo se establece desde un analogRead en un puerto analógico sin usar que devolverá valores aleatorios para asegurar que no dos transmisores estén en el mismo patrón.
El código de ejemplo que genera la salida anterior está configurado para usar Fahrenheit. Puede ver el identificador TF:60.79 en la cadena del mensaje indicando que mi laboratorio está de hecho justo por debajo de 61 grados. Sin embargo la humedad relativa RH:44.00 es un cómodo 44%. Uno podría inferir del ambiente fresco y húmedo que mi laboratorio está en mi sótano. Uno podría tener razón.
Los transmisores están configurados para esperar 2 a 5 minutos entre transmisiones por defecto. Si desea acelerar esto para propósitos de depuración, modifique el valor delay() al final del sketch a algo como 5000 (ms). Se recomienda encarecidamente que lo cambie de nuevo y vuelva a subir el código a sus transmisores cuando esté listo para uso a tiempo completo.
- Construya la segunda placa transmisora
- Modifique el sketch del transmisor para que la definición MYID esté establecida en 2
- Suba el código a la segunda placa
- Abra la ventana Serial Monitor pulsando Control-Shift-M y verifique que la salida se parece a la primera placa transmisora con la excepción de que el mensaje transmitido comienza con ID:2
Construya la Placa Receptora
La placa receptora será responsable de recibir el mensaje de transmisión en su componente Receptor RF y enviar ese mensaje por cables serie a la Raspberry Pi. La placa Arduino se usa para recibir la señal por un par de razones muy importantes. El código VirtualWire usa la naturaleza en tiempo real del Arduino para gestionar la modulación y demodulación de la señal.
Esto significa que la unidad receptora necesita operar a la misma frecuencia. Además, hay poco margen para jitter en el procesador receptor, al que la Raspberry Pi es propensa, debido a su sistema operativo no en tiempo real y con preempción. Comparando los costes de un Arduino Pro Mini más el módulo receptor RF con el de un módulo Zigbee que podría hablar directamente con la Raspberry Pi reveló que usar un Arduino externo seguía siendo bastante económico.
En este punto NO conecte los cables de 5V y tierra de la Pi a la protoboard. Mantenga los cables jumper a mano, pero no quiera alimentar el Arduino tanto desde el puerto USB como desde la Raspberry Pi.
Tenga en cuenta que el conversor de nivel lógico en la lista de materiales arriba no es exactamente el mismo que el de la biblioteca Fritzing, pero los pinouts están bien etiquetados, solo en lugares diferentes. Por favor asegúrese de que los cables correctos estén conectados a los pines correctos en el conversor de nivel lógico real.
Este componente es necesario para convertir la señal serie de 5V del Arduino a una señal serie de 3.3V de la Raspberry Pi y no dañar la Pi. Vea la imagen de abajo para ayuda adicional.
Para más detalle: Construyendo una Red de Sensores Inalámbrica en su Hogar
Proceso de manufactura
- Sensor Inalámbrico Fiable para Entradas Largas – Integración Fácil con Raspberry Pi
- Desplegar red sensores inalámbrica en molino harinero siglo XVIII
- Transferencia Inalámbrica de Datos Magnéticos con Arduino y Sensor 3D Infineon
- Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
- Construye un estadiómetro digital: Controla tu altura con Arduino y sensor láser
- Integración del sensor de huella capacitivo DFRobot (ID809) con Arduino o ESP8266
- Adaptadores USB-BLE MIDI Inalámbricos: Conectividad Sin Cables para Músicos
- Redes de Sensores Inalámbricos de Largo Alcance Robustas para Monitoreo Remoto de Datos
- Cambio de Redes de Sensores Inalámbricos: 6 Consideraciones Clave para Migración Tecnológica
- Entendiendo redes de sensores inalámbricas de baja potencia: Impulsando soluciones IoT eficientes
- Despliegue y Gestión de Redes de Sensores Inalámbricos en la Empresa