Subido por Alvaro Mellado Cerezo

Memòria Projecte CMMM

Anuncio
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
[email protected]
Í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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
-
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
[email protected]
-
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
Descargar