Componentes · 7 min de leitura

Sensor de movimento PIR (HC-SR501): detecção de movimento com Arduino, ESP32 e Pico

Como funciona um sensor de movimento PIR? Ligação do HC-SR501, ajuste de sensibilidade e de tempo, modos de disparo H/L, código para Arduino, ESP32 e Pico, uma luz com sensor de presença e como evitar disparos falsos.

Um sensor PIR (Passive InfraRed, infravermelho passivo) é um sensor barato e de consumo muito baixo que detecta quando uma pessoa ou um animal se move no seu campo de visão. Luzes de escada que acendem sozinhas, sistemas de alarme e campainhas automáticas normalmente usam um PIR. A palavra "passivo" significa que o sensor não emite nada: ele só "escuta" a radiação infravermelha emitida pelos objetos quentes ao redor. O modelo mais popular em projetos com Arduino é o HC-SR501.

Sensor de movimento PIR HC-SR501
Sensor PIR HC-SR501: a cúpula branca é uma lente de Fresnel; a placa embaixo tem dois potenciômetros de ajuste e um jumper de disparo.

Como funciona um sensor PIR?

Todo objeto mais quente que o zero absoluto emite radiação infravermelha, e o corpo humano emite mais forte em um comprimento de onda de 9–10 micrômetros. No coração do sensor há um elemento piroelétrico que reage a essa radiação, e ele é dividido em duas metades. Quando nada se move, as duas metades recebem a mesma quantidade de radiação, os sinais se anulam e a saída fica quieta. Quando alguém atravessa o campo de visão, primeiro uma metade e depois a outra recebem mais radiação; o circuito do módulo percebe essa diferença e o pino OUT vai para HIGH.

A cúpula branca em cima é uma lente de Fresnel. Ela divide o campo de visão em dezenas de pequenas zonas e concentra a radiação de cada zona no elemento. Quando uma pessoa passa de uma zona para a outra, o sinal muda; é por isso que um sensor PIR é ótimo para detectar movimento, mas não consegue detectar alguém completamente parado.

Especificações do HC-SR501

CaracterísticaValor
Tensão de alimentação4,5–20 V (5 V recomendado)
Corrente em repousoCerca de 50 µA
SaídaDigital: 3,3 V com movimento, 0 V sem
Alcance de detecção3–7 m (ajustável)
Ângulo de detecçãoCerca de 110°
Tempo de saídaCerca de 3 segundos a 5 minutos (ajustável)
Tempo de bloqueioCerca de 2,5 segundos depois que a saída desliga
Tempo de aquecimento30–60 segundos ao ligar

Ajustes no módulo

  • Potenciômetro Sx (sensibilidade): define o alcance de detecção. Girar no sentido horário aumenta o alcance de cerca de 3 para 7 metros.
  • Potenciômetro Tx (tempo): define quanto tempo a saída fica em HIGH depois que o movimento é detectado. Girar no sentido horário aumenta o tempo.
  • Jumper de disparo H (repetitivo): o temporizador reinicia toda vez enquanto o movimento continua; ideal para controlar luzes.
  • Jumper de disparo L (único): a saída vai para LOW quando o tempo acaba, mesmo que o movimento continue; aí é preciso um novo disparo.
  • Tempo de bloqueio: durante cerca de 2,5 segundos depois que a saída vai para LOW, nenhum movimento novo é detectado; isso não pode ser ajustado.
Quando começar a testar, gire os dois potenciômetros totalmente no sentido anti-horário (tempo mais curto, sensibilidade mais baixa) e coloque o jumper em H. Assim você não precisa esperar minutos depois de cada teste; definir o tempo no código depois é muito mais flexível.

Pinagem e ligação do HC-SR501

PinoFunçãoArduino UnoESP32Raspberry Pi Pico
VCCAlimentação5VVIN (5V)VBUS (5V)
OUTSaída digital (3,3 V)D2GPIO 27GP16
GNDTerraGNDGNDGND
Na maioria dos módulos, os nomes dos pinos estão impressos na parte de cima da placa, embaixo da cúpula branca. Você pode puxar a cúpula com cuidado para ler as marcações e depois encaixá-la de volta.

Detectando movimento com o Arduino

