Como ler um sensor no Arduino (entrada digital e analógica)
Todo projeto de eletrônica que interage com o mundo real precisa de sensores. Um botão que você aperta, um potenciômetro que você gira, um sensor de luz que percebe se está claro ou escuro: tudo isso são entradas que o Arduino consegue ler. Neste artigo você vai aprender os dois jeitos de ler um sensor: a entrada digital e a entrada analógica. São conceitos simples, e depois que você entende a diferença, um mundo de projetos se abre.
Digital x analógica: qual a diferença?
A diferença é direta:
| Tipo | O que lê | Valores possíveis | Exemplos de sensor |
|---|---|---|---|
| Digital | Só dois estados | HIGH (ligado) ou LOW (desligado) | Botão, chave, sensor de presença |
| Analógica | Uma faixa contínua | Um número de 0 a 1023 | Potenciômetro, LDR (luz), sensor de temperatura |
Pense assim: a entrada digital é como um interruptor de parede, só liga ou desliga. A analógica é como o dimmer que regula a intensidade da luz, tem mil posições entre o mínimo e o máximo.
Lendo uma entrada digital (botão)
Um botão comum tem dois estados: apertado ou solto. Para o Arduino ler isso, usamos o comando digitalRead(), que devolve HIGH ou LOW.
Mas tem um detalhe importante. Quando o botão está solto, o pino fica "solto no ar" (o pessoal chama de flutuante), e o Arduino lê valores aleatórios. Para resolver isso, usamos um resistor de pull-up ou pull-down:
- Pull-up: um resistor puxa o pino para o nível alto (5V) quando o botão está solto. Apertar o botão leva o pino ao
LOW. - Pull-down: um resistor puxa o pino para o nível baixo (GND) quando solto. Apertar leva ao
HIGH.
A boa notícia: o próprio Arduino tem resistores de pull-up internos. Você ativa com INPUT_PULLUP e nem precisa de resistor externo. Ligue um lado do botão no pino 2 e o outro lado no GND:
const int pinoBotao = 2;
void setup() {
pinMode(pinoBotao, INPUT_PULLUP); // ativa o pull-up interno
Serial.begin(9600);
}
void loop() {
int estado = digitalRead(pinoBotao);
// Com pull-up, botão SOLTO = HIGH e botão APERTADO = LOW
if (estado == LOW) {
Serial.println("Botao APERTADO");
} else {
Serial.println("Botao solto");
}
delay(100); // evita floodar o Monitor Serial
}
Repare na lógica invertida: com INPUT_PULLUP, o botão apertado retorna LOW. Isso confunde no começo, mas é o jeito mais limpo de ligar um botão, porque dispensa resistor externo.
Lendo uma entrada analógica (potenciômetro e LDR)
Aqui entra o comando analogRead(). Ele lê os pinos analógicos (marcados como A0, A1, etc.) e devolve um número de 0 a 1023. Por quê esse número esquisito? Porque o Arduino usa um conversor de 10 bits, e 2 elevado a 10 dá 1024 possibilidades: de 0 até 1023.
Na prática:
- 0 significa 0 volts no pino.
- 1023 significa 5 volts no pino.
- Qualquer valor no meio é uma tensão proporcional.
Potenciômetro
O potenciômetro é o sensor perfeito para começar. Ligue os pinos das pontas em 5V e GND, e o pino do meio (o cursor) em A0. Ao girar o botão, a tensão no meio varia de 0 a 5V:
const int pinoPot = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int valor = analogRead(pinoPot); // le de 0 a 1023
Serial.print("Valor do potenciometro: ");
Serial.println(valor);
delay(200);
}
Gire o potenciômetro e veja o número mudar suavemente de 0 a 1023.
LDR (sensor de luz)
O LDR é um resistor que muda conforme a luz que recebe. Ele não liga sozinho no analógico: precisa de um resistor fixo (por exemplo, 10k ohms) formando um divisor de tensão. Ligue o LDR entre 5V e o pino A0, e o resistor de 10k entre o pino A0 e o GND. O código é idêntico ao do potenciômetro, só muda o que você faz com o valor:
const int pinoLDR = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int luz = analogRead(pinoLDR);
Serial.print("Nivel de luz: ");
Serial.println(luz);
if (luz < 300) {
Serial.println("Esta escuro!");
}
delay(200);
}
Tampe o LDR com a mão e veja o número cair. Aponte uma lanterna e ele sobe. Simples assim.
Como ver os valores no Monitor Serial
Você reparou no Serial.begin(9600) e no Serial.println()? Essa é a ferramenta que transforma você num detetive de eletrônica. O Monitor Serial mostra na tela do computador o que o Arduino está lendo.
Para abrir, no Arduino IDE clique no ícone da lupa no canto superior direito, ou use o atalho Ctrl + Shift + M. Um detalhe que pega muita gente: a velocidade (baud rate) do canto inferior do Monitor precisa ser a mesma do seu código. Se você escreveu Serial.begin(9600), selecione 9600 no Monitor, senão vai aparecer só caracteres embaralhados na tela.
Erros comuns
- Confundir os comandos:
digitalRead()é só para botões e chaves (HIGH/LOW).analogRead()é para sensores de faixa (0 a 1023). Não misture. - Ler pino digital com analogRead: você pode ler pinos analógicos com
digitalRead, mas não o contrário na maioria dos pinos. Para sensores de faixa, use sempre os pinosA0aA5. - Esquecer o pull-up no botão: sem
INPUT_PULLUP(ou um resistor externo), o botão vai dar leituras malucas. Sempre defina o modo do pino nosetup(). - Baud rate errado: código em 9600 e Monitor em 115200 mostra lixo na tela. Deixe os dois iguais.
- Achar que 5V vira 1023 no digital: no
digitalRead, uma tensão bem alta (perto de 5V) é lida comoHIGHe uma bem baixa (perto de 0V) comoLOW; no meio da faixa a leitura é indefinida. A escala 0-1023 só existe no analógico. - Lógica invertida do pull-up: lembre que com
INPUT_PULLUPo botão apertado retornaLOW. Não é bug, é o esperado.
O próximo passo
Ler um sensor é a base de praticamente todo projeto maker: um robô que desvia de obstáculos, uma horta que rega sozinha quando o solo seca, uma lâmpada que acende no escuro. Tudo começa com um digitalRead ou um analogRead e um olho no Monitor Serial.
Pegue seu Arduino, um botão e um potenciômetro, e brinque com esses dois códigos até os números fazerem sentido na sua cabeça. Quando você quiser ir além (transformar essas leituras em ações, controlar motores, montar projetos completos do zero), é exatamente isso que a gente constrói passo a passo no Curso Maker.