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:
- O primeiro parâmetro é a função readserial(h), que retorna um valor lido da serial;
- 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.
- 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”
OLa , gostaria de ajuda , náo estou conseguindo usar este exemplo
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.