27
 1 Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected] ) O que é Arduino ? Arduino é uma plataforma de hardware livre, baseado em microprocessador de código aberto, uma placa física em código aberto baseada em um circuito de entradas/saídas simples, e linguagem de programação padrão, que é essencialmente C/C++, sendo uma plataforma completamente personalizável já que todo o seu projeto é aberto aos usuários. O objetivo da criação do Arduino é ter uma plataforma totalmente aberta, tanto hardware como softwares acessíveis, pois além de ter um custo baixo é uma plataforma flexível e de fácil utilização, tanto para profissionais como para interessados na área, visando fornecer uma alternativa para aqueles que não têm alcance a outros micro- controladores, que além do custo elevado e software prioritário, não podem ser personalizados e são mais difíceis de utilizar pois requerem um maior nível de conhecimento técnico. Uma das grandes vantagens do Arduino é o seu nível de personalização, como se trata de uma plataforma aberta, todo o projeto é disponibilizado aos seus usuários no site www.arduino.cc , assim caso o usuário queira ele pode montar o seu próprio Arduino e adicionar ou retirar funcionalidades de acordo com o seu projeto, o mesmo também pode ser feito com a sua IDE (software utilizado para programar o Arduino), que é de código aberto, e funciona nos sistemas operacionais Windows, Macintosh OSX, e Linux, diferente da maioria dos microcontroladores em que suas IDE's funcionam apenas no Windows. Todas essas qualidades fazem o Arduino se tornar uma alternativa muito interessante  para o ensino.  Descrição da placa Arduino

OficinaArduinoEducasaen

Embed Size (px)

Citation preview

Page 1: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 1/26

 

1

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

O que é Arduino ?

Arduino é uma plataforma de hardware livre, baseado em microprocessador de

código aberto, uma placa física em código aberto baseada em um circuito de

entradas/saídas simples, e linguagem de programação padrão, que é essencialmente

C/C++, sendo uma plataforma completamente personalizável já que todo o seu projeto é

aberto aos usuários.

O objetivo da criação do Arduino é ter uma plataforma totalmente aberta, tanto

hardware como softwares acessíveis, pois além de ter um custo baixo é uma plataforma

flexível e de fácil utilização, tanto para profissionais como para interessados na área,

visando fornecer uma alternativa para aqueles que não têm alcance a outros micro-

controladores, que além do custo elevado e software prioritário, não podem ser

personalizados e são mais difíceis de utilizar pois requerem um maior nível de

conhecimento técnico.

Uma das grandes vantagens do Arduino é o seu nível de personalização, como se

trata de uma plataforma aberta, todo o projeto é disponibilizado aos seus usuários no site

www.arduino.cc, assim caso o usuário queira ele pode montar o seu próprio Arduino eadicionar ou retirar funcionalidades de acordo com o seu projeto, o mesmo também pode

ser feito com a sua IDE (software utilizado para programar o Arduino), que é de código

aberto, e funciona nos sistemas operacionais Windows, Macintosh OSX, e Linux, diferente

da maioria dos microcontroladores em que suas IDE's funcionam apenas no Windows.

Todas essas qualidades fazem o Arduino se tornar uma alternativa muito interessante para o ensino. 

Descrição da placa Arduino

Page 2: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 2/26

 

2

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Os componentes mais básicos da placa Arduino são:

  Entrada usb

  Entrada de alimentação

  Pino ICSP

  Pinos de entrada analógica

  Pinos digitais

  Pinos de alimentação

  Botão reset

Descrição dos componentes básicos

Entrada USB

A entrada USB da placa Arduino é utilizada para realizar a comunicação entre o Arduino e o

computador, através dessa comunicação são enviados os códigos referentes as ações que o

Arduino executará, a entrada também é utilizada para o envio e recepção de informações

do código em execução, que serão exibidos em um hiperterminal (monitor serial) e além

dessas funções a entrada USB também fornece alimentação para a placa Arduino.

O padrão do cabo utilizado é USB AB.

Entrada de alimentação

