Vamos explorar as portas analógicas e digitais do Arduino, bem como o conceito de PWM (Modulação por Largura de Pulso, do inglês Pulse Width Modulation). Vamos explicar o funcionamento de cada tipo de porta, fornecer exemplos práticos e explicar o passo a passo de como utilizá-las em projetos.
Portas Analógicas
As portas analógicas do Arduino permitem a leitura de sinais analógicos, ou seja, valores variáveis em uma faixa contínua. O Arduino UNO, por exemplo, possui 6 portas analógicas, numeradas de A0 a A5. Cada porta analógica pode ler valores entre 0 e 5 volts e converter esses valores em números digitais de 10 bits (ou seja, entre 0 e 1023).
Para utilizar uma porta analógica, siga estes passos:
- Conecte o componente que você deseja ler à porta analógica do Arduino.
- No código, utilize a função
analogRead()
seguida do número da porta analógica (por exemplo,analogRead(A0)
) para ler o valor analógico.
Aqui está um exemplo de código que lê um sensor de luz conectado à porta analógica A0 e imprime o valor lido no monitor serial:
1
2
3
4
5
6
7
8
9
10
void setup() {
Serial.begin(9600);
}
void loop() {
int valorLido = analogRead(A0);
Serial.println(valorLido);
delay(1000);
}
Portas Digitais
As portas digitais do Arduino permitem a leitura e a escrita de sinais digitais, ou seja, valores que podem ser apenas 0 (LOW) ou 1 (HIGH). O Arduino UNO possui 14 portas digitais, numeradas de 0 a 13.
Para utilizar uma porta digital como entrada, siga estes passos:
- Conecte o componente que você deseja utilizar à porta digital do Arduino.
- No código, utilize a função
pinMode()
seguida do número da porta digital e defina-a comoINPUT
.
Aqui está um exemplo de código que lê o estado de um botão conectado à porta digital 2 e acende um LED conectado à porta digital 3 com base no estado do botão:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const int botaoPin = 2;
const int ledPin = 3;
void setup() {
pinMode(botaoPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int estadoBotao = digitalRead(botaoPin);
if (estadoBotao == HIGH) {
digitalWrite(ledPin, HIGH);
Serial.println("Botão pressionado");
} else {
digitalWrite(ledPin, LOW);
Serial.println("Botão não pressionado");
}
delay(100);
}
PWM (Modulação por Largura de Pulso)
O PWM (Modulação por Largura de Pulso) é uma técnica utilizada para simular saídas analógicas em portas digitais do Arduino. Essa técnica envolve a variação do tempo em que um sinal está em nível alto (HIGH) em relação ao tempo total de um ciclo. Isso permite controlar a média de energia entregue a um componente, como um LED ou um motor, mesmo usando uma porta digital.
Para utilizar PWM em uma porta digital do Arduino, siga estes passos:
- Conecte o componente que você deseja controlar (por exemplo, um LED) à porta digital do Arduino, com PWM, ela tem a marca ~.
- No código, utilize a função
analogWrite()
seguida do número da porta digital e um valor entre 0 e 255 para definir a intensidade do sinal PWM. Quanto maior o valor, maior será a média de energia entregue ao componente.
Aqui está um exemplo de código que utiliza PWM para controlar a intensidade de um LED conectado à porta digital 9:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int brilho = 0; brilho <= 255; brilho++) {
analogWrite(ledPin, brilho);
delay(10);
}
for (int brilho = 255; brilho >= 0; brilho--) {
analogWrite(ledPin, brilho);
delay(10);
}
}
Neste exemplo, o LED aumenta gradualmente a intensidade de brilho de 0 a 255 e depois diminui de volta para 0, criando um efeito de fade-in e fade-out.
Prática
Vamos continuar com um exemplo prático de como utilizar um potenciômetro ligado a uma porta analógica do Arduino e um LED com um resistor conectado a uma porta digital PWM.
Neste exemplo, vamos ler o valor do potenciômetro e utilizar esse valor para controlar a intensidade do brilho do LED. Quanto maior o valor lido do potenciômetro, maior será a intensidade do LED.
Materiais necessários
- Arduino UNO
- Potenciômetro
- LED
- Resistor (recomendado: 220 ohms)
- Jumpers
Montagem
- Conecte o terminal central do potenciômetro a uma das portas analógicas do Arduino (por exemplo, A0).
- Conecte um dos terminais externos do potenciômetro ao GND (terra) do Arduino.
- Conecte o outro terminal externo do potenciômetro a 5V (alimentação) do Arduino.
- Conecte o LED ao Arduino:
- Conecte o terminal positivo (maior) do LED a uma porta digital PWM do Arduino (por exemplo, 9).
- Conecte o terminal negativo (menor) do LED a um resistor (por exemplo, 220 ohms).
- Conecte o outro terminal do resistor ao GND (terra) do Arduino.
Código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const int potPin = A0;
const int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int valorPot = analogRead(potPin);
int brilho = map(valorPot, 0, 1023, 0, 255); // Mapeia o valor lido para o intervalo de 0 a 255
analogWrite(ledPin, brilho);
Serial.print("Valor do potenciômetro: ");
Serial.print(valorPot);
Serial.print(" | Brilho do LED: ");
Serial.println(brilho);
delay(100);
}
Explicação do código
- Definimos as constantes
potPin
eledPin
para representar as portas analógica e digital PWM, respectivamente. - No
setup()
, configuramos a porta do LED como saída (OUTPUT
) e iniciamos a comunicação serial. - No
loop()
, lemos o valor do potenciômetro usandoanalogRead(potPin)
, que retorna um valor entre 0 e 1023. - Em seguida, usamos a função
map()
para mapear esse valor para o intervalo de 0 a 255, que corresponde à faixa de intensidade do PWM. - Utilizamos
analogWrite(ledPin, brilho)
para ajustar a intensidade do LED com base no valor mapeado. - Imprimimos os valores lidos do potenciômetro e a intensidade do LED no monitor serial para acompanhamento.
- Adicionamos um pequeno atraso (
delay(100)
) para evitar leituras muito rápidas e oscilações indesejadas.
Com este exemplo, o LED terá sua intensidade de brilho controlada pelo potenciômetro. Conforme você gira o potenciômetro, a intensidade do LED irá variar proporcionalmente.
Referências
Entradas analógicas do Arduino
Arduino - Entradas e Saídas Digitais - Pinos digitais
Curso Arduíno EaD - Prática 6 - Entrada Analógica
Como usar Portas Digitais e Analógicas no ARDUINO
Circuit design Analogica com potenciometro e led - Tinkercad
Circuit design Potenciômetro/Analógica - Tinkercad