O código abaixo espera o sensor aquecer e depois mostra uma mensagem no Monitor Serial uma vez quando o movimento começa e outra quando termina, ligando e desligando o LED embutido do Arduino. Observar só as mudanças de estado, em vez de mostrar a saída sem parar, também é a abordagem que você vai usar em projetos reais.

C++ (Arduino IDE)
1const int PIR_PIN = 2;
2const int LED_PIN = 13;        // dahili LED / built-in LED
3
4bool motion = false;
5
6void setup() {
7  pinMode(PIR_PIN, INPUT);
8  pinMode(LED_PIN, OUTPUT);
9  Serial.begin(9600);
10  Serial.println("Sensör ısınıyor / warming up...");
11  delay(30000);                  // ilk 30 sn kararsız / unstable for ~30 s
12  Serial.println("Hazır / ready");
13}
14
15void loop() {
16  bool now = digitalRead(PIR_PIN);
17  if (now && !motion) {
18    Serial.println("Hareket algılandı / motion detected");
19    digitalWrite(LED_PIN, HIGH);
20    motion = true;
21  } else if (!now && motion) {
22    Serial.println("Hareket bitti / motion ended");
23    digitalWrite(LED_PIN, LOW);
24    motion = false;
25  }
26}
Logo que é ligado, o sensor passa 30–60 segundos "aprendendo" o ambiente e pode disparar sozinho nesse período. Esperar esse tempo no código, ou ignorar os primeiros disparos, evita alarmes falsos toda vez que o sistema liga.

Luz com sensor de presença: temporização com millis()

Controlar o tempo de acionamento no código, e não no potenciômetro Tx do módulo, é muito mais flexível. O código abaixo registra o momento sempre que um movimento é detectado e apaga a luz 20 segundos depois do último movimento, então a luz fica acesa enquanto alguém estiver se movendo no cômodo. Você pode ligar um LED no LIGHT_PIN, ou um módulo relé para uma lâmpada da rede elétrica; se usar um relé ativo em LOW, troque HIGH e LOW na última linha. A ligação do relé é explicada em O que é módulo relé?

C++ (Arduino IDE)
1const int PIR_PIN = 2;
2const int LIGHT_PIN = 7;               // LED ya da röle / LED or relay
3const unsigned long ON_TIME = 20000;   // son hareketten sonra 20 sn / 20 s after last motion
4
5unsigned long lastMotion = 0;
6
7void setup() {
8  pinMode(PIR_PIN, INPUT);
9  pinMode(LIGHT_PIN, OUTPUT);
10}
11
12void loop() {
13  if (digitalRead(PIR_PIN) == HIGH) {
14    lastMotion = millis();             // her harekette süreyi yenile / refresh on every motion
15  }
16  bool on = (lastMotion != 0) && (millis() - lastMotion < ON_TIME);
17  digitalWrite(LIGHT_PIN, on ? HIGH : LOW);
18}

PIR com o ESP32 e o Raspberry Pi Pico

A saída do HC-SR501 já é de 3,3 V, então ela pode ser ligada direto no ESP32 e no Pico, sem divisor de tensão. Mas alimente o módulo com 5 V, porque o regulador da placa fica instável abaixo de 4,5 V. O mesmo código do Arduino roda no ESP32; em projetos com bateria, colocar o ESP32 em deep sleep e acordá-lo com a saída do PIR (ext0 wakeup) aumenta a duração da bateria em semanas. No Pico com MicroPython, você pode usar uma interrupção para capturar o movimento sem perder nenhum:

MicroPython
1from machine import Pin
2import time
3
4pir = Pin(16, Pin.IN)            # GP16
5led = Pin(25, Pin.OUT)           # dahili LED; Pico W'de Pin("LED") / onboard LED; Pin("LED") on Pico W
6
7def on_motion(pin):
8    led.value(pin.value())       # hareket varken yanar / on while there is motion
9    print("Hareket / motion" if pin.value() else "Bitti / ended")
10
11pir.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=on_motion)
12
13while True:
14    time.sleep(1)

