Como usar o Sensor HC-SR501

Olá amigos, neste tutorial aprenderemos a usar o Sensor de presença HC-SR501. Esse sensor vai bem ao encontro do conceito de modulo pois a sua saída é binária tornando o seu uso muito simples e ideal para iniciantes da eletrônica. Nessa primeira parte vou falar um pouco mais da manipulação do sensor com o Arduíno e no final do post quem tiver interesse pode aprender um pouco de como o sensor funciona conceitualmente. Primeiro um pouco das características do sensor.



Figura 1: Pinagem do sensor                               
Características:
- Tensão de Operação: 5V ~ 20V
- Corrente de Operação: <50mA
- Saída TTL: 3.3V
- Tempo de retardo Ajustável: 2s ~ 200s
- Distância detectável: 3~7m (Ajustável)
- Tempo de Bloqueio: 2,5s (Padrão)
- Trigger: (L)-Não Repetível (H)-Repetível (Padrão: H)
- Ângulo do cone de detecção: < 100°
- Temperatura de Trabalho: -15 ~ +70°C
- Dimensão: 32x24x18mm

Em negrito as características que mais usaremos neste post.
Figura 2: Alcance do sensor. Fonte: Datasheet

Alimentação: Primeiro falando da pinagem. VCC e GND são os pinos de alimentação, neles você irá ligar os famosos cabos vermelho e preto de alimentação. A tensão que deverá entrar em VCC deverá ser de no máximo 20V continuo (ou DC) mas é aconselhável usar uma tensão bem menor como 12V , 9V ou 5V. Esse dispositivo tem um regulador de tensão interno e funciona em 3,3 Volts por isso o ideal é de 5V a 9V.


Saída: Quando o sensor detecta uma presença o pino de saída eleva sua tensão de 0V para 3,3V. O tempo que essa tensão fica em 3,3V depende do potenciômetro de ajuste de tempo. Você pode ajustar esse potenciômetro através de uma chave estrela. O tempo minimo é de 2 segundos e o máximo é de 200 segundos (Aprox: 3 minutos e 20 segundos). Após esse tempo a tensão pode voltar a zero ou continuar em 3,3 enquanto estiver detectando uma presença. Se ela volta ou não depende do modo no qual o sensor esta operando.

Modo de operação: O modo de operação é descrito pela posição do jumper amarelo (Figura 1). Quando esse jumper está na posição L ele irá disparar apenas uma vez e na posição H ele ficará em nível alto até que a presença saia do raio de Alcance do sensor.

Raio de alcance: Na figura 2 podemos observar o raio de alcance: ele possui um pouco menos de 100º graus de abertura por 3 a 4 de raio minimo. O alcance frontal é variável sendo de 3 a 7 metros ajustável por o potenciômetro a direita. Você pode ajustá-lo da mesma forma que o ajuste de tempo.

Tempo de Bloqueio: O tempo de bloqueio é o tempo minimo que o sensor gasta entre uma leitura e outra, isso significa que se o sensor foi ativado ele só vai poder ser ativado novamente 2,5 segundos depois de o pino de sinal ir para nível lógico baixo (Sair de 3,3V para 0V).

Dito o básico agora podemos começar a explorar os usos do sensor. Agora montaremos um circuito simples para por em pratica o que vimos acima.

Para esse circuito você ira precisar de:


Circuito: Monte em sua protoboard o circuito abaixo:
Circuito com sensor HC-SR501



Código fonte: A parte que está de cor azulada seja a frente de "//" ou entre "/*" e "*/" São comentário e não são compilados pela IDE, em outras palavras estão ai apenas para explicar o que está acontecendo. Abaixo do código eu deixei um em comentário um código alternativo que faz a mesma coisa do primeiro código mas usando outras estruturas que são explicadas no próprio comentário.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* Codificado para Imagine eletrônica por Ítalo Cesar em 11/02/2018 para fins didáticos.
Função:
 -Sinalizar  a presença de humanos ou animais  em um ambiente através de LEDs
 -LED verde    =   Presença
 -LED vermelha =  Ausencia
Raio de atuação do sensor: 
 -3 a 7 metros
Hardware usado:
 - 2 Resistores de 220ohms
 - 2 Leds, uma verde e outra vermelha
 - 1 Modulo Sensor de presença PIR HC-SR501 
*/

const int led_verde = 4;     //declaração do pino onde o LED Verde está conectado;
const int led_vermelha = 3;  //declaração do pino onde o LED Vermelho está conectado;  
const int sensor = 2;        //declaração do pino onde o sensor de presença HC-SR501 está conectado;
bool  leitura_sensor = 0;    //cria uma variável boleana* para a leitura do sensor;
 
