Taula de continguts:
- Pas 1: Consideracions teòriques
- Pas 2: Implementació pràctica: el maquinari
- Pas 3: Implementació pràctica: programari
- Pas 4: Resultats de les proves
- Pas 5: Pensaments finals
Vídeo: Xarxa de sensors sense fils de baix cost en banda de 433 MHz: 5 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Moltes gràcies a Teresa Rajba per haver-me acceptat amablement d’utilitzar les dades de les seves publicacions en aquest article
* A la imatge superior: les cinc unitats de sensor-emissor que he utilitzat per provar
Què són les xarxes de sensors sense fils?
Una definició senzilla seria: les xarxes de sensors sense fils es refereixen a un grup de dispositius electrònics distribuïts en una àrea determinada per supervisar i registrar dades ambientals, que es transmeten sense fils a una ubicació central per ser processats i emmagatzemats.
Avui en dia les xarxes de sensors sense fils es poden utilitzar de diverses maneres, a continuació, en trobem alguns exemples:
- Àrees de vigilància ecològica de boscos, rius, llacs, mars i oceans;
- Possibilitat d'alerta en cas d'atacs terroristes, químics, biològics, epidèmics;
- Sistemes de control per a nens, gent gran, pacients o persones amb necessitats especials;
- Sistemes de vigilància en agricultura i hivernacles;
- Sistema de control de previsions meteorològiques;
- Vigilància del trànsit urbà, escoles, aparcaments;
I moltes, moltes altres aplicacions.
En aquest article vull mostrar els resultats d’un experiment amb xarxes de sensors sense fils que s’han utilitzat per controlar dades de temperatura i humitat, amb una variació lenta i relativament predictible. Per a aquest experiment, vaig optar per utilitzar sensors-enviadors que vaig crear pel meu compte mitjançant mòduls assequibles. El receptor també és DIY, la comunicació és unidireccional (a la banda de ràdio de 433 MHz), és a dir, que els sensors només transmeten les dades i la ubicació central només rep. No hi ha comunicació entre els sensors i del receptor als sensors.
Però, per què escollir utilitzar diversos transmissors i només un receptor? Viouslybviament, el primer motiu seria "fer-ho senzill". Com més senzill sigui el muntatge, menys probabilitats de fallar és definitivament més fàcil reparar i substituir els components individuals en cas de mal funcionament. El consum d’energia també és inferior, les bateries duraran més (els sensors només es consumiran mentre es realitza la supervisió i la recepció, la resta del temps el dispositiu estarà en mode de repòs profund). El fet que sigui senzill fa que el dispositiu també sigui barat. Un altre aspecte a tenir en compte és l’àrea de cobertura. Per què? És molt més fàcil construir i utilitzar un receptor sensible que tenir un receptor sensible i un transmissor potent tant als sensors com al mòdul central (això és necessari per a una bona comunicació bidireccional). Amb un receptor sensible i de bona qualitat és possible rebre dades des de llargues distàncies, però emetre dades per a la mateixa distància requereix una elevada potència d’emissió i això comporta uns costos elevats, un consum d’electricitat i (no oblidem) la possibilitat d’envair la potència màxima legal del transmissor a la banda de 433 MHz. Mitjançant l’ús d’un receptor de qualitat mitjana, econòmic però amb una antena d’alta qualitat (fins i tot de bricolatge) i transmissors econòmics amb una antena de bona qualitat, podem obtenir resultats excel·lents a una fracció del cost de les xarxes de sensors sense fils existents.
Pas 1: Consideracions teòriques
La idea de construir una xarxa de sensors sense fils per controlar la temperatura i la humitat de l’aire i del sòl en diferents zones d’un hivernacle em va venir al cap fa molt de temps, gairebé deu anys. Volia construir una xarxa d’un fil i utilitzar sensors de temperatura i humitat d’un fil. Malauradament, fa 10 anys els sensors d’humitat eren rars i costosos (tot i que els sensors de temperatura eren generalitzats) i, com que estendre els cables per tot l’hivernacle no semblava una opció, vaig renunciar a la idea amb força rapidesa.
Ara bé, ara la situació ha canviat radicalment. Podem trobar sensors barats i de bona qualitat (temperatura i humitat), i també tenim accés a transmissors i receptors barats de la banda de 433 MHz. Només hi ha un problema: si tenim més sensors (diguem-ne 20), com solucionem les col·lisions (tingueu en compte que es tracta d’una comunicació unidireccional), és a dir, superposant l’emissió de 2 o més sensors? Mentre buscava una possible solució, em vaig trobar amb aquests articles molt interessants:
El sensor sense fils convergeix el model basat en el procediment d’operacions aleatòries: per RAJBA, T. i RAJBA, S.
i
La probabilitat de col·lisions a la xarxa de sensors sense fils amb enviament aleatori - per RAJBA S. i RAJBA. T
Bàsicament, els autors ens mostren que la probabilitat de col·lisions en una xarxa de sensors sense fils es pot calcular si els paquets s’emeten en determinats punts de temps segons una distribució poissònica (exponencial).
Un extracte del document anterior enumera les característiques de la xarxa estudiada.
- un gran nombre d'unitats sensor-emissores N;
- les unitats del sensor-emissor segueixen sent completament independents i l’encesa o l’apagada no influeixen en el funcionament de la xarxa;
- totes les unitats sensor-emissores (o una part d'elles) poden ser mòbils sempre que estiguin situades dins de la gamma de ràdio de l'estació receptora;
- els paràmetres físics que canvien lentament se sotmeten a mesures, cosa que significa que no cal transmetre les dades amb molta freqüència (per exemple, cada diversos minuts o diverses desenes de minuts);
- la transmissió és de tipus unidireccional, és a dir, des de la unitat del sensor-emissor fins al punt de recepció a intervals de temps mitjans de T. La informació es transmet al protocol a tpàg temps de durada;
- qualsevol sensor seleccionat comença a transmetre aleatòriament a les hores de Poisson. PASTA (Poisson Arrivals See Time Averages) s’utilitzarà per justificar l’enviament de sondes a les èpoques de Poisson;
- totes les unitats del sensor-emissor romanen aleatòriament independents i transmetran la informació en un moment de t seleccionat aleatòriamentpàg durada i de T temps mitjà de repetició;
- si un o més sensors comencen a transmetre mentre el protocol de tpàg la durada es transmet des d’un altre sensor, una situació d’aquest tipus s’anomena col·lisió. La col·lisió fa que l'estació base central no pugui rebre la informació de manera correcta.
Encaixa gairebé perfectament amb la xarxa de sensors que vull provar …
Gairebé.
No dic que entengués completament les matemàtiques del document, però a partir de les dades presentades i de les conclusions he pogut comprendre una mica de què es tracta. L'únic és que un valor utilitzat al diari em va preocupar una mica:). És la variable tpàg - durada de la transmissió de dades que se suposa que és de 3,2x10-5 s. Per tant, el temps de transmissió de les dades recollides seria de 3,2 nosaltres. Això no es pot fer a la banda de 433 MHz. Vull fer servir el commutador rcs o el cap de ràdio per programar els sensors del transmissor. Estudiant els codis de les dues biblioteques, vaig arribar a la conclusió que el temps de transmissió més petit seria de 20 ms, molt per sobre del valor de 3,2 nosaltres. Amb els transmissors de 2,4 GHz és possiblepàg temps tan petit … però aquesta és una altra història.
Si apliquem la fórmula proposada pels autors d’aquest article, el resultat serà:
Dades inicials (un exemple):
- Nombre de sensors N = 20;
- Durada de la transmissió de dades tpàg= 20x10-3 s (0,020 s)
- Interval mitjà de transmissió T = 180 s
La fórmula:
La probabilitat de col·lisió a l'interval T és
si tenim en compte les dades inicials, la probabilitat de col·lisió a l'interval T serà de 0,043519
Al meu parer, aquest valor, que indica la probabilitat de tenir 4,35 col·lisions per cada 100 mesures, és bastant bo. La probabilitat podria millorar si augmentem el temps mitjà de transmissió, de manera que amb un valor de 300 s tindríem una probabilitat de 0,026332, és a dir, 2,6 col·lisions per cada 100 mesures. Si considerem que podem esperar pèrdues de dades de paquets de totes maneres durant el funcionament del sistema (depenent de les condicions meteorològiques, per exemple), aquest nombre és realment excel·lent.
Volia fer una simulació d’aquest tipus de xarxa, però també una mena d’assistent de disseny, així que vaig fer un petit programa en C, podeu trobar el codi font a github (també un binari compilat que s’executa a la línia d’ordres de Windows - llançament).
Dades d'entrada:
- sensor_number: el nombre de sensors a la xarxa;
- nombre_mides: nombre de mesures a simular;
- average_transmission_interval: temps mitjà entre transmissions de dades successives;
- transmission_time: la durada efectiva de la transmissió de dades.
Sortida:
- el temps màxim de mesura calculat;
- la llista de col·lisions entre dos sensors;
- nombre de col·lisions;
- probabilitat teòrica de les col·lisions.
Els resultats són força interessants:)
Amb la teoria suficient, no voldria insistir més en la part teòrica, els articles i el codi font són força eloqüents, així que és millor que vagi a la implementació pràctica i efectiva de la xarxa de sensors sense fils i als resultats de les proves.
Pas 2: Implementació pràctica: el maquinari
Per als transmissors-sensors necessitarem els components següents:
- Microcontrolador ATtiny85 1,11 $;
- Presa de circuit integrat 8DIP 0,046 $;
- Sensor de temperatura / humitat DHT11 0,74 $;
- Mòdul transmissor H34A a 433 MHz 0.73 $;
- Suport de bateria 4xAA amb interruptor 1 $;
Total 3,63 $;
El receptor utilitzat per a les proves és un Arduino UNO (només per fer proves) i un mòdul de recepció H3V4F (0,66 $) amb una antena d’arc barata (0,32 $).
Esquemes sensor-emissor
Les unitats transmissores-sensor s’alimenten amb bateries de 3 xAA i 1,5 V (al quart compartiment del suport de la bateria hi ha el conjunt electrònic). Com podeu veure, la font d’alimentació del transmissor i el sensor de temperatura-humitat estan connectats al pin PB0 del microcontrolador (el transmissor i el sensor s’alimenten quan el pin està configurat a HIGH). Per tant, quan el microcontrolador està en mode de repòs profund, pot arribar a un consum actual de 4,7 uA. Tenint en compte que el temps d’activació del sensor-transmissor seria d’uns 3 s (mesura, transmissió, etc.) i el temps mitjà entre transmissions de 180 s (com l’exemple del capítol anterior), les bateries haurien de resistir força. Amb algunes bateries alcalines de bona qualitat (és a dir, 2000 mAh), l’autonomia podria superar els 10 mesos segons es calcula a omnicalculator.com (on el consum de corrent total és: sensor - 1,5 mA, mòdul transmissor - 3,5 mA i microcontrolador ATtiny85 - 5 mA, total 10 mA).
A la foto següent podeu veure el conjunt sensor-emissor gairebé acabat.
A continuació es mostra la foto de la unitat receptora de prova.
Pas 3: Implementació pràctica: programari
El programari carregat que s’executa al microcontrolador attiny85, el component principal de les unitats del sensor-emissor, té el propòsit de llegir les dades proporcionades pel sensor, convertir-les per ser transmeses per ràdio i transmetre-les dins dels marcs de temps de Poisson (distribució exponencial o PASTA - Arribades de Poisson Veure mitjanes de temps). A més, mitjançant una funció senzilla, controla l’estat de les bateries i emet un avís si ja no es proporciona la tensió necessària per al sensor. El codi font està disponible a github. El codi del receptor de prova és molt senzill. Ho publico a continuació.
// biblioteca rcswitch modificada de https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// el codi és una versió modificada a partir d’exemples de la biblioteca rcswitch original #include RCSwitch mySwitch = RCSwitch (); dades llargues sense signar = 0; configuració nul·la () {Serial.begin (9600); mySwitch.enableReceive (0); // Receptor en interrupció 0 => que és el pin número 2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // sortida (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); humitat int = bitExtracted (dades, 7, 1); // 7 bits menys significatius des de la posició 1: primer bit més a la dreta int temperature = bitExtracted (dades, 7, 8); // següents 7 bits de la posició 8 a la dreta i així successivament int v_min = bitExtracted (dades, 1, 15); int packet_id = bitExtracted (dades, 3, 16); // 3 bits: 8 identificadors de paquets de 0 a 7 int sensor_id = bitExtracted (dades, 6, 19); // 6 bits per a 64 identificadors de sensor: total de 24 bits Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatura); Serial.print (","); Serial.print (humitat); Serial.println (); mySwitch.resetAvailable (); }} // codi de https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bit Extret (número llarg sense signar, int k, int p) {return (((1 (p - 1)));}
He intentat incloure tants comentaris com sigui possible per facilitar la comprensió.
Per a la depuració, he utilitzat la biblioteca de programari de sèrie i la placa de desenvolupament attiny85 amb el programador USBasp (vegeu també la meva informació sobre això). L'enllaç sèrie s'ha fet amb el convertidor de sèrie a TTL (amb un xip PL2303) connectat als pins doblegats (3 i 4) de la placa de desenvolupament (vegeu la imatge següent). Tot plegat ha estat d’una inestimable ajuda per completar el codi.
Pas 4: Resultats de les proves
He creat 5 unitats de sensor-emissor que recopilen i envien valors mesurats pels sensors DHT11. Vaig enregistrar i desar mesures, amb l'ajut del receptor de proves i un programa d'emulació de terminal (foxterm), durant tres dies. Vaig triar un interval de 48 hores per estudiar. No m'interessaven necessàriament els valors mesurats (el sensor 2, per exemple, em mostra valors equivocats), sinó el nombre de col·lisions. A més, el receptor va col·locar els sensors molt a prop (a 4-5 m) per eliminar altres causes de pèrdua de paquets. Els resultats de la prova s'han desat en un fitxer cvs i s'han penjat (mireu el fitxer següent). També he penjat un fitxer Excel basat en aquest fitxer CSV. Vaig fer algunes captures de pantalla per mostrar-vos l'aspecte d'una col·lisió (per descomptat, a les meves proves), també vaig afegir comentaris a cada captura de pantalla.
Us podeu preguntar per què no he utilitzat un servei de carregador de dades, per exemple ThingSpeak. El cas és que tinc molts registres, molts sensors i dades que arriben sovint a intervals irregulars, i els serveis IoT en línia només permeten dades en un nombre determinat de sensors i només a intervals força grans. Penso en el futur instal·lar i configurar el meu propi servidor IoT.
Al final, 4598 mesures en 5 unitats de sensor-emissor (aproximadament 920 / sensor) van donar lloc a un total de 5 col·lisions durant un període de 48 hores (0,5435 col·lisions / 100 mesures). Fent algunes matemàtiques (utilitzant el programa wsn_test amb dades inicials: 5 sensors, temps mitjà 180 s, temps de transmissió 110 ms), la probabilitat de col·lisió seria de 0,015185 (1,52 col·lisions / 100 mesures). Els resultats pràctics són encara millors que els resultats teòrics, oi?:)
De tota manera, també hi ha 18 paquets perduts en aquest període, de manera que les col·lisions no importen massa en aquest sentit. Per descomptat, la prova s’ha de dur a terme durant un període de temps més llarg per obtenir els resultats més concloents, però al meu entendre és un èxit fins i tot en aquestes condicions i confirma plenament els supòsits teòrics.
Pas 5: Pensaments finals
Aplicació immediata
En un gran hivernacle es conreen diversos conreus. Si el reg es realitza manualment sense cap control climàtic, sense cap automatització, sense registres de dades, hi ha un risc excessiu o inferior al reg i, a més, el consum d’aigua és elevat, no hi ha proves d’optimització del consum d’aigua, hi ha risc per als cultius a general. Per evitar-ho, podem utilitzar una xarxa de sensors sense fils:)
Els sensors de temperatura, els d’humitat de l’aire i els d’humitat del sòl es poden col·locar a l’hivernacle i, amb l’ajut de les dades transmeses, es poden fer diverses accions: vàlvules elèctriques d’arrencada i parada per deixar fluir l’aigua allà on es necessita, ventiladors elèctrics d’arrencada i aturada. per reduir la temperatura en diferents àrees, calentar els escalfadors d’arrencada-parada segons sigui necessari i totes les dades es poden arxivar per a futures anàlisis. A més, el sistema pot proporcionar una interfície web accessible a tot arreu i alarmes de correu electrònic o SMS en cas d’estats anormals.
Que segueix?
- Proves amb un nombre més gran de sensors;
- Proves en temps real amb sensors remots a la zona de cobertura;
- Instal·lació i configuració d’un servidor IoT local (per exemple, en un Raspberry Pi);
- Proves també amb transmissors (transceptors) -sensors a 2,4 Ghz.
així que … per continuar …:)
EXCLUSIÓ DE RESPONSABILITATS: L'ús de la banda de freqüència de 433 MHz a la vostra regió pot estar subjecte a les normatives de radiofreqüència. Comproveu la vostra legalitat abans de provar aquest projecte
Accèssit al concurs de sensors
Recomanat:
Comunicació sense fils LoRa de 3 km a 8 km amb dispositiu E32 de baix cost (sx1278 / sx1276) per a Arduino, Esp8266 o Esp32: 15 passos
Comunicació sense fils LoRa de 3 km a 8 km amb dispositiu E32 de baix cost (sx1278 / sx1276) per a Arduino, Esp8266 o Esp32: creo una biblioteca per gestionar EBYTE E32 basat en la sèrie Semtech de dispositius LoRa, un dispositiu molt potent, senzill i barat. Versió de 3 km aquí, versió de 8 km aquí. Poden treballar a una distància d'entre 3000 i 8000 m, i tenen moltes funcions i
Generador de formes d'ona de baix cost (0 - 20 MHz): 20 passos (amb imatges)
Generador de formes d'ona de baix cost (0 - 20 MHz): RESUM Aquest projecte prové de la necessitat d'obtenir un generador d'ones amb un ample de banda superior a 10 Mhz i una distorsió harmònica inferior a l'1%, tot això amb un preu de baix cost. Aquest document descriu el disseny d'un generador d'ones amb una amplada de banda superior
Comunicació sense fils mitjançant mòduls RF de 433 MHz i microcontroladors Pic. Part 2: 4 passos (amb imatges)
Comunicació sense fils mitjançant mòduls RF de 433 MHz i microcontroladors Pic. Part 2: a la primera part d’aquest instructiu, vaig demostrar com programar un PIC12F1822 amb el compilador MPLAB IDE i XC8, per enviar una cadena senzilla sense fils mitjançant mòduls TX / RX 433 MHz barats. El mòdul receptor es va connectar mitjançant un USB a UART TTL. anunci per cable
Adaptador de xarxa sense fils meteoritzat amb ampolla d’aigua: 4 passos (amb imatges)
Adaptador de xarxa sense fils meteoritzat mitjançant una ampolla d’aigua: mentre estava a Iraq, vaig utilitzar una ampolla d’aigua per meteoritzar el meu adaptador de xarxa sense fils. És un procediment senzill, però és molt eficaç. Viouslybviament, aquest instructiu serà el més útil per als serveis per a homes i dones del Pròxim Orient, però també pot ser útil
Refredador / suport per a portàtils de cost zero (sense cola, sense perforació, sense femelles i cargols, sense cargols): 3 passos
Refredador / suport per a portàtils de cost zero (sense cola, sense perforació, sense femelles i cargols, sense cargols): ACTUALITZACIÓ: SI US PLAU VOT PER EL MEU INSTRUCTABLE, GRÀCIES ^ _ ^ TAMBÉ POTS AGRADAR-ME ENTRADA A www.instructables.com/id/Zero-Cost-Aluminum-Furnace-No-Propane-No-Glue-/ O POTS VOTAR ELS MEUS MILLORS AMICS