↑
⬤ Intermédio

👁️ Sensor PIR — Deteção de Movimento

⏱️ 25 min   🧩 PIR — Pino D2

ℹ️

Como funciona o PIR?

O sensor PIR (Passive Infrared) deteta variações de calor infravermelhos — tipicamente causadas por pessoas a mover-se. Tem dois potenciómetros: um para a sensibilidade e outro para o tempo de permanência do sinal HIGH. No Kit C os potenciómetros já vêm ajustados de fábrica.

📌 Pinagem

Pino módulo→ Pino ArduinoNotas
OUT (Sinal)D2HIGH durante ~2s quando deteta movimento
VCC5V
GNDGND
⚠️

Após ligar o PIR, aguarda 30–60 segundos para que o sensor se calibre ao ambiente. Durante este período pode emitir sinais falsos.

Exercício 1 — Detetar movimento e acender LED

ex1_pir_basico.ino
#define PIR       2
#define LED_BRANCO 5

void setup() {
  pinMode(PIR, INPUT);
  pinMode(LED_BRANCO, OUTPUT);
  Serial.begin(9600);
  Serial.println("A aguardar calibracao PIR (30s)...");
  delay(30000);   // Espera 30s de calibração
  Serial.println("PIR pronto!");
}

void loop() {
  int movimento = digitalRead(PIR);

  if (movimento == HIGH) {
    digitalWrite(LED_BRANCO, HIGH);
    Serial.println("Movimento detetado!");
  } else {
    digitalWrite(LED_BRANCO, LOW);
  }
  delay(100);
}

Exercício 2 — Iluminação por presença com temporizador

ex2_pir_temporizador.ino
#define PIR       2
#define LED_BRANCO 5

unsigned long ultimoMovimento = 0;
const unsigned long TEMPO_LUZ = 10000; // 10 segundos

void setup() {
  pinMode(PIR, INPUT);
  pinMode(LED_BRANCO, OUTPUT);
  delay(30000); // Calibração PIR
}

void loop() {
  if (digitalRead(PIR) == HIGH) {
    ultimoMovimento = millis(); // Atualiza tempo
  }

  // Mantém luz ligada TEMPO_LUZ após último movimento
  if (millis() - ultimoMovimento < TEMPO_LUZ) {
    digitalWrite(LED_BRANCO, HIGH);
  } else {
    digitalWrite(LED_BRANCO, LOW);
  }
}