Caso seja necessário mais alimentação, ou caso haja necessidade da não utilização da

alimentação através da entrada USB, a placa Arduino dispõe de uma entrada padrão para

adaptadores AC-DC.

Pino ICSP

Esse pino suporta comunicação SPI (Serial Peripheral Interface Bus ), presente nos

modelos de Arduino, Duemilanove e Diecimila, é usado por alguns modelos de shield como

por ex. Ethernet Shield.

Pinos de entrada analógica

A função principal dos pinos de entrada analógica para a maioria dos usuários de Arduino, é

a leitura de sensores analógicos, como por exemplo, ldr, sensores de distância, sensores de

Page 3: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 3/26

 

3

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

temperatura, os pinos de entrada analógica fazem leituras em valores inteiros em um

intervalo de 0-1023 ( conversão 10 bits).Pinos digitais

Os pinos digitais são pinos de propósito geral de entrada(input) e saída(output), cada pino

tem uma chave interna que pode receber os valores HIGH e LOW, o funcionamento deles é

parecido com o de um interruptor que pode estar “ligado” ou “desligado”, assim podemos

ligar ou desligar componentes, ex: led.

Pinos de alimentação

Como mais uma alternativa de alimentação para a placa Arduino, existe o pino VIN (voltage

input), através dele e do pino GND a placa pode ser alimentada, ligando uma bateria ou

pilhas através de um adaptador diretamente a esses dois pinos, porém cada modelo de

Arduino requer um faixa de voltagem diferente, portanto antes usar o pino verifique qual a

necessária para alimentar a sua placa corretamente.

Botão reset

Utilizado para dar um reset físico no microcontrolador, o botão reset era utilizado em

algumas versões anteriores do Arduino como um procedimento antes de enviar um novo

código para a placa.

Arduino IDE

O Arduino IDE (ambiente de desenvolvimento integrado ou Integrated Development

Environment) é o software que nos possibilita escrever códigos e enviá-los para a placa

Arduino, através dele é possível verificar quando e aonde há erros no código.

O programa fornece ao usuário a opção de salvar o código, podendo assim administrar seus

projetos.

Também há a interface serial de comunicação, por onde o usuário pode enviar dados do

seu projeto e visualizá-los na tela.

Dentro do programa são disponibilizados exemplos prontos, desde os de nível básico até o

nível avançado, assim o usuário pode ir subindo progressivamente conforme o

conhecimento que vai adquirindo.

Page 4: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 4/26

 

4

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Programando na IDE

Para programar na IDE Arduino utilizaremos duas de suas funções principais, a primeira é o

void setup(). Estabelece as configurações iniciais.

Nela fazemos as configurações dos componentes e recursos que utilizaremos, por exemplo,

para ligar um led, nesse caso o led atuará como um dispositivo de saída, vamos usar a porta

digital 13 no exemplo, então dentro da função: Assim teremos por exemplo:

pinMode(13, OUTPUT); caso o dispositivo seja de saída

pinMode(13, INPUT); caso o dispositivo seja de entrada

Ainda em void seteup; para iniciar uma comunicação serial, e criar a possibilidade de enviar

os dados obtidos e visualizá-los em um hiper terminal, usamos a função Serial.begin(9600);

em que o 9600 representa a velocidade dessa comunicação em bits por segundo,

A segunda função void Loop(), nela estabelecemos o controle propriamente dito e a

operação que vai”rodar” o tempo no seu Arduino: 

Page 5: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 5/26

 

5

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Nela podemos, por exemplo, enviar os dados para a serial e imprimi-los e neste caso

usamos o comando Serial.print(dados1), onde dados1 é apenas uma variável querepresenta algum valor medido por algum sensor conectado ao Arduino, que pode ser do

tipo inteiro, real, caractere ou string.

Alguns comandos:

Para escrever e ler através das portas digitais da placa Arduino utilizaremos as seguintes

funções:

Para leitura nas portas digitais: digitalRead(13), leitura porta 13

Para escrever em uma porta digital: digitalWrite este pode divido em duas parte por setratar de um comando de saída, já que ela aceita dois valores HIGH e LOW, que podem ser

