Arduino
Existen diversos tipos de sensores:
-Presencia/proximidad/movimiento/distancia
-Temperatura
-Posición y orientación
-Luz
-Sonido
El primer tipo de laser con el que trabajé fue uno láser. Se necesitaba hacer un circuito que llevara la información del laser al Arduino, pero ya que este es pura luz no iba a recibir la señal de que fue interrumpido. Es por eso que también se utilizó la fotoresistencia, este hace contacto con la luz proveniente del laser y le manda la información que al ser interrumpido es cuando debería de tomar la fotografía.
Luego se configuró el modo de disparo de la cámara con un led infrarrojo para que imitara la función del control a distancia de la cámara.
Finalmente se programó mediante la aplicación de Arduino con los codigos (tanto del sensor PIR como del infrarrojo) que se encontrarñon en internet para que el circuito que se creo funcionara:
#include <Arduino.h>
//sensor PIR
//tiempo que el sensor nos da a calibrar
int tcalibracion=10;
//el tiempo cuando el sensro nos da un impulso de baja
long unsigned int lowIn;
//cantidad de respuesta en milisegundos debe de ser baja
//ademas, antes de asumir los movimientos debe detenerse (posicion inicial)
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = 7; //pin digital conectado a la salida del sensor
int RelePin= 8; //pin conectado a la instrucción del relé
///Vamos con el SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(RelePin, OUTPUT);
digitalWrite(pirPin, LOW);
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS21);
OCR2A = 52;
OCR2B = 20;
//daremos un tiempo de calibración al sensor
Serial.print(" Calibrando sensor ");
for(int i=0; i< tcalibracion; i++){
Serial.print(".");
delay(1000);
}
Serial.println("hecho");
Serial.println("SENSOR ACTIVO");
delay(50);
}
//vamos a la función bucle
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(RelePin, HIGH); //el relé recibe el estado de salida del sensor en mi caso mi relé funcionaba al revés, si es vuestro caso cambiar HIGH por LOW y en la otra instrucción al revés.
if(lockLow){
//pulse();
lockLow = false;
Serial.println("---");
Serial.print("movimiento encontrado a los ");
Serial.print(millis()/1000);
Serial.println(" segundos ");
delay(50);
}
takeLowTime = true;
delay(20000);
}
if(digitalRead(pirPin) == LOW){
digitalWrite(RelePin, LOW);
if(takeLowTime){
lowIn = millis();
takeLowTime = false;
delay(50);
}
if(!lockLow && millis() - lowIn > pause){
lockLow= true;
Serial.print("Movimiento detenido a los ");
Serial.print((millis() - pause)/1000);
Serial.println( " segundos ");
delay(50);
}
}
}
void pulse() {
TCCR2A |= _BV(COM2B1);
delayMicroseconds(2000);
TCCR2A &= ~_BV(COM2B1);
delay(28);
TCCR2A |= _BV(COM2B1);
delayMicroseconds(390);
TCCR2A &= ~_BV(COM2B1);
delayMicroseconds(1580);
TCCR2A |= _BV(COM2B1);
delayMicroseconds(410);
TCCR2A &= ~_BV(COM2B1);
delayMicroseconds(3580);
TCCR2A |= _BV(COM2B1);
delayMicroseconds(400);
TCCR2A &= ~_BV(COM2B1);
delay(63);
}
//sensor PIR
//tiempo que el sensor nos da a calibrar
int tcalibracion=10;
//el tiempo cuando el sensro nos da un impulso de baja
long unsigned int lowIn;
//cantidad de respuesta en milisegundos debe de ser baja
//ademas, antes de asumir los movimientos debe detenerse (posicion inicial)
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = 7; //pin digital conectado a la salida del sensor
int RelePin= 8; //pin conectado a la instrucción del relé
///Vamos con el SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(RelePin, OUTPUT);
digitalWrite(pirPin, LOW);
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS21);
OCR2A = 52;
OCR2B = 20;
//daremos un tiempo de calibración al sensor
Serial.print(" Calibrando sensor ");
for(int i=0; i< tcalibracion; i++){
Serial.print(".");
delay(1000);
}
Serial.println("hecho");
Serial.println("SENSOR ACTIVO");
delay(50);
}
//vamos a la función bucle
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(RelePin, HIGH); //el relé recibe el estado de salida del sensor en mi caso mi relé funcionaba al revés, si es vuestro caso cambiar HIGH por LOW y en la otra instrucción al revés.
if(lockLow){
//pulse();
lockLow = false;
Serial.println("---");
Serial.print("movimiento encontrado a los ");
Serial.print(millis()/1000);
Serial.println(" segundos ");
delay(50);
}
takeLowTime = true;
delay(20000);
}
if(digitalRead(pirPin) == LOW){
digitalWrite(RelePin, LOW);
if(takeLowTime){
lowIn = millis();
takeLowTime = false;
delay(50);
}
if(!lockLow && millis() - lowIn > pause){
lockLow= true;
Serial.print("Movimiento detenido a los ");
Serial.print((millis() - pause)/1000);
Serial.println( " segundos ");
delay(50);
}
}
}
void pulse() {
TCCR2A |= _BV(COM2B1);
delayMicroseconds(2000);
TCCR2A &= ~_BV(COM2B1);
delay(28);
TCCR2A |= _BV(COM2B1);
delayMicroseconds(390);
TCCR2A &= ~_BV(COM2B1);
delayMicroseconds(1580);
TCCR2A |= _BV(COM2B1);
delayMicroseconds(410);
TCCR2A &= ~_BV(COM2B1);
delayMicroseconds(3580);
TCCR2A |= _BV(COM2B1);
delayMicroseconds(400);
TCCR2A &= ~_BV(COM2B1);
delay(63);
}
Paginas consultadas:
http://www.andreadicastro.com/academia/ComputoFisico/CF.html
https://www.youtube.com/watch?v=yzhehyZ3oi0
http://www.rei-labs.net/another-arduino-nikon-ir-remote/
https://github.com/adafruit/Nikon-Intervalometer/blob/master/intervalometer.pde
https://www.arduino.cc






Comentarios
Publicar un comentario