CajuínaCode
Voltar ao blog
ArduinoRobóticaProgramaçãoTecnologiaTutorial

Arduino para Iniciantes (Parte 3): Portas Analógicas e Sensores LDR

Aprenda a ler o mundo analógico com o Arduino. Use a leitura de sensores LDR para criar um sistema de iluminação automática inteligente.

CC

Cajuina Code

·3 min de leitura

Nas duas primeiras partes da nossa trilha, trabalhamos exclusivamente com sinais lógicos binários (LIGADO ou DESLIGADO) através das portas digitais. Se você está chegando agora, confira o post anterior: Arduino para Iniciantes (Parte 2): Estrutura de Código e Portas Digitais.

No entanto, a maior parte dos fenômenos do mundo real não é binária. A temperatura de uma sala, a distância de um obstáculo ou a quantidade de luz em um ambiente variam de forma gradual. Para ler essas informações, utilizamos as **portas analógicas**. Nesta Parte 3, você aprenderá a ler esses sinais graduais e criará um sensor de iluminação automática utilizando um sensor **LDR (Fotorresistor)**.

TL;DR: Portas analógicas lêem tensões variáveis entre 0V e 5V e as convertem, por meio do ADC interno de 10 bits, em valores numéricos que variam de 0 a 1023 no código.

Digital vs Analógico: Qual a diferença?

Entender a natureza física desses dois sinais é fundamental para escolher quais pinos usar em seus projetos robóticos:

Tipo de SinalEstados PossíveisExemplo no Mundo FísicoUso Comum no Arduino
DigitalApenas 2 (HIGH ou LOW)Lâmpada ligada ou desligada.Ler botões de pressão, acionar relés ou buzinas.
AnalógicoInfinitos valores intermediáriosA variação da luz do dia (amanhecer ao anoitecer).Ler sensores de temperatura, som, luz ou umidade.

O conversor Analógico-Digital (ADC)

O Arduino Uno possui 6 pinos de entrada analógica (identificados como **A0 a A5**). Como o microcontrolador é um dispositivo digital, ele não consegue processar tensões contínuas diretamente.

Para contornar isso, a placa possui um circuito interno chamado **Conversor Analógico-Digital (ADC)** com resolução de **10 bits**. Esse circuito divide a faixa de tensão de 0V a 5V em 1024 partes equivalentes:

  • Se o sensor enviar **0V**, o Arduino lê **0** no código.
  • Se o sensor enviar **2.5V**, o Arduino lê **512**.
  • Se o sensor enviar **5V**, o Arduino lê **1023**.

O que é um sensor LDR?

O **LDR (Light Dependent Resistor)** é um fotorresistor, ou seja, um componente elétrico cuja resistência varia de acordo com a intensidade da luz que incide sobre ele. Quanto mais luz brilha no LDR, menor é a sua resistência elétrica; quanto mais escuro estiver, maior é a resistência.

Para ler a variação da luz no Arduino, montamos um circuito chamado **Divisor de Tensão**, conectando o LDR em série com um resistor fixo de 10kΩ. Isso converte a variação de resistência do LDR em variação de tensão elétrica (que o pino analógico consegue ler).

Circuito e Código Prático: Iluminação Automática

Conecte o circuito divisor de tensão do LDR ao **pino analógico A0** do Arduino, e um LED (com resistor de 220Ω) ao **pino digital 9**.

Escreva o seguinte código na sua IDE:

// Definicao dos pinos
const int pinoLDR = A0;
const int pinoLed = 9;

// Guarda o valor lido do sensor (0 a 1023)
int valorLuz = 0;

void setup() {
  pinMode(pinoLed, OUTPUT);
  // Entradas analogicas nao precisam ser declaradas no setup,
  // mas e uma boa pratica iniciar a comunicacao serial para testes
  Serial.begin(9600);
}

void loop() {
  // Le o valor analogico do LDR
  valorLuz = analogRead(pinoLDR);

  // Imprime o valor no Monitor Serial para depuracao
  Serial.print("Valor da luz: ");
  Serial.println(valorLuz);

  // Se estiver escuro (valor de tensao baixo no divisor de tensao)
  // Ajuste o numero 500 conforme a luz do seu ambiente
  if (valorLuz < 500) {
    digitalWrite(pinoLed, HIGH); // Liga o LED (luz de poste)
  } else {
    digitalWrite(pinoLed, LOW);  // Desliga o LED
  }
  
  delay(100);
}

Explicando as novas funções e o Monitor Serial

Neste circuito, usamos recursos muito úteis de monitoramento de dados:

  • analogRead(pino): Faz a leitura do pino analógico especificado e retorna um número inteiro de 0 a 1023 representando a tensão elétrica lida.
  • Serial.begin(9600): Inicia a comunicação serial entre o Arduino e o computador a uma velocidade de 9600 bits por segundo (baud rate). Isso permite que você abra o **Monitor Serial** (lupa no canto superior direito da IDE) e veja os valores reais que o sensor está lendo na tela em tempo real.

Perguntas Frequentes

Por que o sensor LDR não é ligado direto no pino digital?

Se você ligar o LDR em um pino digital, o Arduino só conseguirá saber se está "muito claro" ou "muito escuro" sem qualquer controle gradual, perdendo a precisão de ajuste fino de sensibilidade que o pino analógico oferece.

Como calibrar o limite de acionamento do LED?

Abra o Monitor Serial e veja o valor exibido com a luz do quarto ligada (ex: 800) e com a luz desligada (ex: 300). Escolha um valor intermediário (como 550) para ser a sua linha de corte (threshold) no comando if do código.

Posso ligar lâmpadas reais de 110V/220V nesse projeto?

Sim. O pino digital do Arduino não consegue alimentar uma lâmpada comum diretamente, mas ele pode acionar um módulo **Relé** (que funciona como um interruptor magnético), permitindo controlar circuitos de alta tensão com total segurança.

Próximos Passos

Agora você já sabe ler o mundo físico usando sensores analógicos! Mas o que fazer se precisarmos controlar a intensidade de brilho do LED de forma suave ou ajustar a posição exata de um motor? Na próxima postagem (Parte 4), aprenderemos como usar o **PWM** do Arduino para simular saídas analógicas e controlar servomotores!

Newsletter

Receba as notas de desenvolvimento

Enviamos atualizações técnicas e bastidores de código sem spam direto no seu e-mail.

Leia também