• Nenhum resultado encontrado

4.12 Sistema de proteção a gás

5.1.1 Sistema e protocolo de comunicação

Para que este trabalho fosse realizado o ARDUINO UNO deveria não somente se conectar ao computador, mas também ser capaz tanto de receber mensagens, que são os comandos recebidos pelo computador, quanto enviar mensagens, informando o status de funcionamento, qual a data e hora, estado, altura, entre outros. Criando um sistema de comunicação e protocolo de mensagens entre o ARDUINO UNO e o computador.

112 Capítulo 5. Implementação e programação dos sistemas

Nesse tópico serão discutidos como os problemas de comunicação e sincronização de relógios foram resolvidos, quais suas principais funções e objetivos. Primeiramente, definiu-se que o ARDUINO UNO deveria conter a data e hora corretas para que seu funcionamento fosse aplicado e os dados serem computados de forma correta, ou seja, sincronizar o relógio do ARDUINO UNO com o relógio do computador.

O ARDUINO UNO possui uma hora e data de início padrão, que é o dia 01/01/1970 e hora 00:00:00, data conhecida como Unix epoch [35], isso se deve ao fato de esta data, dia 1 de janeiro de 1970 às 00:00:00 do Tempo Universal Coordenado (UTC) ser o marco zero do sistema de calendário usado pelo sistema operacional UNIX. Quando o ARDUINO UNO é ligado, ele começa a contar o tempo a partir deste padrão. Para este trabalho, foi desenvolvida uma pequena função para receber a mensagem do computador, contendo a data e hora atual do computador, e sincronizar internamente. Essa função pode ser vista na figura 64abaixo.

Figura 64 – Função de sincronização do relógio

Para realizar essa sincronização o computador deve enviar uma mensagem contendo ’T + Epoch’, por exemplo, T1454523714. Ao enviar essa mensagem ao ARDUINO UNO, a função da figura 64 irá calcular o dia e hora atual e sincronizar em sua memória. Caso o ARDUINO UNO recebe essa mensagem, ele irá ajustar sua data e hora com o dia 03 de Fevereiro de 2016 18:21:54 GMT.

Para que a comunicação entre o computador e o ARDUINO UNO ocorra da melhor maneira possível, foi desenvolvido um protocolo de comunicação serial para que ambos se comuniquem de maneira correta. Isso evita que a mensagem recebida seja lida de forma errada pelo sistema e mostrando algo falso ao usuário ou realizando um comando falso.

Na tabela 1, é apresentado o protocolo de comunicação do ARDUINO UNO para o computador contendo 36 Bytes de tamanho. O primeiro e último Byte, 0xFE e 0xFF, respectivamente, são os caracteres que são verificados para checar se a mensagem recebida

5.1. Plataforma 113

começa e termina de forma correta e que nenhuma informação foi perdida durante o trajeto.

Tabela 1 – Protocolo de comunicação da plataforma

A função de cada parte da mensagem está descrita abaixo:

• Byte 1 - ’0xFE’ (ou letra ’E’ em ASCII) representa o início da mensagem do ARDUINO UNO para o usuário;

• Byte 2 - Informa se houve erro de protocolo;

• Byte 3 - Informa se o ARDUINO UNO foi sincronizado; • Bytes 4 & 5 - Informam o Dia salvo no ARDUINO UNO; • Bytes 6 & 7 - Informam o Mês salvo no ARDUINO UNO; • Bytes 8 & 9 - Informam o Ano salvo no ARDUINO UNO; • Bytes 10 & 11 - Informam a Hora salva no ARDUINO UNO; • Bytes 12 & 13 - Informam os Minutos salvos no ARDUINO UNO; • Bytes 14 & 15 - Informam os Segundos salvos no ARDUINO UNO; • Bytes 16, 17, 18 & 19 - Representam a altura da plataforma;

• Bytes 20 & 21 - Informam o número do sistema, que no caso da plataforma o número é 1;

• Bytes 22 & 23 - Informam o estado atual do sistema; • Bytes 24 & 25 - Informam o estado atual do motor;

114 Capítulo 5. Implementação e programação dos sistemas

• Bytes 26, 27, 28 & 29 - Informam o número da falha que ocorreu. Caso nenhuma falha tenha ocorrido o valor mostrado será 0000;

• Bytes 30 & 31 - Informam a severidade da falha ocorrida, caso nenhuma falha tenha ocorrido o valor mostrado será 00;

• Bytes 32 & 33 - Informam o estado do sensor 1; • Bytes 34 & 35 - Informam o estado do sensor 2; e,

• Byte 36 - ’0xFF’ (ou letra ’F’ em ASCII) representa o final da mensagem.

Para enviar a mensagem do computador para a plataforma é utilizado outro protocolo, conforme as tabelas2 e 3. Ao iniciar o ARDUINO UNO pela primeira vez, é necessário sincronizar seu relógio. Para isso, a mensagem seguindo o protocolo da figura2

é enviado primeiramente. A função de cada parte da mensagem está descrita abaixo: Tabela 2 – Protocolo de comunicação do computador antes da sincronização

• Byte 1 - ’0xFE’ (ou letra ’E’ em ASCII) representa o início da mensagem do usuário para o ARDUINO UNO;

• Byte 2 - Comando do computador para iniciar a sincronização do relógio do AR- DUINO UNO;

• Byte 3 - ’T’ representa o início da mensagem de sincronização; • Bytes 4 até 13 - Mensagem contendo o número Epoch; e,

• Byte 14 - ’0xFF’ (ou letra ’F’ em ASCII) representa o final da mensagem.

Após o ARDUINO UNO estar com o relógio sincronizado com o computador, o protocolo da tabela 3 entrará em ação. Ao enviar a mensagem com o comando para o ARDUINO UNO, o computador tem que se certificar que a mensagem chegará da maneira correta. Com isso, é utilizado também o mesmo sistema de protocolo no início e final da mensagem. Desta maneira o ARDUINO UNO lê a mensagem e verifica se o primeiro e último correspondem ao protocolo. Em caso afirmativo, ele lê a mensagem do Byte 2 e realiza o comando que foi enviado. A função de cada parte da mensagem e os comandos possíveis enviados pelo computador estão descritos abaixo:

5.1. Plataforma 115

Tabela 3 – Protocolo de comunicação do computador após a sincronização

• Byte 1 - ’0xFF’ (ou letra ’F’ em ASCII) representa o início da mensagem do usuário para o ARDUINO UNO;

• Byte 2 - O comando enviado pelo computador para o ARDUINO UNO; e, • Byte 3 - ’0xFE’ (ou letra ’E’ em ASCII) representa o final da mensagem.

——————————————————————————————————————

• 10000001 - Comando que pede ao ARDUINO UNO informar quais são os status atuais do programa;

• 10011001 - Comando para sincronizar o relógio do ARDUINO UNO; • 10000000 - Comando para enviar o acknowledge;

• 00000100 - Comando para fazer o motor parar;

• 00000010 - Comando para fazer a plataforma descer; e, • 00000001 - Comando para fazer a plataforma subir.