entendidos como ligado e desligado (e na leitura de uma porta digital são recebidos como 1

e 0), e escritos da seguinte maneira para os dois casos: digitalWrite(13, HIGH);

digitalWrite(13, LOW); 

Já para leitura em portas analógicas utilizaremos o seguinte comando: analogRead(13);

A IDE Arduino pode ser baixada no seguinte endereço:

http://arduino.googlecode.com/files/arduino-0022.zip 

Experimento 1: Piscar um led- Blink

O experimento a seguir propõe um primeiro contato com o Arduino, aonde um LED será

ligado a placa em uma porta digital, e através do código programado nele o LED piscará

interruptamente, com um intervalo de alternação entre acender e apagar de 1 segundo.

Nesse experimento serão utilizados os seguintes componentes: 1 LED, 1 resistor de 330

Ohm, 2 fios.

Definição dos componentes:

LED

LED é a sigla em inglês para Light Emitting Diode, ou Diodo Emissor de Luz. O led é um

diodo semicondutor (junção P-N) que quando energizado emite luz visível.

Page 6: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 6/26

 

6

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Obs: O led é um componente que possui polaridade, portanto a sua perna maior deve ser

ligada a alimentação e a perna menor “à terra” (GND na placa Arduino) no caso de um lednormal de 2 pernas, caso seja um led RGB, que possui 4 pernas, a maior é ligada no terra.

Resistor

O resistor é um dispositivo cujas principais funções são: dificultar a passagem da corrente

elétrica e transformar energia elétrica em energia térmica por efeito joule. Entendemos a

dificuldade que o resistor apresenta à passagem da corrente elétrica como sendo

resistência elétrica. O material mais comum na fabricação do resistor é o carbono.

Para o resistor é válida a expressão:

Que relaciona a resistência oferecida à passagem da corrente elétrica com tensão e

corrente elétrica. Devemos lembrar que a unidade da resistência elétrica é o ohm (Ω)relação entre a tensão e a corrente elétrica em ampère.

Obs: Diferente do led o resistor não possui polaridade, portanto a ligação de suas pernas

não segue alguma determinada ordem.

