Upload
jose-neres-almeida-jr
View
217
Download
0
Embed Size (px)
Citation preview
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
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
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.
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:
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.
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);}
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!
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);
}}
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
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.
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);
}
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);
}
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!!
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
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”
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.
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
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!!
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;
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()
}
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.
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)
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;}}
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)
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; }
}
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