Arduino - Sensor de Porta

O sensor de porta é amplamente usado na área de segurança. Ele é usado para detectar/monitorar entradas (como porta, janela ...). O sensor de porta também é conhecido como "sensor de entrada", "sensor de contato" ou "sensor de janela".

Sobre o Sensor de Porta

Pinagem

O sensor de porta inclui dois componentes:

  • Um reed switch com dois pinos
  • Um ímã
Pinagem do Sensor de Porta

Assim como um interruptor/botão comum, NÃO precisamos distinguir os dois pinos do reed switch.

Como Funciona

O ímã é fixado na porta/janela (parte móvel), e o reed switch é fixado no batente da porta (parte fixa). Os dois componentes ficam em contato quando a porta está fechada

  • Quando o ímã está perto do reed switch, o circuito do reed switch está fechado
  • Quando o ímã está longe do reed switch, o circuito do reed switch está aberto
Como Funciona o Sensor de Porta - Pinagem

※ Nota:

O reed switch em si NÃO gera LOW ou HIGH em seus pinos. Ele apenas tem um estado fechado ou aberto. Dependendo de como conectamos seus pinos ao Arduino, o valor no pino pode ser LOW, HIGH ou um valor flutuante (valor imprevisível). Para evitar o valor flutuante, DEVEMOS usar o resistor de pull-up ou pull-down no pino do Arduino

Se conectarmos um pino do reed switch ao GND e o outro pino do reed switch ao pino de entrada do Arduino com um resistor de pull-up (interno ou externo):

  • Quando o ímã está perto do reed switch, o valor no pino de entrada do Arduino é LOW
  • Quando o ímã está longe do reed switch, o valor no pino de entrada do Arduino é HIGH

Então:

  • Para verificar o estado da porta, basta verificar o estado do pino de entrada do Arduino:
    • Se o estado for LOW, a porta está fechada
    • Se o estado for HIGH, a porta está aberta
  • Para detectar os eventos de abertura/fechamento da porta, podemos detectar a mudança de estado no pino de entrada do Arduino:
    • Se o estado mudar de LOW para HIGH, o evento de abertura da porta é detectado
    • Se o estado mudar de HIGH para LOW, o evento de fechamento da porta é detectado

Diagrama de Ligação

Diagrama de Ligação do Sensor de Porta com Arduino

This image is created using Fritzing. Click to enlarge image

Como Programar o Sensor de Porta

  • Inicialize o pino do Arduino no modo de entrada digital usando a função pinMode(). Por exemplo, o pino 13
pinMode(13, INPUT_PULLUP);
  • Leia o estado do pino do Arduino usando a função digitalRead().
int doorState = digitalRead(13);

Código Arduino - Verificar o Estado Aberto e Fechado da Porta

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-door-sensor */ const int DOOR_SENSOR_PIN = 13; // Arduino pin connected to door sensor's pin int doorState; void setup() { Serial.begin(9600); // initialize serial pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); // set arduino pin to input pull-up mode } void loop() { doorState = digitalRead(DOOR_SENSOR_PIN); // read state if (doorState == HIGH) { Serial.println("The door is open"); } else { Serial.println("The door is closed"); } }

Passos Rápidos

  • Copie o código acima e abra com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Aproxime o ímã do reed switch e depois afaste-o do reed switch.
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The door is open The door is open The door is closed The door is closed The door is closed The door is closed The door is closed The door is open The door is open
Ln 11, Col 1
Arduino Uno on COM15
2

Código Arduino - Detectar os Eventos de Abertura e Fechamento da Porta

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-door-sensor */ const int DOOR_SENSOR_PIN = 13; // Arduino pin connected to door sensor's pin int currentDoorState; // current state of door sensor int lastDoorState; // previous state of door sensor void setup() { Serial.begin(9600); // initialize serial pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); // set arduino pin to input pull-up mode currentDoorState = digitalRead(DOOR_SENSOR_PIN); // read state } void loop() { lastDoorState = currentDoorState; // save the last state currentDoorState = digitalRead(DOOR_SENSOR_PIN); // read new state if (lastDoorState == LOW && currentDoorState == HIGH) { // state change: LOW -> HIGH Serial.println("The door-opening event is detected"); // TODO: turn on alarm, light or send notification ... } else if (lastDoorState == HIGH && currentDoorState == LOW) { // state change: HIGH -> LOW Serial.println("The door-closing event is detected"); // TODO: turn off alarm, light or send notification ... } }
  • Copie o código acima e abra com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Aproxime o ímã do reed switch e depois afaste-o do reed switch.
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The door-closing event is detected The door-opening event is detected
Ln 11, Col 1
Arduino Uno on COM15
2

Vídeo

O vídeo de demonstração abaixo usa o código abaixo. Observe que o vídeo mostra o Arduino Uno R4, mas funciona da mesma forma para o Arduino Uno R3:

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-door-sensor */ #define DOOR_SENSOR_PIN 2 #define RED_LED_PIN 5 #define BUZZER_PIN 6 const unsigned long BLINK_INTERVAL = 200; unsigned long previousMillis = 0; bool alarmState = false; void setAlarmState(uint8_t state) { if(state){ tone(BUZZER_PIN, 2000); digitalWrite(RED_LED_PIN, LOW); } else{ noTone(BUZZER_PIN); digitalWrite(RED_LED_PIN, HIGH); } } void setup() { Serial.begin(9600); pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); pinMode(RED_LED_PIN, OUTPUT); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(RED_LED_PIN, HIGH); noTone(BUZZER_PIN); } void loop() { int doorState = digitalRead(DOOR_SENSOR_PIN); if (doorState == HIGH) { Serial.println("The door is open"); } else { Serial.println("The door is closed"); } // Door open if (doorState == HIGH) { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= BLINK_INTERVAL) { previousMillis = currentMillis; alarmState = !alarmState; setAlarmState(alarmState); } } // Door closed else { noTone(BUZZER_PIN); digitalWrite(RED_LED_PIN, HIGH); alarmState = false; } }

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!