Neste exemplo utilizaremos um circuito simples , com um LED e um resistor (330 em

série, conforme indica a figura abaixo

Este circuito foi desenhado em um

software freeware Fritzing disponível em

http://fritzing.org/. 

Código:

void setup() {pinMode(13, OUTPUT);

}Void loop(){digitalWrite(13, HIGH);

delay(1000);digitalWrite(13, LOW);

delay(1000);}

Page 7: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 7/26

 

7

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Antes de programarmos na IDE do Arduino vamos estimar os valores de resistências que

podem ser utilizadas para circuitos desta natureza

Calculando o valor mínimo do resistor que deve ser associado:

Suponha que para o led acender suporte uma tensão máxima da ordem de 2,0 Volts

Considere ainda que a corrente máxima oferecida para as portas digitais é de 20 mA

VR+Vled=5,0

VR= 3,0 Volts

Para i=20 mA

VR=Ri

3/20*10-3

 

Rmin= 150 ohms

Utilizando “Exemplos do Arduino” 

Este código também está disponível em exemplos no IDE do Arduino veja na figura abaixo

como obtê-lo. Exemplo : Blink

Altere o intervalo de tempo em que o LED fica aceso e o intervalo de tempo que fica

apagado!Viu como é fácil!  

Page 8: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 8/26

 

8

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Anexo: Comando via teclado -_ Função Serial.read()

Com o mesmo circuito anterior vamos enviar comandos para acender e apagar o led via

teclado

Faça upolad do programa e abra o monitor serial.

Digite a “letra” “L” ou “H” e, seguida tecle “enter” para alterar o estado do

led

Código

Adicione a linha de programação que permite imprimir no monitor serial o

estado do pino 13Dica: defina uma nova variável, por exemplo, “estadodoled” e para cada condição “if” faça

“estadodoled =LOW ou HIGH” em seguida use a função Serial.print( ) (ver em

http://arduino.cc/en/Serial/Print) 

int ledPin = 13; //define o pino em que o led está ligadochar leitura; //define a variável leitura que corresponde a uma letra o teclado

//definido por char 

void setup() {pinMode(ledPin, OUTPUT); //define que o pino 13 será uma saidaSerial.begin(9600);

}

void loop() {

leitura = Serial.read(); // a variável leitura será obtida através do tecladoif (leitura == 'L') {

digitalWrite(ledPin, LOW);

}else if (leitura == 'H') {digitalWrite(ledPin, HIGH);

}}

Page 9: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 9/26

 

9

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Anexo: Tipos de Variáveis (as mais utilizadas) 

Tipo Descrição Referencia no site e exemplos

int Numero inteiro http://arduino.cc/en/Reference/Int 

float Número fracionário(ponto

flutuante)

http://arduino.cc/en/Reference/Float 

double Número fracionário, como mais

precisão

http://arduino.cc/en/Reference/Double 

char caractere http://arduino.cc/en/Reference/Char 

boolean Verdadeiro ou falso http://arduino.cc/en/Reference/Boolea

nVariables 

long Longas maiores que 32 bits http://arduino.cc/en/Reference/Long 

unsigned Impede que assuma valores

negativos

unsigned long Variáveis longas e sempre

positivas (em geral usada para

tempo)

http://arduino.cc/en/Reference/Unsigne

dLong 

byte

Numero de 8 bits http://arduino.cc/en/Reference/Byte 

Outras referências

http://cppreference.com/wiki/br-pt/data_types 

http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c320.html 

http://equipe.nce.ufrj.br/adriano/c/apostila/tipos.htm 

Page 10: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 10/26

 

10

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Experimento 2: Leitura de porta analógica com um LDR

O experimento a seguir propõe um contato mais avançado com o Arduino, que consiste em

ligar um LDR a placa Arduino em uma porta analógica e a partir do código fornecido a

seguir, ler os valores fornecidos pelo LDR e enviá-los para a porta serial a cada 0,25

segundos.

Nesse experimento serão utilizados os seguintes componentes: 1 LDR, 1 resistor de

33Kou 10K, alguns fios.

Definição dos componentes:

LDR

Do inglês “Light Dependent Resistor1”, ou resistor dependente de luz, a resistência do LDR

varia de forma inversamente proporcional à quantidade de luz incidente sobre ele, isto é,

enquanto o feixe de luz estiver incidindo, o LDR oferece uma resistência muito baixa.

Quando este feixe é cortado, sua resistência aumenta, o LDR também é chamado de célula

fotocondutiva, ou ainda de fotoresistência, o LDR é um dispositivo semicondutor de dois

terminais.

Com o LDR pode-se fazer o controle automático de porta, alarme contra ladrão, controle de

iluminação em um recinto entre outros.

Obs: Assim como o resistor o LDR não possui polaridade, portanto a ligação de seus

terminais não segue nenhuma ordem pré-determinada.

Monte o circuito com base na figura a abaixo, e faça o upload do código usando a IDE do

Arduino.

O valor do resistor que será utilizado é igual a 10 K ou 39 K 

1  Indicamos o uso de simuladores para mostrar esta dependência. Um bom simulador está disponível em

http://phet.colorado.edu/sims/conductivity/conductivity_pt_BR.jnlp. O uso deste simulador (ou qualquer outro) permitirá aos estudantesmelhor compreender o funcionamento de um LDR.

É muito importante que o estudante compreenda cada passo do processo de aquisição para um amplo domínio da tecnologia.

Page 11: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 11/26

 

11

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Faça upload e abra o monitor serial

Inserindo a variável tempo:

Para a coleta de dados em experimentos, necessitamos da indicação de como a variável

evolui com o tempo, ou ainda a relação entre diferentes variáveis.

Para que você possa obter a impressão dos dados em colunas das variáveis; “tempo” e

“valor para o sensor LDR”, segue o programa abaixo 

Código:

int LDR; //declara a variavel

void setup(){pinMode(A0, INPUT);Serial.begin(9600);

}

void loop(){LDR = analogRead(A0);Serial.print("Valor lido no LDR:\t");Serial.println(LDR);

delay(250);

}

Page 12: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 12/26

 

12

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Código Fonte

Copiar dados para a construção de gráficos

1º Abra o monitor serial

int LDR; //declara a variávelint tempo;

void setup() {pinMode(A0, INPUT);Serial.begin(9600);

}

void loop() {

tempo= millis(); // base de tempo para a coletaLDR = analogRead(A0);{Serial.print(tempo);Serial.print(" "); // introduz um espaço para as colunasSerial.print(LDR);}Serial.println(); // imprime em linhas

delay(250);

}

Page 13: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 13/26

 

13

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

2º desabilite a rolagem automática.

3º selecione com o cursor os dados que deseja copiar e transfira para uma planilha de

calculo

Pronto agora você já pode visualizar o gráfico!!

 

Page 14: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 14/26

 

14

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Anexo: Conversor AD

O que representam os valores lidos na porta analógica?

Para compreender o que representam os valores lidos na porta analógica temos que

recorrer a “teoria sobre Conversores analógicos digitais”. Segue um link para um texto

com exercícios sobre conversores AD para maior aprofundamentohttps://skydrive.live.com/?cid=247463ebb52e7e31&sc=documents&id=247463EBB52E7

E31%211851#cid=247463EBB52E7E31&id=247463EBB52E7E31%211855&sc=documents 

Faremos aqui um breve resumo:

O conversor AD do Arduino é um conversor que apresenta 10 bits. O que isso significa?

Um sistema digital apresenta apenas duas possibilidades de tensões, próximas de zero

(décimos de mV) e que corresponde ao bit 0 e aquela em que a tensão assume o seuvalor máximo (da ordem de 5 V) que corresponde ao bit 1. Assim um valor de tensão que

varia continuamente entre 0 e 5 V deverá ser expressão em frases binárias para que

possa ser processado pelo micro-controlador.

Para 10 bits teremos um conjunto de 210

frases binárias= 1024

O Arduino opera com 5V de tensão (ou bem próximo disso).Assim qualquer valor de

tensão de teremos que:

Para 5 Volts teremos o decimal correspondente 1024Valor de tensão de entrada teremos X para o decimal

5.....................1024

A0 (V).............Decimal lido

Portanto em Volts o valor de A0 será dado por: A0 lido em Volts = (decimal lido) *5/1024 

Page 15: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 15/26

 

15

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Experimento 3: Visualização gráfica em tempo Real Utilizando o SIMPLOT

Vamos apresentar uma opção rápida e simples para visualização gráfica em tempo real

utilizando um aplicativo freeware conhecido como SIMPLOT( http://www.negtronics.com/simplot).

O simplot é um aplicativo de fácil manuseio e muito eficiente para uma visualização gráfica

em tempo real de dados nas entradas analógicas do Arduino.

Existem varias outras opções tais como o

Processing, Phyton e até mesmo em visual básicano Excel. No entanto de todas estas opções o

SIMPLOT foi o que me pareceu mais simples e

rápido.

Etapas para visualização

1. Baixe o aplicativo disponível no link http://code.google.com/p/pushpak/downloads/list?saved=1&ts=1303180458 

Ou ainda em

https://skydrive.live.com/?cid=59bcf284a2d396aa&sc=documents&id=59BCF284A2D396AA%21224#  na pasta

“SIMPLOT VER1-1” 

2. Copie o código fonte disponível abaixo e faça upload na IDE do Arduino

Se preferir baixe o arquivo disponível no link

https://skydrive.live.com/?cid=59bcf284a2d396aa&sc=documents&id=59BCF284A2D396AA%21222  na pasta

“simplot_4canais_arduino” 

Page 16: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 16/26

 

16

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

/*

SimPlot Demo

Samples Analog Input and sends them over serial port to be plotted in SimPlot.

This Demo software uses the default serial port "Serial".

Upto to 4 channels of data can be plotted.

For details of SimPlot go to

www.negtronics.com/simplot

*/

void setup()

{

Serial.begin(57600);

}

int buffer[20]; //Buffer needed to store data packet for transmissionint data1;

int data2;

int data3;

int data4;

void loop()

{

//Read Analog channels. You can connect accelerometer, gyro, temperature sensor etc to these channels

data1 = analogRead(0);

data2 = analogRead(1);

data3 = analogRead(2);

data4 = analogRead(3);

//You can plot upto 4 channels of data. Uncomment only one of the options below

plot(data1,data2,data3,data4); //Plots 4 channels of data

// plot(data1,data2,data3); //Plots 3 channels of data

// plot(data1,data2); //Plots 2 channels of data

// plot(data1); //Plots 1 channel of data

delay(10); //Read and plot analog inputs every 10ms.

}

//Function that takes 4 integer values and generates a packet to be sent to SimPlot.

void plot(int data1, int data2, int data3, int data4)

{

int pktSize;

buffer[0] = 0xCDAB; //SimPlot packet header. Indicates start of data packet

buffer[1] = 4*sizeof(int); //Size of data in bytes. Does not include the header and size fields

buffer[2] = data1;

buffer[3] = data2;

buffer[4] = data3;

buffer[5] = data4;

pktSize = 2 + 2 + (4*sizeof(int)); //Header bytes + size field bytes + data

//IMPORTANT: Change to serial port that is connected to PC

Serial.write((uint8_t * )buffer, pktSize);

}

//Function that takes 3 integer values and generates a packet to be sent to SimPlot.

Page 17: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 17/26

 

17

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

void plot(int data1, int data2, int data3)

{

int pktSize;

buffer[0] = 0xCDAB; //SimPlot packet header. Indicates start of data packet

buffer[1] = 3*sizeof(int); //Size of data in bytes. Does not include the header and size fields

buffer[2] = data1;

buffer[3] = data2;

buffer[4] = data3;

pktSize = 2 + 2 + (3*sizeof(int)); //Header bytes + size field bytes + data

//IMPORTANT: Change to serial port that is connected to PC

Serial.write((uint8_t * )buffer, pktSize);

}

//Function that takes 2 integer values and generates a packet to be sent to SimPlot.

void plot(int data1, int data2)

{

int pktSize;

buffer[0] = 0xCDAB; //SimPlot packet header. Indicates start of data packet

buffer[1] = 2*sizeof(int); //Size of data in bytes. Does not include the header and size fields

buffer[2] = data1;

buffer[3] = data2;

pktSize = 2 + 2 + (2*sizeof(int)); //Header bytes + size field bytes + data

//IMPORTANT: Change to serial port that is connected to PC

Serial.write((uint8_t * )buffer, pktSize);

}

//Function that takes 1 integer value and generates a packet to be sent to SimPlot.

void plot(int data1)

{

int pktSize;

buffer[0] = 0xCDAB; //SimPlot packet header. Indicates start of data packet

buffer[1] = 1*sizeof(int); //Size of data in bytes. Does not include the header and size fields

buffer[2] = data1;

pktSize = 2 + 2 + (1*sizeof(int)); //Header bytes + size field bytes + data

//IMPORTANT: Change to serial port that is connected to PC

Serial.write((uint8_t * )buffer, pktSize);

}

3. Em seguida abra o aplicativo SimPlot e selecione a porta COM que está sendo utilizada e

fixe para a taxa de aquisição 57600, valor este fixado no código fonte do Arduino

Page 18: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 18/26

 

18

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Ao abrir o aplicativo surge a taxa de aquisição de 9600, esta taxa deve ser alterada, assim

como a porta COM que está sendo utilizada

Em seguida altere as condições de observação, por exemplo, os limites de leitura da porta

analógica ( de 0 a 1023) e desabilite os canais que não estão sendo utilizados

Viu como é fácil!! 

 

Page 19: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 19/26

 

19

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Anexos:

Grandezas Físicas do Circuito: Corrente elétrica, resistência do LDR,

ddp no resistor, etc.

  Leia o Anexo abaixo e insira uma linha da programação que permita obter

o valor de A0 em Volts e sua correspondente impressão no monitor serial

  Sabendo que o circuito LDR+resistor é um circuito serie, insira uma linhapara calcular o valor de tensão no resistor.

  Sabendo que corrente elétrica = VR/R, insira uma linha que permita obter

o valor de corrente elétrica no circuito

  Sabendo que resistência no LDR é dada por VLDR/I, insira uma linha de

programação que permita obter o valor de resistência no LDR

  Imprima tudo em uma tabela com as seguintes colunas;

Valor lido no LDR em decimal, valor de A0 em Volts, valor de tensão no

resistor, valor de corrente elétrica no circuito, valor de resistência no LDR;

Page 20: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 20/26

 

20

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Dicas para a impressão em colunas

Para imprimir em tabela você pode abrir a chave para as diferentes variáveis

com seus respectivos “Serial.print ”; fechar quando terminar todas as grandezas

de impressão, não esquecendo o “ponto e virgula”. Em seguida e escrever

Serial.println(); para impressão de todas as grandezas entre as chaves em linha

e fechar e void loop().

Veja abaixo:

{

Serial.print (“valor A0 decimal”); 

Serial.print (LDR);

Serial. print (“ “);

etc etc

}

Serial.println();

}

Como aumentar o número de casas decimais na

impressão?

Em experimentos, muitas vezes é importante obter grandezas com 3 ou

até 4 casas decimais.

No exemplo anterior, conseguimos imprimir o valor de tensão tanto no

LDR quanto no resistor e corrente elétrica no circuito.

Em primeiro lugar na declaração destas variáveis é importante que seassocie o tipo “float” já que estes valores não serão inteiros. 

Abre chave {

Seqüência de impressão que se deseja

Fecha chave

}

Serial.println();

Fecha chave do void loop()

}

