TFG Men Pro
TFG Men Pro
TFG Men Pro
CARTAGENA
Programación de controlador
Zigbee Mimo para su uso con
antenas leaky-wave en redes de
sensores inalámbricas avanzadas
Autor:
Jose Mendoza García
Directores:
Rafael Asorey Cacheda
Jose Luis Gómez Tornero
1
A mis padres, lo hice, lo hicimos.
“No es más grande el que siempre triunfa, sino el que nunca desalienta“
2
3
Agradecimientos
4
5
Índice General
6
Software placa ATMEL REB233SMAD..................................................................... 62
ANEXO D ................................................................................................................... 71
Actualización software placa ATMEL REB233SMAD ............................................. 71
7
Índice de ilustraciones
8
Índice de tablas
9
Capítulo Primero
Introducción
1.1 Resumen
En este trabajo fin de estudio se estudiará una nueva topología para desarrollar
un coordinador Zigbee con capacidad de beaming o enfoque adaptativo. Esto
proporciona una elevada sencillez, tanto por el tipo de antena empleado como
por el procesado de señal necesario para reconfigurar el haz. El enfoque
10
adaptativo se basa en el uso de antenas de onda de fuga (LWA) y esquemas
de salto en frecuencia.
11
propiedad se llama "frequency-beam scanning", o escaneo del haz por
variación de la frecuencia.
Así, este TFE demostrará la aplicabilidad de una LWA, que ha sido sintonizada
para enfocar y dispersar los 16 canales de Zigbee de 2,4 GHz en diferentes
direcciones , para desarrollar un smart Zigbee coordinator que mejore la
calidad de las conexiones usando técnicas de salto en canal (channel hopping)
entre los 16 canales disponibles [48] y un esquema de diversidad espacial
MiMo con dos puertos. Si bien el channel hopping en Zigbee está inicialmente
concebido para aumentar la robustez frente a interferencias [49]-[53], al igual
que la diversidad espacial [54]-[56], en este proyecto se explorará por primera
vez la diversidad espacio-frecuencial de las LWA en el contexto de una Smart
WSN. Para ello, el coordinador debe implementar tecnología MiMo y poder
realizar saltos en frecuencia, para controlar la frecuencia del canal en dos
puertos distintos de conexión a antena. Los experimentos se realizarán en un
entorno controlado (cámara anecoica).
1.2 Objetivos
-Conectar los puertos de antena del coordinador a los dos terminales de una
LWA, previamente diseñada y fabricada, para generar haces directivos en
diferentes trayectorias mediante el cambio de frecuencia del canal.
12
-Medir diferentes parámetros digitales de la calidad de la conexión inalámbrica
Zigbee, tales como la RSSI (Received Signal Strength Indicator), el ED (Energy
Dectection), el LQI (Link Quality Indicator), el PER (Conditional Packet Error
Rate), o el caudal de una conexión entre el coordinador y un nodo Zigbee.
1.3 Fases
2- Programación del coordinador Zigbee MiMo para, una vez establecida una
conexión por un canal de frecuencia y puerto de antena, medir diferentes
parámetros digitales de la calidad de la conexión disponibles tales como: RSSI,
ED, LQI, PER o el caudal.
13
escaneo espacial de haces directivos conforme se cambia la frecuencia de la
señal (channel-beam-scanning).
8- Comparación de estas prestaciones con las del uso de una antena normal
(sin capacidad de channel-beam-scanning) usando un coordinador Zigbee
MiMo convencional (con dos antenas monopolo y sin usar channel hopping).
Capitulo Segundo
14
Pero por otro lado este tipo de red de sensores inalámbricos e inteligentes
debe hacer frente también a limitaciones como cobertura, memoria, capacidad
computacional y el ancho de banda de comunicación, como grandes desafíos.
El estándar IEEE 802.15.4 [1] es un grupo de trabajo del IEEE 802.15 y se creó
para investigar una solución de baja velocidad de datos con una duración de la
batería duradera y una complejidad muy baja. Las aplicaciones propias de este
estándar son muy amplias y van desde sensores, control remoto, juguetes
interactivos, o automatización del hogar. Los protocolos ZigBee que utilizamos
en este experimento se basan en la especificación llevada a cabo por este
grupo de trabajo.
15
2.2.1 Protocolo de comunicación ZigBee IEEE 802.15.4
Como hemos dicho, esta tecnología da lugar a evitar interferencias pero del
mismo modo mejora la relación señal a ruido y eleva la capacidad de la señal y
su privacidad.
16
2.4 Beamforming
Para este experimento se utilizará una antena 'Leaky Wave' planar impresa en
tecnología 'microstrip'. El funcionamiento de las antenas leaky-wave reside en
la propagación de las ondas de fuga de líneas de transmisión abiertas. Dicha
línea de transmisión da lugar a una atenuación debida a la radiación, cosa que
en el caso de una línea cerrada no ocurre ya que las ondas no radian hacia el
exterior sino que se propagan por la superficie de la línea.
17
Ilustración 3: Onda de fuga.
Escala de referencia para medir el nivel de potenia de las señales recibidas por
un dispositivo en redes inalámbricas. Dicha escala posee un valor en torno a 0
dBm (1 mW) y se mueve dentro de un rango negativo de valores, donde cuanto
más negativo sea este valor mayor señal se pierde.
Por lo tanto, un valor ideal de este parámetro sería 0 dBm, algo complicado de
obtener en la práctica. Hasta un valor de -60 dBm podríamos decir que el
enlace es de buena calidad y estable, con valores por debajo de esto pueden
18
ocasionar cortos en el enlace dando lugar al fin de la comunicación o a la
recepción de mensajes corruptos.
El parámetro RSSI tiene un nivel mínimo de -94 dBm con un rango dinámico de
87 dB. Es un parámetro compuesto por 5 bits por lo que su valor oscila entre 0
y 31. Con este parámetro se podría calcular la potencia de entrada de radio
frecuencia:
Ilustración 5: RSSI.
Ilustración 6: ED.
19
Capítulo Tercero
Cableado y conexiones
Para las conexiones se han utilizado distintos tipos de cables: cable ethernet
RJ-45, dos adaptadores ethernet para usb y dos cables coaxiales SMA macho-
hembra.
20
-Cable RJ-45: compuesto por ocho hilos trenzados dos a dos dependiendo de
la tarea de cada par. Usaremos un modelo apantallado (STP) más robusto.
Puede llegar a alcanzar una velocidad de 1 Gbps.
-Adaptador Ethernet-USB.
21
-Transceptor: contiene el chip AT86RF233 y las antenas.
Entre ambas se comunican por el puerto GPIO y SPI. Estos dispositivos tienen
una arquitectura por capas.
Módulo fabricado por Digi a 2.4 GHz. Empleados en el protocolo IEEE 802.15.4
(Zigbee). Son fáciles de controlar, confiables y transparentes para la
comunicación bidireccional entre microcontroladores.
22
Adaptador serie USB-TTL
-Contiene un chip principal FTDI FT232RL con una alta estabilidad y una
tensión de salida de 3.3V y 5V.
23
Herramienta de programación Atmel-ICE Kit
24
Cámara anecoica
25
Ilustración 14: Soporte Módulo XBee.
El objetivo principal era el de realizar un barrido desde -90º hacia 90º pero
debido a la inestabilidad de la placa solo pudimos tomar medidas para algunos
ángulos.
Antena Leaky-Wave
26
Ilustración 15: Radiación de una antena LWA alimentada por ambos puertos.
27
Ilustración 17: Conexión entre Antena LWA y placa REB233SMAD.
Mesa giratoria
28
3.2 Lenguajes de programación
Matlab
Interfaces para C/C++, Java®, .NET, Python, SQL, Hadoop y Microsoft® Excel®.
Python
Diseñado para ser leído con facilidad el contenido de los bloques de código es
delimitado mediante espacios o tabuladores diferenciándose de otros lenguajes
de programación que usan normalmente llaves {}.
29
C
XCTU
Es un programa con una interfaz gráfica de fácil uso con la que poder
interactuar con los módulos RF como nuestro módulo XBee.
El modulo XBee con el paso del tiempo saturaba y se calentaba por lo que
podíamos hacer dos cosas, o conectar y desconectar dicho módulo del puerto
USB correspondiente o desde esta plataforma volver a leer dicho módulo.
30
3.3 Pruebas experimentales
31
Además para cada canal en el Coordinador, que recibe diez paquetes, cada
cinco paquetes recibirá por una antena distinta. Los primeros 5 paquetes por la
antena 1 y los otros cinco por la antena 2 (diversidad de antenas)
Entonces la XBee envía tramas y recibe la otra placa cinco tramas por un lado,
cinco por otro y cambia de canal, y se vuelve a repetir el proceso.
32
Ilustración 22: Comunicación abierta.
33
Lo cual nos dice que todo funciona correctamente y se va a proceder al envió
de tramas tal y como vemos a continuación:
34
Al tener configurada la placa para analizar solamente cinco parámetros durante
diez tramas y 16 canales organizo lo datos de la siguiente manera:
11 142 0 224 36
11 14 1 128 36
11 14 2 192 36
11 142 3 224 36
11 14 4 160 36
11 5 5 128 36
11 5 6 128 33
11 5 7 128 36
11 5 8 128 33
11 5 9 128 33
12 4 0 128 33
12 4 1 128 33
12 4 2 128 33
12 4 3 128 33
12 4 4 128 33
12 5 5 128 36
12 5 6 128 33
12 5 7 128 33
12 5 8 128 33
12 5 9 128 33
13 4 0 128 33
13 4 1 128 33
13 4 2 128 33
13 4 3 128 33
13 4 4 128 33
35
13 5 5 128 33
13 5 6 128 33
13 5 7 128 33
13 5 8 128 36
13 5 9 128 33
14 4 0 128 33
14 4 1 128 33
14 4 2 128 33
14 4 3 128 33
14 4 4 128 33
14 5 5 128 33
14 5 6 128 33
14 5 7 128 33
14 5 8 128 33
14 5 9 128 33
15 4 0 128 33
15 4 1 128 33
15 4 2 128 33
15 4 3 128 33
15 4 4 128 33
15 5 5 128 33
15 5 6 128 33
15 5 7 128 33
15 5 8 128 33
15 5 9 128 33
16 4 0 128 33
16 4 1 128 32
16 4 2 128 33
16 4 3 128 33
36
16 4 4 128 33
16 5 5 128 33
16 5 6 128 33
16 5 7 128 33
16 5 8 128 32
16 5 9 128 33
17 4 0 128 32
17 4 1 128 32
17 4 2 128 32
17 4 3 128 32
17 4 4 128 32
17 5 5 128 32
17 5 6 128 32
17 5 7 128 32
17 5 8 128 32
17 5 9 128 32
18 4 0 128 31
18 4 1 128 31
18 4 2 128 32
18 4 3 128 32
18 4 4 128 31
18 5 5 128 31
18 5 6 128 31
18 5 7 128 32
18 5 8 128 31
18 5 9 128 32
19 4 0 128 30
19 4 1 128 30
19 4 2 128 31
37
19 4 3 128 30
19 4 4 128 30
19 5 5 128 30
19 5 6 128 30
19 5 7 128 30
19 5 8 128 30
19 5 9 128 30
20 4 0 128 30
20 4 1 128 30
20 4 2 128 30
20 4 3 128 30
20 4 4 128 30
20 5 5 128 30
20 5 6 128 30
20 5 7 128 30
20 5 8 128 30
20 5 9 128 30
21 4 0 128 30
21 4 1 128 30
21 4 2 128 30
21 4 3 128 30
21 4 4 128 30
21 5 5 128 30
21 5 6 128 30
21 5 7 128 30
21 5 8 128 30
21 5 9 128 30
22 4 0 128 29
22 4 1 128 29
38
22 4 2 128 30
22 4 3 128 30
22 4 4 128 29
22 5 5 128 29
22 5 6 128 30
22 5 7 128 29
22 5 8 128 29
22 5 9 128 30
23 4 0 128 28
23 4 1 128 28
23 4 2 128 28
23 4 3 128 28
23 4 4 128 28
23 5 5 128 28
23 5 6 128 28
23 5 7 128 28
23 5 8 128 28
23 5 9 128 28
24 4 0 128 27
24 4 1 128 27
24 4 2 128 27
24 4 3 128 27
24 4 4 128 27
24 5 5 128 27
24 5 6 128 27
24 5 7 128 27
24 5 8 128 27
24 5 9 128 27
25 4 0 128 27
39
25 4 1 128 27
25 4 2 128 27
25 4 3 128 27
25 4 4 128 27
25 5 5 128 27
25 5 6 128 27
25 5 7 128 27
25 5 8 128 27
25 5 9 128 27
26 4 0 128 26
26 4 1 128 26
26 4 2 128 26
26 4 3 128 26
26 4 4 128 26
26 5 5 128 26
26 5 6 128 26
26 5 7 128 27
26 5 8 128 26
26 5 9 128 26
La tercera columna nos indica el número de tramas por cada canal (de 0 a 9)
ya que envíanos diez tramas.
40
La cuarta y quinta columna corresponden al valor de RSSI y ED,
respectivamente, para cada trama de cada canal.
3.4 Resultados
0 grados:
41
Por ejemplo en esta gráfica vemos que tiene un valor de 128 (10000000), si lo
pasamos a formato de 5 bits (10000) que nos da 16, un valor dentro del rango
teórico que nos facilita el fabricante.
Que este valor sea constante a lo largo de todos los canales se podría explicar
diciendo que la frecuencia cambia poco de un salto de canal a otro (5 MHz).
30 grados
42
-30 grados
45 grados
43
-45 grados
RSSI = 20.
60 grados
RSSI = 16.
44
-60 grados
RSSI = 20.
90 grados
RSSI = 24.
45
-90 grados
RSSI = 20.
Capítulo Cuarto
4.1 Conclusiones
Lo primero que se hizo fue programar la placa REB233SMAD para que pudiese
cambiar de canal sin perder la conexión con nuestro módulo XBee. A la vez se
debía de almacenar diversos parámetros que nos diesen información sobre el
funcionamiento de la antena.
46
A pesar de que el comportamiento de las graficas parezca correcto por lo
general, parece ser que la placa no realiza la diversidad de antenas por lo que
tenemos prácticamente la misma gráfica dos veces. El software está
programado para que la realice, además el bit de selección de la antena si
cambia, lo que aumentan mis pensamientos de la poca efectividad de la placa.
Para el ED por ejemplo, para 30 grados debería de salir por un puerto muy alto
y por otro muy bajo, pero salen muy parecido ambos. Se podría comprobar en
la cámara anecoica la diversidad de antenas dejando una antena sin conectar
(o conectada a una carga adaptada de 50 ohmios) y viendo los resultados.
Con todo ello podemos ver cómo al variar el ángulo de observación las
distribuciones de ED respecto del canal varían sensiblemente, lo cual sienta las
bases para usar esta información en la localización angular como hemos hecho
en otros trabajos con Bluetooth, Wi-Fi y más recientemente con RFID.
47
Bibliografía
[3]- “What’s The Difference Between IEEE 802.15.4 And ZigBee Wireless?”, disponible:
https://www.electronicdesign.com/unused/article/21796046/whats-the-
differencebetween-ieee-802154-and-zigbee-wireless
[4]- “Smart Wireless Sensor Networks”, Edited by Tan Yen Kheng, Ed. IntechOpen,
Dec. 2010. DOI:10.5772/660, ISBN: 978-953-307-261-6
https://www.intechopen.com/books/smart-wireless-sensor-networks
https://www.sciencedirect.com/book/9780128098592/smart-sensors-networks
[6]- Boudour, G., Lecointre, A., Berthou, P., Dragomirecu, D., & Gayraud, T. (2007), “On
designing sensor networks with smart antennas,” IFAC Proceedings Volumes, 40(22),
349–356. doi:10.3182/20071107-3-fr-3907.00049
https://www.sciencedirect.com/science/article/pii/S147466701635176X
https://ieeexplore.ieee.org/document/4403985
[8]- A. Kucuk, K. & Kavak, “Connectivity Analysis for Wireless Sensor Networks with
Antenna Array Integrated Central Node”, A. Wireless Pers Commun (2013) 72: 1361.
https://doi.org/10.1007/s11277-013-1083-2
https://link.springer.com/article/10.1007/s11277-013-1083-2
https://ieeexplore.ieee.org/document/6392194
48
[10]- T. N. Le, A. Pegatoquet, T. Le Huy, L. Lizzi and F. Ferrero, "Improving Energy
Efficiency of Mobile WSN Using Reconfigurable Directional Antennas," in IEEE
Communications Letters, vol. 20, no. 6, pp. 1243-1246, June 2016. doi:
10.1109/LCOMM.2016.2554544
https://ieeexplore.ieee.org/abstract/document/7452550
[11]- Wang, Qiu et al. “On Connectivity of Wireless Sensor Networks with Directional
Antennas.” Sensors (Basel, Switzerland) vol. 17,1 134. 12 Jan. 2017,
doi:10.3390/s17010134
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5298707/
[12]- Dai, H.-N., Ng, K.-W., Li, M., & Wu, M.-Y. (2011), “An overview of using directional
antennas in wireless networks. International Journal of Communication Systems,” 26(4),
413–448. doi:10.1002/dac.1348
https://onlinelibrary.wiley.com/doi/abs/10.1002/dac.1348
https://ieeexplore.ieee.org/document/6822538
[14]- Wang, R., Wang, B.-Z., Huang, W.-Y., & Ding, X. “Compact Reconfigurable
Antenna with an Omnidirectional Pattern and Four Directional Patterns for Wireless
Sensor Systems”. Sensors, 16(4), 552, 2016 doi:10.3390/s16040552
https://www.mdpi.com/1424-8220/16/4/552/html
[17]- A. A. Oliner, “Leakage from higher modes on microstrip line with application to
antennas,” Radio Sci., vol. 22, pp. 907–912, Nov. 1987.
https://ieeexplore.ieee.org/document/7774299
49
[18]- S. Matsuzawa, K. Sato, Y. Inoe and T. Nomura, "Steerable Composite
Right/LeftHanded Leaky Wave Antenna for Automotive Radar Applications," 2006
European Microwave Conference, Manchester, 2006, pp. 1155-1158.
https://ieeexplore.ieee.org/document/4058031
https://ieeexplore.ieee.org/document/7031934
https://ieeexplore.ieee.org/document/5617222
https://ieeexplore.ieee.org/document/7390965
[24]-M. Steeg, B. Khani, V. Rymanov and A. Stöhr, "Novel 50–70 GHz compact PCB
leaky-wave antenna with high broadside efficiency and low return loss," 2016 41st
International Conference on Infrared, Millimeter, and Terahertz waves (IRMMW-THz),
Copenhagen, 2016, pp. 1-2.
https://ieeexplore.ieee.org/document/7758489
50
[25]-B. Husain, M. Steeg and A. Stöhr, "Estimating direction-of-arrival in a 5G hot-spot
scenario using a 60 GHz leaky-wave antenna," 2017 IEEE International Conference on
Microwaves, Antennas, Communications and Electronic Systems (COMCAS), Tel-Aviv,
2017, pp. 1-4.
https://ieeexplore.ieee.org/document/8244845
[26]- Steeg M., Szczęsny M., Stöhr A. (2019) Multiuser 5G Hot-Spots Based on 60 GHz
Leaky-Wave Antennas and WDM Radio-over-Fiber. In: Electronic Navigation Research
Institute (eds) Air Traffic Management and Systems III. EIWAC 2017. Lecture Notes in
Electrical Engineering, vol 555. Springer, Singapore, 2019.
https://link.springer.com/chapter/10.1007/978-981-13-7086-1_16
51
[33]- J.L. Gómez-Tornero, D. Cañete-Rebenaque, J.A. López-Pastor, and A. Martínez-
Salas “Hybrid Analog-Digital Processing System for Amplitude-Monopulse RSSI-based
MiMo WiFi Direction-of-Arrival Estimation”, IEEE Journal of Selected Topics in Signal
Processing. Special Issue on Hybrid Analog - Digital Signal Processing for Hardware-
Efficient Large Scale Antenna Arrays, vol.12, no.3, pp. 529-540, June 2018
52
[41]- M. Poveda-Garcia, A. G. Martinez and J. L. Gomez-Tornero, "Frequency-scanned
focused leaky-wave antennas for direction-of-arrival detection in proximity BLE sensing
applications," in Proc. 14th Eur. Conf. Antennas Propag. (EuCAP 2014), Mar. 2020, pp.
1–4.
53
[50]- Jae-Ho Lee, Sung-Jae Kho, Uk-Jin Jang, Youn-Sik Hong, “An Improved Method
of Avoiding RF Congestion in Indoor Environments,” Procedia Engineering, Vol. 154,
pp. 223-228, 2016, https://doi.org/10.1016/j.proeng.2016.07.455.
https://www.sciencedirect.com/science/article/pii/S1877705816318446
[51]- “A method of improving PRR for WiFi interference avoidance in ZigBee networks in
indoor environments,” International Journal of Advanced Intelligence Paradigms (IJAIP)
2018 Vol.11 No.1/2 pp.176.
https://www.inderscience.com/info/inarticle.php?artid=92953
[52]- Fernández de Gorostiza, E.; Berzosa, J.; Mabe, J.; Cortiñas, R., “A Method for
Dynamically Selecting the Best Frequency Hopping Technique in Industrial Wireless
Sensor Network Applications,” Sensors 2018, 18, 657.
https://doi.org/10.3390/s18020657
https://www.mdpi.com/1424-8220/18/2/657
[54]- Husain Rehmani Mubashir, Abderrezak Rachedi, Stéphane Lohier, Thierry Alves,
Benoit Poussot. “Intelligent Antenna Selection Decision in IEEE 802.15.4 Wireless
Sensor Networks: An Experimental Analysis,” Computers and Electrical Engineering,
Elsevier, 2014, 40 (2), pp.443-455.
https://www.sciencedirect.com/science/article/pii/S0045790613003030
[56]- Willig, A. (2008). How to exploit spatial diversity in wireless industrial networks.
Annual Reviews in Control, 32(1), 49–57. doi:10.1016/j.arcontrol.2008.03.005
https://www.sciencedirect.com/science/article/pii/S1474667016351291
https://es.mathworks.com/help/matlab/learn_matlab/product-description.html
54
ANEXO A
Toma de muestras
%% Recoloca
c=b';
r=zeros(160,5);%(Tramas),(Parámetros)
for i = 1:16
for j = 1:50
if j<=5
r(1+10*(i-1),j) = c(i,j);
end
if j>5 && j<=10
r(2+10*(i-1),j-5) = c(i,j);
end
if j>10 && j<=15
r(3+10*(i-1),j-10) = c(i,j);
end
if j>15 && j<=20
r(4+10*(i-1),j-15) = c(i,j);
end
if j>20 && j<=25
r(5+10*(i-1),j-20) = c(i,j);
end
if j>25 && j<=30
r(6+10*(i-1),j-25) = c(i,j);
end
if j>30 && j<=35
r(7+10*(i-1),j-30) = c(i,j);
end
if j>35 && j<=40
r(8+10*(i-1),j-35) = c(i,j);
end
if j>40 && j<=45
55
r(9+10*(i-1),j-40) = c(i,j);
end
if j>45 && j<=50
r(10+10*(i-1),j-45) = c(i,j);
end
end
end
%% DibujaRSSI
contador= 5;
channel = 11:26;
for j=1:16
RSSI_ANT0=0;
RSSI_ANT1=0;
for i=1:160
if r(i,1)== channel(j)
if r(i,2)==5;
RSSI_ANT1= RSSI_ANT1 + r(i,4);
else
RSSI_ANT0= RSSI_ANT0 + r(i,4);
end
end
end
RSSI_ANT0= RSSI_ANT0/contador;
RSSIBuena(1,j)=RSSI_ANT0;
RSSI_ANT1= RSSI_ANT1/contador;
RSSIBuena(2,j)=RSSI_ANT1;
end
PTO1=RSSIBuena(1,:);
PTO2 = RSSIBuena(2,:);
figure;
plot(channel,PTO1,'-ob');
hold on;
plot(channel,PTO2,'-*r');
legend('RSSI ANT0','RSSI ANT1')
title('RSSI');
xlabel('Canales');
ylabel('RSSI(dBm)');
grid on;
xlim([11 26]);
set(gca,'Xtick',[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]);
%% DibujaED
contador= 5;
channel = 11:26;
for j=1:16
ED_ANT0=0;
ED_ANT1=0;
for i=1:160
if r(i,1)== channel(j)
if r(i,2)==5;
ED_ANT1= ED_ANT1 + r(i,4);
else
ED_ANT0= ED_ANT0 + r(i,4);
end
end
end
ED_ANT0= ED_ANT0/contador;
EDBuena(1,j)=ED_ANT0;
ED_ANT1= ED_ANT1/contador;
56
EDBuena(2,j)=ED_ANT1;
end
PTO1=EDBuena(1,:);
PTO2 = EDBuena(2,:);
figure;
plot(channel,PTO1,'-ob');
hold on;
plot(channel,PTO2,'-*r');
legend(ED ANT0',ED ANT1')
title('ED');
xlabel('Canales');
ylabel('ED(dB)');
grid on;
%ylim([170 200]);
xlim([11 26]);
set(gca,'Xtick',[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]);
57
ANEXO B
import time
PORT = "COM3"
BAUD_RATE = 9600
PARAM_NODE_ID = "NI"
PARAM_PAN_ID = "ID"
PARAM_DEST_ADDRESS_H = "DH"
PARAM_DEST_ADDRESS_L = "DL"
PARAM_CHANNEL = "CH"
PARAM_SCAN_CHANNEL = "SC"
PARAM_RSSI = "DB"
PARAM_VALUE_PAN_ID = utils.hex_string_to_bytes("CAFE")
PARAM_VALUE_DEST_ADDRESS_H = utils.hex_string_to_bytes("00")
PARAM_VALUE_DEST_ADDRESS_L = utils.hex_string_to_bytes("FFFF")
58
PARAM_VALUE_CHANNEL = []
CHANNELS = "0B0C0D0E0F101112131415161718191A"
for i in utils.hex_string_to_bytes(CHANNELS):
PARAM_VALUE_CHANNEL.append(i)
PARAM_VALUE_SCAN_CHANNEL = utils.hex_string_to_bytes("3FFF")
def main():
print(" +-----------------------------------------------+")
print(" +-----------------------------------------------+\n")
try:
# Get parameters.
device.set_pan_id(PARAM_VALUE_PAN_ID)
device.set_parameter(PARAM_NODE_ID,
bytearray(PARAM_VALUE_NODE_ID, 'utf8'))
device.set_parameter(PARAM_PAN_ID, PARAM_VALUE_PAN_ID)
device.set_parameter(PARAM_CHANNEL,
utils.int_to_bytes(PARAM_VALUE_CHANNEL[0]))
device.execute_command("AC")
59
print("Node ID: %s" %
device.get_parameter(PARAM_NODE_ID).decode())
print("Channel: %s" %
utils.hex_to_string(device.get_parameter(PARAM_CHANNEL)))
print(device.get_role())
print("AI: %s" %
utils.bytes_to_int(device.get_parameter("AI")))
print("")
print("")
time.sleep(4)
device.flush_queues()
ch = 1
60
while True:
seq_aux = seq_aux + 1
device.send_data_broadcast(DATA_TO_SEND)
time.sleep(0.2)
if seq_aux == 10:
time.sleep(1)
if seq_aux == 20:
time.sleep(1)
seq_aux = 0
device.set_parameter(PARAM_CHANNEL,
utils.int_to_bytes(PARAM_VALUE_CHANNEL[ch]))
#device.execute_command("AC")
ch = ch + 1
if ch == 17:
exit(1)
time.sleep(4)
finally:
device.close()
if __name__ == '__main__':
main()
61
ANEXO C
#include <asf.h>
#include <string.h>
#include <stdio.h>
#include "stdio/stdio_serial/stdio_serial.h"
#include "tal.h"
#include "tal_helper.h"
#include "tal_internal.h"
#include "common_sw_timer.h"
#include "ieee_const.h"
#include "tal_constants.h"
#include "compiler.h"
#include "usart_serial.h"
#include "conf_sio2host.h"
// MACROS
62
//Estructura de la trama que se transmite
typedef struct
{
uint8_t phr; /**< PHY header (frame length field). */
uint16_t fcf; /**< Frame control field */
uint8_t seq; /**< Frame sequence number. */
uint16_t span; /**< source PAN identifier */
uint16_t saddr; /**< source address */
char data[5]; /**< Frame payload */
uint16_t crc; /**< CRC16 field of the frame. */
} app_frame_t;
// Inicializacion de variables
bool tx_ready_flag = 1; //estado de tx del paquete
static uint8_t seq_num = 0; //numero de secuencia de la trama
frame_info_t tx_frame_info; // contiene la estructura de la trama de tx utilizada
por la capa TAL
app_frame_t tx_frame, rx_frame; //contienen datos de la trama tx y rx
uint8_t msg[5] = "Hello"; // contiene los datos que se van a transmitir
int num_frames = 0;
uint8_t *received_byte;
uint8_t *rssi;
uint8_t *ant_sel;
uint8_t *pmu;
uint8_t DEFAULT_CHANNEL = CCPU_ENDIAN_TO_LE16(11);
uint8_t lqi;
uint8_t ed;
//static uint8_t stx = 2;
//static uint8_t etx = 3;
int ch = 0;
// FUNCION PRINCIPAL
// Inicializamos el vector IRQ, Reloj, Plac, Temporizador Software y TAL Layer.
int main(void)
{
uint8_t temp;
irq_initialize_vectors();
board_init();
sysclk_init();
usart_inizializate();
/* Inicializamos la placa.
* El archivo conf_board.h contiene la configuración inicial.
*/
LED_On(LED0);
delay_ms(2000);
LED_Off(LED0);
63
if (tal_init() != MAC_SUCCESS) {
/* si algo sale mal durante la inicialización */
app_alert();
}
while(1)
{
pal_task(); /* Handle platform specific tasks, like serial
interface */
tal_task(); /* Handle transceiver specific tasks */
app_task(); /* Application task */
}
}
usart_serial_init(USART_HOST, &usart_options);
//subsección serial_basic_use_case_usage_flow Flujo de trabajo
// Esperar la recepción de un carácter:
usart_serial_getchar(USART_HOST, &received_byte); // Pulsa enter para
comenzar
//Enviar el carácter de vuelta:
//usart_serial_putchar(USART_HOST, received_byte);
//usart_serial_write_packet(USART_HOST, "\n App V1.0 Diversidad de Antenas
y RSSI", strlen("\n App V1.0 Diversidad de Antenas y RSSI"));
// De momento el printf no funciona
64
//usart_serial_write_packet(USART_HOST, 2, strlen(2));
}
void conf_channel(void){
void app_task(void)
{
if (!ioport_get_pin_level(GPIO_PUSH_BUTTON_0)) // Si pulsamos el
botón
{
delay_ms(DEBOUNCE_DELAY_MS); // Espera para evitar el rebote
del pulsador
if (!ioport_get_pin_level(GPIO_PUSH_BUTTON_0)) // Si sigue
pulsado la
función carga
los datos que
deben ser tx
{
if (tx_ready_flag == 1) //Si está disponible para
transmitir
{
tx_ready_flag = 0; // No puede recibir tramas
tx_frame_info.msg_type = DATAREQUEST;
tx_frame_info.msduHandle = seq_num;
tx_frame.phr = (sizeof(app_frame_t)); //
tx_frame.fcf =
CCPU_ENDIAN_TO_LE16(FRAME_CONTROL_FIELD);
tx_frame.seq = seq_num;
tx_frame.span =
CCPU_ENDIAN_TO_LE16(DEFAULT_PAN_ID);
tx_frame.saddr=
CCPU_ENDIAN_TO_LE16(SOURCE_ADDRESS);
memcpy(&tx_frame.data, &msg, sizeof(msg));
tx_frame_info.mpdu = (uint8_t *)&tx_frame;
seq_num++;
tal_tx_frame(&tx_frame_info,
CSMA_UNSLOTTED,false); // Esta Api transmite la trama
uint8_t ant_aux;
ant_aux=trx_bit_read(SR_ANT_SEL);
if(ant_aux==0){
LED_Toggle(LED0);
LED_Off(LED2);
}
if (ant_aux==1)
65
{
LED_Off(LED0);
LED_Toggle(LED2);
}
}
}
}
}
if (rx_frame.span == CCPU_ENDIAN_TO_LE16(DEFAULT_PAN_ID))//
&& rx_frame.saddr == CCPU_ENDIAN_TO_LE16(SOURCE_ADDRESS)) // Comprueba el PAN ID
y la dirección de fuente, si coinciden cambia el LED0
{
LED_Toggle(LED1);
uint8_t ant_aux;
ant_aux = trx_bit_read(SR_ANT_SEL);
if(ant_aux==0){
LED_On(LED0);
LED_Off(LED2);
66
//usart_serial_write_packet(USART_HOST, "\t
Frame rx Antena 1 RSSI:", strlen("Frame rx Antena 1 RSSI:"));
if (ant_aux==1)
{
LED_Off(LED0);
//LED_On(LED2);
//usart_serial_write_packet(USART_HOST, "\n
Frame rx Antena 2 RSSI:", strlen("\n Frame rx Antena 2 RSSI:"));
//usart_serial_putchar(USART_HOST, stx);
usart_serial_putchar(USART_HOST, DEFAULT_CHANNEL);
usart_serial_putchar(USART_HOST, ant_sel);
usart_serial_putchar(USART_HOST, num_frames);
usart_serial_putchar(USART_HOST, rssi);
usart_serial_putchar(USART_HOST, ed);
//usart_serial_putchar(USART_HOST, lqi);
//usart_serial_putchar(USART_HOST, pmu);
//usart_serial_putchar(USART_HOST, etx);
num_frames++;
tal_ant_div_config(ANT_DIV_DISABLE,
ANT_CTRL_1); //Cambia a antena2
//usart_serial_write_packet(USART_HOST, "\t ¡",
strlen("\t !"));
bmm_buffer_free((buffer_t *)(frame-
>buffer_header));
}
tal_ant_div_config(ANT_DIV_DISABLE,
ANT_CTRL_0); //Volvemos a la antena1 por defecto
67
//usart_serial_write_packet(USART_HOST, "\t !",
strlen("\t !"));
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
ch = ch + 1;
if (ch == 1)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(12)
;
LED_On(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 2)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(13)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 3)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(14)
;
LED_On(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 4)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(15)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 5)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(16)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 6)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(17)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
68
if (ch == 7)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(18)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 8)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(19)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 9)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(20)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 10)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(21)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 11)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(22)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 12)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(23)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 13)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(24)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
69
}
if (ch == 14)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(25)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
}
if (ch == 15)
{
DEFAULT_CHANNEL= CCPU_ENDIAN_TO_LE16(26)
;
LED_Off(LED2);
bmm_buffer_free((buffer_t *)(frame-
>buffer_header)); //NECESARIO PARA QUE CAMBIE DE CANAL
ch=0;
}
}
bmm_buffer_free((buffer_t *)(frame->buffer_header));
}
//}
/* free buffer that was used for frame reception */
bmm_buffer_free((buffer_t *)(frame->buffer_header)); // Libera el
buffer
}
70
ANEXO D
71
Para leer el mismo debemos de pulsar en Read y que encuentre el
microcontrolador. Como vemos, aparece nuestro chip ATXmega256A3 e
incluso el nivel de batería del dispositivo.
72