Escolar Documentos
Profissional Documentos
Cultura Documentos
Ferramentas
Arduino IDE - https://www.arduino.cc/
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.
-
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.
- Alimentao de tenso
- Efeitos de udio
Sintetizadores simples
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
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);
}
https://123d.circuits.io/circuits/924079
https://123d.circuits.io/circuits/936535-pid-temperature-sensor-control-refrigeration
Exerccios
1)
1)
2)
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.
Uno
D2
D3
Leonardo
D3
D2
D0
D1
Mega2560
D2
D3
D2
1
D2
0
D1
9
D1
8
Due
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)
RISING
FALLING
CHANGE
HIGH
Dispara a interrupo
sempre que estiver em
nvel alto (HIGH)
https://123d.circuits.io/circuits/933078-interruptions-volatile-global-variable