Page 21: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 21/26

 

21

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Se você associou estas variáveis como “int” faça a devida alteração. 

Em seguida para que você obtenha impressão com mais casas decimais

basta que especifique o numero de casas decimais da seguinte maneira

com uma virgula seguida da variável como abaixo:

Serial.print(val,numero de casas decimais desejado);

Exemplo com 3 casas decimais para corrente;

Serial.print(corrente,3);

Na declaração da variável “corrente” você não deve esquecer de

especificar que ela será do tipo “float”; ou seja; 

float corrente;

Estimativa da Intensidade de Luz incidente no LDR

Agora clique no link http://www.ladyada.net/learn/sensors/cds.html. 

Considere que o LDR utilizado tenha a curva de resistência versus

intensidade da luz em LUX em vermelho.

Considere apenas a luz ambiente. Determine em LUX o valor desta

intensidade.

Page 22: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 22/26

 

22

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Experimento 4: Construindo um Alarme ótico, acendendo um LED

LDR e disparo através de uma porta digital

Esse experimento propõe que a partir da leitura de um LDR ligado em uma porta analógica,

perceber que um feixe de luz foi bloqueado.

Por exemplo acender um LED vermelho em uma porta digital.

Nesse experimento serão utilizados os seguintes componentes: 1 LDR um resistor de 10K 

