Sie sind auf Seite 1von 29

Arduino

Ferramentas
Arduino IDE - https://www.arduino.cc/

123d Circuit - https://123d.circuits.io/

Arduino ATmega328
o microcontrolador do Arduino UNO

Arduino - Bootloader
Para gravar um programa em um microcontrolador
(ATmega) sem usar o Arduino necessrio um hardware
especial.
-

Normalmente chamado de Bootburner.


No caso do Arduino, os microcontroladores j vem com
um programa pr gravado.
Caso voc compre um microcontrolador do mesmo tipo
novo, possvel que ele no venha com o bootloader
pr gravado. Nesse caso possvel usar um
bootburner ou usar outro Arduino como gravador.

Arduino - Bootloader

Arduino.h
Dentro da pasta onde a IDE do Arduino foi
instalada (normalmente dentro de c:\arquivos
de programas) voc encontrar os arquivos .h
e .cpp que rodam em conjunto com o sketch
criado pela IDE. Esses arquivos contm:
- Endereos e cdigos em hexadecimal
para todas as constantes usadas nos
programas
- O programa main.
- Bootloader
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino

Gravao de um Sketch
IDE do Arduino

MeuSketch.ino

Placa Arduino

Pr-processador
da IDE do
Arduino

Arduino.h
Arduino.h
Arduino.h

Pr-processador
do GCC

Compilador e
ligador do GCC

AVRDUDE

Bootloader
USB Serial

Memria Flash
do Arduino

Sadas Digitais
Funcionam de forma binria
- Totalmente ligadas (0v)
- Totalmente desligadas (5v)

Sadas Analgicas
O Arduno UNO no possui sadas analgicas
verdadeiras (apenas o Arduno Due tem essa
opo).
Para enviar uma tenso entre 0v e 5v possvel
ligar e desligar uma sada digital rapidamente. O
processo de ligar e desligar chamado de pulso.
Controlando a largura desse pulso (Sadas
moduladas por pulso PWM pulse width
modulation) podemos simular uma sada
analgica.

PWM (Pulse Width Modulation)


Algumas aplicaes
- Controle de motores
- Controle de encoders e decoders
- Telecomunicaes
uma forma de modulao de sinal

- Alimentao de tenso
- Efeitos de udio
Sintetizadores simples

- Controlar a intensidade de um LED


- Controlar o aquecimento de uma resistncia

PWM - Exemplo
Controlar a velocidade de um motor.
- Usando resistor
- Se o motor for grande o resistor pode ficar muito quente
- Calor = desperdcio de energia
- E se quisermos alterar a velocidade?

PWM - Exemplo
- Usando PWM
- Ligar e desligar a energia em uma frequncia controlada eficiente
- A frequncia pode ser controlada por um microcontrolador
Se quisermos controlar um motor de 12v a uma velocidade de 60% da
sua capacidade podemos aplicar um duty cicle de 60% do tempo.
Significa dizer que a energia estar ligada 60% do tempo. Utilizando o
clculo abaixo possvel observar que o resultado o mesmo do que
se estivssemos alimentando o motor com 7,2v.
0,6 * 12v = 7,2v

PWM Alguns usos com o Arduino


- Servos
- ECS (Electronic Speed Control)
Usado em aeromodelos, quadcopteros,
automodelos e etc.
- Intensidade de LEDs
Pode ser usado em conjunto com
controladores PID (Proportional, integral,
derivative control)
Kp, Ki, Kd

PID e PWM

http://www.rentanadviser.com/en/pid-fuzzy-logic/pid-fuzzy-logic.aspx

Sadas Analgicas

https://123d.circuits.io/circuits/924046-arduino-pwm-osciloscope

Sadas Analgicas
int ledPin = 3;
int potPin = A2;
int potValue = 0;
void setup() {
pinMode(potPin, INPUT);
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
potValue = analogRead(potPin);
Serial.print("Pot: ");
Serial.println(potValue);
int val = map(potValue, 0, 1023, 0, 255);
Serial.print("Val: ");
Serial.println(val);
analogWrite(ledPin, val);
delay(5);
}

Sadas Analgicas PWM e Servos

https://123d.circuits.io/circuits/924079

PID com Arduino

https://123d.circuits.io/circuits/936535-pid-temperature-sensor-control-refrigeration

