Você está na página 1de 69

CURSO ARDUINO BÁSICO

Luiz Antonio de Oliveira Nunes/


Antenor Fabbri Petrilli Filho
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

ORDVAC
ENIAC
EDVAC

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
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:
Arduino UNO

7 a 12 V

Auto Reset

Atmega 328
(16)3375-7778 - São Carlos/SP

https://www.arduino.cc/
Ambiente de Programação: Download do IDE ARDUINO
Instalando o IDE ARDUINO
Diretório Arduino após a Instalação

Drivers de Comunicação
Iniciando o IDE

Clicar no Ícone
na Área de
Trabalho
Configurações iniciais do IDE ARDUINO

Marcar

Desmarcar
A Interface do IDE

• 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. É uma
interface Arduino-PC;

Área de Programação
• Área de Notificações: é uma área
que apresenta os erros de compilação, se o
upload do programa obteve êxito e se a
compilação também ocorreu com sucesso.

• Área de Programação: é onde


digitamos o código que será programado
no Arduino.
Configurando o Tipo da Placa Arduino
e sua Porta de Comunicação
UPLOAD DE SEU PRIMEIRO SKETCH
Clicar na seta para
transferir o programa
para o ARDUINO

Viva!!! Consegui fazer alguma coisa!!!


Software – Estrutura de Programação

• 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
}
Projeto_01 - Fazendo um Led Piscar
Projeto_01 - Fazendo um Led Piscar

Falar do ProtoBoard

D13
Pino 13 (LOW = 0V/ HIGH = 5V)

LED LED Vermelho 5mm

470Ω

R = 150Ω a 1KΩ
Resistor Limitador de Corrente
470Ω

GND (da Placa do ARDUINO)


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
}
Controlando Maiores Potências com Arduino:
Utilizando Transistor FET

9V

Solenoide

Solenoide
IRF530 D
G IRF530
D13
FET
N
S
2,2KΩ

470Ω 2,2KΩ

IRF530 1 – G = GATE
N -Channel 3 2 – D = DRAIN
2
1 3 – S = SOUCE
Projeto_02 - Reconhecendo o Comando de uma Chave
(Salvar na pasta, Projeto_02)

D2 5V

10KΩ 10KΩ
LED VM

D4

470Ω Ch1

