Mudanças entre as edições de "Oficina 2 de App Inventor - Arduino"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(13 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 25: Linha 25:
 
As mensagens enviadas do APP para o servidor tem o formato de Strings (sequência de caracteres).  
 
As mensagens enviadas do APP para o servidor tem o formato de Strings (sequência de caracteres).  
  
Essas Strings contém delimitadores de início e fim, campos que definem o tipo de mensagem, o Arduino controlador de destino, o pino do Arduino que será controlado ou lido, e o valor referente ao controle do pino.  
+
Essas Strings contém:
 +
* delimitadores de início e fim;
 +
* campos que definem: o tipo de mensagem, o Arduino controlador de destino, o pino do Arduino que será controlado ou lido, e o valor referente ao controle do pino.  
  
 
Entre os campos e delimitadores há um caracter separador.
 
Entre os campos e delimitadores há um caracter separador.
Linha 37: Linha 39:
  
  
Os delimitadores e os campos da mensagem desse protocolo são descritos abaixo:
+
Os delimitadores e os campos da mensagem desse protocolo são descritos abaixo.
 +
 
 +
== Delimitadores de Mensagem ==
  
'''Delimitadores de Mensagem'''
 
 
   
 
   
 
'''Identificador de inicio da mensagem - '*' (1 Byte )'''
 
'''Identificador de inicio da mensagem - '*' (1 Byte )'''
Linha 45: Linha 48:
 
Caracter da tabela ASCII que indica início de mensagem. Quando transmitido para o servidor, este inicia a recepção dos dados enviado.  
 
Caracter da tabela ASCII que indica início de mensagem. Quando transmitido para o servidor, este inicia a recepção dos dados enviado.  
  
''Identificador de fim da mensagem - '#' (1 Byte )''
+
 
 +
'''Identificador de fim da mensagem - '#' (1 Byte )'''
  
 
Caracter da tabela ASCII que indica fim de mensagem. Quando transmitido para o servidor, este termina a recepção dos dados.  
 
Caracter da tabela ASCII que indica fim de mensagem. Quando transmitido para o servidor, este termina a recepção dos dados.  
 +
  
 
'''Divisor de Campos da Mensagem'''
 
'''Divisor de Campos da Mensagem'''
Linha 56: Linha 61:
  
  
''Campos da mensagem ''
+
== Campos da mensagem ==
 +
 
  
  
 
''' Tipo_msg - (número indicando o tipo da mensagem) '''
 
''' Tipo_msg - (número indicando o tipo da mensagem) '''
  
Número que determina o tipo de mensagem. Os tipos possíveis são: Digitalwrite, Digitalread, PWMwrite, Analogicoread e Resposta.
+
Número que determina o tipo de mensagem. Os tipos possíveis são: Digitalwrite, Digitalread, PWMwrite, Analogicoread,  DigitalResposta, AnalogicoResposta.
  
  
Linha 78: Linha 84:
 
Define o valor a ser escrito numa porta digital ou PWM.
 
Define o valor a ser escrito numa porta digital ou PWM.
  
 +
=== Detalhamento dos tipos de mensagens ===
  
=== Detalhamento dos tipos de mensagens ===
 
  
  
Linha 85: Linha 91:
 
'''MSG_DIGITALWRITE - 10 (1 Byte )'''
 
'''MSG_DIGITALWRITE - 10 (1 Byte )'''
  
Define a ação de escrita numa porta digital, no campo valor deverá ser especicado ''0'' ou ''1''.
+
Define a ação de escrita numa porta digital, no campo valor deverá ser especificado ''0'' ou ''1''.
  
  
Linha 93: Linha 99:
  
 
No campo ''Porta'' os pinos são identificados pelos seguintes pinos
 
No campo ''Porta'' os pinos são identificados pelos seguintes pinos
 
  
 
{| class="wikitable" style="text-align: center; width: 30%;background-color: #fffff0"
 
{| class="wikitable" style="text-align: center; width: 30%;background-color: #fffff0"
Linha 125: Linha 130:
 
Acionamento de um  dos pinos digitais com PWM.
 
Acionamento de um  dos pinos digitais com PWM.
  
Os pinos reservados para acionamento  digital com PWM, ou seja, com valores que podem variar entre 0 e 255 são os pinos:
+
Os pinos reservados para acionamento  PWM, ou seja, com valores que podem variar entre 0 e 255 são os pinos:
  
 
  D3, D5, D6, D9, D10, D11.
 
  D3, D5, D6, D9, D10, D11.
  
 
No campo ''Porta'' os pinos são identificados pelos seguintes pinos
 
No campo ''Porta'' os pinos são identificados pelos seguintes pinos
 
  
 
{| class="wikitable" style="text-align: center; width: 30%;background-color: #fffff0"
 
{| class="wikitable" style="text-align: center; width: 30%;background-color: #fffff0"
Linha 157: Linha 161:
 
|}
 
|}
  
 
 
 
[[Arquivo:MSG_COMANDOB.png|600px]]
 
  
 
'''MSG_DIGITALREAD 13 (1 Byte )'''
 
'''MSG_DIGITALREAD 13 (1 Byte )'''
Linha 206: Linha 206:
 
|-
 
|-
 
|1
 
|1
|A1
+
|A0
 
|-
 
|-
 
|2
 
|2
|A2
+
|A1
 
|-
 
|-
 
|3
 
|3
|A3
+
|A2
 
|-
 
|-
 
|4
 
|4
|A4
+
|A3
 
|-
 
|-
 
|5
 
|5
|A5
+
|A4
 
|-
 
|-
 
|6
 
|6
|A6
+
|A5
 
|}
 
|}
  
  
 +
'''RSP_LEITURA 15 (1 Byte )'''
  
 +
Mensagem de resposta que fornece o valor de leitura da porta digital solicitada em mensagens do tipo 13.
  
'''RSP_LEITURA 15 (1 Byte )'''
 
  
Mensagem de resposta que fornece o valor de leitura da porta digital solicitada em mensagens do tipo 13.
 
  
 
'''RSP_LEITURA 17 (1 Byte )''''
 
'''RSP_LEITURA 17 (1 Byte )''''
  
 
Mensagem de resposta que fornece o valor de leitura da porta analógica solicitada em mensagens do tipo 16.
 
Mensagem de resposta que fornece o valor de leitura da porta analógica solicitada em mensagens do tipo 16.
As portas analógicas do microcontrolador que permitem essa leitura são as seguintes:
 
 
A0, A1, A2, A3, A4, A5.
 
 
'''RSP_STATUS 17 (1 Byte )'''
 
 
Valor com tamanho igual a 1 byte enviado como  decimal. Tipo de mensagem de resposta que define o valor de leitura da porta analógica solicitada em mensagem do tipo 16.
 
 
'''Identificador do Controlaor - Id XBee'''
 
 
Valor com tamanho igual a 1 byte enviado como  decimal. Pode assumir os valores 1 ou 2, referente ao Controlador do ambiente.
 
 
'''Porta'''
 
 
Valor com tamanho igual a 1 byte enviado como  decimal. Pode assumir valores de 1 a 6 e indicam a porta onde o eletroeletrônico está ligado no Controlador.
 
 
'''Valor'''
 
 
Valor com tamanho igual a 1 byte enviado como  decimal. Assume valores entre 0 e 255 e indicam o estado do eletroeletrônico ou o valor de ajuste.
 
 
 
 
'''Tipos de Mensagem - Tipo_msg'''
 
 
Como exemplo, se o programa receber na variável ''APP_command'' o tipo de mensagem ''MSG_DIGITALWRITE'' com valor 10 e na variável ''pin_num'' o valor 1, o subsistema de Gerenciamento de comando App executa o comando solicitado no pino digital 2 (primeiro pino digital após pinos 0 e 1, RX e TX). Se o programa receber na variável ''APP_command'' o tipo de mensagem ''MSG_DIGITALWRITE'' com valor 10 e na variável ''pin_num'' o valor 2, o subsistema de Gerenciamento de comando App executa o comando solicitado no pino digital 4 (segundo pino digital após pinos 0 e 1, RX e TX).
 
 
De maneira semelhante, a função processa o valor correto dos pinos digitais PWM e dos pinos analógicos.
 
 
Com o valor correto da porta definido pela função anterior, os comandos são executados conforme os parâmetros recebidos.
 
 
Se o controlador receber corretamente a mensagem do servidor e executar os comandos conforme solicitado, é montada e enviada em seguida uma mensagem de retorno para confirmar o recebimento da mensagem ou enviar valores de retorno.
 
  
 
==OFICINA - Atuação sobre a placa controladora usando sinais digitais e PWM==
 
==OFICINA - Atuação sobre a placa controladora usando sinais digitais e PWM==
  
Para atingir os objetivos desta oficina é necessário utilizar os códigos já realizados na oficina anterior onde se realizou a seleção do servidor de automação para a comunicação com os controladores. A partir desse ponto é lançada as seguintes tarefas:
+
Para atingir os objetivos desta oficina é necessário utilizar os códigos da oficina anterior que seleciona o servidor de automação para a comunicação com os controladores. A partir desse ponto é lançada as seguintes tarefas:
  
 
#Fique atento as explicações dos professores a respeito de como é estruturada e endereçada as mensagens para os controladores;
 
#Fique atento as explicações dos professores a respeito de como é estruturada e endereçada as mensagens para os controladores;
 
#Em um protoboard monte um circuito simples de LEDs que serão alimentados pelas portas digitais e PWM; Siga as instruções e cuidados orientados pelos professores;
 
#Em um protoboard monte um circuito simples de LEDs que serão alimentados pelas portas digitais e PWM; Siga as instruções e cuidados orientados pelos professores;
 
#Elabore um código para acender um LED em qualquer porta digital através do botão liga/desliga criado no layout da oficina anterior;
 
#Elabore um código para acender um LED em qualquer porta digital através do botão liga/desliga criado no layout da oficina anterior;
#Agora faça com que o led ligue e desligue alternadamente cada ve que se aperta o mesmo botão;
+
#Agora faça com que o led ligue e desligue alternadamente cada vez que se aperta o mesmo botão;
 
#Crie Um pisca pisca-pisca usando um timer;
 
#Crie Um pisca pisca-pisca usando um timer;
 
#Crie um novo comando usando um slider e use uma das portas PWM para controlar a luminosidade do led desde apagado até acesso por completo.
 
#Crie um novo comando usando um slider e use uma das portas PWM para controlar a luminosidade do led desde apagado até acesso por completo.

Edição atual tal como às 07h02min de 10 de dezembro de 2015

Comunicação entre o APP e os controladores

Na estrutura App Inventor- Arduinos preparada para desenvolvimento do projeto, existem três Arduinos. Apenas um deles se comunicará com o APP instalado no celular, chamaremos esse Arduino de servidor. Os outros dois Arduinos controlarão os dispositivos eletroeletrônicos ligados em suas portas e farão a comunicação com o Arduino Servidor. Chamaremos esses dois Arduinos de controladores.

Antes de iniciarmos a oficina de hoje precisamos entender como foi estruturada a comunicação entre o APP e os dispositivos eletrônicos conectados aos controladores.

A comunicação do APP será sempre com o Arduino servidor. Este por sua vez repassará a informação para os Arduinos controladores. Entre o servidor e o APP a comunicação é via Bluetooth. Entre o servidor e os controladores usamos a tecnologia Xbee para fazer a comunicação. O APP é sempre o responsável pelo início da comunicação. Para mudar o estado de qualquer uma das portas (digitais ou PWM) o pedido tem origem no APP. Do mesmo modo, para verificar o estado de uma das portas (Digital ou Analógica) o comando tem origem no APP. Na figura abaixo estão indicadas as posições das portas digitais, PWMs e Analógicas do Arduino. Na estrutura montada, com Arduino servidor e Arduinos controladores, só teremos acesso as portas dos Arduinos controladores.

PortasArduino.png


A figura que segue relaciona possíveis eletroeletrônicos que podem ser acionados/monitorados pelas portas do Arduino, com seus respectivos tipos de sinais.

SimbolosEletros.png


Descrição do Protocolo de Comunicação

Protocolo APP/Servidor

As mensagens enviadas do APP para o servidor tem o formato de Strings (sequência de caracteres).

Essas Strings contém:

  • delimitadores de início e fim;
  • campos que definem: o tipo de mensagem, o Arduino controlador de destino, o pino do Arduino que será controlado ou lido, e o valor referente ao controle do pino.

Entre os campos e delimitadores há um caracter separador.

As mensagens de retorno do Servidor para o APP contém um número menor de dados, assim, a estrutura do pacote é simplificada.


Na figura abaixo são mostradas as estruturas desses pacotes.

EstruturaPacotesAPP.png


Os delimitadores e os campos da mensagem desse protocolo são descritos abaixo.

Delimitadores de Mensagem

Identificador de inicio da mensagem - '*' (1 Byte )

Caracter da tabela ASCII que indica início de mensagem. Quando transmitido para o servidor, este inicia a recepção dos dados enviado.


Identificador de fim da mensagem - '#' (1 Byte )

Caracter da tabela ASCII que indica fim de mensagem. Quando transmitido para o servidor, este termina a recepção dos dados.


Divisor de Campos da Mensagem

DIV_MSG - '|' (1 Byte )

Caracter da tabela ASCII definido como separador dos campos da mensagem.


Campos da mensagem

Tipo_msg - (número indicando o tipo da mensagem)

Número que determina o tipo de mensagem. Os tipos possíveis são: Digitalwrite, Digitalread, PWMwrite, Analogicoread, DigitalResposta, AnalogicoResposta.


Id-Xbee - (1 ou 2)

Identifica o Arduino controlador para qual a mensagem deverá ser enviada.


Porta - (número correspondente a uma porta do Arduino)

Identifica a porta a ser lida ou escrita.


Valor - (valor a ser escrito na porta)

Define o valor a ser escrito numa porta digital ou PWM.

Detalhamento dos tipos de mensagens

MSG_DIGITALWRITE - 10 (1 Byte )

Define a ação de escrita numa porta digital, no campo valor deverá ser especificado 0 ou 1.


Os pinos reservados para acionamento digital na placa Arduino, ou seja, são os pinos:

D2, D4, D7, D8, D12, D13.

No campo Porta os pinos são identificados pelos seguintes pinos

Números das portas digitais e seus pinos no Arduino
Porta Pino
1 D2
2 D4
3 D7
4 D8
5 D12
6 D13


MSG_PWMWRITE 11 (1 Byte )

Acionamento de um dos pinos digitais com PWM.

Os pinos reservados para acionamento PWM, ou seja, com valores que podem variar entre 0 e 255 são os pinos:

D3, D5, D6, D9, D10, D11.

No campo Porta os pinos são identificados pelos seguintes pinos

Números das portas PWM e seus pinos no Arduino
Porta Pino
1 D3
2 D5
3 D6
4 D9
5 D10
6 D11


MSG_DIGITALREAD 13 (1 Byte )

Define pedido de leitura de uma das portas digitais seguintes:

Números das portas digitais e seus pinos no Arduino
Porta Pino
1 D2
2 D4
3 D7
4 D8
5 D12
6 D13

MSG_AnalogicalRead 16 (1 Byte )

Define mensagem de pedido de leitura de uma das portas analógicas. Os pinos analógicos que permitem essa leitura são as seguintes:

A0, A1, A2, A3, A4, A5.

As portas analógicas correspondentes aos pinos são:

Números das portas analógicas e seus pinos no Arduino
Porta Pino
1 A0
2 A1
3 A2
4 A3
5 A4
6 A5


RSP_LEITURA 15 (1 Byte )

Mensagem de resposta que fornece o valor de leitura da porta digital solicitada em mensagens do tipo 13.


RSP_LEITURA 17 (1 Byte )'

Mensagem de resposta que fornece o valor de leitura da porta analógica solicitada em mensagens do tipo 16.

OFICINA - Atuação sobre a placa controladora usando sinais digitais e PWM

Para atingir os objetivos desta oficina é necessário utilizar os códigos da oficina anterior que seleciona o servidor de automação para a comunicação com os controladores. A partir desse ponto é lançada as seguintes tarefas:

  1. Fique atento as explicações dos professores a respeito de como é estruturada e endereçada as mensagens para os controladores;
  2. Em um protoboard monte um circuito simples de LEDs que serão alimentados pelas portas digitais e PWM; Siga as instruções e cuidados orientados pelos professores;
  3. Elabore um código para acender um LED em qualquer porta digital através do botão liga/desliga criado no layout da oficina anterior;
  4. Agora faça com que o led ligue e desligue alternadamente cada vez que se aperta o mesmo botão;
  5. Crie Um pisca pisca-pisca usando um timer;
  6. Crie um novo comando usando um slider e use uma das portas PWM para controlar a luminosidade do led desde apagado até acesso por completo.