Scilab e Arduino – O Básico

Olá, esse material é um tipo de guia pra você ter um “pontapé” inicial no assunto: coletar dados com Arduino e Scilab. Conhecimentos básicos em eletrônica são desejáveis mas não obrigatórios. Você lerá a seguir algumas regras básicas quando mexemos com eletrônica. Quanto a programação, serão necessários mais conhecimentos se quiser incrementar o que colocarei aqui.

Os softwares mostrados aqui tratam apenas o sensor de temperatura e sem fazer conversão de valores. Completar os programas é a atividade que faço em sala de aula. Mas, se você não é da aula e quiser os programas completos, envie um e-mail para mim.

Eletrônica – Regras

Não colocarei aqui um tutorial sobre eletrônica básica, coloque esse tema numa busca na internet e terá material mais que suficiente. A ideia dessa seção é dar uma noção básica apenas. De como funciona e do que pode e não pode ser feito.

Regra 1: Todo dispositivo eletrônico funciona devido a um fluxo de elétrons (dos átomos). A esse fluxo, damos o nome de corrente elétrica. Existem duas formas desse fluxo ocorrer (sem muitos detalhes aqui):

  • Corrente contínua: O fluxo de elétrons parte de um pólo positivo e vai em direção ao negativo (foi convencionado que é assim, pois os cálculos tornam-se mais fáceis). Pegue uma bateria, nela temos o polo positivo e negativo. O lado positivo tem mais elétrons que o negativo, logo os lados tentam se equilibrar através do fluxo de elétrons. Quando tudo está equilibrado, então a bateria está descarregada.
  • Corrente alternada: O fluxo de elétrons muda de direção constantemente, não há um polo definido. É a corrente que temos nas tomadas de casa (110/220Vca). Dessa forma é mais fácil levar energia a longas distâncias, porém é mais perigosa, pois dá choque.

Usaremos aqui a corrente contínua.

Regra 2: Nunca conecte o positivo com o negativo diretamente (não cause um curto-circuito): Se você conectar o positivo e o negativo de uma pilha carregada usando apenas um pedaço de fio elétrico, vai perceber faíscas e aquecimento. Não faça isso por muito tempo (mais do que alguns milissegundos),  pois a pilha pode estourar e você se machucar.

Se a fonte de energia for outra, como a porta USB do computador, que contem 5 Vcc (Volts corrente contínua), você pode acabar estragando essa porta.

É obvio que não queremos um curto-circuito, mas acidentes acontecem. Por isso, ao revisar um circuito antes de ligá-lo, tenha como prioridade encontrar possíveis causas de curto circuito, depois vemos outras coisas.

Entre o positivo e o negativo deve sempre haver alguma carga. Isto é, alguma coisa que será ligada. Os elétrons saem do positivo, passam pela(s) carga(s) e daí encontram o negativo (fluxo).

Regra 3: Se ver fumaça, desligue da fonte de energia imediatamente.

Circuito Eletrônico

O circuito eletrônico para coletar os dados está na Figura abaixo. Você vai precisar de um Arduino, um LM35 (sensor de temperatura) e LDR (sensor de luminosidade) e um resitor de 10KOhms.

Observe o fluxo: O 5V da placa é levado (pelo fio vermelho) ao LDR, depois ele volta para o Arduino na porta de entrada A1 para leitura e também vai para o resistor. Passando por este, encontra-se o negativo (GND).

O 5V também é levado ao LM35, o qual contem um circuito interno para medição de temperatura.

Software para o Arduino

O software de leitura é bastante simples. Primeiro, inicializamos a porta serial para comunicação. Depois, implementamos a sequência de comandos em loop, a qual é: (a) Ler o sensor; (b) Imprimir “S:” para indicar inicio de transmissão; (c) Enviar o valor; (d) enviar “\n” para indicar término de transmissão; (e) aguardar 500ms. Terminada essa sequência, o processador volta a executar (a).

Nos microcontroladores, o programa é tal que permanece em loop infinito.

int sensorValue = 0; 