a 39K e 1 led, 1 resistor de 330 , alguns fios.

1º passo Leitura na porta Analógica

LDR na porta Analógica

São dispositivos elétricos que têm a sua resistência elétrica alterada com a incidência de

luz.

Com o circuito usando um LDR e um resistor em série podemos efetuar leitura de tensãono LDR através da porta analógica do Arduino.

Copie o código e faca upload para o Arduino e abra o monitor serial.

Neste código introduza a linha para leitura da “tensão” no LDR. 

 //Código

int LDR;

void setup(){pinMode(A0, INPUT);Serial.begin(9600);

}

void loop(){

LDR = analogRead(A0);{Serial.print("Valor lido no LDR");Serial.print(LDR);}Serial.println();delay(250);}

+V

LDR

R

GND

Porta analogical (0)

Page 23: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 23/26

 

23

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Calibração do sensor para bloqueio da luz

Incida um feixe de luz (lanterna da ponteira) no LDR.

Veja qual será o valor de VLDR e LDR (em decimal- frase binária correspondente) quando o

feixe de luz e bloqueado

Em seguida estabeleça a condição para o disparo do alarme.

Se a leitura na analógica for maior que o valor obtido na calibração escreva da porta digital

13 HIGHT, senão escreva LOW

Orientação para o Código

