arduino como ferramenta de aquisição de dados · o que faremos hoje? atividades •...
TRANSCRIPT
Laboratório de FIS14
Arduino como ferramenta de
aquisição de Dados
Prof. Douglas M G Leite
Sala 2628
O que faremos HOJE?
Atividades
• Apresentação do Professor (30min)
• Projetos Básicos do Arduino – alunos montam e apresentam (60min)
• Experimento com Arduino – alunos montam e apresentam (60min)
Avaliação
• Apresentar cada um dos Projetos Básicos para o Professor/Monitor (R)
• Apresentar o Experimento em funcionamento para o professor (B-L)
• Prazo: 16:30 de hoje
Conteúdo Apresentação
• Introdução ao Arduino
• Hardware/Software Arduino
• Projetos Básicos
• Experimento com Arduino – Pêndulo Simples
O que é?
• Arduino é uma plataforma aberta de protótipos eletrônicos baseados em hardware e software flexíveis e fáceis de usar.
O que é?
• O Arduino é o que chamamos de plataforma de computação física ou embarcada, ou seja, um sistema que pode interagir com seu ambiente por meio de hardware e software.
Hardware
Arduino UNO
14 Pinos Digitais I/O (06 PWM – Pulse Width Modulation)
Usados para detecção outransmissão de con-troles digitais.
06 Pinos AnalógicosPinos de
alimentação
Microcontrolador
Porta USB – Universal
Serial Bus
Usados para leituras desinais de sensores.Usados para ali-
mentação de circui-tos externos.
Usada para comu-nicação serial com ocomputador.
Alimentação
Externa
Usada para alimentar ohardware com umafonte externa. Ex.:Bateria de 9V
Atmega 328
PWM – Pulse Width Modulation
• é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda.
Software
• Possui compatibilidade com as linguagens de programação C e C++.
• Utiliza filosofia de projeto aberto.
• Escrever e Salvar o código do programa.
• Verificar e Compilar o código do programa.
• Transportar o código para a placa Arduino.
Software
Área de notificação do programa
Barra de status
Gravar o programa na placa
Verificar se o programa tem algum problema
Novo programa
Abrir programa
Salvar programa
Sketch - Área de programação
Menu principal
Monitor Serial
Executa só uma vez. Funciona como uma função deinicialização. Contém as principais configurações. Executasomente ao ligar ou resetar o Arduino
Executa infinitas vezes. Toda a operação doArduino deve estar aqui.
Código
Símbolos:� {{{{ }}}} Dentro das chaves vão os procedimentos que a função deve executar;
� ; O ponto e vírgula é usado para marcar o final do procedimento;
� //////// Comentário de uma linha;
� /*/*/*/*............*/*/*/*/ Comentário em várias linhas.
Linguagem - Constantes
No Arduino existem algumas constantes previamente defini-das e são consideradas palavras reservadas.
As constantes definidas são:
TRUE – indica valor lógico verdadeiro.
FALSE – indica valor lógico falso.
HIGH – indica que uma porta está ativada, ou seja, está em 5 V.
LOW – indica que uma porta está desativada, ou seja, está em 0 V.
INPUT – indica que uma porta será de entrada de dados.
OUTPUT– indica que uma porta será de saída de dados.
Linguagem - Funções
�Pinos Digitais I/O� pinMode()� digitalWrite()� digitalRead()� analogWrite()-PWM� pulseln()
�Pinos Analógicos I
� analogRead()
�Avançado I/O� tone()� noTone()� shiftOut()� pulseIn()
�Tempo� millis()� micros()� delay()� delayMicrosecond()
�Matemática� min()� max()� abs()� constrain()� map()� pow()� sqrt()
Linguagem - Funções
�Trigonométricas� sin()� cos()� tan()
�Numeros aleatórios� randomSeed()� random()
� Interrupções externas� attachInterrupt()� detachInterrupt()
� Interrupções� interrupts()� noInterrupts()
�Bits e Bytes� lowByte()� highByte()� bitRead()� bitWrite()� bitSet()� bitClear()� bit()
Linguagem - Funções
� Interrupções externas� attachInterrupt()� detachInterrupt()
� Interrupções� interrupts()� noInterrupts()
�Comunicação Serial� Serial.print()� Seiral.println()� Serial.read()� Serial.begin()� Serial.available()� Serial.end()
� Controle de Fluxo� if� if...else� if...else...if� while� do...while� for� switch...case
KIT Arduino
• Arduino UNO + cabo USB
• Protoboard
• Resistores
• LEDs
• Potenciômetro
• LDR
• Jumpers
Potenciômetro
• Resistência variável entre A e C ou entre C e B
• Funciona como Divisor da Tensão entre A e B, com coleta em C
LDR
• Foto-Resistor – Light Dependent Resistor
• Sua resistência diminui quando a luz é muito alta, e quando a luz é baixa, a resistência no LDR aumenta.
Projeto 1: Ligar e desligar um LED por um segundo.
Circuito básico
� � �. � � � �/� � � �5,0– 1,6�/0,020
� � �,�
�,���� � 170Ω ���������������� � 170Ω.
Arduino – saída: 5 voltsLed vermelho: 1,6 voltsCorrente do Led: aprox. 20 !
Código
//Ligar e desligar um LED por um segundo
void setup() {
pinMode(12,OUTPUT); // Inicializa o pin 12 como uma saída
}
void loop()
{
digitalWrite(12,HIGH); // Liga o LED
delay(1000); // Temporiza um segundo (1s = 1000ms)
digitalWrite(12,LOW); // Desliga o LED
delay(1000); // Temporiza um segundo (1s = 1000ms)
}
Projeto 1: Ligar e desligar um LED por um segundo.
Código básico
Colocando para Funcionar:
• Escrever o código no programa Arduino.
• Verificar se está tudo correto.
• Ligar o cabo ao computador e à placa.
• Conectar o Arduino na porta serial certa.
• Carregar o código na placa.
Projeto 1: Ligar e desligar um LED por um segundo.
• Objetivo: regular a intensidade de um LED com o potenciômetro via Arduino
• Utilize uma porta Analógica para leitura do valor de tensão sobre o terminal C do potenciômetro
• Utilize uma porta Digital PWM (~) para saída de tensão para alimentar o LED
• Utilize a função “map()” - converter entrada analógica (0 – 1023) em escrita digital (0 – 255) PWM
• Utilize a função “Serial.print()” - imprimir valor lido no potenciômetro e valor escrito na porta PWM
Projeto 2: Dimmer Digital
Projeto 2: Dimmer Digital
• Exibição dos impressos pela função Serial.print()
• Monitor Serial
• Plotter Serial
// Dimmer Digital
int ledpin = 10;
int potpin = A5;
int valorpot = 0; // armazena o analogico entre 0 e 1023
float luminosidade = 0; // valor da luminosidade do led PWM entre 0 e 255
void setup() {
Serial.begin(9600); // inicializa comunicação serial na velocidade 9600 bits/s
pinMode(ledpin, OUTPUT);
pinMode(potpin, INPUT);
}
void loop() {
valorpot = analogRead(potpin); // leitura da porta analógica (potenciômetro)
luminosidade = map(valorpot, 0, 1023, 0, 255); // converte valor "valorport" em "luminosidade"
Serial.print(valorpot); // imprime o valor lido no potenciometro
Serial.print(", "); // imprime um separador " , "
Serial.println(luminosidade); // imprime o valor da luminosidade e faz a quebra de linha
analogWrite(ledpin, luminosidade); // escreve o valor da luminosidade na porta PWM acendendo o LED
delay(200);
}
Projeto 2: Dimmer Digital - código
• Objetivo: Acender ou apagar um LED conforme variação de luminosidade do ambiente
• Usar Comando “if() {}” para tomar decisão se acender ou não o LED em referência à luminosidade medida pelo LDR
Projeto 3: Fotocélula
int ledpin = 10;int LDRpin = A5;int estado = 0;
void setup() {pinMode(ledpin, OUTPUT);pinMode(LDRpin, INPUT);Serial.begin(9600);}
void loop() {int leitura = analogRead(LDRpin); int limiar = 800;Serial.print(leitura);Serial.print(", ");Serial.print(limiar);Serial.print(", ");Serial.println(estado);if(leitura>limiar) { digitalWrite(ledpin,HIGH);estado=500;} else { digitalWrite(ledpin,LOW);estado=0;}}
Projeto 3: Fotocélula - códigos
• int ledpin = 10;
• int LDRpin = A5;
• void setup() {
• pinMode(ledpin, OUTPUT);
• pinMode(LDRpin, INPUT);
• Serial.begin(9600);
• }
• void loop() {
• int estado = analogRead(LDRpin);
• Serial.println(estado);
• if(estado>995) {
• digitalWrite(ledpin,HIGH);
• }
• else {
• digitalWrite(ledpin,LOW);
• }
• }
Experimento – Pêndulo Simples com Arduino
Objetivo:
• Medir o período de um Pêndulo Simples da FORMA MAIS PRECISA POSSÍVEL utilizando o Arduino como sistema de aquisição de dados
Desafios:
• A) Fazer estatística de várias medidas e apresentar o valor médio mais desvio padrão do período no Monitor Serial
• B) Apresentar tendência de variação do período conforme a diminuição do ângulo de oscilação no Serial Plotter
Experimento – Pêndulo Simples com Arduino
IMPORTANTE:
• Meçam todas as características do pêndulo que julgarem importante
• Anotem e guardem estes valores assim como os dados do período medido
• NÃO DESMONTEM O PÊNDULO: Mantenham o pêndulo com as mesmas características após a desmontagem do experimento.
• Vocês utilizarão este mesmo pêndulo semana que vem com um outro método de aquisição e farão a comparação dos métodos!
Experimento – Pêndulo Simples com ArduinoPossíveis Problemas
• Delay � limita a precisão da medida
• Largura da Sombra � erro sistemático � diminui o valor do período medido
0
0,2
0,4
0,6
0,8
1
1,2
1,4
lum
ino
sid
ad
e
tempo
C
t1 t2
Delay
Leitura do LDR
Valor para tomada de decisão (limiar)
Contagem – início/fim do período
Valor computado do período
Experimento – Pêndulo Simples - Sugestão Código
• int ledpin = 10;
• int LDRpin = A5;
• int estado = 0;
• int tempo0 = 0;
• int tempo1 = 0;
• int periodo = 0;
• void setup() {
• pinMode(ledpin, OUTPUT);
• pinMode(LDRpin, INPUT);
• Serial.begin(9600);
• }
• void loop() {
• int leitura = analogRead(LDRpin);
• int limiar = 800;
• Serial.print(leitura);
• Serial.print(", ");
• Serial.print(limiar);
• Serial.print(", ");
• Serial.print(periodo);
• Serial.print(", ");
• Serial.println(estado);
• if(leitura>limiar) {
• digitalWrite(ledpin,HIGH);
• if(estado==0){
• tempo0 = tempo1;
• tempo1 = millis();
• periodo = tempo1 - tempo0;
• }
• estado=500;
• }
• else {
• digitalWrite(ledpin,LOW);
• estado=0;
• }
• }