470Ω
//***** Projeto_02 *** Entrada Digital ***** //PROGRAMA PRINCIPAL
void loop()
//DEFINIÇÕES {
int SAIDA_DIG = 2; //LED estado = HIGH;
int ENTRADA_DIG = 4; //CHAVE while (estado == HIGH)
int i, estado; {
estado = digitalRead(ENTRADA_DIG);
//CONFIGURANDO O HARDWARE }
void setup()
{ for (i=0; i<5; i++)
pinMode(SAIDA_DIG, OUTPUT); {
pinMode(ENTRADA_DIG, INPUT); 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:
D2 5V
FOTO-TRANSISTOR

LED
INFRAVERMELHO
C
FOTO-TRANSISTOR
LED VD LED IR TIL78

E
1 2 3 4
SINAL D5

Circuito Integrado
470Ω 470Ω 12KΩ 40106
E C

5V
14 13 12 11 10 9 8

Falar que este circuito pode detectar a luz da sala 1 2 3 4 5 6 7


SINAL D5
LUZ

SINAL DE ENTRADA

D5

SAÍDA SCHIMITT TRIGGER


//***** Projeto_03 *** PHOTO-GATE ***** //PROGRAMA PRINCIPAL 5V
void loop()
//DEFINIÇÕES {
C
int SAIDA_DIG = 2; //LED estado = HIGH;
LED FOTO-
int ENTRADA_DIG = 5; //SENSOR LUZ while (estado == HIGH) IR E TRANSISTOR
int i, estado; { SINAL
1 2 3 4
D5
estado = digitalRead(ENTRADA_DIG);
Circuito
//CONFIGURANDO O HARDWARE } 470Ω 12KΩ Integrado
void setup() 40106

{
pinMode(SAIDA_DIG, OUTPUT);
pinMode(ENTRADA_DIG, INPUT); 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
}
}
Cerâmica Piezoeléctrica (PZT)
SINAL
1 2 3 4
D5

PTZ 120KΩ

PTZ

SINAL DE ENTRADA

D5

SAÍDA SCHIMITT TRIGGER 5V


14 13 12 11 10 9 8

1 2 3 4 5 6 7
SINAL D5
Arduino Reconhecendo Vibração Mecânica

SINAL
1 2 3 4
D5

PTZ 120KΩ

5V
14 13 12 11 10 9 8
while (estado == LOW)
{
estado = digitalRead(ENTRADA_DIG);
}
1 2 3 4 5 6 7
SINAL D5
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


Projeto_04: - Lendo Tensões com Arduino

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
MONTAGEM 0V → 5V
0 → 1023

+5V

SINAL

+5V GND A0

Potenciômetro 10KΩ GND


//************** 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: O que poderíamos fazer com o exemplo mostrado acima?

Como poderíamos medir e/ou plotar a oscilação de um pêndulo???

FOTOSENSOR

LED IR

1 2 3

INICIA FINALIZA
MEDIDA IGNORA
MEDIDA
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)


Amplificadores Operacionais
A1 e A2

Por dentro
do LM35
Projeto_05: - Medindo Temperatura com LM35 e Arduino

-
-
-

Sensor de
Temperatura
LM35 1 3
2
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

//*** Projeto_05 *** CONV. A/D – TERMOMETRO – MONITOR SERIAL***


//DEFINIÇÕES DAS VARIÁVEIS
Clique aqui para iniciar
long int pot; o MONITOR SERIAL
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 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

//*** 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
}
Projeto_06 – Medindo distâncias com Sensor Ultrassônico

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


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
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);
} // Calcula a Distância distância ➔ x = v.t
//PROGRAMA PRINCIPAL
void loop() {
// x = 340(m/s) . t (pulseIn em 10^-6, micro segundos)
digitalWrite(trigPin, LOW); // x = 340.10^2(cm/s) . t.10^-6
delayMicroseconds(2); // x = 340.10^-4 . t
digitalWrite(trigPin, HIGH); // x = 0,0340 . t / 2 (cm) ➔ (Tempo Divido por 2, IDA e VOLTA do PULSO)
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);
}
//*** 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
TODOS
FIM!!!!
CURSO ARDUINO BÁSICO – MATERIAL COMPLEMENTAR

Luiz Antonio de Oliveira Nunes/


Antenor Fabbri Petrilli Filho
Versào1.0
Material_Complementar_01 - Controlando Maiores Potencias com o Arduino:
Utilizando o Módulo RELÉS

BARREIRA
ISOLAÇÃO ÓPTICA
Ligação - Módulos Relé Opto-Isolados

Normalmente Fechado
Comum
Normalmente Aberto

Ativado
em LOW
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 *** digitalWrite(trigPin, HIGH);
//*** ALARME DE DISÂNCIA * HC-SR04 ULTRASSOM *** delayMicroseconds(10);
digitalWrite(trigPin, LOW);
//DEFINIÇÕES DAS VARIÁVEIS duracao = pulseIn(echoPin, HIGH);
int trigPin=13, echoPin=12, ledvm=11, ledvd 10; distancia = 0.0340 *(duracao/2);
float distancia; unsigned long duracao; // Se distância > 2 metros ou distância< 4 centímetros
if (distancia >= 200 || distancia <= 4){
//CONFIGURANDO O HARDWARE Serial.println("Fora do Alcance");
void setup() { digitalWrite(ledvm,HIGH); // Sinaliza ERRO pelo LED VM
Serial.begin (9600); digitalWrite(ledvd, LOW);
pinMode(trigPin, OUTPUT); //Trig para pino 13 }
pinMode(echoPin, INPUT); //Echo para pino 12 // Se a distância estiver DENTRO do alcance
pinMode(ledvm, OUTPUT); //LED VM + pino 11 else {
pinMode(ledvd, OUTPUT); //LED VD + pino 10 // Imprime no Monitor Serial a Distância com 1 casa decimal
} Serial.print(distancia, 1);
Serial.println(" cm");
//PROGRAMA PRINCIPAL digitalWrite(ledvm, LOW);
void loop() { digitalWrite(ledvd, HIGH); // Sinaliza OK pelo LED VD
digitalWrite(trigPin, LOW); }
delayMicroseconds(2); delay(500);
}

Você também pode gostar