|   FOROS      |     Tutoriales    |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 Arduino
   Elastix - VoIP Cosas de Windows Webs interesantes  Telecomunicaciones

 


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial                    Return to index tutorial

____________________________

Arduino. Piro.

 

47.- Detector de movimiento. Sensor piroeléctrico HC-SR501.

Piroelectricidad: algunos materiales cuando se les calienta o enfrían entregan una pequeña cantidad de voltios.

- Piroelectricidad (español).

- Piroelectricidad (inglés).

Piroelectricidad y termoelectricidad son conceptos distintos.

Los sensores piroeléctricos pueden detectar pequeños niveles de radiación infrarroja. Todas las cosas emiten algún nivel de radiación, cuando más caliente está más radiación emite. El sensor de movimiento esta dividido en dos partes. Cuando los dos elementos detectan el mismo nivel de radiación infrarroja, en la salida obtenemos un estado bajo, cuando uno de los elementos detecta más radiación que el otro, la salida cambia a nivel alto.

- Tutorial de Adafruit.
- Adafruit2.

HC-SR501 Módulo Detector PIR sensor de movimiento.

Cuando detecta movimiento la salida se pone en estado alto. Cuando no detecta movimiento la salida en estado bajo.
La sensibilidad y tiempo de espera se puede establecer con las resistencias ajustables.
Detecta a varios metros, me ha funcionado hasta 7m.
Gama del voltaje: DC 4.5 V-20 V
Consumo de corriente: <65uA
Modo de disparo: L: disparo no repetible H: disparo repetible (esto se realiza mediante un puente que tiene algunos módulos.)
Tiempo de retardo: 5-200 s (ajustable) el rango es (0.xx segundos a decenas de segundos)
Tiempo de bloqueo: 2.5 s (por defecto) se puede hacer una serie (0.xx a decenas de segundos)
Ángulo del sensor: <100 grados de ángulo de cono
Tamaño de la lente del sensor: Diámetro: 23mm

Puede funcionar con Arduino y sin Arduino.

DataSheet del módulo.

DataSheet del controlador BISS0001

PIR

____________________________________
Conexiones.

____________________________________
Código.

Si la salida está en BAJO, no hay movimiento.
Si la salida cambia a ALTO, sí hay movimiento.

La salida es digital. Si quisiéramos medir distancia lo tendríamos que hacer con otro sensor, el de ultrasonido, visto en un tutorial anterior.

Cuando se ha detectado movimiento se enciende el LED13.

Consulta el Serial Monitor.

Código
// Juan A. Villalpando
// kio4.com

int pin3 = 3;
int LED13 = 13;
int valor;

void setup() {
Serial.begin(9600);
pinMode(LED13, OUTPUT);
digitalWrite(LED13, LOW);
}

void loop() {
valor = digitalRead(pin3); 
if (valor == LOW) {
Serial.println("No se detecta movimiento.");
digitalWrite(LED13, LOW);
}
else {
Serial.println("Movimiento detectado.");
digitalWrite(LED13, HIGH);
}

delay(1000);
}

____________________________________
Código.

Obtenido de: http://www.arduino.info.pl/pir-hc-sr501-czujnik-ruchu/

Código
/* 
 * //////////////////////////////////////////////////
 * //making sense of the Parallax PIR sensor's output
 * //////////////////////////////////////////////////
 *
 * Switches a LED according to the state of the sensors output pin.
 * Determines the beginning and end of continuous motion sequences.
 *
 * @author: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at
 * @date:   3. September 2006 
 *
 * kr1 (cleft) 2006 
 * released under a creative commons "Attribution-NonCommercial-ShareAlike 2.0" license
 * http://creativecommons.org/licenses/by-nc-sa/2.0/de/
 *
 *
 * The Parallax PIR Sensor is an easy to use digital infrared motion sensor module. 
 * (http://www.parallax.com/detail.asp?product_id=555-28027)
 *
 * The sensor's output pin goes to HIGH if motion is present.
 * However, even if motion is present it goes to LOW from time to time, 
 * which might give the impression no motion is present. 
 * This program deals with this issue by ignoring LOW-phases shorter than a given time, 
 * assuming continuous motion is present during these phases.
 *  
 */

// 5V left
// out midle
// gnd right
// connectors on bottom
/*
--------------------
|                  |
|                  |
|                  |
|       o o o      |
|      5V o GND    |
--------------------
*/
/////////////////////////////
// voltage 4,5-20V
//
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 15;        

//the time when the sensor outputs a low impulse
long unsigned int lowIn;         

//the amount of milliseconds the sensor has to be low 
//before we assume all motion has stopped
long unsigned int pause = 5000;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 3;    //the digital pin connected to the PIR sensor's output
int ledPin = 13;

/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
  }

////////////////////////////
//LOOP
void loop(){

     if(digitalRead(pirPin) == HIGH){
       digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
       if(lockLow){  
         //makes sure we wait for a transition to LOW before any further output is made:
         lockLow = false;            
         Serial.println("---");
         Serial.print("motion detected at ");
         Serial.print(millis()/1000);
         Serial.println(" sec"); 
         delay(50);
         }         
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW){       
       digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state

       if(takeLowTime){
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause, 
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause){  
           //makes sure this block of code is only executed again after 
           //a new motion sequence has been detected
           lockLow = true;                        
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           }
       }
  }

_________________

Propuesta

- Busca la diferencia entre piroelectricidad y termoelectricidad.

- El sensor sin Arduino.

- Realiza la conexión del sensor sin utilizar el Arduino. Ajusta la distancia con la resistencia ajustable correspondiente.
- Cuando detecte movimiento se encenderá el LED.

________________________________

Si quieres que este tutorial se mantenga y lo actualice con más programas, escríbeme un correo a Juan Antonio: juana1991@yahoo.com

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información