Você está na página 1de 6

2.

10 SAÍDAS ANALOGICAS

Você já ouviu falar em PWM? Se você nunca ouviu falar,


esse conceito pode parecer um pouco estranho pra você, mas vou
tentar simplificar ao máximo aqui, para seu entendimento.

Como você viu no capítulo anterior, os


microcontroladores, incluindo o Arduíno, permitem que você
faça leituras analógicas em suas portas. O que significa que ele
pega um sinal continuo, corta em vários pedacinhos, e
transforma isso em uma linguagem em que o processador
consiga entender.

Agora imagine o processo inverso. Sim! Esse mesmo


processo, totalmente invertido.

Quando falamos de saídas analógicas, significa que o


microcontrolador pega uma sequência de sinais e tenta
converter isso em um sinal analógico, ou seja continuo no
tempo. Por que eu usei a palavra “tenta”? Porque como já vimos
no capítulo anterior, o microcontrolador não entende a
linguagem física, então ele precisa usar dos recursos
disponíveis, para criar um sinal mais parecido com um sinal
físico real. Mas nenhum processador é perfeito, e quem
determina se a qualidade desse sinal vai ser boa ou ruim, é a
resolução dos microcontroladores. Vou citar aqui 2
microcontroladores para você entender melhor:

ARDUINO:

O Arduíno possuí uma resolução de 8 bits de saída, isso


quer dizer que os valores de saída podem variar de 0 a 255.

86
ESP32:

Esse microcontrolador possui um controle muito maior


que o Arduíno, e ele permite que varie a resolução de saída de 1 a
16 bits.

Pegando o exemplo do Arduíno, se pedirmos para ele


escrever um valor analógico em uma de suas saídas, usando o
comando analogWrite(), ele irá tentar replicar esse valor em
níveis de tensão. Isso se chama duty cicle, e é muito importante
você entender esse conceito. Vejamos o exemplo:

EXEMPLO:

Se você escrever 0 na saída, a tensão medida na porta é 0v

Se você escrever 255 na saída, a tensão medida na porta é


5V

Se você escrever na saída 128, a tensão medida é


aproximadamente 2.5V

Em outras palavras, o duty cicle é o tempo em que a porta


permanece ligada. Mas por que isso? Esse conceito envolve
eletrônica e eletricidade, mas basicamente a tensão em volts que
é medida em uma carga, nada mais é do que uma média de várias
tensões ao longo de um espaço de tempo.

Se o duty cicle é 0, significa que durante o período medido,


a porta permaneceu totalmente desligada

Se o duty cicle é 255, significa que durante o período


medido a porta permaneceu totalmente ligada

87
E se a duty cicle for 128? Isso aí, ele permaneceu
aproximadamente metade do tempo ligada, e metade do tempo
desligada.

A imagem abaixo mostra exatamente esse conceito:

Figura 6 – duty cicle.

Por que isso é importante para mim nesse momento? É que


usando o comando analogWrite(), você está controlando o duty
cicle da porta, e diretamente controlando a tensão de saída dessa
porta.

SINTAXE:

analogWrite(pino, valor)// pino é a numeração do pino a


ser controlado, e valor é o duty cicle.

EXEMPLO:
int ledPin = 9;// LED conectado ao pino digital 9

88
int analogPin = 3;// potenciômetro conectado ao pino
analógico 3
int val = 0;// variável para guardar o valor lido

void setup() {
pinMode(ledPin, OUTPUT); // configura o pino como saída
}

void loop() {
val = analogRead(analogPin);// lê o pino de entrada
analógica
analogWrite(ledPin, val / 4); // analogRead retorna
valores de 0 a 1023, analogWrite recebe de 0 a 255
}

89
PROJETO#5 – Controlando o brilho do LED
com PWM:

Usando o PWM vamos criar um algoritmo que irá


aumentar e diminuir a intensidade de brilho de um LED;

Esse efeito é chamado de fade.

Você pode identificar os pinos que permitem a saída


analógica no Arduíno com o símbolo de “~”. Como por exemplo:

~3, ~5, ~6, ~9.

Componentes:
• 1 - Arduino Uno
• 1 - Protoboard
• 1 - LED 5mm //qualquer cor
• 1 - 220 Ω Resistor
• Jumpers

Diagrama:

90
/*
Fade
*/

int LED = 9; // O pino PWM que será usado


int brightness = 0;
int fadeAmount = 5;

void setup() {
pinMode(LED, OUTPUT); // declare pin 9 como SAÍDA
}

void loop() {
// seta o brilho do LED no pino 9 usando PWM
analogWrite(LED, brightness);

// Muda o brilho a cada iteração do loop


brightness = brightness + fadeAmount;

// Inverte o fade
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// aguarda 30 milissegundos
delay(30);
}

91

Você também pode gostar