Escola Politècnica Superior d'Enginyeria de Manresa Av. de les Bases de Manresa, 61-73. 08242 Manresa MEMÒRIA TÈCNICA 25 de Gener de 2021 Estimats Senyors: Trobeu adjunt la memòria tècnica del Projecte d’Integració de Sistemes “Sistema de Monitoratge i Control de Treballadors” Si necessiteu més informació, no dubteu en contactar amb nosaltres. Esperem saber de vosaltres el més aviat possible. tapeig.cat info@cmmm.com Índex 01. Introducció .................................................................................................................................. 3 02. Objectius ..................................................................................................................................... 4 03. Elecció de la PCB ......................................................................................................................... 5 04. SHT30: Temperatura i Humitat ................................................................................................... 6 Introducció .......................................................................................................................... 6 Performance del Sensor: ..................................................................................................... 6 Pin Assignment.................................................................................................................... 8 Serial Clock & Serial Data .................................................................................................... 9 Pin ADDR ............................................................................................................................. 9 Operacions i Comunicació amb el SHT30.......................................................................... 10 04.6.1. Inici de la Mesura .......................................................................................................... 10 04.6.2. Comandes de Mesura en Single Shot Data Acquisition Mode...................................... 11 04.6.3. Lectura dels Resultats de mesura en Single Shot Mode ............................................... 12 Protocol I2C ....................................................................................................................... 13 05. 04.7.4. Introducció: ................................................................................................................... 13 04.7.5. Descripció de Senyals .................................................................................................... 14 04.7.6. Protocol de Comunicació del Bus I2C ........................................................................... 14 04.7.7. Comunicació I2C en detall............................................................................................. 16 04.7.8. Protocol de programació pel bus I2C ............................................................................ 16 04.7.9. Escriptura en un dispositiu slave................................................................................... 17 04.7.10. Lectura des d’un dispositiu slave .............................................................................. 17 04.7.11. Codi Sensor Temperatura ......................................................................................... 18 Detector de So .......................................................................................................................... 20 Introducció ........................................................................................................................ 20 Sortides del sensor ............................................................................................................ 20 Funcionament del sensor .................................................................................................. 21 Configuració del Sensor .................................................................................................... 23 06. Bateria ....................................................................................................................................... 25 07. ESP-01 ....................................................................................................................................... 26 Hardware........................................................................................................................... 26 07.1.1. Descripció de Pins ......................................................................................................... 26 Software ............................................................................................................................ 27 07.2.1. ESP_CONNECT ............................................................................................................... 28 07.2.2. ESP_SEND ...................................................................................................................... 29 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 1 tapeig.cat info@cmmm.com 08. 07.2.3. ESP_GET_RSSI ............................................................................................................... 29 07.2.4. ESP_CLOSE .................................................................................................................... 30 POSICIONAMENT ...................................................................................................................... 31 Previ a l’Algoritme ............................................................................................................. 31 Algoritme de Posicionament v2 ........................................................................................ 32 Algoritme de Posicionament v1 ........................................................................................ 36 09. Tractament de Dades ................................................................................................................ 37 Recepció de les dades ....................................................................................................... 37 Extracció de dades ............................................................................................................ 38 10. 09.2.1. Temperatura i Humitat ................................................................................................. 38 09.2.2. Soroll ............................................................................................................................. 38 09.2.3. Bateria ........................................................................................................................... 38 09.2.4. Posicionament............................................................................................................... 39 Bases de Dades ......................................................................................................................... 40 Taules MYSQL .................................................................................................................... 40 10.1.1. Taula Temperatura i Humitat ........................................................................................ 40 10.1.2. Taula Soroll.................................................................................................................... 40 10.1.3. Taula Bateria ................................................................................................................. 41 10.1.4. Taula localització ........................................................................................................... 41 10.1.5. Taula Users .................................................................................................................... 41 10.1.6. Taula Mostres Posicionament ....................................................................................... 42 Mètode per pujar informació a la base de dades ............................................................. 42 11. Servidor Web ............................................................................................................................ 44 Gràfiques Web .................................................................................................................. 46 Certificat SSL ..................................................................................................................... 46 12. Disseny d’una Caixa................................................................................................................... 47 13. Conclusions ............................................................................................................................... 49 14. Bibliografia ................................................................................................................................ 50 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 2 tapeig.cat info@cmmm.com 01. Introducció A l'assignatura d'Enginyeria de Sistemes es va iniciar un projecte que pel desenvolupament d'un sistema capaç de recollir dades en temps real d'un conjunt de treballadors, el qual ha sigut desenvolupat a l'assignatura Integració de Sistemes. El prototip implementat es basa en un dispositiu portable dissenyat per ser portat com un penjoll que obtindrà informació sobre les condicions ambientals i monitorarà el posicionament de l'individu que l'estigui utilitzant. La proposta presentada intenta oferir una solució robusta i al mateix temps escalable en termes de poder ser modificada i ampliada sense complicacions. Aquest projecte pretén satisfer la necessitat de monitoratge dels treballadors, tant personal administratiu com miners o transportistes, d'una empresa minera. El monitoratge es basarà a saber en quines condicions es veuen sotmesos aquests treballadors, controlant les temperatures que s'exposen al dia a dia o als nivells d'humitat i soroll que estan sotmesos. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 3 tapeig.cat info@cmmm.com 02. Objectius L'objectiu principal del projecte és integrar la implementació que vam dur a terme en la passada assignatura d'Enginyeria de Sistemes. En la nostra continuació del projecte hem escollit canviar de microcontrolador per l'ATMEGA32u4 que llegirà de forma regular les dades proporcionades pels sensors de Temperatura i Humitat, i Soroll que seran enviades per l'ESP01 a una base de dades MYSQL. En aquesta base de dades també inclourem les dades obtingudes de les posicions dels nostres treballadors i el percentatge de bateria del nostre microcontrolador. El posicionament és una de les novetats respecte al projecte anterior. Haurem de mesurar mitjançant un sensor la temperatura i humitat de l'entorn de treball i processarne les dades de manera efectiva. També haurà d'haver en funcionament un detector de so per mesurar el soroll en decibels que es detecten en tot moment. A més tindrem l'ESP01 treballant recollint punts de posicionament per a més tard poder triangular-los i obtenir la posició dels treballadors. Els diferents mecanismes seran combinats per a poder-los enviar juntament amb el percentatge de la bateria, mitjançant la comunicació WIFI a la base de dades. Finalment es farà un disseny de la pàgina web per a poder mostrar tots aquests resultats per una interfície la qual sigui accessible per als superiors de l'empresa. També es realitzarà un disseny d'una maqueta en forma de penjoll per a incorporar el microcontrolador. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 4 tapeig.cat info@cmmm.com 03. Elecció de la PCB En el nostre projecte hem triat el microcontrolador ATMega32u4, ja que hem cregut que presentava uns majors avantatges respecte al prototip utilitzat amb l'ATMega328p. Els dos microcontroladors presentaven pràcticament les mateixes característiques tals com una memòria Flaix de 32kB o la freqüència d'oscil·lació. Malgrat això, l'autèntic motiu darrere l'elecció de la placa ha estat la comoditat de poder treballar i pujar els programes directament per l'entrada USB que disposa la placa amb l'ATMega32u4 incorporat. Aquesta millora ens ha permès no haver de requerir un segon Arduino per poder pujar els programes a través del mètode ISP (In-System Programmer). Els dos microcontroladors corresponen a la mateixa família i, per tant, la seva estructura es manté molt similar. Gràcies a això s'ha pogut reaprofitar gran part del codi que s'havia utilitzat en les proves del prototip inicial. Per altra banda, tot i ser una placa amb característiques similars tal com s'ha dit anteriorment, s'han hagut d'aplicar uns canvis al codi original per tal de poder treballar correctament amb ella. Un dels canvis més notables ha sigut la lectura de dades analògiques, havent de modificar el convertidor ADC, i la configuració de treball del microxip. El microxip ATMega328p usat en el prototip treballava amb una freqüència de 16 MHz, mentre que amb l'ATMega32u4 s'ha preferit treballar amb una freqüència inferior de 8 MHz per poder executar millor les operacions. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 5 tapeig.cat info@cmmm.com 04. SHT30: Temperatura i Humitat Introducció El SHT30 és un sensor digital de temperatura i humitat basat en el Sensirion SHT30 Sensor IC. Les seves funcionalitats inclouen el processament millorat del senyal, dues adreces i2c distintives i seleccionables per l’usuari i una velocitat de comunicació de fins a 1 MHz. Tenim diverses variants del sensor SHT30, tals com el SHT31 o SHT35; en el cas d’aquest treball ens dedicarem únicament al SHT30. Performance del Sensor: El sensor mostra el millor rendiment quan es fa servir dins del rang normal de temperatura i humitat recomanat des dels 5°C als 60°C i des del 20% RH al 80% RH (RH = Humitat Relativa), respectivament. A part, el sensor té una precisió de +/- 0.3ºC i un +/- 3% d’humitat relativa. L’exposició a llarg termini a condicions fora del rang normal, sobretot a nivells elevats d’humitat, pot compensar temporalment el senyal de RH (per exemple, + 3% de RH després de 60 hores mantingudes a > 80% de RH). Després de tornar a la normalitat, el rang de temperatura i humitat el sensor tornarà lentament a l'estat de calibratge per si mateix. A continuació es poden veure algunes gràfiques referents a la performance del sensor: Gràfica de la performance del Sensor referent a la humitat: Figura 1: Tolerància de RH a 25ºC Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 6 tapeig.cat info@cmmm.com Figura 2: Tolerància típica de RH sobre T Gràfica de la performance del Sensor referent a la temperatura: Figura 3: Precisió de la Temperatura en el sensor Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 7 tapeig.cat info@cmmm.com Pin Assignment El SHT30 consta de 8 pins els quals en aquest projecte connectem al microcontrolador Arduino: Pin Nom Comentaris 1 SDA Serial Data (input / output). 2 ADDR Address pin (input). S’ha de connectar a un 1 o 0 lògic, no es pot deixar flotant. 3 ALERT Indica la condició d’alarma (output). S’ha de deixar obligatòriament flotant en el cas que no es faci servir aquest pin. 4 SCL Serial Clock (input / output). 5 VDD Supply Voltage (input). 6 nRESET Reset pin active low (input). S’ha de deixar obligatòriament flotant en el cas que no es faci servir aquest pin. 7 R No té cap funció elèctrica. S’ha de connectar a VSS. 8 VSS Terra. Figura 4: Esquema de pins del SHT30 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 8 tapeig.cat info@cmmm.com Serial Clock & Serial Data El SCL s'utilitza per sincronitzar la comunicació entre microcontrolador i el sensor. La freqüència del clock es pot triar lliurement entre 0 i 1000 kHz. El pin SDA s'utilitza per transferir dades del sensor (input o output). La comunicació amb freqüències de fins a 400 kHz ha de complir l'estàndard I2C “Fast Mode”. S’admeten freqüències de comunicació de fins a 1 Mhz. Les dues línies SCL i SDA són input/output amb díodes a VDD i VSS. Han d'estar connectats a resistències externes de pull-up tal i com es mostra en la següent imatge: Figura 5: Circuit d’aplicació típic. Pin ADDR Mitjançant el cablejat adequat del pin ADDR, l'adreça del I2C pot ser seleccionada (tal i com es mostra a la figura 6). El pin ADDR pot connectar-se VDD o VSS, o es pot utilitzar com a pin seleccionador. Això significa que l'adreça del sensor pot ser canviada dinàmicament durant el funcionament del sensor simplement canviant el nivell del pin ADDR. L’única restricció és que el nivell del ADDR ha de mantenir-se constant a partir de la condició d’inici I2C fins que s’acaba la comunicació, cosa que permet connectar més de dos SHT30 al mateix bus. La connexió dinàmica necessita que hi hagi línies d’ADDR individuals per a cada sensor en el cas que se'n vulguin connectar dos. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 9 tapeig.cat info@cmmm.com SHT30 Adreça del I2C en Hex Condició Adreça A del I2C 0x44 Pin ADDR connectat a VSS Adreça B del I2C 0x45 Pin ADDR connectat a VDD Figura 6: Adreces I2C del Dispositiu Operacions i Comunicació amb el SHT30 Totes les ordres i dades SHT30 s'assignen a un format d’adreces de 16 bits. A més, els dades i ordres estan protegides amb un mecanisme de detecció d’errors, el CRC, cosa que augmenta la fiabilitat de la comunicació. Per tal de poder enviar dades, en mode d'escriptura, és obligatori transmetre el checksum, ja que el SHT30 només accepta dades si aquestes van seguides pel checksum correcte. Per altra banda, per rebre dades, en mode lectura, la comprovació i processament del checksum l’ha de realitzar el master. 04.6.1. Inici de la Mesura Per començar a utilitzar el sensor per tal de mesurar la temperatura i la humitat relativa del ambient, primer de tot se li ha de donar voltatge (de 2.4V a 5V). En el nostre cas hem optat per l'opció de l’Arduino de 5V. A continuació, després de que el sensor arribi al seu voltatge llindar, aquest necessita un temps (Tpu) per entrar en un estat lliure. El Tpu està estipulat que sigui d’entre 0.5 i 1 ms Per tal d’iniciar la seqüència de comunicació de mesura s’ha de donar la condició d’inici (START), el header d'escriptura I2C (del qual se’n parlarà més endavant) i una comanda de mesura de 16 bits. Després del vuitè clock de mesura del SCL s’envia un bit d’ACK que dona inici a la mesura de temperatura i humitat. En la següent imatge es pot apreciar el header d’escriptura del I2C seguit de la comanda de mesura de 16 bits, acabant finalment amb l’ACK per indicar l’inici de la mesura. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 10 tapeig.cat info@cmmm.com Figura 7: Diagrama de mesura en single shot mode 04.6.2. Comandes de Mesura en Single Shot Data Acquisition Mode En el sensor SHT30 tenim dos tipus de comandes de mesura per tal d’accedir i mesurar les dades de temperatura i humitat relativa: el “Single Shot Data Acquisition Mode” i el “Periodic Data Acquisition Mode”. Donat que per la realització d’aquest treball hem utilitzat la primera d’aquestes, serà l'única que explicarem en la memòria. El “Single Shot Data Acquisition Mode” és el mode de mesura que permet l’adquisició de dades en parelles. Cada una de les parelles de dades consisteix en 16 bits per el valor de temperatura i 16 bits per el valor de la humitat relativa (sempre en aquest ordre). A part, cada parella de dades van seguides de 8 bits de detecció d’errors (CRC). Tal i com podem observar en la figura 7, ens entren primer 16 bits de temperatura, seguits de 8 bits de CRC i a continuació, 16 bits de humitat seguits de 8 bits de CRC, acabant amb un bit de STOP (marcat amb una P). En aquest mode d’adquisició de dades diferents comandes de mesura poden ser seleccionades; cada una d’aquestes són de 16 bits i afecten en la repetibilitat i el clock stretching. La configuració de repetibilitat afecta directament a la duració de la mesura en si i com a conseqüència en el consum d’energia del sensor. Per exemple, en la configuració de repetibilitat més baixa, el consum és de 2µA i una duració de mesura de 2.5ms mentre que de forma normal el consum és de 800µA i una duració de mesura de 12.5ms. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 11 tapeig.cat info@cmmm.com Per configurar la repetibilitat i el clock stretching haurem d’escriure els següents valors en hexadecimal als registre de 8 bits MSB i LSB (els quals formen la comanda de 16 bits que hem utilitzat per iniciar la mesura) segons el que volem. Figura 8: Comandes de mesura en single shot mode 04.6.3. Lectura dels Resultats de mesura en Single Shot Mode Després de que el sensor hagi completat la mesura, el master pot llegir els resultats d'aquesta (parella de valors de Temperatura i parella de valors d'Humitat relativa) enviant una condició START seguida d’un header de lectura I2C. El sensor reconeixerà la recepció de la capçalera de lectura i enviarà dos bytes de dades (temperatura) seguit d’un byte de CRC i dos altres bytes de dades (humitat relativa) seguits d’un byte de CRC, tal i com s’ha explicat en l’apartat anterior. Cada byte serà reconegut pel microcontrolador amb un ACK per tal de que el sensor continuï enviant dades. Si el sensor no rep una ACK del master després de qualsevol byte de dades, pararà la transmissió. Per acabar amb la transmissió de totes les dades, després del últim CRC, s’enviarà un NACK i una condició d’STOP (P) per tal de marca el final de la transmissió. Finalment, per fer la conversió del senyal obtingut per tal de poder-lo llegir correctament haurem d’utilitzar algunes fórmules. - Per a la Humitat Relativa: 𝑅𝐻 = 100 ∗ 𝑆𝑅𝐻 16 2 − 1 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 12 tapeig.cat info@cmmm.com On 𝑆𝑅𝐻 és la suma del primer byte de Humitat (desplaçat 8 bits a l’esquerra) amb el segon byte de Humitat. 𝑆𝑅𝐻 = 𝑀𝑆𝐵𝐻𝑢𝑚 ≪ 8 + 𝐿𝑆𝐵𝐻𝑢𝑚 - Per a la Temperatura en ºC: 𝑇[º𝐶] = −45 + 175 ∗ 𝑆𝑇 −1 216 On 𝑆𝑇 és la suma del primer byte de temperatura (desplaçat 8 bits a l’esquerra) amb el segon byte de temperatura. 𝑆𝑇 = 𝑀𝑆𝐵𝑇𝑒𝑚𝑝 ≪ 8 + 𝐿𝑆𝐵𝑇𝑒𝑚𝑝 Protocol I2C 04.7.4. Introducció: El protocol I2C (𝐼 2 𝐶) és una abreviatura de Inter-IC (inter integrated circuits), un tipus de bus dissenyat per Philips Semiconductors a principis dels anys 80, que s'utilitza per connectar circuits integrats (ICs). L'I2C és un bus amb múltiples masters, el que significa que es poden connectar diversos xips a el mateix bus i que tots ells poden actuar com a master, només amb iniciar la transferència de dades. Aquest bus s'utilitza dins d'una mateixa placa d'un dispositiu. El bus I2C és un estàndard que facilita la comunicació entre microcontroladors, memòries i altres dispositius amb cert nivell d’intel·ligència”, només requereix de dues línies de senyal i un comú o massa. Va ser dissenyat a aquest efecte per Philips i permet l'intercanvi d'informació entre molts dispositius a una velocitat acceptable, d'uns 100 Kbits per segon, tot i que hi ha casos especials en què el rellotge arriba fins als 3,4 MHz. La metodologia de comunicació de dades del bus I2C és en sèrie i sincrònica. Una dels senyals del bus marca el temps (polsos de rellotge) i l'altra s'utilitza per intercanviar dades. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 13 tapeig.cat info@cmmm.com 04.7.5. Descripció de Senyals - SCL (System Clock) és la línia dels polsos de rellotge que sincronitzen el sistema. - SDA (System Data) és la línia per la qual es mouen les dades entre els dispositius. - GND (Massa) comú de la interconnexió entre tots els dispositius “enganxats” al bus. Les línies SDA i SCL són del tipus drenatge obert, és a dir, un estat similar al col·lector obert, però associades a un transistor d'efecte de camp. S'han de polaritzar en estat alt (connectant a l'alimentació per mitjà de resistors “pull-up”) el que defineix una estructura de bus que permet connectar en paral·lel múltiples entrades i sortides. El diagrama és prou auto-explicatiu. Les dues línies de bus estan en un nivell lògic alt quan estan inactives. En principi, el nombre de dispositius que es pot connectar al bus no té límits, encara que cal observar que la capacitat màxima sumada de tots els dispositius no superi els 400 pF. El valor dels resistors de polarització no és molt crític, i pot anar des de 1,8kΩ a 47kΩ. Un valor menor de resistència incrementa el consum dels integrats però disminueix la sensibilitat a el soroll i millora el temps dels flancs de pujada i baixada dels senyals. Els valors més comuns en ús són entre 1,8kΩ i 10kΩ. 04.7.6. Protocol de Comunicació del Bus I2C En el cas que hi hagi diversos dispositius connectats sobre el bus, és lògic que per establir una comunicació a través d'ell s'hagi de respectar un protocol. Diguem, en primer lloc, el més important: hi ha dispositius mestres i dispositius esclaus. Només els dispositius mestres poden iniciar una comunicació. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 14 tapeig.cat info@cmmm.com La condició inicial, de bus lliure, és quan els dos senyals estan en estat lògic alt. En aquest estat qualsevol dispositiu mestre pot ocupar-lo, establint la condició d'inici (START). Aquesta condició es presenta quan un dispositiu mestre posa en estat baix la línia de dades (SDA), però deixant en alt la línia de rellotge (SCL). El primer byte que es transmet després de la condició d'inici conté set bits que componen la direcció de el dispositiu que es vol seleccionar, i un vuitè bit que correspon a l'operació que es vol realitzar amb ell (lectura o escriptura). Si la direcció del dispositiu correspon a la que s'indica en els set bits (A0-A6) està present al bus, aquest contesta amb un bit en estat baix, situat immediatament després del vuitè bit que ha enviat el dispositiu master. Aquest bit de reconeixement (ACK) en estat baix li indica a el dispositiu master que el salve reconeix la sol·licitud i està en condicions de comunicar-se. Aquí la comunicació s'estableix en ferm i comença l'intercanvi d'informació entre els dispositius. Si el bit de lectura / escriptura (R / W) es posa en aquesta comunicació en estat baix (escriptura), el dispositiu master envia dades al dispositiu slave. Això es manté mentre continuï rebent senyals de reconeixement, i el contacte conclou quan es transmeten totes les dades. En el cas contrari, quan el bit de lectura / escriptura està en un estat alt (lectura), el dispositiu master genera polsos de rellotge perquè el dispositiu slave pugui enviar les dades. Després de cada byte rebut el dispositiu master (qui està rebent les dades) genera un pols de reconeixement. El dispositiu master pot deixar lliure el bus generant una condició de parada (STOP). Si es vol seguir transmetent, el dispositiu master pot generar una altra condició d'inici en lloc d'una condició de parada. Aquesta nova condició d'inici s'anomena “inici reiterat” i es pot utilitzar per adreçar un dispositiu slave diferent o per alterar l'estat de el bit de lectura / escriptura. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 15 tapeig.cat info@cmmm.com 04.7.7. Comunicació I2C en detall Quan el dispositiu master vol comunicar-se amb un slave, produeix una seqüència d'inici en el bus. La seqüència d'inici és una de les dues seqüències especials que s'han definit en el bus I2C; l'altra és la seqüència de parada. Les seqüències d'inici i la de parada són especials perquè són els dos únics casos en què es permet que la línia de dades (SDA) canviï quan la línia de rellotge (SCL) està en estat alt. Quan s'estan transmetent dades, la línia SDA ha de mantenir-se estable, i mai canviar, mentre la línia SCL està en estat alt. Les seqüències d'inici i de parada assenyalen el començament i el final d'una transacció amb els dispositius slave. Les dades es transfereixen en seqüències de 8 bits. Aquests bits es col·loquen en la línia SDA començant pel bit de més pes. Un cop posat un bit en SDA, es porta la línia SCL a estat alt. Per cada 8 bits que es transfereixen, el dispositiu que rep la dada envia de tornada un bit de reconeixement, de manera que en realitat per cada byte de dada es produeixen 9 polsos sobre la línia SCL (és a dir, 9 polsos de rellotge per cada 8 bits de dada). Si el dispositiu que rep envia un bit de reconeixement d’estat baix, indica que ha rebut la dada i que està a punt per acceptar un altre byte. Si retorna un amb estat alt, el que indica és que no pot rebre més dades i el dispositiu mestre hauria d'acabar la transferència enviant una seqüència de parada. 04.7.8. Protocol de programació pel bus I2C El primer que passa en un bus I2C és que el dispositiu master envia una seqüència d'inici. Això alerta als dispositius slave, posant-los a l'espera d'una transacció. Aquests queden atents per veure si es tracta d'una sol·licitud per a ells. A continuació el dispositiu master envia la direcció de dispositiu. El dispositiu slave que té aquesta direcció continuarà amb la transacció, i els altres ignoraran la resta dels intercanvis, esperant la propera seqüència d'inici. Un cop s’ha adreçat el dispositiu slave, el que ha de fer ara el master és enviar el número de registre des del qual es vol llegir o a què va a escriure. Una vegada que el master ha enviat la direcció del dispositiu al bus I2C i la direcció del registre intern de el dispositiu, pot enviar ara el byte o bytes de dades. El dispositiu master pot seguir enviant bytes al slave, que normalment seran posats en registres amb adreces successives, ja que el slave incrementa automàticament la direcció del registre intern després de rebre cada byte. Quan el master ha acabat d'escriure dades en el slave, envia una seqüència de parada que conclou la transacció. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 16 tapeig.cat info@cmmm.com 04.7.9. Escriptura en un dispositiu slave 1. Enviar una seqüència d'inici 2. Enviar la direcció de dispositiu amb el bit de lectura / escriptura en estat baix 3. Enviar el número de registre intern en què es vol escriure 4. Enviar el byte de dada 5. [Opcionalment, enviar més bytes de dada] 6. Enviar la seqüència de parada 04.7.10. Lectura des d’un dispositiu slave Abans de llegir dades des del dispositiu slave, primer se li ha d'informar des quina de les seves direccions internes s’ha llegit. De manera que una lectura des d'un dispositiu slave en realitat comença amb una operació d'escriptura en ell. És igual a quan es vol escriure-hi: S'envia la seqüència d'inici, la direcció de dispositiu amb el bit de lectura / escriptura en estat baix i el registre intern des del qual es vol llegir. Ara s'envia una altra seqüència d'inici novament amb la direcció de dispositiu, però aquesta vegada amb el bit de lectura / escriptura en estat alt. Després es llegeixen tots els bytes necessaris i s'acaba la transacció amb una seqüència de parada. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 17 tapeig.cat info@cmmm.com 04.7.11. Codi Sensor Temperatura En aquesta part de la memòria explicarem com s’ha fet la part del codi del sensor de temperatura, començant per la comunicació I2C. El codi I2C està dividit en 6 funcions, les quals es poden consultar al codi “i2c_master.c” i “i2c_master.h” que hi ha a la carpeta del projecte: I2C_init: La primera funció del I2C l’únic que fa és carregar al TWBR el valor del TWI Bit Rate Register. A l'atmega32u4 posant el preescaler a 0, el valor de TWBR per tenir la freqüència que volem es calcula de la següent manera: 𝑇𝑊𝐵𝑅 = (((𝐹_𝐶𝑃𝑈/𝑆𝐶𝐿_𝐶𝐿𝐾) − 16)/8); I2C_start: És la funció per iniciar la comunicació I2c. Primer de tot fem un reset del Control de Registre TWI seguit de l’enviament de la condició de START i l’espera de confirmació de final de transmissió. A continuació carreguem l’adreça del dispositiu slave al registre de dades i comprovem que aquest ha rebut la condició de lectura o escriptura. I2C_write: És la funció d'escriptura, en la qual primer de tot carreguem les dades necessàries al data register i a continuació iniciem la transmissió d’aquestes seguit de l’espera de confirmació de final de transmissió. I2C_read_ack: És la funció de lectura juntament amb la funció “I2C_read_nack”. En aquesta funció primer de tot iniciem el mòdul TWI i la recepció de dades del sensor amb ACK. Tot seguit esperem la confirmació de final de recepció i finalment fem un return de les dades rebudes del TWDR. I2C_read_nack: Com s’ha comentat en la funció anterior, aquesta és la funció de lectura sense acknowledgement. És exactament igual que la funció “I2C_read_ack”, però la recepció de dades la fem sense ACK. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 18 tapeig.cat info@cmmm.com I2C_stop: Finalment, en la última funció del codi del “i2c_master” el que fem és enviar una condició de STOP. El codi “main” del sensor sht30, està conformat per el “sht30.c” i el “sht30.h”. Aquests codis només tenen una funció (tot i que finalment està dividit en dues per tal d’enviar les dades desitjades més fàcilment). Temperatura: La funció temperatura és la principal d’aquest mòdul, on primer de tot fem un “i2c_init( )”, seguit d’un “i2c_start(Addr, 0)” per transmetre la condició de START, la adreça slave del sensor SHT30 (la qual és 0x44) i el mode d’execució (escriptura en aquest cas). Seguidament fem un “i2c_write(x)” per tal d’escriure la comanda de 16 bits de mesura (MSB + LSB), on el primer byte (MSB) és per habilitar el clock stretching i el segon per habilitar la repetibilitat en mode LOW, pels motius que s’han explicat en l’apartat del sensor SHT30. Per acabar la primera part del codi, hem utilitzat la comanda “i2c_stop( ) per tal d’enviar la condició de STOP. La segona part del codi comença amb un altre “i2c_start(Addr, 1)”, aquest cop en mode lectura, seguit de 5 “i2c_read_ack( )” i 1 “i2c_read_nack( )” per agafar les mostres de temperatura i humitat que ha agafat el sensor, tal i com hem explicat en l’apartat de “Lectura dels resultats de mesura en Single Shot Mode”. Per acabar la segona part del codi, novament hem utilitzat la comanda “i2c_stop( ) per tal d’enviar la condició de STOP. Finalment hem utilitzat dues comandes per convertir les dades llegides en la segona part del codi, tot seguint les fórmules comentades en apartats anteriors i conversions a “float” i “long” per tal de mostrar les dades correctament per pantalla (en el cas que sigui necessari). La funció temperatura acaba amb un return de la variable on hi ha guardada el valor de temperatura mesurat en el sensor. Humitat: La funció humitat, tal i com s’ha comentat, és una funció utilitzada únicament per facilitar la transmissió de dades entre mòduls del projecte. L'única utilitat de la funció humitat és fer un return de la variable on hi ha guardada el valor de humitat relativa mesurada en el sensor. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 19 tapeig.cat info@cmmm.com 05. Detector de So Introducció El projecte ens demanava mostrar el so ambient i diverses característiques d’aquest cada cert temps, per tal de poder detectar nivells auditius perillosos, i tenir una percepció i un control sobre aquest factor en els usuaris del dispositiu. Per fer de micròfon, hem utilitzat el detector de so amb preamplificador LM324 Sparkfun. Aquest es basa en una placa que combina un micròfon i algun circuit de processament, que proporcionen no només la sortida d’àudio, sinó també una indicació binària de la presència del so i una representació analògica de la seva amplitud. Aquestes tres sortides es poden extreure per als 3 pins diferents amb els quals consta la placa, ENVELOPE, GATE i AUDIO. Sortides del sensor Com hem mencionat a la introducció aquest detector de so compta amb 3 tipus de sortides diferents. Amb el següent esquema veurem el voltatge de sortida a través del temps, mostrant el funcionament del mateix en vers a una sèrie d’impulsos. Mostra de la sortida del detector de so Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 20 tapeig.cat info@cmmm.com La gràfica anterior mostra les 3 sortides del detector de so de la següent manera: - En verd fosc podem observar la sortida AUDIO, aquesta representa el voltatge resultant directament des de el micròfon. - En verd clar tenim la sortida envolupant ENVELOPE, aquesta representa el voltatge analògic que traça l’amplitud del so. Aquesta serà en la que ens centrarem ja que és la mateixa que utilitzarem pel nostre projecte. - En vermell se’ns mostra la sortida GATE, aquesta commuta el seu valor depenent del so que detecta, amb un llindar determina silencis o bé sons. Funcionament del sensor Un cop hem vist les diferents sortides que ens ofereix el sensor, passarem a observar més detalladament el seu funcionament a través del schematic d’aquest. - Càpsula del micròfon i preamplificador. A la càpsula li entra el voltatge d’alimentació a través de R1, i emet una tensió de corrent altern que es desplaça per un desplaçament continu d’aproximadament 1/2 del voltatge d’alimentació. La sortida de la càpsula és d’una tensió extremadament petita, de manera que el senyal de la càpsula és amplificat per un estadi d’amplificador operatiu IC1G1. De manera predeterminada, el preamplificador té un guany aritmètic de 20 dB i el guany es pot ajustar poblant R17. La sortida d’àudio està acoblada al corrent continu, pujant a la meitat de la tensió d’alimentació, de manera que es pot connectar directament a l’ADC d’un microcontrolador. En condicions perfectament tranquil·les, idealment llegirà 1/2 escala completa, o 512 en un convertidor de 10 bits. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 21 tapeig.cat info@cmmm.com - Envolupant. L’amplificador operacional inverteix o amplifica el senyal. Quan la seva sortida canvia, D2 s’encén i carrega el condensador C1, en canvi quan la seva sortida no canvia, el D2 queda desactivat i C1 es descarrega a través de la resistència R9. Així doncs C1 rastreja els pics del senyal entrant. IC1G4 és un buffer amplifier, de manera que les càrregues externes al pin de sobre no canviaran el comportament de càrrega / descàrrega del C1. Això es tradueix en un senyal que rastreja l'amplitud màxima del senyal d'entrada. Un so més fort produirà una tensió més alta al pin envolupant. Igual que amb el pin d'àudio, l’envolupant es pot connectar a l'ADC d'un microcontrolador. Aquest procés implementa la següent equació: if(Vin > 0) Vout = 0; else Vout = Vin * -2.2 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 22 tapeig.cat info@cmmm.com - Schmitt Trigger. En aquesta última fase, s’implementa un switch amb un llindar al senyal envolupant. El Schmitt Trigger mira aquest senyal i commuta la sortida quan superem el llindar. La funció del trigger, ens permet ignorar soroll del senyal entrant. Aquesta sortida del trigger és la que trobem al pin GATE, pot ser útil per a treballar i¡amb interrupcions. Configuració del Sensor En el detector de SO s’utilitza el mòdul ADC que té disponibles dues configuracions, una per la bateria i un altre per el soroll que es l'apartat actual, les referències que ens deixa la PCB són 3,3 (Alimentació) i 2,56 V i el 0 del AREF. Ja que el ADC del atmega32u4 és bastant hem d'utilitzar no només la mateixa referència de voltatge que per la bateria si no deixar un espai de temps entre mesura de bateria i Soroll. Per realitzar el codi que configura el sensor, partim de la base que volem agafar 4 tipus de dades. En primer lloc volem agafar el valor en dB de la sortida ENVELOPE del sensor, per fer-ho ens recolzem en els mòduls serial_device.h, adc.h i printf2serial, complementant aquesta dada bàsica, cada X mostres n’extrèiem la mitjana, el valor màxim, i per últim el tant per cent de dades en dB que superen un llindar que implementem nosaltres manualment. Comencem llegint el valor del port analògic A0 amb la funció read8_ADC(), per fer-ho, situarem aquest tros de codi dins d’una interrupció de timer on el prescaler serà de 8 i el valor del comparador serà de 249. Un cop configurada la interrupció, seguim executant el setup_ADC(), on en aquesta funció determinem varis valors com el prescaler, el voltatge de referència o el input adc, en el nostre cas farem aquest últim el deixarem a 0, agafarem 5V de voltatge i el prescaler. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 23 tapeig.cat info@cmmm.com Durant la interrupció l’únic que farem serà guardar el valor obtingut, dins d’una variable global que tractarem posteriorment per obtenir els dB corresponents. Un cop tinguem el valor de lectura del port analògic A0, utilitzem una fórmula logarítmica que hem tret d’un joc de proves i una línia de regressió també logarítmica, que correspon a dades agafes amb les funcions abans esmentades, i unes dades referència extretes d’un sonòmetre amb el micròfon d’un telèfon mòbil. Valor del ADC Valor en dB Valor del ADC Valor en dB 590 18 714 68 602 32 718 69 606 36 742 70 610 45 762 67 626 50 638 55 674 65 La gràfica resultant i la seva corresponent fórmula són les següents: 90 80 70 60 50 𝑦 = 170,21𝑙𝑛(𝑥) − 1052,6 40 30 20 10 0 0 200 400 600 800 1000 Per acabar només ens falta fer els càlculs de la mitjana, el tan per cent de dades que superen un llindar i extreure’n el valor màxim. Com que tot això ho hem de fer cada X mostres, implementarem un comptador que anirà comptant el número de mostres que anem agafant i quan aquest arribi a les mostres desitjades, serà llavors quan fem els càlculs pertinents dels valors esmentats anteriorment. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 24 tapeig.cat info@cmmm.com 06. Bateria Segons el datasheet de l'atmega32u4 i tenint en compte que els dos pins de la bateria estan a ADC0 i ADC1, s'ha utilitzat el mode de dos canals que fa una resta entre els dos pins, això i tenir el divisor de tensió a 5 fa que tinguem una proporció inversa de la mesura del ADC i el % de la bateria, la precisió obtinguda després dels càlculs es de 5'8% tenint en compte que la bateria va de 4'2 a 3'25 Volts. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 25 tapeig.cat info@cmmm.com 07. ESP-01 Hardware L'ESP-01 només té 8 pins de connexió, aquesta és una de les seves limitacions, per la qual cosa hem de conèixer-los bé per usar-los adequadament. 07.1.1. Descripció de Pins - GND: Connexió Terra del mòdul ESP32 - GPIO2: Pin d'entrada i sortida - GPIO0: Pin d'entrada i sortida - RXD: Pin de recepció sèrie - TXD: Pin de transmissió sèrie - CH_PD: Pin de control per engegar el mòdul - RESET: Pin de reset amb connexió pull-up interna - VCC: Entrada d'alimentació a 3.3Vdc del mòdul El mòdul ESP01 està integrat a la nostre placa de manera externa, podent ser retirat d'ella en cas de ser necessari. Al ser connectat, internament hi ha unes connexions per rebaixar el voltatge entrant provinent dels pins del controlador ATMega32u4 a 3.3 Vdc per no danyar el mòdul. La comunicació sèrie entre el ESP01 i el xip ATMega32u4 es fa amb la connexió invertida dels pins TX i RX. Es connectarà en la sortida TX del mòdul amb la recepció RX del AtMega32u4, mentre transmissió del microcontrolador anirà connectat amb el pin RX del ESP01. Per altra banda, per poder engegar el mòdul Wi-Fi serà necessari activar el pin de control CH_PD connectat al PORTB del xip. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 26 tapeig.cat info@cmmm.com Software La idea per controlar el ESP-01 en aquest projecte és la comunicació sèrie amb el mòdul utilitzant les comandes AT, això, comportarà una sèrie de problemes a l'hora de debugar o voler comprovar l'estat del ESP-01. Cal mencionar que el ESP-01 té capacitat per ser controlat amb I2C o altres mètodes. Les comandes AT (attention) són una interfície de comunicació per poder configurar i proporcionar instruccions a un mòdem. Aquestes treballen de manera que se li envia una funció i s'espera una resposta de confirmació del mòdul, on depenent indicarà el seu èxit en l'execució. Així doncs hem procedit a crear un mòdul en C senzill per encapsular un conjunt de comandes AT que ens poden servir a l'hora d'enviar dades recol·lectades dels sensors mencionats als apartats anteriors. Per poder-nos comunicar amb el ESP01 s'han implementat un seguit de funcions bàsiques per poderlo configurar i connectar una connexió TCP per enviar les dades captades pels sensors cap a una base de dades. El mòdul conté les següents funcions: - void esp_connect(char* ssid,char* password, char* ip_esp, char *mode,char *ip_server, char* port); - int esp_send(char *message,char *len_message); - void esp_close(void); - int esp_get_rssi(void); Totes elles es basen en la comunicació serial entre el microcontrolador ATMega32u4 i el mòdul ESP01. Es passaran un seguit de comandes AT el qual el mòdul Wi-Fi interpretarà i executarà corresponentment, retornant confirmacions tipus ACK per saber si l'operació s'ha realitzat amb èxit. És per això, que totes les funcions les quals s'explicaran amb més detall a continuació fan ús d'unes funcions comunes per la confirmació dels missatges retornats pel ESP01 després de cada comanda. Aquestes es basen en la lectura de dades rebudes pel port sèrie, tractant els missatges segons si són d'èxit (OK, SEND OK, etc.) o d'error (ERROR, FAIL, WIFI DISCONNET, etc.). En cas de rebre un missatge vàlid, es retornarà un 0 per indicar que no hi ha cap problema. Per altra banda, si s'ha produït un error, avisarem a les funcions principals enviant un missatge d'error per re-intentar l'operació o procedir amb el protocol establert. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 27 tapeig.cat info@cmmm.com 07.2.1. ESP_CONNECT Funció inicial per poder connectar el mòdul a la xarxa Wi-Fi corresponent i enllaçar-lo amb un servidor TCP. Es farà primer un intent de connexió a la xarxa fins que s'aconsegueix amb èxit. Un cop realitzada es procedirà a connexió amb el servidor. Per connectar-se al Wi-Fi s'utilitzarà la funció privada esp_connect_wifi() i s'enviarà al mòdul ESP01 el nom de la xarxa a la qual es vol connectar juntament amb la contrasenya i la IP que se li vol assignar. Aquest pas serà necessari per poder tenir una bona connexió amb el servidor, ja que han de tenir el mateix rang d'adreces. Primer de tot s'enviarà la comanda AT+CWMODE_CUR=1 per configurar el mòdul amb el mode d'Estació. A continuació, un cop rebuda la confirmació del ESP01, la comanda AT+CWJAP_CUR=, servirà per enviar els paràmetres necessaris per la connexió amb l'AP (Access Point). Aquest també necessitarà un missatge ACK de confirmació per saber que s'ha realitzat la connexió amb èxit. En cas contrari, es retornarà un 1 per saber que hi ha hagut un error. En el cas de la connexió amb el servidor TCP es realitzarà un procés similar utilitzant la funció privada esp_connect_server(). Primer de tot es configurarà el mòdul ESP01 amb la comanda AT+CIPMUX per només habilitar una connexió. Llavors es procedirà a fer una petició al servidor per poder-se connectar a ell amb la comanda AT+CIPSTART=,,. El mode serà TCP i se li definiran la ip i el port en el qual aquest està treballant. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 28 tapeig.cat info@cmmm.com 07.2.2. ESP_SEND La funció esp_send servirà per enviar un missatge al servidor TCP al qual estem connectats. Li passarà per paràmetres un la variable que conte el missatge que es vol enviar i la llargada d'aquest per tenir un control sobre el nombre de caràcters. Per tal de poder enviar els missatges s'utilitzarà la comanda AT+CIPSENDEX=<len_message>, el qual enviarà informació amb un màxim de caràcters estipulat. Un cop enviada la comanda, el ESP01 començarà a rebre les dades que es volen enviar pel port sèrie fins que s'arribà al màxim de longitud estipulat o es rep un \0. En el nostre cas, tot i marcar un límit màxim de caràcters, passarem el sentinella \0 per determinar quan s'ha d'enviar el missatge. Un cop processada i enviada la informació, rebrem un ACK determinant si l'enviament ha sigut un èxit, s'hi ha fallat o un error en cas que la connexió no s'hagi establert correctament. 07.2.3. ESP_GET_RSSI Funció que serà cridada cada X temps per determinar la llista d'AP disponibles al nostre voltant. Per poder executar aquesta funció serà necessària l'ordre AT+CWLAP. Gràcies a ella, obtindrem una resposta de totes les xarxes especificant el SSID i RSSI de cada una. Al només necessitar el SSID i RSSI, les filtrarem utilitzant la funció local confirm_rssi(). Confirm_rssi() filtrarà les xarxes pel seu nom, ja que només ens interessa obtenir les que comencen amb "POS" per poder determinar el posicionament. Les AP que coincideixin amb aquest paràmetre seran emmagatzemades en una llista global guardant SSID i RSSI i incrementant un comptador per saber el total de mostres que s'han pres. Finalment es retornarà un 0 o un 1 depenent del seu èxit. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 29 tapeig.cat info@cmmm.com Un cop agafades tots les AP disponibles, en cas que l'anterior funció hagi resultat exitosa, s'enviaran cap al servidor, juntament amb un missatge sentinella al final per avisar al servidor que ja no hi ha més mostres en aquesta seqüència. 07.2.4. ESP_CLOSE La funció esp_close està implementada en cas que es vulgui fer una parada intencionada de la connexió TCP entre mòdul ESP01 i el servidor i alhora desconnectar-se de la xarxa Wi-Fi. Per tal d'implementar aquests objectius es passarà seqüencialment al mòdul les ordres AT+CIPCLOSE i AT+CWQAP. Tot i tenir la funció preparada, en el nostre projecte no s'utilitzarà, però s'ha deixat implementada en cas de futures implementacions i millores. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 30 tapeig.cat info@cmmm.com 08. POSICIONAMENT Previ a l’Algoritme L’ESP01 incorpora la comanda AT+CWLAP, amb la qual s’obtenen les xarxes i les seves propietats a l’abast del dispositiu. Tal com es pot veure en la següent figura, d’entre tots els atributs que envia la comanda, per al posicionament només són rellevants el rssi i la ssid. Dins el document “esp_01.c” trobem la funció “esp_get_rssi” la qual ens permet agafar les mesures de rssi i ssid comentades anteriorment de manera que: quan es fa una mesura, aquestes es van posant dins una llista i a continuació s’envien. Per saber que hem acabat d’enviar totes les mostres de la mesura, enviem la paraula “end” al final de tot. Un cop enviem les dades, les rebem al fitxer “chatTCPserver.py”, el qual ens permet agafar totes les dades que s’han enviat, tractar-les i enviar-les cap a la base de dades. Dins d’aquest fitxer primer de tot mirem quin tipus de dades ens arriben: Temperatura, So, Bateria o Posicionament. En aquest apartat només ens interessa el Posicionament, per tant ens centrarem només en això. Després de filtrar el tipus de dades que ens arriben i concloure que les dades que tenim són les de posicionament, passem a tractar-les. Primer de tot, ens assegurem que estem rebent totes les mostres d’una mesura (per tant anem tractant mostres fins que ens arriba la paraula “end”) i a continuació filtrem aquestes mesures de forma que només ens quedem amb les xarxes que tenen una ssid començada per “POS”. Un cop hem trobat les ssid desitjades, les posem en un diccionari amb la seva corresponent rssi de forma que ens queda una variable de la següent forma: Power_dict = {“POS001”: -57, “POS002”: -84, “POS003”: -32 ··· } Finalment, introduïdes totes les mostres desitjades de la mesura al diccionari, rebem la paraula “end”. Quan això passa, enviem el diccionari a la funció “extract” del fitxer “upc_db.py” que conté l’algoritme de posicionament. Un cop han passat les dades per l’algoritme, aquest ens retorna un diccionari amb les coordenades X, Y i Z, les quals, ja per acabar, s’insereixen a la base de dades. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 31 tapeig.cat info@cmmm.com Algoritme de Posicionament v2 Com s’ha comentat en el punt anterior, podem trobar l’algoritme de posicionament en el fitxer “upd_db.py”, concretament, dins la funció “extract”. Aquesta funció té dos arguments, un el propi “self” de la classe, el qual li proporciona la informació de la base de dades de la qual ha d’extreure, i l’altre és el diccionari de rssi i ssid que volem passar per l’algoritme. Previ a l’expilació de l’algoritme, comentar que aquest utilitza informació de la nostra base de dades que ens serveix com a referència per trobar les coordenades X, Y i Z. L’algoritme de posicionament comença agafant totes les dades que tenim a la nostra base de dades SQL mitjançant les comandes necessàries amb la informació que té la funció dels seu propi “self”. Un cop tenim totes les dades extretes de la base de dades, aquestes tenen aproximadament el següent aspecte. La representació de les dades es farà en Excel per veure en claredat cada pas del seu tractament. Un cop extretes les dades de la Base de Dades del grup, es crea una Matriu (anomenada matriu 1) plena de 0 de 22 columnes (una columnes per X, Y i Z, i les 19 restants per les 19 “POS” que existeixen) i tantes files com files tinguem en la Base de Dades. Cal comentar que totes les matrius d’aquest algoritme s’han fet amb NumPy, la qual és una biblioteca de Python que dona suport per crear vectors i matrius grans multidimensionals i proporciona una gran col·lecció de funcions matemàtiques d’alt nivell per tal d’operar amb aquestes matrius. Dit això, amb l’ajuda de NumPy, anem inserint per cada fila, les coordenades X, Y i Z corresponents i a continuació filtrem el diccionari de rssi i ssid per cada “POS” que tinguem (del “POS001” al “POS019”). En el suposat cas que en la mesura no tinguem tots els “POS”, en els que no hi són, en comptes de posar la rssi, s’hi posa “nan”. Finalment, canviem tots els “nan” per 0 de forma que la taula ens queda representada en una matriu semblant a la següent imatge: x 780 757 734 711 688 165 665 642 y 100 100 100 100 100 100 100 100 z 120 120 120 120 120 120 120 120 POS001 0 0 0 0 0 0 0 0 POS002 0 0 0 92 92 92 92 0 POS003 0 91 92 0 0 0 0 0 POS006 0 94 94 0 0 0 0 93 POS007 82 84 82 77 80 86 86 77 POS010 88 91 90 90 93 93 93 91 POS012 78 77 77 66 76 81 81 71 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM POS015 71 74 83 74 76 76 76 75 POS019 0 0 0 0 0 0 0 0 32 tapeig.cat info@cmmm.com Remarcar que encara que a la imatge només apareixen algunes columnes de “POS0XX”, hi són totes des del “POS001” fins al “POS019”. Un cop hem tractat totes les dades extretes de la Base de Dades del grup, passem a tractar les dades que ens venen de les mostres actuals del ESP01 que podem trobar en el diccionari “power_dict”. Primer de tot, creem una altra matriu (anomenada matriu 2) plena de 0 de 22 columnes, però aquesta només d’una fila. En aquesta fila deixem en blanc les caselles que haurien de pertànyer a les coordenades X, Y i Z ja que són les dades que estem buscant, i com hem fet amb la primera matriu, omplim la resta de files i columnes amb les rssi de les ssid corresponents. Finalment, tornem a canviar els “nan” que tinguem a la matriu per 0 de forma que aquesta segona matriu amb les dades actuals del ESP01 ens queda aproximadament representada de la següent forma: Remarcar que seguim tenint 19 columnes de “POS”, només una fila i les caselles de X, Y i Z buides. Un cop hem tractat les dades de la Base de Dades del grup i les dades actuals rebudes del ESP01, comencem pròpiament amb el que seria l’algoritme. Aquest es basa en la comparació de dades de les dues matrius que hem creat, comparant totes les potències de cada ssid i extraient les coordenades X, Y, i Z de la fila on la comparació és més propera amb les dades actuals. Per començar amb l’algoritme, primer de tot definim un rang. En el nostre cas aquest rang és ±5 ja que amb les proves que hem fet és el que més bons resultats ens ha donat. Definit l’algoritme, crearem una tercera matriu (anomenada matriu 3) plena de 0 amb les mateixes files i columnes que la primera on posarem el resultat de la comparació de dades. Per comparar aquestes dades, primerament trobem la dada que volem comparar, en aquest cas, la primera potència diferent a 0 que tinguem en la matriu 2 amb la mateixa columna de la matriu 1. x 780 757 734 711 688 165 665 642 y 100 100 100 100 100 100 100 100 z 120 120 120 120 120 120 120 120 POS001 0 0 0 0 0 0 0 0 POS002 0 0 0 92 92 92 92 0 POS003 0 91 92 0 0 0 0 0 POS006 0 94 94 0 0 0 0 93 POS007 82 84 82 77 80 86 86 77 POS010 88 91 90 90 93 93 93 91 POS012 78 77 77 66 76 81 81 71 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM POS015 71 74 83 74 76 76 76 75 POS019 0 0 0 0 0 0 0 0 33 tapeig.cat info@cmmm.com Per comparar les dues matrius, utilitzem el rang prèviament calculat. Si la dada a comparar de la matriu 2 (per exemple 80) coincideix amb alguna de les cel·les de la mateixa columna de la matriu 1, en un rang de ±5 (en aquest cas de 85 a 75), agafem la potència comparada de la matriu 1 i la posem a la matriu 3. Fent aquesta comparació i extracció de dades, aconseguim que les dades, on la comparació sigui certa, quedin representades en la matriu 3 en la mateixa columna i fila que ho estan en la matriu 1. En el següent exemple podem veure la representació gràfica de la comparació entre les dues primeres matrius i el resultat a la matriu 3: Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 34 tapeig.cat info@cmmm.com x 780 757 734 711 688 165 665 642 619 596 573 550 527 504 481 458 435 412 389 366 343 320 297 274 251 228 205 182 159 136 120 96 72 48 24 90 y 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 120 z 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 POS001 0 0 0 0 0 0 0 0 0 0 0 0 0 79 88 88 88 88 88 76 76 73 73 0 68 65 65 65 65 65 0 0 0 74 74 73 POS002 0 0 0 92 92 92 92 0 90 92 99 89 88 93 87 83 84 82 84 84 79 81 69 72 68 68 73 83 86 81 87 91 90 90 91 89 POS003 0 91 92 0 0 0 0 0 87 91 91 91 90 87 91 88 83 87 89 84 82 84 80 77 74 70 66 66 75 72 71 81 86 86 86 70 POS004 0 0 0 0 0 0 0 0 0 0 0 0 91 89 89 84 87 88 90 90 86 87 83 89 89 88 87 87 87 87 0 0 0 0 0 0 POS005 0 0 0 0 0 0 0 0 0 0 91 91 91 86 91 78 81 87 90 88 89 92 91 91 92 85 85 89 90 83 80 84 87 89 87 76 POS006 0 94 94 0 0 0 0 93 94 94 89 91 92 86 85 89 89 93 93 93 93 93 93 0 0 0 0 0 0 0 0 0 0 0 0 0 POS007 82 84 82 77 80 86 86 77 73 69 73 75 74 74 91 81 87 91 90 89 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 0 POS008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 POS010 88 91 90 90 93 93 93 91 81 90 88 90 88 77 74 70 65 68 66 68 72 73 79 81 83 75 89 87 93 90 94 90 0 0 93 88 POS011 0 0 0 0 0 0 0 0 0 0 94 94 94 91 87 87 89 91 90 89 94 92 92 81 83 87 94 94 81 80 74 82 92 86 91 80 POS012 78 77 77 66 76 81 81 71 65 59 57 58 72 69 79 83 86 89 91 91 91 91 91 0 0 0 0 0 0 0 0 0 0 0 0 0 x 0 y 0 z 0 POS001 88 POS002 84 POS003 83 POS004 87 POS005 81 POS006 89 POS007 87 POS008 0 POS010 65 POS011 89 POS012 86 POS014 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 88 88 84 86 86 84 0 81 76 77 88 POS014 0 Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM POS015 71 74 83 74 76 76 76 75 74 73 70 80 86 86 90 89 89 89 89 89 89 89 89 0 0 0 0 0 0 0 0 0 0 0 0 0 POS015 89 POS016 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 90 90 90 90 90 90 0 0 0 0 0 0 0 0 0 0 0 0 0 POS016 90 POS017 0 0 0 0 0 0 0 0 0 0 0 92 92 92 91 87 82 85 87 87 81 85 81 87 84 83 89 89 89 89 0 0 0 0 0 0 POS019 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 88 89 90 79 83 86 88 86 0 91 91 91 86 POS017 82 POS019 0 35 tapeig.cat info@cmmm.com En la tercera matriu podem veure ressaltat en verd les coincidències de potències ±5 de les dues primeres matrius. Per acabar amb l’algoritme, el que fem és crear una última matriu de resultat, on hi posem la fila amb més cel·les remarcades, o el que és el mateix, la fila que conté menys 0 (ressaltada a la imatge anterior). D’aquesta última matriu de resultat, obtenim les coordenades X , Y i Z i les posem en un diccionari, el qual retornem a la funció que cridava l’algoritme. Algoritme de Posicionament v1 L’algoritme explicat en les pàgines anteriors és la segona versió d’aquest. En la primera versió no teníem rang i per tant anàvem a fer la comparació entre matrius buscant el número exacte. Fent-ho d’aquesta forma ens vam adonar que no funcionaria correctament amb moltes mostres de referència a la Base de Dades del grup ja que només s’agafaria el primer valor igual, cosa que provocava errors en l’algoritme i per tant en el retorn de coordenades. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 36 tapeig.cat info@cmmm.com 09. Tractament de Dades Recepció de les dades El servidor Python s’encarrega de rebre les dades del dispositiu atmega32u4 per a guardar-les en la base de dades, on més tard es mostraran a través de la nostra pàgina web. El fitxer chatTCPserver.py primer de tot, el que fa es crear un server que rebrà les dades que envià el ESP01. Quan es rep un missatge a través del ESP01, el filtrarem a través de la funció message_type(). Aquesta funció filtrarà la primera lletra del missatge rebut, on podem tenir quatre possibles casos: - La primera lletra del missatge comenci per una T, la qual ens està indicant que hem rebut un missatge que ens informa de la temperatura i humitat actual. - La primera lletra del missatge comenci per una M, la qual ens està indicant que hem rebut un missatge que ens informa de la mitjana i el màxim de dB enregistrats. - La primera lletra del missatge comenci per una B, la qual ens està indicant que hem rebut un missatge que ens informa del percentatge de la bateria actual. - La primer lletra del missatge comenci per una P o una e, la qual ens indicant que hem rebut un missatge que ens informa de la recepció dels ssid per realitzar el posicionament o que ja no hi han més ssid per analitzar. Un cop sabem de quin tipus de missatge hem rebut, tornarem a filtrar el missatge per cada cas. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 37 tapeig.cat info@cmmm.com Extracció de dades 09.2.1. Temperatura i Humitat Quan el missatge és tracta de Temperatura l’enviarem a la funció temperature(). Aquesta té la funció de dividir el missatge. Nosaltres el que rebem és: Temperatura:30 Humitat:20, en la part que ens interessa a través de la funció split() i només ens quedem amb el valor de la Temperatura i Humitat. Aquests valors els guardem en dues variables anomenades com el seu propi nom indica i seguidament adjuntem les dues variables en una llista anomenada send i l’enviem a la funció insert_temperature del fitxer upc_db. Aquesta última funció primer de tot es connecta amb la nostra base de dades que més tard explicarem i introdueix els dos valors en la taula corresponent per a més tard poder llegir-la des de la pàgina web. 09.2.2. Soroll Quan el missatge a tractar és de Soroll l’enviarem a la funció sound(), la qual divideix el missatge. Nosaltres el que rebem és: MitjanaDB: 30 DBs Maxims: 46, en la part que ens interessa a través de la funció split() i només ens quedem amb el valor de la mitjana i màxim de dB. Aquests valors els guardarem en dues variables anomenades com el seu propi nom indica. Seguidament adjuntem les dues variables en una llista anomenada send i l’enviem a la funció insert_sound() del fitxer upc.db la qual introduirà els valors a la taula corresponent. 09.2.3. Bateria Quan el missatge és tracta de Bateria l’enviarem a la funció battery(), la qual divideix el missatge. Nosaltres el que rebem és: Baterry: 30, en la part que ens interessa a través de la funció split() i només ens quedem amb el valor del percentatge que tenim actualment i el guardarem en una variable anomenada Batt. Seguidament adjuntem la variable en una llista anomenada send i l’enviem a la funció insert_batt() del fitxer upc.db la qual introduirà el valor a la taula corresponent. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 38 tapeig.cat info@cmmm.com 09.2.4. Posicionament Quan el missatge a tractar és de Posicionament l’enviarem a la funció rssi_measures(). Aquesta funció el que realitza és primer de tot mirar si les tres posicions del missatge són diferents de end per mirar, seguidament, si les tres primeres posicions són els caràcters POS. Si les tres primeres posicions són els caràcters POS, guardarem en la clau d’un diccionari anomenat power_dict, el número de POS obtingut i en el valor del diccionari el rssi. En el cas que fos un end les tres primeres posicions del missatge voldria dir que ja no rebrem més POS. Guardarem aquest diccionari i s’enviarà a la funció extract que està explicada en l’apartat de l’algoritme de posicionament. Aquesta funció ens retornarà un altre diccionari amb la posició exacta a la qual ens trobem. Aquest diccionari l’enviarem a la funció insert_pos() del fitxer upc.db la qual introduirà els valors a la taula corresponent. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 39 tapeig.cat info@cmmm.com 10. Bases de Dades Taules MYSQL Per guardar les dades extretes de l’apartat anterior hem fet servir la base de dades que ens va proporcionar el professorat de l’assignatura. En un principi vam decidir guardar totes les dades dels sensors, el percentatge de bateria i localització en una mateixa taula. Aquesta taula constava del id que s’incrementarà cada vegada que fem un insert en la base de dades, temps que és la data i hora en què és pugen les dades, user que és l’usuari que està pujant dades, device per saber des de quin dispositiu es pujant les dades i seguidament un camp per a cada valor dels sensors i tres camps per la x y z de la posició en la qual ens trobem. Un cop vam anar avançant amb el projecte, vam creure que seria millor tenir una base de dades per a cada sensor i localització per a la posterior comoditat de pujar les dades a la pàgina web i poder mostrar-les en diferents gràfiques. Vam crear les diferents taules, on totes segueixen el mateix patró. Id, temps en el que es pugen les dades, user, device amb el que es pugen les dades i seguidament el valor de les dades del sensor corresponent/Bateria/Posicionament: 10.1.1. Taula Temperatura i Humitat 10.1.2. Taula Soroll Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 40 tapeig.cat info@cmmm.com 10.1.3. Taula Bateria 10.1.4. Taula localització 10.1.5. Taula Users Tenim una taula on guardarem tots els usuaris que pengen dades en la nostra base de dades que són els treballadors de l’empresa. Si quan l’usuari puja dades a la base de dades ja està registrat en aquesta taula, no l’afegirem. En canvi, si quan puja dades observem que no està registrat en aquesta base de dades l’afegirem per tenir-lo registrat. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 41 tapeig.cat info@cmmm.com 10.1.6. Taula Mostres Posicionament Finalment, tenim una última taula dins la base de dades, la taula per pujar els ssid i rssi. Aquesta la vam omplir nosaltres agafant mostres per les tres plantes de la universitat. Amb el ESP01 i els plànols que tenim de la universitat, miràvem en quina posició estàvem, quines ssid obteníem en aquella posició i les pujàvem a la base de dades a través de la funció insert_rssi() en el fitxer upc_db. Aquesta taula és molt similar a les anteriors amb un índex, time, user i device. Seguidament en les tres caselles següents trobem la posició que ens trobem en x y z i per últim la posició powers en la que li entrarem un diccionari amb les ssid i rssi que hem obtingut en aquella posició. Mètode per pujar informació a la base de dades Per pujar les dades a la base de dades, com ja hem explicat anteriorment, fem servir les següents funcions que es localitzen en el fitxer upc_db: - insert_temperature() - insert_batt() - insert_pos() - insert_sound() - insert_rssi() Totes les funcions segueixen el mateix patró: primer de tot obtenen l'hora actual (date.time) i seguidament el passen a un format estàndard. Un cop obtenim l'hora i dia actual, dins la variable query farem l'insert de les dades que volem pujar a la nostra base de dades. Per últim ens connectem a la base de dades del grup, inserim les dades guardades a la variable query a la base de dades i tornem a tancar la connexió que teníem amb la base de dades. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 42 tapeig.cat info@cmmm.com Exemple d’insert a la base de dades: Un cop fet aquest procés ja tenim les dades a punt a la base de dades i des de la pàgina web podem extreure-les i representar-les gràficament. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 43 tapeig.cat info@cmmm.com 11. Servidor Web El servidor Web es basa en el framewrok Django, aquest framework permet separar molt bé les diferents funcions que tindrà aquest servidor. Es basa en un sistema Model -> Vista on els Models son objectes que formen part del aplicatiu web i les vistes les que s'encarreguen d'aprofitar-los per després mostrar una plantilla d'acord amb el que toca. Les Aplicacions consten de les següents: - Autentificació d'usuaris - Mostrar la plantilla de la pàgina amb totes les seves variants - Recollir dades dels sensors de la Base de Dades. La plantilla de la pàgina web està basada amb una estructura senzilla perquè l'usuari pugui de forma intuïtiva navegar per la pàgina. La plantilla conté el següent: - Una capçalera amb logotip i un modal per iniciar sessió - Una barra de navegació - Un contingut principal que dependrà de la pàgina consultada Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 44 tapeig.cat info@cmmm.com L'autentificació d'usuaris és una autentificació bàsica que utilitza la base de dades SQLite i els models de objectes que ens proporciona el framework Django. Posteriorment quan l'usuari s'autentifiqui el servidor enviarà una cookie en mode estricte (només es pot utilitzar en la nostra pàgina web) que li mantindrà la sessió fins l'expiració d'aquesta. Funciona a mode de token per no carregar tant el servidor. Ara amb l'usuari ja autentificat, es podrà accedir al apartat de sensors, el qual es basa en extreure de forma asíncrona les últimes dades Per extreure les dades es fan request asíncrones utilitzant AJAX els paths possibles son els següents: - /hw/tabla_sht - /hw/tabla_loc - /hw/tabla_sound - /hw/tabla_battery Cadascuna retorna un timestamp de quan s'ha pujat aquesta dada, i posteriorment les dades necessàries (Decibels, Temperatura i Humitat o la Bateria). Les dades obtingudes amb format string es tracten per posar a una gràfica creada gràcies a la Llibreria CanvasJS. Es seleccionar en un selector la dada que volem, la IP del dispositiu que l'està penjant i sortiran. Les IP's disponibles s'extreuen de una taula a la Base de Dades que conté les IP's del dispositius configurats. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 45 tapeig.cat info@cmmm.com Gràfiques Web Certificat SSL Per obtenir el certificat hem seguit les instruccions proporcionades a cerbot, ja que django no és compatible amb aquest servei s'ha hagut d'utilitzar un servidor apache que una consulta amb el server name tapeig.cat i el port 80 feia un proxyreverse al port 8000 on està el servidor Django. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 46 tapeig.cat info@cmmm.com 12. Disseny d’una Caixa Un dels requeriments del projecte era dissenyar una caixa o contenidor en la qual es pogués posar la PCB + ESP01 + Bateria. Per fer el disseny d’aquesta caixa ens hem ajudat del programa FreeCAD. Per tal de proporcionar una solució el més completa possible, s’ha fet un disseny 3D per a la caixa que conté tots els components. S’ha tingut en compte que ha de ser un aparell el mes petit i lleuger possible per tal de no molestar a l’usuari que el porti. S’ha dissenyat de forma que pugui ser utilitzat, si es desitja, com a penjoll. En les següents imatges podem veure les parts d’aquest disseny: Vista Isomètrica de la caixa amb tapa i sense Vista inferior de la caixa Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 47 tapeig.cat info@cmmm.com Com es pot apreciar en les anteriors imatges, el disseny de la caixa és molt simple. Aquesta està dividia en dues parts, la primera és el compartiment inferior (part quadrada) la qual té les mides exactes de la bateria que alimenta la PCB, amb un marge de 2mm, per tal que aquesta tingui l’espai suficient com per caber dins la caixa i els cables que surten d’aquesta, puguin connectar-se a la PCB a través del forat que podem apreciar a la part dreta de la imatge. Just a sobre del primer compartiment, ens trobem amb el compartiment superior, en el qual s’hi introdueix la PCB i el sensor ESP-01. Com abans, les mides són exactes amb una petita tolerància per tal de que aquesta hi càpiga sense cap problema. La tapa seria un component opcional de la caixa (un embellidor), ja que no caldria pel fet de que els components es podrien mantenir dins el contenidor sense por a que aquests caiguessin (pel que s’ha comentat abans de les mesures quasi exactes de la caixa en relació als components). A part, un disseny sense la tapa permetria un major flux d’aire per la PCB, amb la conseqüència d’un menor escalfament dels components. Abans d’acabar l’explicació del disseny de la caixa, comentar que el forat que s’aprecia a la part dreta de les vistes isomètriques, apart de servir per passar els cables de la bateria cap a la PCB, serveix per fer lloc al port USB de la pròpia PCB. Les mesures del forat, com totes les altres parts, són exactes, amb una petita tolerància, en relació a la mida del port. Finalment, a la part inferior del disseny de la caixa, trobem una semicircumferència que permet passar un cordill o cadena per tal d’utilitzar el contenidor com a penjoll. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 48 tapeig.cat info@cmmm.com 13. Conclusions Mirant els objectius marcats a l’inici de la memòria, podem concloure que hem assolit el següents: - Implementació del projecte amb el nou microcontrolador. - Recaptar informació dels diferents sensors del Firmware de la PCB - Transmissió d’informació al Servidor - Mapeig de RSSI mitjançant l’algoritme de Posicionament - Servidor Web - Contenidor En general valorem positivament el projecte tot i que hi ha marge de millora en alguns apartats. Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 49 tapeig.cat info@cmmm.com 14. Bibliografia Componentes SMD ¿Qué son? (n.d.). Retrieved from https://www.surtel.es/blog/que-son-loscomponentes-smd/ EasyBib Bibliography Creator - G Suite Marketplace. (n.d.). Retrieved from https://gsuite.google.com/marketplace/app/easybib_bibliography_creator/351103992693 H., T. (n.d.). SparkFun Sound Detector. Retrieved from https://www.sparkfun.com/products/12642 Jecrespom, P., Jecrespom. (n.d.). MOSI. Retrieved from https://aprendiendoarduino.wordpress.com/tag/mosi L78L33ABD-TR - Regulador Lineal de Tensión Fija, 8.3 V a 30 Vin, 3.3 Vout y 0.1 Aout, SOIC-8. (n.d.). Retrieved from https://es.farnell.com/stmicroelectronics/ l78l33abd-tr/voltage-reg-fixed-3-3v-0-1a-soic/dp/2382523?st=reguladorlineal MCP73812T-420I/OT. (n.d.). Retrieved from https://www.digikey.com/product-detail/ en/microchip-technology/MCP73812T-420I-OT/MCP73812T-420I-OTTR-ND/1626618 SnapEDA. (n.d.). Retrieved from https://www.snapeda.com/ Torres, H., Javier. (2019, May 31). I2C - Puerto, Introducción, trama y protocolo. Retrieved from https://hetpro-store.com/TUTORIALES/i2c Total or partial reproduction and transmission (by any means) of any of these texts or presentations and their image processing is strictly forbidden without the written permission of the copyright owner. Only the customer has permission to use the original file for internal use. ALL RIGHTS RESERVED 2021 © CMMM 50 ESCOLA POLITÈCNICA SUPERIOR D'ENGINYERIA DE MANRESA Av. de les Bases de Manresa, 61-73 08242 MANRESA (Barcelona) – Catalunya Tel +34 93 123 456 · Fax +34 93 123 456 tapeig.cat