A maior rede de estudos do Brasil

Grátis
181 pág.
Dissertacao Luis Henrique Monteiro de Castro versao07AGO2016

Pré-visualização | Página 11 de 43

Para a comunicação com o Processing, podemos utilizar as velocidades de 300, 600, 
1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 74880, 115200, 230400 e 
22 
 
250000 bauds. A escolha de maiores velocidades de transmissão garante, por consequência, 
uma interação mais rápida com o Processing propiciando uma melhor apresentação dos 
resultados. Nos projetos em que a aquisição de dados é realizada em função do tempo, é 
necessária a utilização da maior velocidade disponível. 
 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑏𝑒𝑔𝑖𝑛(250000); 
 
 Para a transmissão e a recepção de dados por parte do Arduino são utilizadas as 
funções: 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑟𝑒𝑎𝑑( ); Lê dados seriais de entrada. 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑝𝑟𝑖𝑛𝑡( ); Imprime dados para a porta serial como texto ASCII18 
legível. Este comando pode assumir muitas formas. Os 
números são impressos usando um caractere ASCII para 
cada dígito. Números decimais são também impressos como 
dígitos ASCII, com duas casas decimais. Bytes são enviados 
como um único caractere. Caracteres e strings19 são 
enviadas sem nenhuma alteração. 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑝𝑟𝑖𝑛𝑡𝑙𝑛( ); Imprime dados para a porta serial como texto legível ASCII 
seguido por um caractere de retorno de carro (ASCII 13 ou 
'\r’) e um caractere de nova linha (ASCII 10 ou '\n’). Este 
comando assume as mesmas formas como 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑝𝑟𝑖𝑛𝑡( );. 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑎𝑣𝑎𝑖𝑙𝑎𝑏𝑙𝑒( ); Obtém o número de bytes disponíveis no buffer20 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑝𝑎𝑟𝑠𝑒𝐼𝑛𝑡( ); Retorna o primeiro número inteiro válido, do tipo longo, 
presente no buffer serial. Caracteres que não são números 
inteiros são ignorados. 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑤𝑟𝑖𝑡𝑒( ); Grava dados binários para a porta serial. Estes dados são 
enviados como um byte ou uma série de bytes; 
 
Tabela 11 – Algumas funções da biblioteca serial do Arduino 
Fonte: Serial library em www.processing.org, consultado em 29/07/2016 
 
 As funções de comunicação serial podem ser testadas em sua própria IDE, através da 
funcionalidade Serial Monitor, que disponibiliza uma interface gráfica para a visualização 
dos dados transmitidos/recebidos via interface serial. 
 
18 (American Standard Code for Information Interchange - Código Padrão Norte-americano para Intercâmbio 
de Informações) Código numérico binário usado para representar os caracteres, compreendido por 
equipamentos e softwares. Foi desenvolvido pelo American National Standards Institute a partir da proposta 
de Robert William Bemer e sua equipe. 
19 Sequência de caracteres, geralmente utilizada para representar palavras ou frases. 
20 Memória física utilizada para armazenar temporariamente dados, no caso do buffer serial, ele armazena os 
dados enquanto aguardam para serem transmitidos serialmente, bit a bit, pela interface serial. 
23 
 
Código: 
int valor = 0; 
void setup() { 
 Serial.begin(9600); 
 while (!Serial){} 
 } 
void loop() { 
 if (Serial.available() > 0) { 
 valor = Serial.parseInt(); 
 } 
 Serial.print("valor: "); 
 Serial.println(valor); 
 valor = valor+1; 
 delay(2000); 
} 
 
 
 
Figura 7 – Tela da IDE Arduino com o código 
 
 
Figura 8 – Tela do Serial Monitor 
 
No Processing, a comunicação serial é estabelecida com o uso da biblioteca serial 
que deve ser importada no início do código com a instrução import e com a criação de uma 
instância do tipo Serial. 
24 
 
𝑖𝑚𝑝𝑜𝑟𝑡 𝑝𝑟𝑜𝑐𝑒𝑠𝑠𝑖𝑛𝑔. 𝑠𝑒𝑟𝑖𝑎𝑙.∗ 
𝑆𝑒𝑟𝑖𝑎𝑙 𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙; 
 
Assim como no Arduino, a interface necessita de uma configuração prévia. No 
Processing, é necessário definir uma nova classe serial vinculada a instância previamente 
criada e definir a velocidade de transmissão em bits por segundo e a porta na qual o software 
irá realizar a leitura dos dados. 
 
𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙 = 𝑛𝑒𝑤 𝑆𝑒𝑟𝑖𝑎𝑙(𝑡ℎ𝑖𝑠, 𝑆𝑒𝑟𝑖𝑎𝑙. 𝑙𝑖𝑠𝑡( )[0], 250000); 
 