void setup() {
  //Inicializa a comunicacao serial
  Serial.begin(9600);
}

//Essa funcao permanece rodando em loop
void loop() {
  // le o sensor
  sensorValue = analogRead(A0);
  // escreve na serial
  Serial.print("S:");
  Serial.print(sensorValue);
  Serial.print("\n");
  //espera 500ms
  delay(500);
}

O programa começa a executar assim que energizamos o mesmo através da USB do computar (daí o cuidado com curtos-circuitos).

Copie o código acima para a IDE do Arduino, selecione a porta COM correta e a placa também. Clique em Carregar, o programa será compilado e carregado no Arduino.

Considerações ao programar para microcontroladores:

  • As variáveis não costumam ter o mesmo tamanho que no computador. Ex.: Um “int” no Arduino pode armazenar apenas valores entre -32,768 até 32,767.
    • Se precisar mais do que isso e apenas positivo use: unsigned int, que vai de 0 a 65535;
    • Se precisar de mais ainda: Variáveis no Arduino

Software do Scilab

O Arduino envia os dados para o computador através de uma porta serial, emulada pela conexão USB. Para ler esses dados, o Scilab precisa se conectar a porta serial correspondente, que é a mesma utilizada para carregar o programa.

Antes de começar, é necessário ter instalado o plugin de comunicação serial no Scilab. Vá no menu Aplicativos->Gerenciador de módulos – ATOMS. Vá na categoria Contributed Scilab Builds e instale o módulo Serial communication. Reinicie o Scilab para ativar o módulo.

O programa a seguir é executado pelo Scilab no computador. Execute este programa após programar o Arduino. Lembre de selecionar a porta correta, no exemplo abaixo estamos usando a porta COM5.

//Abrir porta serial COM5
h = openserial(5,"9600,n,8,1")
tic()
while %t
    [n, v] = msscanf(readserial(h),"S:%d\n");
    if(n>0) then
        printf("Valor = %d\n", v);
        plot([toc()],[v],"-ro")
        sleep(250);
    end
end
closeserial(h); //fecha a serial, devido ao loop infinito nunca será executado
                //execute manualmente este comando para fechar a porta serial
                //Não será possível executar o programa novametne se a porta já estiver aberta

Esse programa recebe um valor do Arduino e plota num gráfico. A função toc() é usada para saber em que momento (em segundos) a informação chegou, então você verá um gráfico valor X tempo.

Note o uso de msscanf. Note ainda:

  1. O primeiro parâmetro é a função readserial(h), que retorna um valor lido da serial;
  2. O segundo parâmetro é “S:%d\n”. Note que coincide com o que o Arduino envia. Apenas passamos o formato para o msscanf dizendo que começa com S:, tem um inteiro no meio (%d) e termina com “\n”. Cada %d colocado, o msscanf entende que você quer o valor que estiver alí, no nosso caso é onde o Arduino coloca o valor da leitura. Então, ele é retornado. No retorno [n,v], n é a quantidade de itens retornados, nesse caso será 1; e v é o valor desse item.
    1. readserial pode retornar vazio se nada tiver para ser lido, por isso, após a leitura testamos se n > 0 (tem leitura)

Tendo um valor v válido, plotamo-o no gráfico.

Se você interromper o programa, e quando reexecutar ele mostrar um erro de que a porta já está sendo usada, execute closeserial(h) e tente novamente. O erro acontece porquê esse programa abre a porta serial no começo, mas fica no loop e nunca a fecha. E quando interrompemos, a porta pode continuar aberta pelo Scilab. Não é permitido abrir a porta mais de uma vez, seja pelo mesmo programa ou programas diferentes.

 

2 comments on “Scilab e Arduino – O Básico

    1. Olá, atualizei o post pois faltava informações sobre o módulo de comunicação serial do Scilab. Verifique também se o Arduino está enviando informações através do monitor serial. Para conectar ao Scilab, o monitor serial do Arduino deve ser fechado.

Deixe um comentário

O seu endereço de e-mail não será publicado.