Projeto Com Zigbee CC2531

download Projeto Com Zigbee CC2531

of 179

Transcript of Projeto Com Zigbee CC2531

  • 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