Com o intuito de visualizar as portas seriais ativas no computador, podemos incluir 
a função: 𝑝𝑟𝑖𝑛𝑡𝐴𝑟𝑟𝑎𝑦(𝑆𝑒𝑟𝑖𝑎𝑙. 𝑙𝑖𝑠𝑡( )); que apresentará estes dados no terminal da IDE do 
Processing. A porta a ser utilizada será a mesma porta utilizada para a gravação do Arduino. 
Apresentamos algumas das funções presentes na biblioteca serial necessárias para a 
comunicação com o Arduino: 
𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙. 𝑟𝑒𝑎𝑑( ); Retorna um número entre 0 e 255 para o 
próximo byte que está esperando no buffer. 
Retorna -1 se não houver nenhum byte, embora 
isso deve ser evitado com o uso da função 
𝑎𝑣𝑎𝑖𝑙𝑎𝑏𝑙𝑒( ) para verificar se os dados estão 
disponíveis na porta especificada. 
𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙. 𝑟𝑒𝑎𝑑𝑆𝑡𝑟𝑖𝑛𝑔𝑈𝑛𝑡𝑖𝑙(𝑙𝑓); Combinação das funções readBytesUntil () e 
ReadString (). Que retorna a sequência de 
caracteres (string) contida na porta 
especificada antes do byte especificado. 
Retorna NULL se não houver dados que 
atendam a condição. 
𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙. 𝑝𝑟𝑖𝑛𝑡( ); Escreve bytes, caracteres, inteiros, arrays21 e 
strings na porta serial especificada. 
𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙. 𝑝𝑟𝑖𝑛𝑡𝑙𝑛( ); Escreve bytes, caracteres, inteiros, arrays e 
strings na porta serial especificada, seguido por 
um caractere de retorno de carro (ASCII 13 ou 
'\ r’) e um caractere de nova linha (ASCII 10 
ou '\ n' ). 
𝑝𝑜𝑟𝑡𝑎𝑆𝑒𝑟𝑖𝑎𝑙. 𝑎𝑣𝑎𝑖𝑙𝑎𝑏𝑙𝑒( ); Retorna o número de bytes disponíveis na porta 
serial especificada, neste caso, portaSerial 
𝑆𝑒𝑟𝑖𝑎𝑙. 𝑙𝑖𝑠𝑡( ) Obtém uma lista de todas as portas seriais 
disponíveis. 
 
Tabela 12 – Algumas funções da biblioteca Serial do Processing 
Fonte: Serial library em www.processing.org, consultado em 29/07/2016 
 
 
21 Estrutura de dados que armazena uma coleção de elementos de tal forma que cada um dos elementos possa 
ser identificado por um índice. Também são chamados de vetores. 
25 
 
As funções de comunicação serial do Processing também podem ser testadas em sua 
própria IDE, porém é necessário primeiro programar o Arduino e depois o Processing. Os 
códigos são apresentados a seguir: 
Código Arduino: 
int valor = 0; 
void setup() { 
 Serial.begin(9600); 
 while (!Serial){} 
 } 
void loop() { 
 if (Serial.available() > 0) { 
 valor = Serial.parseInt(); 
 } 
 Serial.println(valor); 
 valor = valor+1; 
 delay(2000); 
} 
 
Código Processing: 
import processing.serial.*; 
String serialString; 
Serial portaSerial; 
int lf = 10; 
void setup() 
{ 
 printArray(Serial.list()); 
 portaSerial = new Serial(this, Serial.list()[0], 9600); 
 portaSerial.clear(); 
 size(10, 10); 
} 
 
void draw() { 
 while (portaSerial.available() > 0) { 
 serialString = portaSerial.readStringUntil(lf); 
 if (serialString != null) { 
 print("valor = "); 
 println(serialString); 
 } 
 } 
} 
26 
 
 
 
 
Com a comunicação serial estabelecida entre o Arduino e o Processing, é possível 
construir circuitos para medir, através de sensores, as variáveis da natureza, com o Arduino 
realizar a aquisição e o envio desses valores para o Processing que, com a programação 
adequada poderá apresentar essas informações de forma gráfica e em tempo real na tela do 
computador e armazenar os dados em arquivos para posterior análise. A partir dessa 
estrutura, é possível criar os objetos educacionais de baixo custo, propostos neste capítulo a 
fim de contribuir para o desenvolvimento de uma metodologia alternativa para o Ensino de 
Física em nossas escolas. 
 Nos próximos três capítulos, serão abordados, individualmente, três sugestões 
didáticas