projeto com zigbee cc2531
TRANSCRIPT
-
8/10/2019 Projeto Com Zigbee CC2531
1/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
SignalBeeSuperviso e con tro le semafrico sem fio
Relatrio Tcnico
Final
Alex SolettiFabiano Reino BeraldoLourival Lippmann Jnior4 Bimestre
Visto:
-
8/10/2019 Projeto Com Zigbee CC2531
2/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
2
1.0 Resumo
O projeto visou criar uma soluo que tornasse mais fcil o controle dos semforos
instalados nas grandes metrpoles, de forma simples e prtica, utilizando a tecnologia de
wireless ZigBee (conjunto de especificaes para comunicao sem-fio, que define
camadas do modelo OSI, de acordo com o padro IEEE 802.15.4). Em conjunto, foi
desenvolvido um software em C++, utilizando o framework Qt produzido pela empresa
norueguesa Trolltech, em licena LGPL (Lesser General Public License). Obteve-se um
resultado satisfatrio, com os semforos funcionando com comunicao sem fio, em duas
configuraes: Simples, especificada no item 4.3, e em grupo (simulao de um
cruzamento), descrita no item 4.4, ambas as formas funcionam com uma lgica semafrica
previamente definida nos itens referentes a cada configurao. A implementao tambm
proporciona ao usurio um controle e superviso, atravs do software desenvolvido pelo
grupo, o SignalBee UI.
-
8/10/2019 Projeto Com Zigbee CC2531
3/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
3
2.0 Introduo
Devido carncia de um sistema que proporcione de forma slida, o controle e
superviso de semforos, foi desenvolvido ento, o SignalBee, que tem como objetivo geral,
um sistema que permite ao usurio modificar o tempo da luz verde, amarela e vermelha -
assim como a superviso de erros (lmpada queimada, semforo desligado, grupo do
cruzamento mal formado, elemento do grupo desligado (todos entram em alerta luz
amarelo piscando), perda de comunicao com os demais elementos da rede Mesh (item
4.0), entre outros problemas em potencial), sem a necessidade de se utilizar cabos e
permitindo que o administrador do sistema possa se conectar a rede Mesh, independente
de sua localizao, sendo somente necessrio estar prximo a rede. Desta forma o projeto
teve como objetivo especfico, criar uma alternativa mais econmica para a superviso e
controle dos semforos de trnsito, o qual de extrema importncia e largamente utilizado
em cruzamentos das vias de trfegos de veculos de grandes cidades. Neste projeto no foi
includo o sistema de monitoramento do trfego, que se define pela utilizao de sensores
para estimativa do fluxo de veculos no cruzamento ou avenida, a sincronizao de
semforos em cruzamentos distintos (com o objetivo de evitar a parada dos veculos entreum cruzamento e outro).
Este documento intitulado relatrio tcnico final, foi revisado a partir das modificaes
feitas aps o prottipo e est estruturado da seguinte forma: Detalhamento do projeto:
nessa seo ser especificado o diagrama de bloco geral do projeto assim como a
descrio em detalhes dos blocos que envolveram hardware (diagrama eltrico/lgico dos
circuitos, etc.) e detalhes dos blocos que envolveram software (DFDs, UML, fluxogramas,
etc.) e para completar ser especificado o procedimento de integrao de cada bloco;Testes e resultados (detalhamento dos testes realizados) assim como seus resultados
esperados e os obtidos;Concluso, indicando se o trabalho atingiu os objetivos propostos e
indicando possveis melhorias para projetos futuros; Referncias Bibliogrficas e a fim de
ilustrar e complementar as informaes do projeto tem-se o conjunto de anexos.
-
8/10/2019 Projeto Com Zigbee CC2531
4/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
4
3.0 Detalhamento do projeto
O projeto est separado em 4 (quatro) mdulos, cada um com uma funo emespecfico, como mostra a figura 1:
Figura 1 - Diagrama de bloco da viso geral do projeto.
4.0 Semforos
Constitudo do bloco geral mostrado na figura 2, ele tem como responsabilidade atuar
como os semforos de um cruzamento do dia a dia. A comunicao entre os semforos
realizada pelo CC2530EM, que um mdulo ZigBee de comunicao wireless (padro
IEEE 802.15.4) de baixo consumo.
Figura 2 Representao do bloco dos semforos
-
8/10/2019 Projeto Com Zigbee CC2531
5/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
5
De acordo com o modelo proposto pela TI, os mdulos ZigBee podem ser configurados
de trs formas: Coordenador, Roteador e Dispositivo Final. Todas as trs configuraes
podem ser implementadas em qualquer um dos dois mdulos ZigBees (CC2530 E CC2531,
explicados nos itens 4.1 e 5.0, respectivamente). Estes por si utilizam o formato de rede
estruturada denominada Mesh. Ela composta de APs (Access point = Ponto de acesso) e
clientes, os quais necessariamente devem utilizar aquele AP para trafegarem em uma rede.
Uma rede mesh (figura 3) composta de vrios ns/roteadores, que passam a se comportar
como uma nica e grande rede, possibilitando que o cliente se conecte em qualquer um
destes ns. Os ns tm a funo de repetidores e cada n est conectado a um ou mais ns.
Desta maneira possvel transmitir mensagens de um n a outro por diferentes caminhos.
Figura 3 Simbolizao de uma rede mesh
Em preto (coordenador), vermelho (roteador) e branco (dispositivo final)
Foi escolhida a seguinte configurao para os mdulos CC2530EM:
Tabela 1 - Configurao escolhida para os mdulos CC2530EM
Nome do Mdulo ZigBee Configurao Dispositivo
ZigBee_EM_1 Roteador Semforo 1ZigBee_EM_2 Roteador Semforo 2ZigBee_EM_3 Roteador Semforo 3ZigBee_EM_4 Roteador Semforo 4
-
8/10/2019 Projeto Com Zigbee CC2531
6/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
6
4.1 ZigBee
O semforo possu um mdulo ZigBee
CC2530EM (Figura 4) utilizado para comunicao
wireless, contendo um chip CC2530, que foi
baseado na arquitetura 8051 da Intel. O chip
CC2530 um circuito de baixo consumo
alimentado com 2,5-3.8 Volts, dotado de dois
cristais osciladores, sendo um de 32Mhz e outro
de 32Khz, assim como um controladora de I/O que
aceita dados mixados (Digitais/Analgicos). Uma representao esquemtica do chip e
suas portas podem ser vista na figura 5. O consumo varia entre 3,4 mA a 0,4 uA,
dependendo de sua configurao. No modo sleep (modo em que o chip desliga parte
de seus componentes quando no esto sendo utilizados) seu consumo de
aproximadamente 0,6 uA. Para a utilizao da memria flash, em operaes de erase
(apagar) este consome aproximadamente 1 mA e em modo de write (gravao) os
picos de corrente podem ser de at 6 mA. dotado de 21 portas lgicas de I/O, das
quais sero utilizados os pinos P0.6, P0.7 e P1.1, para receber os sinais das lmpadas(Detector de corrente). J os pinos P0.2 at P0.4, sero utilizados para sinalizar qual
lmpada dever ser acessa. Por fim, um ltimo pino, o P0.1, sinalizar se o mdulo
ZigBee se encontra funcional ou no.
Figura 5 - Diagrama do chip CC2530
Figura 4 - Chip CC2530EM
-
8/10/2019 Projeto Com Zigbee CC2531
7/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
7
4.2 Lgica semafrica
Sabe-se que um semforo possui 3 (trs) cores, e que sua sequncia detransies simples: Primeiramente se tem a luz vermelha a qual sinaliza PARE,
seguida da luz verde que significa SIGA, e por fim a luz amarelo que sinaliza
ATENO. Seguindo este conceito, foi implementado neste projeto uma lgica
semafrica semelhante, no qual os tempos de verde, tempo de amarelo e tempo de
vermelho (perodos de tempo nos quais cada lmpada fica acesa respectivamente)
possam ser alterados pelo administrador do sistema.
4.3 Configurao Simples
Partindo da existncia de vias as quais exigem a
necessidade de um semforo, para auxiliar na travessia de
pedestres, foi elaborado o semforo com configurao
simples. Seu fluxo de funcionamento descrito na figura 6.
Considerando que o sistema acabou de ser ligado, este no
inicio estar sem nenhuma configurao inicial e deve-se
configur-lo de acordo com a lgica pretendida (ver item 4.5).
Sendo feita a configurao do semforo como simples, o
software ir iniciar a execuo do algoritmo semafrico nico.
Vale ressaltar que no processo de inicializao do sistema, o
safe driver estar ativado, que se caracteriza pela luz amarelo
pulsante, e ir ser desligado a partir do momento que o
sistema esteja iniciado por completo. O algoritmo semafrico
consiste no seguinte: seu estado inicial o vermelho, ou seja, a luz vermelha est
acesa. Considerando que os tempos de verde, de amarelo e de vermelho so
configurveis, o tempo que as lmpadas ficaram acessas so os seus respectivos
tempos configurados pelo usurio do software SignalBeeUI.
Tvermelho ->Tverde->Tamarelo
1. (A condio acima no reflete os modelos semafricos atuais, e foi utilizada somente a critrioacadmico.)
Figura 6 - Fluxograma deConfigurao Simples
-
8/10/2019 Projeto Com Zigbee CC2531
8/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
8
Sendo assim, quando o tempo de vermelho expira, muda-se para o estado verde,
acendendo a lmpada verde, e apagando-se a lmpada vermelha. Por vez, o tempo de
verde no depende de nenhuma outra varivel, desta forma o tempo que a luz verde
permanecer acesa ser o valor especificado em Tverde. Por fim, quando o tempo
expirar, muda-se para o estado amarelo, que assim como o estado verde, possui um
tempo determinado - TAmarelo, que no depende de nenhuma outra varivel.
Expirando este tempo, muda-se para o estado vermelho novamente que terminar
quando o TVermelho expirar, reiniciando o ciclo.
4.4 Configurao em Grupo
Para que o sistema suporte a sincronizao de dois ou mais semforos, condio
esta necessria para o funcionamento correto em cruzamentos necessrio que os
semforos sejam agrupados, o que ir gerar uma dependncia entre os mesmos, de
forma a se representar um determinado cruzamento. Desta forma possvel
estabelecer uma sincronia entre os semforos de um grupo especfico, e determinar
quais so o fluxo de transio de estados. A partir da dependncia criada, ossemforos iro se comunicar entre si, possibilitando uma troca sncrona de estados
(cores), justamente para evitar que acontea de dois ou mais semforos estejam com
a luz verde ligada ao mesmo tempo. Partindo
do princpio que a rede esteja funcionando, o
fluxograma descrito na figura 7, demonstra
como deve ser os passos para a mudana de
estados. Dado um determinado semforo, oqual est com a luz verde ligada, este
chamado de Semforo Lder. A token
descrita a seguir, nada mais que a
habilidade de se ligar a luz verde. Desta
forma, a comunicao entre os dois
semforos necessria, para que a token seja repassada com segurana. Com a luz
verde ligada no semforo lder, ao trmino do tempo de verde, este ir enviar uma
mensagem, do tipo TOKENCHANGING, para o prximo semforo pertencente ao
Figura 7 - Fluxograma de Transio de Token
-
8/10/2019 Projeto Com Zigbee CC2531
9/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
9
grupo, seguindo a ordem pr-programada, que foi especificada quando o grupo foi
formado. O semforo alvo, ao receber esta mensagem, ir responder com a
mensagem CHANGINGACCEPTED. Quando o semforo lder receber a mensagem de
resposta, seu estado atual deve ser a cor amarela. Por fim, este ir responder com a
mensagem TOKENSENT, e ir mudar para o estado Vermelho. O semforo alvo,
recebendo esta mensagem, ir se tornar o novo semforo lder, e ter seu estado
alterado para verde. No processo de mudana do semforo lder, este somente ter
seu estado alterado da luz amarela, para a luz vermelha, se e somente se, o semforo
alvo responder com a mensagem CHANGINGACCEPTED. Caso acontea de a
mensagem no chegar antes do tempo de amarelo do semforo lder expirar, este irnotificar os demais membros do grupo que o sistema est fora de sincronia, e
consequentemente ir ativar o safe driver. Desta forma, todos os demais semforos
tero os seus respectivos safe driversativados tambm.
1. (Para configuraes que exijam que dois ou mais semforos estejam ligados ao mesmo
tempo, seria necessrio criar uma nova lgica semafrica para estes. Deste modo, somente
ser coberto neste projeto, a configurao que permita que um semforo esteja com a luz
verde ligada, enquanto os demais estejam com a luz vermelha ativa.)
4.5Processo de configurao dos dispositivos
Para efetuar a configurao dos dispositivos, via SignalBeeUI, o software ir
enviar uma struct preenchida com todas as configuraes especificadas, desta
forma, sempre que um pedido de configurao feito o dispositivo totalmente
reconfigurado, tendo somente como exceo seu ID, que nico e gravado
juntamente com o firmware. As structs enviadas podem ser vistas nas figuras 8 e 9
respectivamente. E o cdigo completo pode ser vistos no Anexo XXIII.
-
8/10/2019 Projeto Com Zigbee CC2531
10/179
-
8/10/2019 Projeto Com Zigbee CC2531
11/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
11
4.6 Comunicao entre dispositivosOs mdulos zigbees se comunicam atravs de mensagens denominadasclusters, os clusters so provenientes dos profiles, os quais so definidospelo consrcio Zigbee Alliance. Para o desenvolvimento foram especificadosos clusters da tabela 2
Tabela 2 - Tabela de clusters usados para comunicao entre dispositivos
Cluster ID Table
CLUSTER_NAME CLUSTER_ID CLUSTER_DESCRIPTION
SEMAPHORE_STATUS 5 Utilizado para reportar os dados ao software do PC
CMD_SET_CONFIG 6
Cluster bidirecional, para uso de publicao de novas
configuraes.
MEMBER_SEARCH_REQUEST 7Quando em grupo, para efetuar a busca dos membros que no
se encontram online.
MEMBER_SEARCH_RESPONSE 8Resposta de um membro, ao lder, quando este recebe uma
mensagem de cdigo 7
MEMBER_PING 9Ping direcionado a um membro em especfico, para manter
certa integridade do grupo.
MEMBER_PONG 10Resposta de um membro, ao lder, quando este recebe uma
mensagem de cdigo 10
GROUP_STATUS_OFFLINE 11
O leader notifica o restante dos membros do grupo, que o
grupo se encontra em estado 'STANDBY'
GROUP_STATUS_ONLINE 12O leader notifica o restante dos membros do grupo, que o
grupo se encontra em estado 'PRONTO'.
TOKEN_ACQUIRE 13O leader envia ao membro a token de acesso, a qual d direito
ao mesmo de trocar as lmpadas para verde e amarelo.
TOKEN_RELEASE 14O membro devolve a token de acesso ao lder, e aguarda p/ a
prxima token.
LIGHT_STATUS_RESPONSE 15Resposta de um membro, ao lder, quando este recebe uma
mensagem de cdigo 16
LIGHT_STATUS_REQUEST 16O leader pergunta qual o estado das lmpadas a um membro
especfico.
LIGHT_FAILURE 17Quando uma lmpada falha em algum semforo membro, o
mesmo dispara uma mensagem com esse cluster ID.
-
8/10/2019 Projeto Com Zigbee CC2531
12/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
12
4.7 Safe Driver
O Safe Driver um conjunto de aes que foram determinadas a partir danecessidade de se proteger os motoristas de falhas adversas no semforo. Sua
principal funo pulsara lmpada amarela (que significa ateno) quando algum
problema ocorre no sistema. Para configuraes em
grupo, quando um membro, independente se este seja o
lder ou no, se desconectar da rede Mesh, ou, no
conseguir verificar se os demais membros esto online, o
safe driver ir entrar em ao. Esta proteo tambm ser
utilizada se o mdulo ZigBee venha a travar ou at mesmo
queimar. Por fim, caso alguma lmpada esteja queimada,
um sinal ser emitido pelo detector de corrente para o
mdulo ZigBee, o qual ir identificar esse sinal, e
consequentemente ativar o safe driver. Para entrar em
ao, o safe driver dever verificar o sinal do pino P0.1
(figura 5), o qual foi chamado de alive, e monitorar o sinal de entrada. Quando o
sinal de alive estiver em nvel lgico 1 (um) (5 volts), passando pela porta NAND
(U14A, da figura 10),o safe driverestar desativado, o que representa que o circuito
est em funcionamento normal. Para o nvel lgico 0 (zero) (0 volts), o safe driver
entrar em ao visto que algum erro ocorreu, os quais podem ser:
Configurao em Grupo:
Membro desconectado;
ZigBee Travado ou Queimado;
Perda de conexo com a rede Mesh;
Queima de alguma lmpada do semforo;
Configurao Simples
-
8/10/2019 Projeto Com Zigbee CC2531
13/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
13
ZigBee Travado ou Queimado;
Queima de alguma lmpada do semforo;
Como parte integrante do safe driver, foi elaborado uma lgica inicial utilizando
portas AND, OR e NOT. Porm devidos a alguns testes descritos no item Testes e
Resultados, foi necessrio algumas alteraes no SafeDriver para a implementao
definitiva do projeto, pois notamos divergncias quando a lmpada est em alta
impedncia (sem sinal de ligada ou desligada). Para tal reparo foi necessria
insero de resistores de 10k Ohms na entrada dos sinais que ligam as lmpadas,caracterizando um resistor de pull-down Tambm foi includa no circuito,
representado pela figura 10, uma porta AND (U15A) para comparar o sinal do
circuito pisca com o sinal de alive, deste modo o circuito NAND no alimenta
diretamente o astavl, pois aps testes do prottipo percebeu-se que o astvel
consome muita tenso em seus pulsos. Para criar o sinal pulsante, que ativa a luz
amarela do semforo a cada 1s aproximadamente, a qual a principal caracterstica
do safe driver, foi projetado um multivibrador astvel que gera pulsos de 1Hz.Nocircuito do multivibrador e nos demais circuitos integrados (U1 at U13) foi
adicionado um capacitor no valor de 100nF entre o VCC e o GND, fazendo o papel
de armazenar tenso para os pulsos do astvel e para os CIs o papel de estabilizar
a tenso de alimentao. As lmpadas na figura so indicadas pelos LEDs, na
sequncia Vermelha(LED2), Verde(LED3) e Amarela(LED1). Mais detalhes do
circuito sero descritos nos prximos tpicos.
-
8/10/2019 Projeto Com Zigbee CC2531
14/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
14
Figura 10 - Circuito Lgico Seletor de Estado e Multivibrador Astvel
4.8 Detector de corrente
O detector de corrente sofreu apenas uma alterao referente ao comeo e ao
fim do projeto, referente ao circuito inicial, foi includo em sua sada um opto
acoplador parecido com o MOC3023, o 4N25 que se utiliza de um opto transistor e
sua funo na sada do detector isolar a entrada do CC2530EM (descrito como
sendo nosso semforo.), j que este admite uma entrada de no mximo 3V e visto
que antes do 4N25 (U1) temos uma sada 5V.Para que seja ento, detectado
quando uma lmpada queima (circuito aberto), foi elaborado o circuito descrito na
figura 11. Sua principal funo notificar o mdulo ZigBee de que a lmpada em
questo est queimada, o qual ser feito atravs dos pinos P0.6(Detector da
lmpada vermelha), P0.7(Detector da lmpada verde), e P1.1(Detector da lmpada
amarela),. De forma a exemplificar o funcionamento do circuito, considera-se que a
lmpada esteja funcionando normalmente. Primeiramente foi colocado um resistor
de potncia de 10/1W em srie com a lmpada alvo do detector, para gerar uma
queda de tenso mnima. Seguindo, se tem os diodos zener, que estaro ceifando o
sinal para, aproximadamente, +5v e -5v, juntamente de um retificador de onda
completa (ponte de wien) e um filtro RC, o qual ir eliminar/diminuir o efeito ripple do
-
8/10/2019 Projeto Com Zigbee CC2531
15/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
15
sinal. Caso o valor de sada antes do U1 seja 0, ento a lmpada estar queimada,
e o LED do U1 no acender, isso faz com que o opto-transistor no feche e por
uma especificao tcnica do mdulo CC2530EM, que possui um resistor interno de
pull-up, temos um resistor de 10kem srie com a alimentao do prprio mdulo
para termos um efeito, de quando a lmpada estar queimada, termos uma entrada
em um dos pinos designados aos detectores, de no mximo 3V, ou nunca maior que
a prpria alimentao do CC2530EM. Entretanto, se o valor de sada antes do U1
for 5V, a lmpada estar funcionando, caracterizando por o LED do U1 acesso e o
opto-transistor fechado, forando, por assim dizer, um nvel de 0V na entrada de um
dos pinos designados ao detector. A tabela 3 resume o resultado obtido para odetector. Foi necessria a existncia de um circuito deste para cada lmpada do
semforo.
Tabela 3 - Funcionamento do Detector de corrente Valores de sada do 4n25
Estado da lmpada Sada do circuito detector entrada em
um dos pinos (P0.6, P0.7 ou P1.1)
Funcionando 0V
Queimada 3V ou valor aproximado da alimentao dozigbee
Figura 11 - Circuito detector de corrente
-
8/10/2019 Projeto Com Zigbee CC2531
16/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
16
4.9 OptoAcoplador
Para garantir que o circuito de alta potncia - utilizado para ativar as lmpadas -
esteja isolado do circuito digital, foi criado um circuito auxiliar utilizando um opto
acoplador da Motorola, modelo MOC3023. Utilizando os pinos de sada das portas
ANDs(figura 10)U4, U5 e U6 de cada uma das lmpadas - estes so conectados
ao seu respectivo MOC3023. Desta forma a ativao o circuito digital ficar isolado
do circuito de alta potncia. Para acionar a lmpada, que est em 110V/127V, ser
utilizado um TRIAC (BTA12), do outro lado do MOC3023. O diagrama eltrico do
opto acoplador pode ser visto na figura 12.
Figura 12 Diagrama Eltrico Opto acoplador
-
8/10/2019 Projeto Com Zigbee CC2531
17/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
17
4.10 Fonte de alimentao
Inicialmente a fonte de alimentao seria feita pela equipe, mais visando
economia e a praticidade, decidimos utilizar uma fonte de computador. Os cabos de
sada da fonte foram adaptados, pois no precisaramos da sada que normalmente
as fontes de PC possuem, sendo assim adaptamos um conjunto de conectores DC,
de acordo com a figura 13.Tal mudana na parte da fonte no teve impacto grande
no projeto, pois a fonte independente dos mdulos e ela apenas precisaria cumprir
o requisito de nos entregar 5 volts e com um divisor de tenso, formado por diodos e
resistores, podemos tirar as demais tenses necessrias para o projeto (3V e 2V). O
esquemtico final da fonte representado pela figura 14. Alm de termos as
pequenas tenses a fonte de computador tambm nos permitiu retirar os 127V para
ativao das lmpadas, resumindo, o projeto tem apenas uma entrada de
alimentao. O circuito final com a integrao da alimentao + safedriver +
optoacoplador + detector, caracterizando-se pela placa de circuito impresso (PCI ou
do ingls PCBprinted circuit board)pode ser visto no Anexo VIII.
Figura 13 - Fonte de Tenso e conectores DC
-
8/10/2019 Projeto Com Zigbee CC2531
18/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
18
Figura 14 - Esquemtico da Alimentao
4.11 Fluxograma do Software
Para o software do chip CC2530, que roda nos semforos, foidesenvolvido o fluxograma representado na figura 15. O seu funcionamentoser baseado em tarefas, e o prprio sistema operacional chamado deOSAL - do mdulo ZigBee contido na Z-STACK, ir gerenciar a execuo dasmesmas. A tarefa ZNP (ZigBee Network Protocol), responsvel pela leiturae transmisso dos pacotes via wireless, de acordo com o protocoloIEEE802.15.4. Esta j esta includa no sistema operacional por padro, e no
ser alterada neste projeto. O software ser codificado e programado no chipCC2530 utilizando o aplicativo IAR Embedded Workbench for MSC-51, nalinguagem C.
-
8/10/2019 Projeto Com Zigbee CC2531
19/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
19
Figura 15 - Fluxograma do software do semforo (CC2530EM)
4.12 Materiais Utilizados
Para desenvolver o firmware dos semforos, foram utilizados os seguintes
materiais/softwares:
DIA Diagram Ed ito r (LINUX):Software para elaborao de fluxogramas.
Licena: GNU/Open Source.
Nat ional Instrum ents Circu i t Design Suite v10.0 (WINDOWS):Software
utilizado para elaborao e teste dos diagrama eltricos. Licena: Trial.
Adobe Pho tosh op CS3 (WINDOWS):Software utilizado para elaborao
de imagens 2D. Licena: Trial.
IAR Embedd ed Work bench for MCS-51 7.51A (WINDOWS): Software
utilizado para programar os mdulos CC2530EM e CC2531. Licena:
Trial.
-
8/10/2019 Projeto Com Zigbee CC2531
20/179
-
8/10/2019 Projeto Com Zigbee CC2531
21/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
21
5.2 Interface de Dados da Rede
Para que o dongle possa trocar informaes com o software desenvolvido para
computador, ser utilizada a interface USB. Para o correto funcionamento da porta
USB, dever ser feito a inicializao da mesma no software contido no chip, e
configurado os valores para a comunicao serial, especificados a seguir:
Baud Rate: 115200Bit Numbers: 8Stop Bit: 1Parity: No
1. (Os valores de configurao da porta serial virtual devem ser os mesmos que foram
especificados no framework).
2. ( necessria a instalao de um driver, desenvolvido pela TI, que efetua a converso dos
dados enviados ao USB para o formato serial. Este pode ser encontrado no site do fabricante,
no pacotehttp://www.ti.com/litv/zip/swrc088c.zip)
Com isso, quando uma mensagem recebida pela rede, o software contido no
dongle ir enviar os dados para a USB, os quais sero serializados pelo driver.
Posteriormente o framework far a leitura dos dados e ir encapsular as informaes
em forma de uma struct descrita no item Framework - para que o software de
computador SignalBeeUI possa interpretar de maneira correta. Da mesma forma, o
SignalBeeUI poder enviar informaes aos dispositivos, que obrigatoriamente ter
que seguir o caminho inverso, ou seja, os dados sero enviados ao framework em
forma de uma struct, e enviados ao dongle atravs da comunicao serial. Este por fim
ir ler as informaes e repassar a um ou mais dispositivos alvos. Todo o cdigo pode
ser visto no anexo XXX.
http://www.ti.com/litv/zip/swrc088c.ziphttp://www.ti.com/litv/zip/swrc088c.ziphttp://www.ti.com/litv/zip/swrc088c.ziphttp://www.ti.com/litv/zip/swrc088c.zip -
8/10/2019 Projeto Com Zigbee CC2531
22/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
22
5.3 Fluxograma de Software
Para o software do chip CC2531, que roda no dongle, foi desenvolvido o
fluxograma representado na figura 17. Assim como o software do semforo, seu
funcionamento tambm ser baseado em tarefas, e o prprio sistema operacional
OSAL ir gerenciar a execuo das mesmas. A tarefa ZNP (ZigBee Network Protocol),
tambm responsvel pela leitura e transmisso dos pacotes via wireless, de acordo
com o protocolo IEEE802.15.4. Esta j esta includa no OSAL por padro, e no ser
alterada neste projeto. O software ser codificado e programado no chip CC2531
utilizando o aplicativo IAR Embedded Workbench for MSC-51, na linguagem C.
Figura 17 - Fluxograma do software do coordenador (CC2531EMK)
-
8/10/2019 Projeto Com Zigbee CC2531
23/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
23
5.4 Z-STACK
A Z-STACK a pilha dos mdulos
CC2530EM/CC2531EMK desenvolvida pela TI, especfica
para a plataforma ZigBee, para ser utilizada pelos
desenvolvedores criarem suas aplicaes. Ela
composta do sistema operacional OSAL, e implementada
utilizando um modelo OSI (Open System Interconnection),
o qual possibilita que a rede mesh trabalhe com oprotocolo IPv4. Possui ainda, garantia de entrega de
pacotes, encriptao de mensagens utilizando AES-256bits (Advanced Encryption
Standard) e controle de erros.
1. (O link que contm o detalhamento completo da Z-STACK, pode ser encontrado nas
referncias bibliogrficas.)
6.0 Framework
O Framework tem como principal funo serializar os dados recebidos do software de
computador para posterior envio ao dongle, assim como efetuar a leitura dos dados
enviados pelo dongle, e estruturar os mesmos para que possam ser lidos pelo SignalBeeUI,
figuras 18 e 19.
Para a comunicao dos semforos com o software o framework utiliza-se da seguintestruct:
-
8/10/2019 Projeto Com Zigbee CC2531
24/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
24
Figura 18 - Estrutura de comunicao entre os semforos e o software
E para a comunicao no caminho inverso, ou seja, do software para os semforos, o
framework se utiliza da seguinte struct:
Figura 19 -Estrutura de comunicao entre os software e os semforos
-
8/10/2019 Projeto Com Zigbee CC2531
25/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
25
Todo o framework foi programado utilizando a linguagem C/C++, e empacotado em
forma de biblioteca dinmica (.dll para Windows e .so para Linux), o qual poder ser
carregado dinamicamente no sistema operacional pelo software SignalBeeUI. Para a
criao do framework ser utilizado o software Qt Creator, e a biblioteca Qt, ambos
disponibilizados pela Nokia, e que esto sob licena LGPL (Lesser General Public License).
Abaixo uma breve descrio do significado de serializao, retirada do site Wikipdia:
A serializao de dados consiste no processo de salvar um objeto em um meio de armazenamento
(como um arquivo de computador ou um buffer de memria) ou transmiti-lo por uma conexo de rede, seja em
forma binria ou em formato de texto como o XML. Esta srie de bytes pode ser usada para recriar um objeto
com o mesmo estado interno que o original.
-
8/10/2019 Projeto Com Zigbee CC2531
26/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
26
7.0 SignalBee UI
Para que seja intuitivo o controle e superviso dos semforos conectados a rede mesh,
foi desenvolvido um software chamado SignalBeeUI. Este foi codificado na linguagem C++,
utilizando biblioteca Qt. A verso final da interface do software pode ser visto na figura 20.
Com o software o usurio pode efetuar o controle dos tempos de verde, amarelo e vermelho
de cada semforo, verificar se o semforo se encontra conectado rede mesh e
funcionando normalmente, ou se possui alguma lmpada queimada.
Figura 20 Representao do software de superviso e controle do SignalBee - SignalBeeUI
-
8/10/2019 Projeto Com Zigbee CC2531
27/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
27
7.1 Superviso
Para que o processo de superviso pudesse ficar visvel, o software possui em
sua interface o estado das lmpadas de cada semforo, assim como, se o semforo se
encontra conectado na rede ou no, e para configuraes em grupo, se o grupo se
encontra funcional ou no. Estas informaes esto acessveis ao usurio, quando se
selecionar o semforo desejado, assim como, quando algum evento ocorrer no
sistema: Queima de uma lmpada do semforo, ou perca de conexo com a rede
mesh. Tambm foi desenvolvidos cdigos para identificao dos eventos, eles podem
ser vistos na tabela 4 e podem ser visto com o restante do cdigo no anexo XXXVIII.
Tabela 4 - Cdigos de identificao de eventos
Cd ig o Nome Des cr io
1 EVENT_NWK_CLUSTER_DISCOVERY Cdigo utilizado quando um
dispositivo se conecta na rede mesh.
2 EVENT_ROUTER_SEMAPHORE_STATE
Cdigo utilizado quando o semfororeporta ao software do s
configuraes e o status atual do
dele como: tempo de cada lmpada,quem o lder (se tiver), id do grupo,qual lmpada est acesa, safe driver,
etc.
3 EVENT_ROUTER_SEMAPHORE_CMD_REQ
Cdigo utilizado para troca de
mensagem do PC (SignalBeeUI) para
o semforo
4 EVENT_ROUTER_SEMAPHORE_CMD_RESP
Cdigo utilizado para troca de
mensagem do semforo para o PC
(SignalBeeUI)
5 EVENT_ROUTER_SEMAPHORE_CMD_ERROR
Cdigo utilizado para troca de
mensagem quando h erro de
transmisso do PC para o semforo.
-
8/10/2019 Projeto Com Zigbee CC2531
28/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
28
7.2 Controle
Assim como o processo de superviso, o software conta com comandos para
efetuar o controle dos semforos. Os comandos disponveis sero:
Alterar o tempo de Verde, Amarelo e Vermelho:Caso o semforo alvo
seja membro de algum grupo, a alterao feita no tempo de qualquer lmpada
ir refletir em todos os outros semforos pertencentes ao grupo em questo. Se
o semforo alvo no for membro de nenhum grupo, o tempo ser atualizado
normalmente.
Remover um grupo: Dado um grupo formado previamente, o mesmo
poder ter sua formao desfeita, caso necessrio.
Criar um grupo:O usurio ir selecionar os semforos desejados que
estejam disponveis na tela, conhecendo a localizao fsica de cada um, e
poder efetuar a criao de um grupo.
Remover semforo: Dado um determinado semforo, previamente
cadastrado, o mesmo poder ser removido do sistema, caso este no faa parte
de um grupo qualquer. Caso o semforo continue ativo fisicamente, este ainda
ir aparecer na interface do usurio.
Cadastrar semforo: Sabendo que cada semforo possui um nmero
respectivo de identificao, que foi especificado no processo de gravao do
chip, o usurio do sistema poder efetuar o cadastro do semforo de duas
maneiras:
o Conhecendo o nmero de identificao do semforo, o usurio do
sistema poder efetuar o cadastro deste, caso o semforo no se
encontre conectado na rede mesh;
o Caso o semforo esteja conectado na rede mesh, e ainda no se
encontre cadastrado no sistema, o seu cadastro poder ser feito
atravs da interface visual do sistema;
-
8/10/2019 Projeto Com Zigbee CC2531
29/179
-
8/10/2019 Projeto Com Zigbee CC2531
30/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
30
7.4 Materiais Utilizados
Para criao do esboo final, assim como o modelo de banco de dados, foram
utilizados os seguintes softwares:
DIA Diagram Ed itor (LINUX):Software para elaborao de fluxogramas
e diagrama UML. Licena: GNU/Open Source.
DBDesig ner Fo rk 2009 (WINDOWS):Software utilizado para elaborao
de banco de dados. Licena: GNU/Open Source. QT Design er (WINDOWS):Software pertencente ao pacote Qt da Nokia.
Utilizado para criao do esboo do SignalBee UI. Licena: Freeware.
QT Creator (WINDOWS):Software pertencente ao pacote Qt da Nokia.
Ser utilizado para se programar o software SignalBee UI. Licena:
Freeware.
8.0 Testes e Resultados
Os testes realizados foram baseados no diagrama geral do projeto, apresentadona figura 1 deste documento e repetida a seguir, na figura 23, os testes referentes aocoordenador, foram inutilizados na implementao final, visto que foi descartada averificao de controle de conexo de membro, inicializao da rede e comunicaoserial atravs dos LEDs do dongle e sim atravs do software (SignalBeeUI).
Figura 23 - Diagrama de bloco da viso geral do projeto.
-
8/10/2019 Projeto Com Zigbee CC2531
31/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
31
8.1Semforos
Testes Descrio Resultados
Esperados
ResultadosObtidos
Ao tomadaem caso defalha do teste
Alterar tempo deverde e/ou
amarelo e/ouvermelho
Configuraosimples
Teste onde ousurio do
SignalBeeUI tevede mudar os
tempos de verdee/ou amarelo e/ou
vermelho.
Mensagens de erroou de sucesso,assim como a
mudana de tempo
da(s) lmpada(s).
Sucesso namensagem de erroe na mensagem desucesso. Tempos
alterados no novociclo.
No foirequerida
nenhuma aoa ser tomada.
Deteco deLmpadaqueimada
Teste queconsistiuem verificar se uma
lmpadaencontrava-se
queimada ou no.
Amarelo piscante,safedriver ligado.
Alive em 0 einformao da
lmpada na tela doSignalBeeUI
Devido ao resistorde pull-up internodo CC2530EM, ocircuito montadocom o 4n25 no
funcionou conformeprojetado
inicialmente. O sinalde entrada no
CC2530EM nodetectava um nvellgico 0. Fazendocom que o teste
falhasse.
Aps o testeinicial e
pesquisa, foinecessrio
incluso de umresistor de 10kOhms entre a
alimentao dozigbee e o pino5 do 4n25 e opino 4 para o
terra paraforar o nvel
lgico para0.Tal mudana
impactou oprottipo e a
verso final do
projeto.
-
8/10/2019 Projeto Com Zigbee CC2531
32/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
32
Optoacoplador
Teste queconsistiu na
ativao de umalmpada a partir
de um sinal de 5V.Teve como funo
o estudo dapossibilidade de
termos um sinal doZigbee acendendouma lmpada aoinvs de um LED.
Com um sinal de5V fornecido por
uma fonte (externa,bateria, etc..) umalmpada ligada em127V acionada.
Sucesso no teste.Com um sinal de5V conseguimos
acender umalmpada ligada a
rede> 127V
Devido aodiagrama dodatasheet docomponente
usado:MOC3023 (figura
12), nenhumaao foi tomada.
Semforosimples (sem
grupo)
Esse teste tevecomo finalidade
testar a
implementao dosemforo simples.
Ao iniciar o sistematodo, a luz amarela
piscante deveriaestar ativa, logoaps foi feito um
teste ligando todasas lmpadas em
menos de 1segundo(verificaoincial de nenhumalmpada j iniciar
queimada). E porfim a lgica
semafrica simplesdeveria estarfuncionando
Teste realizadocom sucesso. Aoinicializarmos o
sistema o pino dealive ficou em 0V e
conformeverificado no teste
do safe driver,quando o pino dealive estivesse em
0 a luz amarela
piscante estariaativa.E aps se
verificar quenenhuma lmpadaestava queimada
inicialmente, algica semafrica
simples comeou afuncionar.
No foi tomada
nenhuma ao.
-
8/10/2019 Projeto Com Zigbee CC2531
33/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
33
Semforoquando
membro de umgrupo
O teste teve comofinalidade testar aimplementao dalgica semafrica
de grupo
O semforodeveria funcionar
normalmente, oque se caracteriza
pela troca deestados (cores),descritas no item4.4.Caso um oumais semforos
tivessemproblemas, estesdeveriam entrar
em modo de alerta(luz amarela
piscante)
Teste realizadocom sucesso.
Cada semforoque foi
configurado comomembro de grupo
passou aapresentar a
lgicaapresentada no
item 4.4.
Como o teste foiacompanhado dodebug do cdigoonde se encontra
a lgicasemafrica de
membro de grupo,a ao tomada foimodificaes nocdigo medida
que o testefalhasse.
SafeDriver
Esse teste tevecomo finalidade
testar asfuncionalidades do
circuito do safedriver. Para tal
injetou-se sinaisde 5V simulandoos pinos de alive,amarelo, verde e
vermelho
O resultadoesperado era: se o
pino de aliveestivesse em nvel
lgico 0, noimportava qual
lmpada estivesseligada, o safe
driver deveria ligar
e o amarelopiscante deveriaaparecer. Com o
alive em nvellgico 1 e todas aslmpadas em nvel0, o safedriver noativaria; duas oumais lmpadas
ligadas com aliveem nvel lgico 1
nenhuma lmpada
ativaria. Casocontrrio o alive
em 1 e um pino deuma lmpada emnvel lgico 1, a
lmpadacorrespondente
acenderia.
O teste teve 90%de sucesso em umprimeiro momento,
pois devido a seruma lgica digital,foi possvel fazertabelas com os
resultadosesperados. Porm
foi verificadonesse teste que
quando tnhamosausncia de sinal(alta impedncia) lmpada tinha
um nvel lgicoindefinido, e eranecessrio ou
nvel lgico 1 ounvel lgico 0
A ao noimpactou oresultado
esperado. Pararesolver oproblema da altaimpedncia foinecessria aincluso de
resistores de 10kohms entre a
entrada do pino eo terra. Tal
mudana afetou oprottipo e
consequentementea verso final.
-
8/10/2019 Projeto Com Zigbee CC2531
34/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
34
Desconexo demembro do
grupo
O teste ocorreuem duas etapas:
Primeiro foi
desconectado umsemforo do
grupo e observou-se se os demais
entravam emestado de alerta,logo depois seobservou no
SignalBeeUI se omesmo apareciacomo INATIVO
Esperou-se que os
demais semforosda rede entrassem
em estado dealerta e que no
softwareSignalBeeUI o
semforo que foidesconectado
aparecesse comoINATIVO
Houve sucesso no
teste. Com umsemforo
desconectado ogrupo restante
entrou em modode alerta e foi
avisado aosoftware qual
semforo estavadesconectado.
No foi tomadanenhuma ao.
8.2 Framework
Testes Descrio Resultados
Esperados
ResultadosObtidos
Ao tomada
ComunicaoSerial c/ omdulo
CC2531EMK
Esse teste teve
como finalidadeverificar acomunicao daporta USB com o
CC2531EMK(coordenador). O
mduloCC2531EMK foiprogramado com
uma lgica deecho, a qual toda
e qualquer
informaorecebida na porta
USB, seriaredirecionadanovamente aporta USB,
simbolizando umecho.
O framework iria
enviar algunsbytes randmicospela serial, e
estes deveriamser reenviados devolta pelo donglepara a porta USB.
Com issoframework iria
efetuar a leiturados dados
recebidos, e
verificar-se-ia seos dados foram os
mesmos queforam enviadosanteriormente.
Tivemos sucessono teste.
Nenhuma aoprecisou ser
tomada
-
8/10/2019 Projeto Com Zigbee CC2531
35/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
35
8.3 SignalBeeUI
Testes Descrio Resultados
Esperados
ResultadosObtidos
Ao tomada
Lmpadaqueimada
Esse teste tevecomo finalidadevisualizar se oSignalBeeUI
demostrava emsua tela qual
lmpada estavaqueimada e
deveria sinalizarao usurio que a
mesma precisavaser substituda.
o software deveria
sinalizar em formade aviso, qual
lmpada estava
queimada. Se
nenhuma
lmpada
estivesse
queimada, o
softwarecontinuaria a
representar o
funcionamento
normal do
sistema.
Ao simularmos aqueima de uma
lmpada notamosque o softwareindicava qual
lmpada estavaqueimada,pedindo ao
usurio que asubstitusse e
sinalizava que osafedriver estavaligado.
Nenhuma aoprecisou ser
tomada.
-
8/10/2019 Projeto Com Zigbee CC2531
36/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
36
Configuraodos tempos das
lmpadas
Esse teste tevecomo finalidade,
verificar se afuno de
configurar tempodas lmpadas do
SignalBeeUIestava funcional,
dada uma entradade tempo pelo
usurio emsegundos.
Quando o usurio
efetuasse a troca
do tempo de
verde, ou de
amarelo de um
determinado
semforo, osistema deveria
retornar uma
mensagem de
sucesso. Caso
algum problema
ocorresse, o
sistema deveria
retornar uma
mensagem de
erro.
Os tempos foramconfigurados
corretamente e ostempos mostrados
no SignalBeeUIforam alteradoscom sucesso.
Nenhuma aoprecisou ser
tomada.
-
8/10/2019 Projeto Com Zigbee CC2531
37/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
37
Formao deGrupo
No software estdisponvel uma
opo paraformao de
grupo. Sabendodisso, o teste
destinou-se, apsa criao dogrupo pelo
usurio, aosoftware mostraruma
representao,tanto textual
quanto grfica,mostrando o
estado do grupo(ativo ou inativo),quais membros
estariamconectados e o
endereo de cadaum na rede mesh.Em caso de falha
deveria sermostrado aousurio uma
mensagem deerro.
O resultadoesperado foi aapresentao
textual e grficano software.
Tanto arepresentao
grfica quanto atextual
apareceram nosoftware.
Como o teste foiacompanhado dodebug do cdigoonde se encontra
a lgicasemafrica de
membro de grupo,a ao tomada foimodificaes nocdigo medida
que o teste
falhasse.
-
8/10/2019 Projeto Com Zigbee CC2531
38/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
38
Desconexo domembro do
grupo
Esse testeconsistiu em
mostrar na telaqual semforo
estavadesconectado e
consequentementemostrar que os
outros semforosentraram em
estado de alerta. Ese nenhumsemforoestivesse
desconectadodeveria sermostrado o
funcionamentonormal do grupo.
O resultadoesperado
destinou-se aapresentao dequal semforo foidesconectado e aindicao textual
e grfica dosoutros semforosdo grupo (estado
de alerta)
Tanto arepresentao
grfica quanto atextual
apareceram nosoftware.
Como o teste foiacompanhado dodebug do cdigoonde se encontra
a lgicasemafrica de
membro de grupo,a ao tomada foimodificaes nocdigo a medida
que o testefalhasse.
Funcionamentodo sistema
O teste consistiu
em verificar se oSignalBeeUIapresentava em
sua tela asinformaes dosistema: Estado
daslmpadas;Quallmpada estava
ativa e o estado dosafedriver.
Todas as
informaescitadas deveriamcomparecer na
tela e estarem deacordo com o queest acontecendo
no real.
Como no prottipo
tivemos apossibilidade dever o que ocorre
no real,verificamos no
software se haviacoerncia entre o
real e o que oSignalBeeUI nosmostrava. Assim,
houve xito noteste.
Nenhuma ao
precisou sertomada.
-
8/10/2019 Projeto Com Zigbee CC2531
39/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
39
9.0 Concluso
O projeto teve como objectivo, desenvolver um sistema de controle e superviso dos
semforos existentes nas cidades, empregando a tecnologia wireless ZigBee. Este por sua
vez, apresenta alguns pontos interessantes, como o baixo consumo de energia, ser
ecologicamente correto e de baixo custo (no h a necessidade de cabos e dos tubos para
passagem de fios). No software do sistema de controle e superviso (SignalBeeUI), o
administrador pode efetuar alteraes nas temporizaes dos semforos, criar grupos de
semforos que iro trabalhar em conjunto, assim como efetuar a superviso de cada um
dos semforos conectado a rede, possibilitando saber se o mesmo est funcional, e se
possui alguma lmpada queimada, ou at mesmo outro problema. Optou-se por usar uma
estratgia de desenvolvimento em mdulos, pois este modelo permitiu a equipe uma maior
abstrao do projeto, proporcionando uma viso geral do funcionamento do sistema
completo, e de cada mdulo separado, facilitando a implementao. No processo inicial de
desenvolvimento do projeto, percebeu-se que o mesmo precisava de vrios ajustes, o que
acabou por ajudar a especificar melhor os riscos do projeto. J na fase intermediria do
projeto, a utilizao de fluxogramas e a existncia dos testes de caixa preta e branca,
permitiu que tivssemos uma viso mais slida, possibilitando que cada mdulo fosse
implementado da melhor maneira possvel. Na maioria do projeto um cronograma grfico
permitiu uma viso clara das etapas concludas, as que estavam em andamento e as que
estavam por vir, permitindo que o tempo fosse gerenciado de forma efetiva para a
concluso do projeto. Antes de finalizar o projeto, um prottipo nos ajudou a perceber
possveis erros para serem corrigidos na verso final e percebemos que os testes so
essenciais para que um projeto seja aperfeioado e seus erros consertados. No projeto,
nos deparamos com algumas dificuldades: de inicio foi referente ao entendimento da
tecnologia utilizada (ZigBee, relativamente nova); no decorrer as dificuldades encontradas
foram referentes fabricao da placa e a implementao do algoritmo de semforo em
grupo. Quanto ao design e confeco da placa de circuito impresso, a equipe se deparou
com problemas de interferncia no circuito, esta proveniente no somente do ambiente,
mas tambm do prprio circuito. Aps uma anlise mais detalhada, viu-se que a disposio
dos componentes no circuito impresso essencial, assim como a criao da chamada
-
8/10/2019 Projeto Com Zigbee CC2531
40/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
40
malha de terra, a qual auxiliana eliminao de intereferncias. J quanto a confeco da
placa de circuito impresso, aps inmeras tentativas sem sucesso de se desenvolver uma
placa caseira, visto que devido a grande quantidade de componentes TTL, era necessria
uma placa de no mnimo 2 faces (superior e inferior), a equipe se decidiu por delegar o
processo de fabricao das mesmas a uma empresa especializada. Este passo foi
essencial para a concluso do projeto, dado o fato que foram desenvolvidas quatro (4)
placas, e se as mesmas se encontrassem em protoboard, o risco de falha seria muito
maior. Um outro grande problema enfrentado pela equipe, no processo de
desenvolvimento do projeto, foi a fragilidade das conexes via rdio. Aps um longo
estudo, acreditava-se que seria possvel desenvolver uma aplicao slida, visando manterum canal de comunicao entre os semforos o mais estvel possvel. Entretanto, aps a
finalizao do software, e incio dos testes, o sistema se demonstrou sucetvel a
interferncias, de uma forma que acaba por ser prejudicial ao projeto. O problema se
encontra especificamente na maneira em que o frameworkda pilha ZigBee funciona, em
outras palavras, um problema a qual a equipe no pode solucionar. O problema se
caracteriza pelo atraso na entrega dos pacotes, aonde em certos casos, este atraso
chegou a 10s. O fato de receber um pacote em atraso, acaba por bagunar a lgicasemafrica, e apesar dos esforos da equipe para tentar manter a integridade semafrica,
o mesmo ainda, em situaes bem especficos de quando o pacote foi recebido e qual era
o estado do semforo, acaba por falhar. Aps algumas pesquisas e conversas com o
coordenador do projeto, o grupo descobriu que o atraso nos pacotes pode ser, e
provavelmente , devido a maneira em que os pacotes so transmitidos pela stack ZigBee.
Este processo conhecido como Collision Avoidance. Por fim, o projeto funcionou
conforme o esperado e atingiu os objetivos propostos, mas tambm, abriu espao parauma possvel continuao do mesmo, visando melhorar o algortimo semafrico de forma a
tornar-lo mais slido e seguro, assim como a busca de alternativas para a correo dos
problemas exitentes. Por fim, o software de controle e superviso, o qual foi implementado
pela prpria equipe, se adequou aos objetivos propostos, podendo ser ele, tambm
aperfeioado para superviso de mais dados referentes aos semforos se necessrio.
-
8/10/2019 Projeto Com Zigbee CC2531
41/179
Pontifcia Universidade Catlica do ParanCentro de Cincias Exatas e de Tecnologia
Engenharia de ComputaoProjeto Final II
Alex Soletti
Fabiano Reino Beraldo Curitiba 2010
41
10.0 Referncias Bibliogrficas
[1] Getting started with ZigBee and IEEE 802.15.4. Disponvel em:. ltimo acesso em 21 deabril de 2010.
[2] NationalInstrumentsCircuit Design Suitev10.0. Acessoem 6 de maio de 2010
[3] Especificaes de componentes eltricos. Disponvel em: .Acesso em 23 de maio de 2010
[4] QtFramework.Disponvel em:. Acesso em 23 de
maio de 2010[5] Tom'sPlannerCronograma Grfico. Disponvel em: .
ltimo acesso 16 de junho de 2010.
[6] Especificaes e aplicaes do circuito integrado NE555. Disponvel em:. ltimo acesso em 2 de junho de 2010
[7] Adobe Photoshop.Disponvel em:. Acesso em 30 de maiode 2010.
[8] IAR Embedded Workbench for MCS-51 7.51. Disponvel em:. Acesso em 20 de maio de 2010.
[9] Texas Instruments. Disponvel em: .ltimo de acesso em 5 demaio de 2010.
[10] Z-stackcontm o executvelZStack-CC2530-2.3.0-1.4.0.exe (the "full"CC2530 Z-stack v.2.3.0 & Application Examples. Arquivo swrc126.zip (56.9MB)disponvel . ltimo acessoem 15 de junho de 2010.
[11] SignalBeeControle Semafrico sem fio.. Disponvel . ltimo acesso em 18 denovembro de 2010.
[12] Projeto SignalBeeBoard Working. Disponvel . ltimo acesso em 20 denovembro de 2010.
[13] Projeto SignalBeeAll Boards Working. Disponvel. ltimo acesso em 22 denovembro de 2010.
http://www.daintree.net/whatsnew/080229-primer.phphttp://www.ni.com/multisim/http://br.mouser.com/http://qt.nokia.com/products/http://tomsplanner.com/http://ivairijs.vilabol.uol.com.br/CI-555.htmlhttp://www.adobe.com/br/products/photoshop/photoshop/http://www.iar.com/website1/1.0.1.0/3/1/http://www.ti.com/http://focus.ti.com/docs/toolsw/folders/print/z-stack.htmlhttp://www.youtube.com/watch?v=eyJ26QxrY3Ehttp://www.youtube.com/watch?v=0W3YXxY1qdUhttp://www.youtube.com/watch?v=IV4qcEub03Uhttp://www.youtube.com/watch?v=IV4qcEub03Uhttp://www.youtube.com/watch?v=0W3YXxY1qdUhttp://www.youtube.com/watch?v=eyJ26QxrY3Ehttp://focus.ti.com/docs/toolsw/folders/print/z-stack.htmlhttp://www.ti.com/http://www.iar.com/website1/1.0.1.0/3/1/http://www.adobe.com/br/products/photoshop/photoshop/http://ivairijs.vilabol.uol.com.br/CI-555.htmlhttp://tomsplanner.com/http://qt.nokia.com/products/http://br.mouser.com/http://www.ni.com/multisim/http://www.daintree.net/whatsnew/080229-primer.php -
8/10/2019 Projeto Com Zigbee CC2531
42/179
-
8/10/2019 Projeto Com Zigbee CC2531
43/179
-
8/10/2019 Projeto Com Zigbee CC2531
44/179
20/11/2010 11:16:02 f=1.30 C:\Users\Furbyss\Desktop\eagle_signalbee_board_rev2.4-final\eagle_signalbee_board_rev2.
A17,5mm A17,5mm A17,5mm
12 121212
U$1
U$2
IC1
IC2
IC3
V1
V2
IC5
IC4
OK1
OK2
OK3
T1
T2
T3
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10 R
11
C1
C2
R12
R13 R
14
R15
R16
R17
R18
D2
D3
D1
D8
D9
D10
C3
O
K4
R19
R20
R21
R22
R23
R24
R25
D4
D5
D6
D7
D11
D12
C4
O
K5
R26
R27
R28
R29
R30
R31
R32
D13
D14
D1
5
D1
6
D17
D18
C5
O
K6
X1 X2X3X4
J1
R35 R37
U$1
U$2
L1
C6
LED1
R38
R39
R40
R41
R42
IC6
C8
C9
C10
C11
C12
C13
C14
C7
D20
D21
R43
C15
D19
R33
R34
R36
R44
LED2
LED3
LED4
LED5 LM324N
NE555N
7404N
7421N
7421N
7400N
7432N
MOC3023M MOC3023M MOC3023M
BT136 BT136 BT136
1N5817-B
1N5817-B
1N4004
1N4004
1N40041N4004
4N25M
1N5817-B
1N5817-B
1N4004
1N40041N4004
1N4004
4N25M
1N5817-B
1N5817-B
1N
4004
1N
4004
1N4004
1N4004
4N25M
74LS08N
1N4004
1N4004
1N4004
Anexo II - Disposio dos Componentes
-
8/10/2019 Projeto Com Zigbee CC2531
45/179
20/11/2010 11:17:45 f=1.30 C:\Users\Furbyss\Desktop\eagle_signalbee_board_rev2.4-final\eagle_signalbee_board_rev2.
Anexo III - Trilhas TOP
-
8/10/2019 Projeto Com Zigbee CC2531
46/179
20/11/2010 11:17:10 f=1.30 C:\Users\Furbyss\Desktop\eagle_signalbee_board_rev2.4-final\eagle_signalbee_board_rev2.
Anexo IV - Trilhas Bottom
-
8/10/2019 Projeto Com Zigbee CC2531
47/179
-
8/10/2019 Projeto Com Zigbee CC2531
48/179
Anexo VI - Final Board_Trilhas TOP
-
8/10/2019 Projeto Com Zigbee CC2531
49/179
ANEXO VII - Final Board_Trilhas Bottom
-
8/10/2019 Projeto Com Zigbee CC2531
50/179
Anexo VIII - Foto da Placa Final
-
8/10/2019 Projeto Com Zigbee CC2531
51/179
Anexo IX - Jumper realizado para consertar um erro de projeto
-
8/10/2019 Projeto Com Zigbee CC2531
52/179
Anexo X - Maquete, viso geral
-
8/10/2019 Projeto Com Zigbee CC2531
53/179
Anexo XI - Maquete, viso frontal
-
8/10/2019 Projeto Com Zigbee CC2531
54/179
Anexo XII - Maquete, viso traseira.
-
8/10/2019 Projeto Com Zigbee CC2531
55/179
#include "GroupLeader.h"#include "GroupMember.h"#include "Process.h"#include "Utils.h"#include "Semaforo.h"
//this will do the light changes when the time expires//and also read the sensors and active the safe driver,//if neededvoid sb_leader_processSemaphore(void){//verify if we have received the expected ping from coordinator, //otherwise we turn of the semaphore// sb_processCoordinatorStatus();sb_leader_pingMembers();
sb_leader_broadcastMembers();
//if any light is broken, check if it has back to normal if (semData.status_safe_driver_active) { if (!semData.status_light_red_working || !semData.status_light_yellow_working || !semData.status_light_green_working) {#if defined(LCD_SUPPORTED) HalLcdWriteStringValue( "err/LTest:", osal_GetSystemClock(), 16, HAL_LCD_LINE_3 );#endif if (!sb_process_initializeSemaphore()) return;
} else {#if defined(LCD_SUPPORTED) HalLcdWriteString( "LWorks! SD:ON" , HAL_LCD_LINE_3 );#endif } }//verify if the current active light is working, otherwise active the safe driver if (!sb_process_checkCurrentLightIntegrity()) {
sb_leader_setAndNotifyGroupStatus(false); return; } else { sb_leader_processOnlineStatus(); }if (semData.status_safe_driver_active)
return;if (!semData.group_ihavethetoken)
return;if (!semData.group_isprocessing)
Anexo XIII - Cdigo: Arquivo C - GroupLeader
-
8/10/2019 Projeto Com Zigbee CC2531
56/179
semData.group_isprocessing = true;//i have the token, do the processing.. semData.status_light_current_elapsed += SB_TIMER_PROCESS_SEMAPHORE_TIMEOUT; if (semData.status_light_current_value == 'R') {
if ((semData.status_light_current_elapsed/1000) >= semData.config_light_red_security_threshold)//hold 2 seconds{
semData.status_light_current_elapsed = 0; semData.status_light_current_value = 'G'; } } else if (semData.status_light_current_value == 'G') { if ((semData.status_light_current_elapsed/1000) >= semData.config_light_time_green)//green light time expired { semData.status_light_current_elapsed = 0; semData.status_light_current_value = 'Y';
} } else if (semData.status_light_current_value == 'Y') { if ((semData.status_light_current_elapsed/1000) >= semData.config_light_time_yellow)//yellow light time expired { semData.group_ihavethetoken = false; semData.status_light_current_elapsed = 0; semData.status_light_current_value = 'R'; semData.group_isprocessing = false; sb_leader_processGroupRound(semData.device_id);#if defined(LCD_SUPPORTED) HalLedBlink ( HAL_LED_1, 4, 50, 250 );
#endif}
} sb_utils_setSemaphoreLight(semData.status_light_current_value);}
//bring group online, if its not online yetvoid sb_leader_processOnlineStatus(void){ if (semData.group_token > 0) return;
if (semData.group_leader != semData.device_id) return;if (!semData.status_safe_driver_active ||
!semData.status_light_red_working || !semData.status_light_yellow_working || !semData.status_light_green_working) return;if (!sb_leader_isMembersOnlineAndWorking())
return;sb_utils_setSafeDriverStatus(false);
//if everyone is online, mark myself as the token owner ;)
-
8/10/2019 Projeto Com Zigbee CC2531
57/179
semData.group_isprocessing = false; semData.group_token = semData.device_id; semData.group_ihavethetoken = true;//i have the token ;) semData.status_light_current_elapsed = 0;sb_leader_setAndNotifyGroupStatus(true);
#if defined(LCD_SUPPORTED) HalLcdWriteString("group Online!!", HAL_LCD_LINE_2);//member query#endif}
/*******************************************************************# Xmit broadcast to find out where the members are!*******************************************************************/
int searchMemberTimeout = 0;
void sb_leader_broadcastMembers(void){ searchMemberTimeout += SB_TIMER_PROCESS_SEMAPHORE_TIMEOUT;if (searchMemberTimeout < SB_QUERY_MEMBERS_DELAY)
return;
searchMemberTimeout = 0;// osal_start_timerEx( sb_TaskID, SB_EVENT_QUERY_MEMBERS, SB_TIMER_QUERY_MEMBERS_TIMEOUT );//verify if we need to be connected or notif (semData.device_id != semData.group_leader)//not the leader :)
return;if (semData.group_isprocessing) //do not process if i have the token ;)
return;if (semData.group_token > 0)
return;bool isonline = sb_leader_isMembersOnlineAndWorking();
if (!isonline) { if (!semData.status_safe_driver_active)
sb_utils_setSafeDriverStatus(true);// semData.group_token = 0; //if we reach here, someone is not online, the member info if (!sb_nwk_sendOTAtoEveryone(MEMBER_SEARCH_REQUEST, (byte) sizeof(int), (byte *)&(semData.device_id {#if defined(LCD_SUPPORTED) HalLcdWriteString("xOTAErr: mbrQry", HAL_LCD_LINE_2);//failed to xmit#endif } }}
void sb_leader_memberLightFailure(afIncomingMSGPacket_t *pkt){ int idx = -1;
-
8/10/2019 Projeto Com Zigbee CC2531
58/179
// bool gstats = false;// bool success = false; semaphoreGroupStatus req;
//not in a group if (semData.group_id cmd.Data);
//process safedriver status idx = sb_leader_locateMemberIndexByID(req.device_id);//locate the guy! (this also will check if the guy is online)// if (idx == -1) //didnt found it, halt
// {// return; //just ingore it//// sb_leader_clearAllMembersInfo(false);//// sb_utils_setSafeDriverStatus(true);//// semData.group_token = 0;//// return;// }// req.status_light_red_working;// req.status_light_yellow_working;// req.status_light_green_working;// req.status_safe_driver_active;}
/*******************************************************************### LEADER -- IS aLL MEMBERS ONLINE## Check against valid device_id entries, and if the nwk address is not null*******************************************************************/bool sb_leader_isMembersOnlineAndWorking(void){ bool wasok; uint32 diff, now; for (uint8 i = 0; i < MAX_SEMAPHORES_MEMBERS; i++) {
//if at least one of the valid devices id's is offline, then, //the safe driver must be activated! :) if (semData.group_members[i].device_id > 0) { if (semData.group_members[i].nwk_short_addr == 0) {
#if defined(LCD_SUPPORTED) HalLcdWriteStringValue("mAddrFail:", semData.group_members[i].device_id, 10, HAL_LCD_LINE_2);//member#endif return false; } else if (semData.group_members[i].nwk_short_addr > 0) {
now = osal_GetSystemClock();
-
8/10/2019 Projeto Com Zigbee CC2531
59/179
-
8/10/2019 Projeto Com Zigbee CC2531
60/179
if (semData.group_leader != semData.device_id) return;req = *((semaphoreGroupStatus *) pkt->cmd.Data);
//process safedriver status
idx = sb_leader_locateMemberIndexByID(req.device_id);//locate the guy! (this also will check if the guy is online)if (idx == -1)//didnt found it, halt
{ return;//just ingore it// sb_leader_clearAllMembersInfo(false);// sb_utils_setSafeDriverStatus(true);// semData.group_token = 0;// return; }semData.group_members[idx].status_light_red_working = req.status_light_red_working;
semData.group_members[idx].status_light_yellow_working = req.status_light_yellow_working; semData.group_members[idx].status_light_green_working = req.status_light_green_working; semData.group_members[idx].status_safe_driver_active = req.status_safe_driver_active;#if defined(LCD_SUPPORTED) HalLcdWriteStringValue("lStatus recv:", req.device_id, 10, HAL_LCD_LINE_2);//member query#endif}
/*******************************************************************### LEADER -- PING MEMBERS## Issue ping to all members!
*******************************************************************/int pingMemberTimeout = 0;void sb_leader_pingMembers(void){uint32 diff = 0;
uint32 now = 0;pingMemberTimeout += SB_TIMER_PROCESS_SEMAPHORE_TIMEOUT;
if (pingMemberTimeout < SB_PING_MEMBERS_DELAY)
return;
pingMemberTimeout = 0;
// osal_start_timerEx( sb_TaskID, SB_EVENT_MEMBER_PING, SB_TIMER_MEMBER_PING_TIMEOUT );//not in a group if (semData.group_id
-
8/10/2019 Projeto Com Zigbee CC2531
61/179
if (semData.group_members[i].device_id > 0 && semData.group_members[i].nwk_short_addr > 0) {
//check if we sent the motherfucking ping, and the retarded semaphoro, didn't answered it yet //if so,we kill the fucking bastard
//first verify if the clock has exausted
now = osal_GetSystemClock(); if (semData.group_members[i].lastping > now) diff = ((65535 - semData.group_members[i].lastping) + now); else diff = now - (semData.group_members[i].lastping);
if ((diff > ((int) SB_PING_MEMBERS_DELAY+(SB_PING_MEMBERS_DELAY/2)) || !(semData.group_members[i] semData.group_members[i].lastping > 0)//timer timeout plus 2s {//#if defined(LCD_SUPPORTED)// HalLcdWriteString("mPing: went off", HAL_LCD_LINE_3); //failed to xmit// HalLedBlink ( HAL_LED_2, 4, 50, 250 );//#endif
sb_leader_clearMemberInfo(i, false); continue; }
//otherwise, we ping the fucking bastard ;) semData.group_members[i].pingindex += 1; semData.group_members[i].lastping = osal_GetSystemClock(); semData.group_members[i].lastping_received = false;// //fill up the reply addr// sb_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;// sb_DstAddr.addr.shortAddr = semData.group_members[i].nwk_short_addr; // sb_DstAddr.endPoint = 10;
//send over the airif (!sb_nwk_sendOTAtoTarget(semData.group_members[i].nwk_short_addr,
MEMBER_PING, (byte)sizeof( unsigned int )+1, (byte *)&(semData.group_members[i].pingindex))) {// sb_utils_setSafeDriverStatus(true); sb_leader_clearMemberInfo(i, false);#if defined(LCD_SUPPORTED) HalLedBlink ( HAL_LED_2, 4, 50, 250 ); HalLcdWriteString("mPingErr: Failed", HAL_LCD_LINE_3);//failed to xmit
#endif}
} }//after we ping all possible members, we verifiy if everyone is online, otherwise, we set the group offline and notify th //remaining online members this will prevent of if the member with the token dies, we will never receive the token repl //and the semaphore will be stuck waiting for a answer forever ;)if (!sb_leader_isMembersOnlineAndWorking())
sb_leader_setAndNotifyGroupStatus(false);}
//#if defined(LCD_SUPPORTED)// HalLcdWriteStringValue("mPingSent:", semData.group_members[i].lastping, 10, HAL_LCD_LINE_3); //failed
-
8/10/2019 Projeto Com Zigbee CC2531
62/179
// HalLedBlink ( HAL_LED_3, 4, 50, 250 );//#endif
/*** This is a reply from a member, with his device id. Previous, we xmited a bcast
* searching for members. The member has identified the request, and replied to us with* his device_id. We know search to see if his entry exists on the semaphores table, and* if yes, we update the table with his info, marking him online and ready to start running.**/void sb_leader_memberSearchReply(afIncomingMSGPacket_t *pkt){ if (semData.group_id cmd.Data);
//verify if the deviceid who replied is a semaphore member, //and if its already online or not //if yes, shutdown it because we wasn't expectating to receive this frame here for (uint8 i = 0; i < MAX_SEMAPHORES_MEMBERS; i++)//verify if we have this semaphore set as member {
if (semData.group_members[i].device_id == qm_deviceid)
{
if (semData.group_members[i].nwk_short_addr == 0)//its not online {#if defined(LCD_SUPPORTED) HalLcdWriteString("mInfo: Registered!", HAL_LCD_LINE_2);//member query#endif semData.group_members[i].nwk_short_addr = pkt->srcAddr.addr.shortAddr; // semData.group_members[i].endpoint = pkt->srcAddr.endPoint; // semData.group_members[i].isonline = true; semData.group_members[i].lastping = osal_GetSystemClock(); semData.group_members[i].lastping_received = true;
break; }
else//its already online, but received an member_info request.. drop it them {#if defined(LCD_SUPPORTED) HalLcdWriteString("mInfo: Error!", HAL_LCD_LINE_2);//member query#endif semData.group_members[i].nwk_short_addr = 0; // semData.group_members[i].endpoint = 10; // semData.group_members[i].isonline = false; semData.group_members[i].lastping = 0; semData.group_members[i].lastping_received = false; break; }
-
8/10/2019 Projeto Com Zigbee CC2531
63/179
} }}
//change the group status and notify the membersvoid sb_leader_setAndNotifyGroupStatus(bool enabled)
{ if (!enabled && !semData.status_safe_driver_active) sb_utils_setSafeDriverStatus(true);for (uint8 i = 0; i < MAX_SEMAPHORES_MEMBERS; i++)
{ if (semData.group_members[i].device_id > 0) { if (semData.group_members[i].nwk_short_addr > 0) { // //fill up the reply addr // sb_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
// sb_DstAddr.addr.shortAddr = semData.group_members[i].nwk_short_addr; // // sb_DstAddr.endPoint = pkt->srcAddr.endPoint;
if (!sb_nwk_sendOTAtoTarget(semData.group_members[i].nwk_short_addr, (enabled ? GROUP_STATUS_ONLINE : GROUP_STATUS_OFFLINE), (byte)sizeof( int ) +1, (byte *)&(semData.group_id))) { sb_utils_setSafeDriverStatus(true); sb_utils_sleep(250); } } }
}}
/** update who have the token*/void sb_leader_processGroupRound(int device_id){ bool found = false; int pos = -1;if (semData.group_id
-
8/10/2019 Projeto Com Zigbee CC2531
64/179
-
8/10/2019 Projeto Com Zigbee CC2531
65/179
// //fill up the reply addr// sb_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;// sb_DstAddr.addr.shortAddr = semData.group_members[pos+1].nwk_short_addr; // sb_DstAddr.endPoint = pkt->srcAddr.endPoint;
if (!sb_nwk_sendOTAtoTarget(semData.group_members[pos+1].nwk_short_addr, TOKEN_ACQUIRE, (byte)sizeof( int ) +1, (byte *)&(semData.group_token))) { sb_utils_setSafeDriverStatus(true); HalLedBlink ( HAL_LED_2, 4, 50, 250 ); } } else { semData.group_isprocessing = false;
semData.group_token = semData.device_id; semData.group_ihavethetoken = true; } }}
/*** the member notify the leader that he has released the token*/void sb_leader_memberTokenRelease(afIncomingMSGPacket_t *pkt){ semaphoreGroupStatus req;
// not in a group if (semData.group_id cmd.Data);
if (req.device_id == semData.group_token)
{ sb_leader_processGroupRound(req.device_id); } else { //group integrity has been broken //turn off everything sb_leader_setAndNotifyGroupStatus(false); sb_leader_clearAllMembersInfo(false); sb_utils_setSafeDriverStatus(true); }
-
8/10/2019 Projeto Com Zigbee CC2531
66/179
}
///**// * The member request what is the current group status.// * It will reply to the member, who is currently the member who have the token
// *///void sb_leader_groupStatusReq(afIncomingMSGPacket_t *pkt)//{//// bool groupstatus = false;// int idx = -1;// bool gstats = false;// bool success = false;// semaphoreGroupStatus req;// semaphoreGroupStatus resp;//// //not in a group// if (semData.group_id cmd.Data);//// //process safedriver status
// idx = sb_leader_locateMemberIndexByID(req.device_id); //locate the guy! (this also will check if the guy is online)//// if (idx == -1) //didnt found it, halt// {// sb_leader_clearAllMembersInfo(false);// sb_utils_setSafeDriverStatus(true);// semData.group_token = 0;// return;// }//// semData.group_members[idx].status_light_red_working = req.status_light_red_working;// semData.group_members[idx].status_light_yellow_working = req.status_light_yellow_working;
// semData.group_members[idx].status_light_green_working = req.status_light_green_working;// semData.group_members[idx].status_safe_driver_active = req.status_safe_driver_active;//// gstats = sb_leader_isMembersOnlineAndWorking();//// if (!req.status_light_red_working ||// !req.status_light_yellow_working ||// !req.status_light_green_working ||// !gstats)// {// // sb_leader_clearMemberInfo(idx, false);// sb_utils_setSafeDriverStatus(true);// semData.group_token = 0;// return;// }
-
8/10/2019 Projeto Com Zigbee CC2531
67/179
//// //the opposite of safe driver status ALWAYS// resp.alive = (gstats && !semData.status_safe_driver_active);// //who currently has the token// resp.device_token = semData.group_token;//
// //fill up the reply addr// sb_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;// sb_DstAddr.addr.shortAddr = pkt->srcAddr.addr.shortAddr;// // sb_DstAddr.endPoint = pkt->srcAddr.endPoint;//// //send over the air// success = (AF_DataRequest( &sb_DstAddr, &sb_epDesc,// GROUP_STATUS_RESP,// (byte)sizeof( semaphoreGroupStatus ) +1,// (byte *)&resp,// &sb_TransID,// AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS);
////#if defined(LCD_SUPPORTED)// if (success)// {// HalLedBlink ( HAL_LED_1, 4, 50, 250 );// }// else// {// HalLedBlink ( HAL_LED_2, 4, 50, 250 );// }//#endif//}
void sb_leader_memberPongReply(afIncomingMSGPacket_t *pkt){ unsigned int pingindex = 0;//not in a group if (semData.group_id srcAddr.addr.shortAddr);//locate the guy! (this also wiif (idx == -1)//didnt found it, halt
{
// sb_utils_setSafeDriverStatus(true); sb_leader_clearMemberInfo(idx, false);
return; }pingindex = (unsigned int) *(pkt->cmd.Data);if (pingindex != semData.group_members[idx].pingindex)//check if the ping index matchs!
{// if (isConnected)
-
8/10/2019 Projeto Com Zigbee CC2531
68/179
// sb_doSendOTAtoCoordinator(SEMAPHORE_CUSTOM_REPORT, (byte) osal_strlen((char *)strMemberPongErr
sb_leader_clearMemberInfo(idx, false); sb_utils_setSafeDriverStatus(true); //remove the auth info for that semaphore and make the leader search for the device again! //(is that really necessary?)
return; }else if ((osal_GetSystemClock() - semData.group_members[idx].lastping) > ((int) SB_PING_MEMBERS_DELAY+(S
semData.group_members[idx].lastping > 0) {// sb_utils_setSafeDriverStatus(true); sb_leader_clearMemberInfo(idx, false); sb_leader_setAndNotifyGroupStatus(false); return; } else
{//everything looks fine, do we need to do anything else? semData.group_members[idx].lastping_received = true; }}
/*******************************************************************### MEMBER -- QUERY GROUP STATUS## scan over the group_members, to see if theres any online member with# the specified short address
*******************************************************************/int sb_leader_locateMemberIndexBySHORTADDR(uint16 shortaddr){ for (uint8 i = 0; i < MAX_SEMAPHORES_MEMBERS; i++) { if (semData.group_members[i].nwk_short_addr == shortaddr && semData.group_members[i].device_id > 0)
return i; } return -1;}
/*******************************************************************### MEMBER -- QUERY GROUP STATUS## scan over the group_members, to see if theres any online member with# the specified short address*******************************************************************/int sb_leader_locateMemberIndexByID(int device_id){ for (uint8 i = 0; i < MAX_SEMAPHORES_MEMBERS; i++) { if (semData.group_members[i].device_id == device_id) return i; } return -1;
-
8/10/2019 Projeto Com Zigbee CC2531
69/179
-
8/10/2019 Projeto Com Zigbee CC2531
70/179
#include "GroupLeader.h"#include "GroupMember.h"#include "Process.h"#include "Utils.h"#include "Semaforo.h"
bool sb_member_processLeaderStatus(void){
uint32 diff = 0; uint32 now = 0;
//proccess leader sync: is on a group, its not the leader and leader is online if (semData.group_leader != semData.device_id && isLeaderOnline) {
//leader is online.. process the data now = osal_GetSystemClock();
if (semData.group_leader_lastping > now) { diff = (65535 - semData.group_leader_lastping + now); }
else
{
diff = (now - semData.group_leader_lastping); }
//verify ping/pong if (diff > ((int) SB_PING_MEMBERS_DELAY+(SB_PING_MEMBERS_DELAY/2)) && semData.group_leader_lastpi {
isLeaderOnline = false;
// semData.group_token = 0; semData.group_isprocessing = false; semData.group_alive = false; semData.group_leader_lastping = 0; semData.group_leader_shortaddr = 0; sb_utils_setSafeDriverStatus(true);#if defined(LCD_SUPPORTED) HalLcdWriteStringValue("lTimeout:", diff, 10, HAL_LCD_LINE_1);#endif return false; }
else
{#if defined(LCD_SUPPORTED) HalLcdWriteStringValue("nPing:", (SB_PING_MEMBERS_DELAY - diff), 10, HAL_LCD_LINE_1);#endif } }
return true;
}
//this will do the light changes when the time expires//and also read the sensors and active the safe driver,//if neededvoid sb_member_processSemaphore(void){
semaphoreGroupStatus req;
Anexo XIV - Cdigo: Arquivo C - GroupMember
-
8/10/2019 Projeto Com Zigbee CC2531
71/179
//verify if we have received the expected ping from coordinator, //otherwise we turn of the semaphore// sb_processCoordinatorStatus();//try to initialize if semaphore is dead
if (semData.status_safe_driver_active) {
if (!semData.status_light_red_working || !semData.status_light_yellow_working || !semData.status_light_green_working) {
#if defined(LCD_SUPPORTED) HalLcdWriteStringValue( "SD:1 L:0", osal_GetSystemClock(), 16, HAL_LCD_LINE_3 );#endif if (!sb_process_initializeSemaphore()) return;
}
else {
#if defined(LCD_SUPPORTED) HalLcdWriteString( "SD:1 L:1" , HAL_LCD_LINE_3 );#endif } }
//verify if the current active light is working, otherwise active the safe driver if (!sb_process_checkCurrentLightIntegrity()) {
req.device_id = semData.device_id;
req.status_light_red_working = semData.status_light_red_working; req.status_light_yellow_working = semData.status_light_yellow_working; req.status_light_green_working = semData.status_light_green_working; req.status_safe_driver_active = semData.status_safe_driver_active;
sb_nwk_sendOTAtoLeader(LIGHT_FAILURE, (byte)sizeof( semaphoreGroupStatus ) +1, (byte *)&req);
sb_utils_setSafeDriverStatus(true); isLeaderOnline = false; semData.group_leader_shortaddr = 0; semData.group_leader_lastping = 0;
return; }
if (!sb_member_processLeaderStatus()) {
sb_utils_setSafeDriverStatus(true); semData.group_isprocessing = false; semData.group_ihavethetoken = false; return;
}
if (semData.status_safe_driver_active)//group bit is set return;
if (semData.group_ihavethetoken)
-
8/10/2019 Projeto Com Zigbee CC2531
72/179
{
//i have the token, do the processing.. if (!semData.group_isprocessing) semData.group_isprocessing = true;
semData.status_light_current_elapsed += SB_TIMER_PROCESS_SEMAPHORE_TIMEOUT;
if (semData.status_light_current_value == 'R') {
if ((semData.status_light_current_elapsed/1000) >= semData.config_light_red_security_threshold)//hold 2 second { semData.status_light_current_elapsed = 0; semData.status_light_current_value = 'G'; }
}
else if (semData.status_light_current_value == 'G') {
if ((semData.status_light_current_elapsed/1000) >= semData.config_light_time_green)//green light time expired {
semData.status_light_current_elapsed = 0; semData.status_light_current_value = 'Y'; }
}
else if (semData.status_light_current_value == 'Y') {
if ((semData.status_light_current_elapsed/1000) >= semData.config_light_time_yellow)//yellow light time expired { semData.group_isprocessing = false; semData.group_ihavethetoken = false; semData.status_light_current_elapsed = 0; semData.status_light_current_value = 'R';
//notify the leader that we will release the token ;) if (!sb_nwk_sendOTAtoLeader(TOKEN_RELEASE, (byte)sizeof( int ) +1, (byte *)&(semData.device_id))) {
sb_utils_setSafeDriverStatus(true); }
}
}
sb_utils_setSemaphoreLight(semData.status_light_current_value); }
}
/*******************************************************************# Request to leader whats the group status# include the light status, and the safe driver status,# so the leader can keep track of whats happening on our side (member)*******************************************************************/
void sb_member_leaderLightStatusRequest(afIncomingMSGPacket_t *pkt){
semaphoreGroupStatus req;
int group_id;
-
8/10/2019 Projeto Com Zigbee CC2531
73/179
-
8/10/2019 Projeto Com Zigbee CC2531
74/179
return;
if (semData.group_leader == semData.device_id) return;
if (semData.group_isprocessing)
return;
if (isLeaderOnline) return;
qm_deviceid = (int) *(pkt->cmd.Data);
if (semData.group_leader != qm_deviceid) return;
//ok, who sent the message is the leader// //fill up the reply addr
// sb_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;// sb_DstAddr.addr.shortAddr = pkt->srcAddr.addr.shortAddr; // sb_DstAddr.endPoint = pkt->srcAddr.endPoint;if (sb_nwk_sendOTAtoTarget(pkt->srcAddr.addr.shortAddr,
MEMBER_SEARCH_RESPONSE, (byte)sizeof( int ) +1, (byte *)&(semData.device_id))) {
isLeaderOnline = true; semData.group_isprocessing = false; semData.group_ihavethetoken = false; semData.group_leader_lastping = osal_GetSystemClock();
semData.group_lead