Como evitar disparos falsos

  • Não aponte para fontes de calor: aquecedores, saídas de ar-condicionado, janelas com sol e lâmpadas quentes disparam o sensor com mudanças bruscas de temperatura.
  • Mantenha longe de objetos que se movem: cortinas, plantas ou galhos balançando com o vento parecem movimento se tiverem esquentado no sol.
  • Limpe a alimentação: relés e módulos Wi-Fi colocam ruído na alimentação; coloque um capacitor de 100 µF entre o VCC e o GND do sensor.
  • Deixe um pouco afastado do ESP32: um HC-SR501 bem ao lado da antena Wi-Fi pode disparar sozinho de vez em quando; alguns centímetros de distância e um fio curto costumam resolver.
  • Para animais de estimação: diminua a sensibilidade e instale o sensor no alto, levemente inclinado para baixo.
  • Não coloque atrás de vidro: o vidro comum bloqueia a radiação infravermelha, então um sensor atrás de uma janela não vê o movimento do lado de fora.

PIR, radar de micro-ondas ou ultrassônico?

CaracterísticaPIR (HC-SR501)Radar de micro-ondas (RCWL-0516)Ultrassônico (HC-SR04)
O que detectaObjetos quentes em movimentoQualquer tipo de movimentoDistância até um objeto à frente
Através de parede fina ou caixaNãoSimNão
Pessoa paradaNãoNãoMedida como distância
Consumo de energiaMuito baixo (~50 µA)Baixo (~3 mA)Médio (~15 mA)
Uso típicoLuzes, alarmesSensores escondidos, abridores de portaDetecção de obstáculos, medição de nível

Se você quer saber se alguém está se movendo, e não se há alguém no cômodo, o PIR é a solução mais econômica. Se precisa medir a que distância um objeto está, dê uma olhada em Sensor de distância HC-SR04.

Ideias de projetos com sensor PIR

  • Luz automática de corredor: acenda uma lâmpada com um relé quando um movimento for detectado e apague depois de 30 segundos sem movimento.
  • Alarme contra ladrões: toque um buzzer se houver movimento no modo noturno; para a parte do som, veja O que é buzzer?
  • Luz noturna inteligente: combine o PIR com um Sensor de luz LDR para ter uma lâmpada que só acende quando está escuro e alguém se move.
  • Notificações no celular: envie uma mensagem no Telegram a partir de um ESP32 quando um movimento for detectado.
  • Display que economiza energia: acenda a luz de fundo de um LCD quando alguém se aproximar e apague quando a pessoa sair.
  • Contador de visitantes: conte cada movimento por uma porta e mostre o total em um display.

Erros comuns e como resolvê-los

  • A saída fica em HIGH o tempo todo: o tempo Tx está longo demais, ou há movimento constante no modo H; diminua o potenciômetro e confira se o sensor não está virado para uma fonte de calor.
  • Ele nunca dispara: o VCC pode não estar em 5 V, o sensor pode ainda estar aquecendo, ou o fio OUT pode estar em um pino diferente do que está no seu código.
  • Ele dispara sozinho a cada poucos segundos: a alimentação tem ruído; coloque um capacitor e afaste o sensor de relés e módulos Wi-Fi.
  • Ele não detecta de novo logo depois que o movimento termina: o tempo de bloqueio de cerca de 2,5 segundos é normal; o sensor não está com defeito.
  • Instalar na posição errada: o PIR detecta melhor quando o movimento atravessa o campo de visão de lado; ele percebe mais tarde alguém andando direto na direção dele.

O sensor PIR é um dos melhores pontos de partida para o seu primeiro projeto de casa inteligente: ele é ligado com três fios e você vê o resultado na hora. No app BlueGrays você encontra projetos de luz com sensor de presença, campainha e alarme passo a passo, com esquemas do circuito e código.

Perguntas frequentes

Até que distância um sensor PIR detecta?

O HC-SR501 detecta entre 3 e 7 metros, em um ângulo de cerca de 110 graus. Você define o alcance com o potenciômetro Sx (sensibilidade) do módulo; girar no sentido horário aumenta o alcance.

Um sensor PIR detecta uma pessoa parada?

Não. O PIR só detecta mudanças na radiação infravermelha, ou seja, movimento. Ele não percebe alguém sentado completamente parado. Para saber se há alguém em um cômodo, são usados radares de presença mmWave, como o LD2410.

Um sensor PIR funciona através de vidro?

Não. O vidro comum de janela não deixa passar a radiação infravermelha emitida pelo corpo humano, então um sensor atrás do vidro não vê o movimento do lado de fora. Para uso externo, instale o sensor do lado de fora, em um lugar protegido da chuva.

O HC-SR501 funciona com 3,3 V?

