curso arduino bÁsico - lef.ifsc.usp.br · arduino: é uma plataforma de prototipagem eletrônica...
Post on 16-Oct-2018
224 Views
Preview:
TRANSCRIPT
Luiz Antonio de Oliveira Nunes/
Antenor Fabbri Petrilli Filho
CURSO ARDUINO BÁSICO
Versão 1.0
Mark I: Primeiro Computador Eletromecânico.O Mark I foi idealizado Howard Aiken da Universidade de Harvard (1937) e
construído pela IBM (1939-1944)
Controlando a Condução Eletricamente
Lee de Forest – 1906
Inventor do Tríodo a Vácuo
ENIAC Electronic Numerical Integrator and Computer (Computador Integrador Numérico
Eletrônico) foi o Primeiro Computador Digital Eletrônico de grande escala – (Pennsylvania
University)
ENIAC Começou a ser desenvolvido em 1943 durante a Segunda Guerra Mundial
Foco do Projeto: Calculo Balístico
Sua capacidade de processamento era de 5.000 Operações por segundo
possuía 17.468 Válvulas Termiônicas. 30 segundos x 12 horas
ENIACEDVAC
ORDVAC
Transistor
Shockley – Brattain - Bardeen
EVOLUÇÃO
1958
Microcontrolador é um pequeno computador residente em um único circuito
integrado, o qual contém uma unidade central de processamento, memorias, periféricos
programáveis e portas de entrada e saída.
Partes Internas
CPU
Memoria ROM
Memoria RAM
Portas E/S Dados
Porta Serial
Timer
Conversores AD, DA
Partes Externas
Fonte de Alimentação
Clock
Mercado: Automotivo, Domestico, Hospitalar, etc
Lançado da Década de 90
Basic Stamp Basic Stamp - 1 BS - 2
Dimensões
Basic Stamp – 2
Variantes
Arduino: é uma plataforma de prototipagem eletrônica que permitir o
desenvolvimento de sistemas interativos.
Arduino: foi desenvolvido na Itália, por uma equipe chefiada por
Massimo Banzi em 2005.
Aconselhado para iniciantes:Microcontrolador é o Atmega328
Pode ser conectado ao computador
por meio de uma porta USB.Possui 6 pinos de Entrada analógica
14 pinos digitais (de entrada e saída),
alguns podem operar com PWM
Atualmente a Plataforma Arduino é altamente difundida e tornou-se
uma Comunidade de Compartilhamento.
ARDUINO UNO E SUAS VARIANTES
ARDUINO - Shield:
7 a 12 V
Atm
eg
a 3
28
Auto Reset
Arduino UNO
https://www.arduino.cc/
(16)3375-7778 - São Carlos/SP
Ambiente de Programação: Download do IDE ARDUINO
Instalando o IDE ARDUINO
Drivers de Comunicação
Diretório Arduino após a Instalação
Iniciando o IDE
Clicar no Ícone
na Área de
Trabalho
Configurações iniciais do IDE ARDUINO
Desmarcar
Marcar
• Compila: cria uma versão do programa
em linguagem de maquina;
• Upload: transfere o programa em
linguagem de maquina para o Arduino;
• Serial Monitor: é um monitor que
envia e recebe dados do Arduino. É umainterface Arduino-PC;
• Área de Notificações: é uma área
que apresenta os erros de compilação, se oupload do programa obteve êxito e se acompilação também ocorreu com sucesso.
• Área de Programação: é onde
digitamos o código que será programadono Arduino.
A Interface do IDE
Área de Programação
Configurando o Tipo da Placa Arduino
e sua Porta de Comunicação
UPLOAD DE SEU PRIMEIRO SKETCH
Viva!!! Consegui fazer alguma coisa!!!
Clicar na seta para
transferir o programa
para o ARDUINO
• Declaração de Bibliotecas
• Definição de Variáveis
• Definições Pessoais
• void setup(): // Executa uma única vez
Definições de Hardware
• void loop(): // Executa indefinidamente (exit(0))
Programa propriamente dito
Software – Estrutura de Programação
Projeto_01 - Fazendo um Led Piscar
470Ω
Falar do ProtoBoard
LED
470Ω
D13
LED Vermelho 5mm
R = 150Ω a 1KΩ
Resistor Limitador de Corrente
GND (da Placa do ARDUINO)
Pino 13 (LOW = 0V/ HIGH = 5V)
Projeto_01 - Fazendo um Led Piscar
Salvando nossos Projetos
DICA: Cada Projeto em uma Pasta Diferente
(Criar a pasta e Salvar como Projeto_1)
//************** Projeto_01 *** Saída Digital **************
//DEFINIÇÕES
int SAIDA_DIG = 13;
//CONFIGURANDO O HARDWARE
void setup()
pinMode(SAIDA_DIG, OUTPUT);
//PROGRAMA PRINCIPAL
void loop()
digitalWrite(SAIDA_DIG, HIGH); //COLOCA O PINO 13 EM 5 VOLTS
delay(5000); // EM MSEG //ESPERA UM TEMPO DETERMINADO
//delayMicroseconds(1500);
digitalWrite(SAIDA_DIG, LOW); //COLOCA O PINO 13 EM 0 VOLTS
delay(5000); // ESPERA UM TEMPO DETERMINADO
//delayMicroseconds(600);
Vamos agora trocar o pino 13 para o
pino 10//****** Projeto_01 *** Saída Digital ******
//DEFINIÇÕES
int SAIDA_DIG = 10;
//CONFIGURANDO O HARDWARE
void setup()
pinMode(SAIDA_DIG, OUTPUT);
//PROGRAMA PRINCIPAL
void loop()
digitalWrite(SAIDA_DIG, HIGH); //COL
delay(5000); // EM MSEG //ESP
digitalWrite(SAIDA_DIG, LOW); //COL
delay(5000); //ESP
S
G
D
2,2KΩ
IRF530
So
len
oid
e
D13
9V
Controlando Maiores Potências com Arduino:
Utilizando Transistor FET
470Ω 2,2KΩ
IRF530
Sole
no
ide
FET
N
12
31 – G = GATE
2 – D = DRAIN
3 – S = SOUCE
IRF530
N -Channel
D4
10KΩ
Ch1
5V
Projeto_02 - Reconhecendo o Comando de uma Chave
(Salvar na pasta, Projeto_02)
10KΩ
470Ω
LED VM
470Ω
D2
//***** Projeto_02 *** Entrada Digital *****
//DEFINIÇÕES
int SAIDA_DIG = 2; //LED
int ENTRADA_DIG = 4; //CHAVE
int i, estado;
//CONFIGURANDO O HARDWARE
void setup()
pinMode(SAIDA_DIG, OUTPUT);
pinMode(ENTRADA_DIG, INPUT);
//PROGRAMA PRINCIPAL
void loop()
estado = HIGH;
while (estado == HIGH)
estado = digitalRead(ENTRADA_DIG);
for (i=0; i<5; i++)
digitalWrite(SAIDA_DIG, HIGH); //COLOCA O PINO 13 EM 5 VOLTS
delay(500); // EM MSEG //ESPERA 0,5 SEGUNDOS
digitalWrite(SAIDA_DIG, LOW); //COLOCA O PINO 13 EM 0 VOLTS
delay(500); //ESPERA 0,5 SEGUNDOS
QUAIS APLICAÇÕES PODEMOS TER PARA
CIRCUITOS QUE VIMOS ATÉ AGORA ???
CITEM EXEMPLOS
Projeto_03 - Acoplando um Sensor Ótico no Arduino:
Falar que este circuito pode detectar a luz da sala
LED VD
470Ω
D2
1 2 3 4 5 6 7
14 13 12 11 10 9 85V
D5SINAL
1 2 3 4
12KΩ
5V
D5
470Ω
E
CFOTO-TRANSISTOR
TIL78
Circuito Integrado
40106
LED IR
SINAL
FOTO-TRANSISTOR
E C
LED
INFRAVERMELHO
SINAL DE ENTRADA
D5
SAÍDA SCHIMITT TRIGGER
LUZ
//***** Projeto_03 *** PHOTO-GATE *****
//DEFINIÇÕES
int SAIDA_DIG = 2; //LED
int ENTRADA_DIG = 5; //SENSOR LUZ
int i, estado;
//CONFIGURANDO O HARDWARE
void setup()
pinMode(SAIDA_DIG, OUTPUT);
pinMode(ENTRADA_DIG, INPUT);
//PROGRAMA PRINCIPAL
void loop()
estado = HIGH;
while (estado == HIGH)
estado = digitalRead(ENTRADA_DIG);
for (i=0; i<5; i++)
digitalWrite(SAIDA_DIG, HIGH); //LED ON - PINO 2 EM 5 VOLTS
delay(300); // EM MSEG //ESPERA 0,3 SEGUNDOS
digitalWrite(SAIDA_DIG, LOW); //LED OFF - PINO 2 EM 0 VOLTS
delay(300); //ESPERA 0,3 SEGUNDOS
1 2 3 4
12KΩ
5V
D5
470Ω
E
C
FOTO-
TRANSISTOR
Circuito
Integrado
40106
LED
IR
SINAL
Cerâmica Piezoeléctrica (PZT)
1 2 3 4 5 6 7
14 13 12 11 10 9 85V
D5SINAL
PTZ
D5
120KΩ
1 2 43SINAL
SINAL DE ENTRADA
D5
SAÍDA SCHIMITT TRIGGER
PTZ
Arduino Reconhecendo Vibração Mecânica
1 2 3 4 5 6 7
14 13 12 11 10 9 85V
D5SINAL
PTZ
D5
120KΩ
1 2 43SINAL
while (estado == LOW)
estado = digitalRead(ENTRADA_DIG);
Desafio: Como medir o tempo de queda de um corpo?
Δt = ?
Desafio: Como medir o tempo de queda de um corpo?
Vamos Assistir um Vídeo:
Vídeo Queda Livre
Youtube: Vídeo Queda Livre
O microcontrolador é um microprocessador, memória RAM, memória ROM,
temporizadores, contadores, porta serial, conversores e portas de I/O em um único
circuito integrado.
Projeto_04: - Lendo Tensões com Arduino
+5V GND
SINAL
+5V
GND
A0
Projeto_04: - Lendo Tensões com Arduino
MONTAGEM 0V → 5V
0 → 1023
Potenciômetro 10KΩ
//************** Projeto_04 *** USANDO O CONVERSOR A/D **************
//DEFINIÇÕES DAS VARIÁVEIS
long int pot;
float volt;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL – SERIAL MONITOR
analogReference(DEFAULT); //Referência de ADC em 5V
//analogReference(INTERNAL); //Referência de ADC em 1,1V
//analogReference(EXTERNAL); //Referência externa em AREF entre 0 e 5V
//PROGRAMA PRINCIPAL
void loop()
pot = analogRead(A0); //Lê a Tensão através do PINO A0
volt = (5.0 * pot) / 1023; //Converte o valor lido para VOLTS
Serial.print("ADC: " ); //Imprime "ADC: “, e continua na mesma linha
Serial.print(pot); //Imprime o Valor Lido – (BITS), e continua na mesma linha
Serial.print(" | VOLT: " ); // //Imprime “VOLT: “, e continua na mesma linha
Serial.println(volt, 3); //Imprime o valor da TENSÂO, com 3 decimais e pula uma linha
delay(1000); //Espera 1 segundo
Desafio:
Como poderíamos medir e/ou plotar a oscilação de um pêndulo???
O que poderíamos fazer com o exemplo mostrado acima?
INICIA
MEDIDA IGNORA
FINALIZA
MEDIDA
1 2 3
LED IR
FOTOSENSOR
Projeto_05: - Medindo Temperatura com LM35 e Arduino
Faixa de medição é de -55 ºC* a +150 ºC
Precisão de ± 0,5 º C
* - requer circuito especifico ( Ver Datasheet)
Por dentro
do LM35
Amplificadores Operacionais
A1 e A2
Projeto_05: - Medindo Temperatura com LM35 e Arduino
2
31
Sensor de
Temperatura
LM35
-
-
-
//*** Projeto_05 *** CONV. A/D – TERMOMETRO – MONITOR SERIAL***
//DEFINIÇÕES DAS VARIÁVEIS
long int pot;
float volt, temp;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL
analogReference(INTERNAL); //Referência do ADC em 1.1V
//PROGRAMA PRINCIPAL
void loop()
pot = analogRead(A1); //Lê a Tensão ADC, através do PINO A1
volt = (1.1 * pot) / 1023; //Converte o valor lido para VOLTS
temp = volt * 100; //Converte tensão para temperatura
Serial.print( "ADC: "); //Imprime "ADC: “, e continua na mesma linha
Serial.print(pot); //Imprime o Valor Lido do ADC(BITS) e continua na mesma linha
Serial.print(" | TENSÃO: " ); //Imprime “VOLT: “, e continua na mesma linha
Serial.print(volt, 3); //Imprime o valor da TENSÂO em mV e continua na mesma linha
Serial.print(" | TEMP: " ); //Imprime “TEMP: “, e continua na mesma linha
Serial.println(temp, 1); //Imprime o valor da TEMPERATURA e pula uma linha
delay(1000); //Espera 1 segundo
Utilizando o MONITOR SERIAL
//*** Projeto_05 *** CONV. A/D – TERMOMETRO – MONITOR SERIAL***
//DEFINIÇÕES DAS VARIÁVEIS
long int pot;
float volt, temp;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL
analogReference(INTERNAL); //Referência do ADC em 1.1V
//PROGRAMA PRINCIPAL
void loop()
pot = analogRead(A1); //Lê a Tensão ADC, através do PINO A1
volt = (1.1 * pot) / 1023; //Converte o valor lido para VOLTS
temp = volt * 100; //Converte tensão para temperatura
Serial.print( "ADC: "); //Imprime "ADC: “, e continua na mesma linha
Serial.print(pot); //Imprime o Valor Lido do ADC(BITS), e continua na mesma linha
Serial.print(" | TENSÃO: " ); //Imprime “VOLT: “, e continua na mesma linha
Serial.print(volt, 3); //Imprime o valor da TENSÂO em mV, e continua na mesma linha
Serial.print(" | TEMP: " ); //Imprime “TEMP: “, e continua na mesma linha
Serial.println(temp, 1); //Imprime o valor da TEMPERATURA, e pula uma linha
delay(1000); //Espera 1 segundo
Utilizando o MONITOR SERIAL
Clique aqui para iniciar
o MONITOR SERIAL
//*** Projeto_05a *** CONV. A/D – TERMOMETRO – PLOTTER SERIAL***
//DEFINIÇÕES DAS VARIÁVEIS
long int pot;
float volt, temp
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL
analogReference(INTERNAL); //Referência do ADC em 1.1V
//PROGRAMA PRINCIPAL
void loop()
pot = analogRead(A1); //Lê a Tensão ADC, através do PINO A1
volt = (1.1 * pot) / 1023; //Converte o valor lido para VOLTS
temp = volt * 100; //Converte tensão para temperatura
Serial.print( "ADC: "); //Imprime "ADC: “, e continua na mesma linha
Serial.print(pot); Serial.print(" "); //Imprime o Valor Lido do ADC(BITS) e comando para próxima variável
Serial.print( "| Tensão: " ); //Imprime “VOLT: “, e continua na mesma linha
Serial.print(volt, 3); Serial.print (" "); //Imprime o valor da TENSÂO em mV e comando para próxima variável
Serial.print( "| TEMP: " ); //Imprime “TEMP: “, e continua na mesma linha
Serial.println(temp, 1); Serial.print (" "); //Imprime o valor da TEMPERATURA, e pula uma linha
delay(1000); //Espera 1 segundo
Utilizando o PLOTTER SERIAL
//*** Projeto_05a *** CONV. A/D – TERMOMETRO – PLOTTER SERIAL***
//DEFINIÇÕES DAS VARIÁVEIS
long int pot;
float volt, temp;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL
analogReference(INTERNAL); //Referência do ADC em 1.1V
//PROGRAMA PRINCIPAL
void loop()
pot = analogRead(A1); //Lê a Tensão ADC, através do PINO A1
volt = (1.1 * pot) / 1023; //Converte o valor lido para VOLTS
temp = volt * 100; //Converte tensão para temperatura
Serial.print( "ADC: "); //Imprime "ADC: “, e continua na mesma linha
Serial.print(pot); Serial.print(" "); //Imprime o Valor Lido do ADC(BITS), e comando para próxima variável
Serial.print( "| Tensão: " ); //Imprime “VOLT: “, e continua na mesma linha
Serial.print(volt, 3); Serial.print (" "); //Imprime o valor da TENSÂO em mV e comando para próxima variável
Serial.print( "| TEMP: " ); //Imprime “TEMP: “, e continua na mesma linha
Serial.println(temp, 1); Serial.print (" "); //Imprime o valor da TEMPERATURA, e pula uma linha
delay(1000); //Espera 1 segundo
Utilizando o PLOTTER SERIAL
Som é uma onda de compressão mecânica tridimensional que se propaga
em meios materiais. Os sons audíveis pelo ouvido humano têm uma frequência
entre 20Hz e 20000Hz
Percepção da Velocidade do Som através da observação de Relâmpagos e Trovões
Velocidade da Luz 3 .108 m/s Velocidade do Som 343m/s
Projeto_06 – Medindo distâncias com Sensor Ultrassônico
Medindo a Velocidade do Som
1636_ Mersenne ( Disparo de canhões (316 m/s))
1666_ Borelli a Viviane, discípulos de Galileo (361 m/s)
1687_ Newton determina a velocidade do som (295 m/s)
1708_ William Derham (Disparo de Canhão a 20Km (348 m/s)
1822_ Prony, Arago, Bouyard, Mathieu, Gay-Lussac e Humboldt (340.9 m/s)
1826_ Colladon e Sturn, Velocidade do som na água (1435 m/s)
1905_ Hebb utilizou o processo de interferência (331,41 m/s)
Medida direta da Velocidade do Som com Arduino
R
T
Projeto_06 – Medindo distâncias com Sensor Ultrassônico
Montagem
ESQUEMA DE LIGAÇÃO
HC-SR04 – ARDUINO
VCC – +5V ARDUINO
TRIGGER – PINO 13
ECHO – PINO 12
GND – GND ARDUINO
//*** Projeto_06 – MEDIDOR DE DISTÂNCIA – HC-SR04***
//DEFINIÇÕES DAS VARIÁVEIS
#define trigPin 13
#define echoPin 12
float distancia; unsigned long tempo;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//PROGRAMA PRINCIPAL
void loop()
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracao = pulseIn(echoPin, HIGH);
distancia = 0.0340 *(tempo/2);
Serial.print(distancia, 1); // Imprime no Monitor Serial a Distância com 1 casa decimal
Serial.println(" cm");
delay(500);
// Calcula a Distância distância x = v.t// x = 340(m/s) . t (pulseIn em 10^-6, micro segundos)
// x = 340.10^2(cm/s) . t.10^-6
// x = 340.10^-4 . t
// x = 0,0340 . t / 2 (cm) (Tempo Divido por 2, IDA e VOLTA do PULSO)
//*** Projeto_06 – MEDIDOR DE DISTÂNCIA – HC-SR04***
//DEFINIÇÕES DAS VARIÁVEIS
#define trigPin 13
#define echoPin 12
float distancia; unsigned long duracao;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin(9600); //Inicializa a COMUNICAÇÃO SERIAL
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//PROGRAMA PRINCIPAL
void loop()
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracao = pulseIn(echoPin, HIGH);
distancia = 0.0340 *(duracao/2);
Serial.print(distancia, 1); // Imprime no Monitor Serial a Distância com 1 casa decimal
Serial.println(" cm");
delay(500);
Exemplos de Aplicações
Exemplos de Aplicações
Exemplos de Aplicação
OBRIGADO A TODOSFIM!!!!
Luiz Antonio de Oliveira Nunes/
Antenor Fabbri Petrilli Filho
CURSO ARDUINO BÁSICO – MATERIAL COMPLEMENTAR
Versào1.0
Material_Complementar_01 - Controlando Maiores Potencias com o Arduino:
Utilizando o Módulo RELÉS
BARREIRA
ISOLAÇÃO ÓPTICALigação - Módulos Relé Opto-Isolados
Ativado
em LOW
Normalmente Fechado
Comum
Normalmente Aberto
Controlando Maiores Potencias com o Arduino:
Utilizando o Módulo RELÉS
Observe que o Módulo Relé
Ativa com Pulso LOW
/*** Material_Complementar_01 *** MÓDULO RELÉ CONTROLE DE CARGAS POTENTES ***
//DEFINIÇÕES DAS VARIÁVEIS
int SAIDA_DIG = 10;
//CONFIGURANDO O HARDWARE
void setup()
pinMode(SAIDA_DIG, OUTPUT); //CONFIGURA PINO 10 COMO SAIDA PARA ACIONAR O RELÉ
//PROGRAMA PRINCIPAL
void loop()
digitalWrite(SAIDA_DIG, LOW); //ACIONA O RELE COM NIVEL LÓGICO LOW
delay(500); //ESPERA 0,5 SEGUNDOS
digitalWrite(SAIDA_DIG, HIGH); //DESLIGA O RELÉ COM NÍVEL LOGICO HIGH
delay(500); //ESPERA 0,5 SEGUNDOS
Material_Complementar_02 – ALARME DE DISTÂNCIA COM SENSOR DE ULTRASOM
//*** Material_Complementar_02 ***
//*** ALARME DE DISÂNCIA * HC-SR04 ULTRASSOM ***
//DEFINIÇÕES DAS VARIÁVEIS
int trigPin=13, echoPin=12, ledvm=11, ledvd 10;
float distancia; unsigned long duracao;
//CONFIGURANDO O HARDWARE
void setup()
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //Trig para pino 13
pinMode(echoPin, INPUT); //Echo para pino 12
pinMode(ledvm, OUTPUT); //LED VM + pino 11
pinMode(ledvd, OUTPUT); //LED VD + pino 10
//PROGRAMA PRINCIPAL
void loop()
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracao = pulseIn(echoPin, HIGH);
distancia = 0.0340 *(duracao/2);
// Se distância > 2 metros ou distância< 4 centímetros
if (distancia >= 200 || distancia <= 4)
Serial.println("Fora do Alcance");
digitalWrite(ledvm,HIGH); // Sinaliza ERRO pelo LED VM
digitalWrite(ledvd, LOW);
// Se a distância estiver DENTRO do alcance
else
// Imprime no Monitor Serial a Distância com 1 casa decimal
Serial.print(distancia, 1);
Serial.println(" cm");
digitalWrite(ledvm, LOW);
digitalWrite(ledvd, HIGH); // Sinaliza OK pelo LED VD
delay(500);
top related