void setup()
{
  pinMode(led_verde, OUTPUT);     //Declara o pino do LED Verde como saida de dados e tensão;
  pinMode(led_vermelha, OUTPUT);  //Declara o pino do LED Vermelho como saida de dados e tensão;
  pinMode(sensor, INPUT);         //Declara o pino do sensor como entrada de informação e tensão;
}

void loop()
{
  leitura_sensor = digitalRead(sensor); //Executa a leitura do sensor atravez da comparação lógica;
  if(leitura_sensor)                    //Verifica o estado do Sensor, neste caso como a variável esta estrutura equivale a if(leitura_sensor == 1)
  {
    digitalWrite(led_verde, HIGH);
    digitalWrite(led_vermelha, LOW);    
  }
  else
  {
    digitalWrite(led_verde, LOW);
    digitalWrite(led_vermelha, HIGH);       
  }
}


/*

Codigo usando estruturas de manipulação booleana;

const int led_verde = 4;  //declaração do pino onde o LED Verde está conectado;
const int led_verde = 3;  //declaração do pino onde o LED Vermelho está conectado;  
const int led_verde = 2;  //declaração do pino onde o sensor de presença HC-SR501 está conectado;
bool  leitura_sensor = 0; //cria uma variável boleana* para a leitura do sensor;
 
void setup()
{
  pinMode(led_verde, OUTPUT);     //Declara o pino do LED Verde como saida de dados e tensão;
  pinMode(led_vermelha, OUTPUT);  //Declara o pino do LED Vermelho como saida de dados e tensão;
  pinMode(sensor, INPUT);         //Declara o pino do sensor como entrada de informação e tensão;
{


void loop()
{
  leitura = digitalRead(sensor);        //Lê o sensor e guarda na variável boolena leitura;
  digitalWrite(led_verde,leitura);      //Coloca o estado boolenano/lógico* do sensor no LED verde);
  digitalWrite(led_vermelha,!leitura);  //Coloca o estado boolenano/lógico* barrado*  no LED vermelho);
}


*variavel boolenada = Variavel boolenada é uma variavel que só possue pois valores, 0 ou 1; Ela ocupa apenas um bit na memoria e é util em caso de economia de espaço ou para aprendizado
*Estado boolenano/lógico = Em booleano 0 significa desligado e 1 significa ligado. Em um microcontrolador esse valor é expresso em niveis lógicos que são faixas de tensão que expressão 0 e 1. 
São varios os tipos de niveis lógicos para definir esses estados. Os mais comuns são (0 - 5),(0 - 3,3) e (12,-12) volts sendo esse ultimo sendo o antigo padrão de niveis lógicos para comunicação serial 
entre computadores, o nome desse padrão é RS232. O Arduino usa 0 e 5 volts como estado lógico.
*Estado booleano/lógico barrado = É uma operação que inverte o bit em questão. Ex: A variavel booleana B = 0 e a variavel A = 1; 
B barrado é igual a 1 e A barrado é igual a 0. O operador usado para barrar uma variavel booleana é o '!'
Ex2: A barrado se escreve !A.
*/

Agora falando um pouco sobre o funcionamento do sensor:
Dentro da capsula branca (que na verdade é uma lente fresnel) tem um sensor PIR (Passive InfraRed ou em português sensor infravermelho passivo). Todo objeto de temperatura acima do zero absoluto emite calor em forma de radiação. Essa radiação é invisível aos olhos pois o comprimento de onda dela é infravermelha porém ela pode ser detectada por dispositivos eletrônicos projetados para isso.
Sensor PIR ao centro.
Dentro do sensor tem o que aparente ser dois cristais osciladores que reagem a radiação infravermelha (calor). A razão de ser dois cristais é porque o objetivo é detectar movimento (ou seja variação) e não níveis de calor. Por esse motivo os cristais se anulam caso detectem a mesma quantidade de calor. Em caso de um detectar mais do que o outro haverá um sinal de saída. A lente de fresnel atua aumentando o campo de visão do sensor.
Funcionamento do sensor PIR junto a lente fresnel
Circuito equivalente do Sensor PIR.
O sinal de saída é tratado através de um circuito usando principalmente o circuito integrado BIS0001 (datasheet). Abaixo o circuito do sensor PIR junto a lente fresnel.
A lente fresnel ajusta o foco para o centro do sensor
Abaixo temos uma foto completa do circuito do sensor, caso você queira conhecer com mais profundidade o sensor vou deixar aqui o link em PDF e o site onde a adafruit fez uma abordagem do funcionamento interno desse sensor, onde no qual muitas informações aqui mostradas foram obtidas.
Circuito do sensor HC SR501
Obrigado por ler, compartilhe nas redes sociais e curta nossa pagina no facebook ;)


Compre Sensor HC-SR501 em nossa loja virtual pelo melhor preço:

Ver produto









Postagens mais visitadas deste blog

Como instalar o Arduino uno

Como instalar a IDE do Arduíno