O regulador dele fica instável abaixo de 4,5 V, então ele precisa de alimentação de 5 V. A saída já é de 3,3 V, então ela pode ser ligada direto em um ESP32 ou Pico. Se você quer um sistema todo em 3,3 V, use o pequeno módulo PIR AM312, que funciona com 2,7–12 V.

Por que meu sensor PIR dispara sozinho?

As causas mais comuns são o período de aquecimento, fontes de calor para as quais o sensor está virado (aquecedores, sol, ar-condicionado) e ruído na alimentação. Ignore os primeiros 60 segundos, vire o sensor para longe das fontes de calor, coloque um capacitor entre o VCC e o GND e mantenha-o longe de módulos Wi-Fi.

Qual é a diferença entre o modo H e o modo L no HC-SR501?

No modo H (repetitivo), o temporizador da saída reinicia a cada detecção enquanto o movimento continua, então uma luz fica acesa enquanto houver movimento. No modo L (único), a saída desliga quando o tempo definido acaba, mesmo que o movimento continue; um novo disparo só vem depois do tempo de bloqueio.

Ver todos os projetos
Detector de movimento com sensor de movimento
#24Iniciante
Premium

Detector de movimento com sensor de movimento

Um vigia simples que avisa quando alguém entra no cômodo. O sensor de movimento detecta o calor emitido pelo corpo humano, e o Arduino mantém o LED aceso enquanto há movimento e o apaga quando ele par

4.6(47)
67
Campainha e luz com sensor de movimento
#25Intermediário
Premium

Campainha e luz com sensor de movimento

Quando alguém se aproxima da sua porta, você fica sabendo antes mesmo de a pessoa tocar a campainha. Assim que o sensor detecta alguém, o LED acende e o buzzer toca uma melodia de três notas, da mais

4.7(54)
71
Iluminação automática com ESP32 e sensor de movimento PIR
#121Intermediário
Premium

Iluminação automática com ESP32 e sensor de movimento PIR

Neste projeto, usaremos o sensor de movimento PIR HC-SR501 para detectar quando alguém entra no cômodo e acender o LED automaticamente. Acompanharemos o tempo em que o LED fica aceso com millis(). Cada leitura HIGH do sensor atualizará o instante do último movimento, e o LED apagará pelo menos 10 segundos após a última leitura HIGH. O código atual também espera 50 ms em cada ciclo com delay(50), portanto o laço da aplicação não é totalmente livre de bloqueios.

4.4(24)
38
Iluminação inteligente com ESP32 (PIR + LDR + relé + OLED)
#141Avançado
Premium

Iluminação inteligente com ESP32 (PIR + LDR + relé + OLED)

Transforme a iluminação do corredor, banheiro ou despensa em iluminação inteligente com ESP32! Com um sensor de movimento PIR, um sensor de luz LDR e um módulo relé, montamos o cenário clássico de "acender a luz ao detectar movimento no escuro" — se o ambiente já estiver claro, o movimento NÃO aciona a luz, economizando energia durante o dia. A luz fica acesa por 30 segundos; se o movimento continuar, o temporizador reinicia e a luz permanece acesa por mais tempo.

4.3(6)
11
Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)
#145Avançado
Premium

Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)

Um sistema de alarme de segurança inteligente que aciona o buzzer e o LED quando o sensor PIR detecta movimento e, ao mesmo tempo, envia uma notificação instantânea ao proprietário pelo Telegram. Inclui um intervalo de espera de 30 segundos para limitar a frequência dos alarmes repetidos; esse mecanismo não valida as detecções do PIR nem elimina disparos falsos. Pode ser usado na segurança de casas, no monitoramento de garagens, depósitos ou salas de trabalho.

0.0(0)
9
Sistema de alerta com laser
#22Intermediário
Premium

Sistema de alerta com laser

Você monta uma barreira de luz invisível, como nos filmes. Um laser ilumina um sensor de luz do outro lado; assim que alguém passa e interrompe o feixe, o LED acende e o buzzer soa. Quando o feixe vol

4.8(64)
83
Sistema de segurança com laser
#23Avançado
Premium

Sistema de segurança com laser

Como nas cenas de roubo com lasers dos filmes: um feixe de laser atinge um sensor de luz e, assim que alguém passa e interrompe o feixe, o LED vermelho acende e o buzzer começa a soar. O alarme não pa

4.8(60)
77