181 pág.

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