Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
parpadeo de un led.
Objetivo
El objetivo final de este proyecto es modelar un sistema capaz de detectar la
presencia de cualquier elemento en movimiento para fotografiarlo. El sistema se
puede utilizar como parte de un sistema de vigilancia, o bien, para realizar
fotografías sin la presencia del fotógrafo (por ejemplo, automóviles en un
parqueadero).
Para ello se empleará un sensor volumétrico, modelo HC-SR04, capaz de medir las
distancias con respecto a objetos próximos. Si la distancia, entre medidas
consecutivas, supera un umbral, el sistema debe accionar una cámara réflex. La
distancia o valor umbral debe ser configurable y se hará mediante el uso de un
potenciómetro. Para evitar el accionado continuo de la cámara durante el tiempo en
el que un objeto esté cercano a la cámara, se toma como criterio que el objeto haya
superado una distancia entre dos medias consecutivas. Es decir, si un objeto pasa
de estar situado de 50 cm de la cámara a 10cm, se realizará una fotografía; pero no
volverá a accionarse mientras permanezca a 10 cm. Para ello, será necesario que
el objeto vuelva a moverse y producir un cambio en el valor de la distancia.
El accionado de la cámara se hará mediante el sensor de infrarrojo incorporado a la
cámara y el uso de un led normal.
Finalmente, cada uno de los disparos realizados por la cámara quedará registrados
en la memoria EEPROM de Arduino. Mediante un pulsador, controlado por
interrupciones, se mostrará en la pantalla del equipo el número de fotografías
realizadas hasta el momento. Es decir, cada vez que se presiona el botón conectado
a la placa base, el sistema debe capturar una interrupción y realizar las acciones
oportunas. En este caso, sumar el número total de fotografías y mostrarlas por la
pantalla del computador.
Montaje
Elementos a utilizar:
Potenciómetro
Pulsador
Toma de tierra
Sensor volumétrico, modelo HC-SR04.
Cámara Kodak
Montaje realizado en tinkercad
Software desarrollado
En el software desarrollado se declaran las siguientes variables globales:
pinPotenciometro: Entrada analógica donde está conectada el potenciómetro,
empleado para determinar el valor umbral de distancia. Cuando ese umbral se
supera la cámara realiza una nueva fotografía.
PinLed: pin donde está conectado el led que, según su parpadeo, accionará la
cámara fotográfica.
PinEcho: pin para conectar la salida ECHO del sensor volumétrico empleado para
medir las distancias.
PinTRIG: pin para conectar la salida TRIG del sensor volumétrico.
Dirección: dirección de la celda de memoria EEPROM donde se almacena el
número de fotografías realizadas hasta el momento.
Nfotos: número de fotografías realizadas.
Última_distancia: última medida de la distancia mediante el sensor volumétrico.
penultima_distancia: medida anterior de distancia. El sistema evalúa si la
diferencia entre la última y penúltima medida supera el valor umbral.
En la función setup() se realiza la siguiente configuración:
Potenciómetro como entrada analógica.
Led como salida digital
ECHO como entrada digital
TRIG como salida digital.
Además, se inicializa la comunicación en serie con el PC para poder imprimir por
pantalla información (número de fotografías) y se inicializan las interrupciones, en
concreto, la número 0 (pulsador conectado al pin dos de la placa).
En la función loop() siempre se repite el mismo proceso:
Se pone en funcionamiento el sensor volumétrico para realizar una medida.
Se realiza una lectura del valor dado por el potenciómetro (en cualquier momento
se podría girar el potenciómetro para modificar el valor umbral de distancia).
Se calcula la diferencia entre la penúltima medida y la última.
Se evalúa si esta diferencia es mayor que el valor umbral.
En caso afirmativo
Realizar la fotografías (mirar función hacerFoto()).
Incrementar el número de fotografías y guardar dicho valor en memoria (función
mirar escrituraMemoria()).
Se actualiza penúltima_distancia pasando a ser la última medida obtenida en la
iteración actual del bucle.
Inicialmente comienza a escribirse la cantidad de fotografías en la primera celda de
memoria (dirección 0). Estas celdas son de 1 byte, por lo que el rango de valores
que puede almacenarse es de 0 a 255. Cuando la cantidad de fotos supera el valor
255, el contador se pone a cero y comienza a guardarse la nueva cantidad en la
siguiente celda de memoria (quedando la anterior con el valor 255). Para
contabilizar el número total de fotos, se recorren las celdas desde la 0 hasta la
dirección que indique la variable dirección acumulando la suma de los valores que
almacenan.
Código fuente
#include <EEPROM.h>
int pinPotenciometro = A0;
int pinLED = 13;
int pinECHO = 5;
int pinTRIG = 4;
void setup() {
//definicion de interrupcion
//pulsador conectado en pin 2
attachInterrupt(0, pulsacion, CHANGE);
}
void loop() {
digitalWrite(pinTRIG, LOW);
delayMicroseconds(2);
digitalWrite(pinTRIG, HIGH);
delayMicroseconds(2);
digitalWrite(pinTRIG, LOW);
//calculo de distancia
ultima_distancia = pulseIn(pinECHO, HIGH);
ultima_distancia = ultima_distancia / 58.2;
void escrituraMemoria(){
nfotos = nfotos + 1;
if (nfotos > 255){
//en una celda de memoria solo se puede guardar valores
direccion = direccion + 1;
//si la direccion sobrepasa el maximo (512) volvemos a la
direccion cero
if (direccion == 512)
direccion = 0;
nfotos = 1;
}
EEPROM.write(direccion, nfotos);
}
//funcion a la que se llama cuando se presiona el pulsador
void pulsacion(){
//se muestra el total de fotografías realizadas
int total = 0;
for (int i = 0; i <= direccion; i++)
total = total + EEPROM.read(i);
Serial.println("Numero total de fotos:");
Serial.println(total);
}
//funciones para activar el led en base al código infrarrojo que usan las
cámaras
//nikon
void hacerFoto() {
for (int i=0; i < 2; i++) {
pulseON(2000);
pulseOFF(27850);
pulseON(390);
pulseOFF(1580);
pulseON(410);
pulseOFF(3580);
pulseON(400);
pulseOFF(63200);
}
}