Exerccios
1)

Monte um projeto usando Arduino, programe um pino de sada


como PWM e visualize o pulso no osciloscpio.
- Efetue a medio da tenso usando um multmetro

1)

Controle a velocidade de um motor DC utilizando um transistor e


PWM.

2)

Usando como base o projeto PID com Arduino monte um projeto


de controle de temperatura usando PID. O sistema deve:
Usar um potencimetro para selecionar a temperatura desejada
Usar um sensor de temperatura para obter a temperatura atual
Usar um motor como um ventilador para resfriar o sensor

Interrupes de hardware
Uma forma de verificar a mudana de estado
de um pino atravs do cdigo abaixo.
void loop(){
if(digitalRead(inputPin) == LOW){
//Faa alguma coisa
}
}

Interrupes de hardware
Essa abordagem possui alguns problemas:
- necessrio ficar verificando continuamente
se o pino inputPin deve alguma mudana
- Caso a funo loop tenha mais cdigos, o
arduino no verificar mudana de estados
enquanto esses cdigos esto executando

Interrupes de hardware
Essa abordagem possui alguns problemas:
- necessrio ficar verificando continuamente
se o pino inputPin deve alguma mudana
- Caso a funo loop tenha mais cdigos, o
arduino no verificar mudana de estados
enquanto esses cdigos esto executando
- Em caso de sensores rpidos (pulsos
rpidos) a verificao fica comprometida.
Enquanto o sensor j mudou de estado
vrias vezes a verificao do arduino pode
estar fazendo outra coisa.

Interrupes Arduino UNO


Nmero da Interrupo
Placa

Uno

D2

D3

Leonardo

D3

D2

D0

D1

Mega2560

D2

D3

D2
1

D2
0

D1
9

D1
8

Due

Usar o nome dos prprios pinos

Observaes

Cuidado, os nmeros 0 e 1 so
invertidos

Interrupes de hardware

https://123d.circuits.io/circuits/924199-interruptions

Interrupes de hardware
int led = 12;
int swPin = 2;
void setup() {
pinMode(led, OUTPUT);
pinMode(swPin, INPUT_PULLUP);
attachInterrupt(0, facaAlgumaCoisa, FALLING);
}
void loop() {

}
void facaAlgumaCoisa(){
digitalWrite(led, HIGH);
}

Interrupes
Modo

Operao

Observaes

LOW

Dispara a interrupo
sempre que estiver em
nvel baixo (LOW)

Executa a interrupo continuamente


enquanto o o pino estiver em nvel baixo
(LOW)

RISING

Dispara quanto o pino


passa de baixo (LOW)
para alto (HIGH)

FALLING

Dispara quando o pino


passa de alto (HIGH)
para baixo (LOW)

CHANGE

Dispara sempre que o


pino mudar de nvel em
qualquer sentido

HIGH

Dispara a interrupo
sempre que estiver em
nvel alto (HIGH)

Esse modo est disponvel apenas no


Arduino Due

Rotinas de Interrupo (ISR)


As funes executadas em uma interrupo so chamadas ISR.
Uma ISR no pode receber nenhum parmetro e no pode retornar
nenhum valor.
necessrio usar uma varivel global voltil para transferir
informaes entre a ISR e o restante do programa (que roda no loop)
A varivel deve ser do tipo volatile para evitar que o
compilador coloque esta varivel em um registrador especial
(tentando otimizar o desempenho) e resulte em um valor
incorreto.
Basicamente o comando volatile diz para o compilador que o
valor desta varivel pode mudar a qualquer momento, no
necessariamente pelo cdigo a sua volta.

ISR Variveis volteis globais

https://123d.circuits.io/circuits/933078-interruptions-volatile-global-variable

Rotinas de Interrupo (ISR)


Devem ser rotinas pequenas. Se outra interrupo ocorrer enquanto
um ISR est sendo executada o controlador NO interromper a ISR.
As funes delay e millis no funionaro corretamente dentro de uma
ISR (elas dependem de outras interrupes para funcionarem)
Use delayMicroseconds no lugar de delay
As comunicaes seriais tambm necessitam de interrupes e no
funcionaro corretamente dentro de uma ISR

Das könnte Ihnen auch gefallen