int LDR; //declara variável inteirofloat VLDR; // declara variável de ddp no LDR tipo

//floatint ledPin=13; // declara variável ledPin e fixa o pino 13

void setup() {

Serial.begin(9600);pinMode(A0, INPUT);// entrada A0pinMode(13,OUTPUT); // define o pino 13 como saída}

void loop(){

LDR = analogRead(A0);VLDR=LDR*5.0000000/1024;Serial.print(LDR);

Serial.print(" ");Serial.print(VLDR);Serial.println ( "\t");delay(2);

if (LDR > valor que você vai calibrar) {escreva da porta digital 13 tal coisa}

else {

escreva oposto da condição anterior;}}

Page 24: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 24/26

 

24

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Experimento 5: Alarme Sonoro

A função

tone( pino, freqüência e duração da nota).http://arduino.cc/en/Reference/Tone (ver anexo)

Fornece um sinal sonoro de freqüência conhecida

Acrescente no seu alarme um som para isso use o pino 9, por exemplo, para tocar um

alarme e faça a conexão com um plug Jack –fêmea-áudio na saída com um resistor de 330

ou 1K em serie, por proteção.

Para retirar o sinal sonoro, basta que você envie um sinal com freqüência igual a 0 ou ainda

“noTone(pino)” (http://arduino.cc/en/Reference/NoTone) 

Page 25: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 25/26

 

25

Marisa Cavalcante e Eduardo Silva Damasceno ( [email protected]  )

Orientação para o Código

Para um sensor de distancia variando com a distancia clique

no link http://labduino.blogspot.com/2011/06/som-com-o-

arduino-e-um-ldr-e-caixa-de.html 

int LDR; //declara variávelfloat VLDR;int ledPin=13;

void setup(){Serial.begin(9600);

pinMode(A0, INPUT);// entrada A0pinMode(13,OUTPUT); // define o pino 13 como saidapinMode(9,OUTPUT); }

void loop(){

LDR = analogRead(A0);VLDR=LDR*5.0000000/1024;Serial.print(LDR);Serial.print(" ");Serial.print(VLDR);Serial.println ( "\t");delay(2);

if (LDR > valor que vc vai calibrar) {escreva da porta digital 13 tal coisa}toque a freqüência de 440 Hz (função tone no pino 9, comduração)

else {escreva oposto da condição anterior;e não toque nada 9 noTone no pino 9; }

}

Page 26: OficinaArduinoEducasaen

8/2/2019 OficinaArduinoEducasaen

http://slidepdf.com/reader/full/oficinaarduinoeducasaen 26/26

 

Anexos

DigitalWrite

ttoonnee(()) 

Agora é com você!!Divirta-se, Invente, projete, Inove isso é o Arduino!  

http://arduino.cc/en/Reference/DigitalWrite Syntax

digitalWrite(pin, value)

Parameters

pin: the pin number

 value: HIGH or LOW  

Example

int ledPin = 13; // LED connected to digital pin 13

void setup()

{

pinMode(ledPin, OUTPUT); // sets the digital pin as output

}

void loop()

{

digitalWrite(ledPin, HIGH); // sets the LED ondelay(1000); // waits for a second

digitalWrite(ledPin, LOW); // sets the LED off

delay(1000); // waits for a second

}

http://arduino.cc/en/Reference/Tone 

Syntax

tone(pin, frequency)

tone(pin, frequency, duration)

Parameters

pin: the pin on which to generate the tone

frequency: the frequency of the tone in hertz - unsigned int  

duration: the duration of the tone in milliseconds (optional) - unsigned long