Paso 3: Escribir el código
Instalar el IDE de Arduino desde arduino.cc si no ya lo tienes. Abrir un dibujo nuevo y pega este código en. Compilarlo, subirlo y probarlo.
/*
Fotografía Time-lapse dinámica sensible a la luz y ajustable
Este programa y circuito están diseñados para controlar la fotografía Time-lapse
es controlable y en respuesta a niveles de luz ambiente.
La iluminación en sesiones de fotos de amanecer y atardecer a veces puede ser difícil
anticipar, así que en vez de acabar con cientos de totalmente negro
imágenes, un fotorresistor Sensa niveles de luz y por consiguiente se detiene o comienza
la fotografía. Un potenciómetro permite ajustar el retardo entre
fotografías y una pantalla de siete segmentos de varios dígito muestra la corriente
valor de retraso.
Este circuito está diseñado para ser utilizado con un obturador alejado infrarrojo. Me
esta diseñado para una Nikon D3100, pero ningún otro DSLR con un mando a distancia debe
funciona igual de bien. En este circuito, un LED en la actualidad actúa como suplente para
el obturador, pero adaptando para el obturador es sólo una cuestión de pasar por
el botón en el mando y control con el Arduino. Puesto que
es difícil decir cuando se activa un transmisor infrarrojo,
los destellos de la pantalla de siete segmentos cada vez se toma una fotografía para informar a la
usuario de su progreso.
Puesto que muchos entusiastas de Time-lapse están interesados en la adición de un elemento dinámico
a las vacunas, incluí la funcionalidad para un aparejo con servomando
que podría permitir a la cámara girar o pan en una escena.
El circuito:
* El display de siete segmentos es controlado por los pines 2-8 y 10-12. La pantalla
funciona usando cada dígito como un terreno y cada segmento como una entrada positiva.
Por ejemplo, para mostrar un segmento A en el número 3, el Arduino configurar pin 2,
que controla el segmento al alta y pin 12, que es la base para el número 3,
a la baja.
* El LED y obturador alejado, está conectado al pin 13 y GND.
* El servo conectado a 5V y GND y recibe la señal del pin 9.
* La fotorresistencia utilizado en un circuito de división de tensión junto con un 10kΩ
resistencia y se lee por el pin A0.
* El potenciómetro se lee por el pin A1
Agradecimientos:
Instructables de FireCGun publican en "Pantalla de Arduino 4 dígitos 7 segmentos"
09 de diciembre de 2013
por Holden Leslie-Bole
Declaro este código del dominio público.
*/
#include < Servo.h > / / incluye la librería servo
Servo cameraServo; Crea un objeto servo llamado cameraServo
const int potPin = A1; Configurar pin analógico A1 leer el potenciómetro
const int photoresistorPin = A0; Configurar pin analógico A0 leer el fotoresistor
int potValue = 0;
Inicializar potValue, la variable que almacena el valor del potenciómetro, a cero
int photoresistorValue = 0;
Inicializar photoresistorValue, la variable que almacena el valor de la fotorresistencia, a cero
int shutterDelay = 0; Esta variable almacena el retardo introducido por el usuario entre fotos
lastPicTime largo = 0; El tiempo en que se tomó la última foto
lastServoTime largo = 0; El tiempo en el cual el servo última
timeLapseDuration largo = 900000;
Para la calibración de servo - la duración prevista de la sesión (en milisegundos)
int servoPosition = 0; Posición del servo en grados
Esta sección asigna números a los diferentes elementos en la pantalla
const int aPin = 2;
const int bPin = 3;
const int cPin = 4;
const int trabajo = 5;
const int ePin = 6;
const int fPin = 7;
const int gPin = 8;
const int GND1 = 10;
const int GND2 = 11;
const int GND3 = 12;
const int shutterPin = 13; PIN 13 controla el obturador
int num; El número introducido por el potenciómetro
int dig2Value = 0;
int dig3Value = 0;
int brightnessDelay = 3; Un retraso de cantidad arbitraria que controla el brillo de la pantalla
Ejecutar este método una vez cuando empieza a Arduino
void setup()
{
cameraServo.attach(9); Asignar el servo al pin 9
cameraServo.write(0); Inicializar el servo en 0
Ajustar las clavijas pantalla y obturador de salida
pinMode (aPin, salida);
pinMode (bPin, salida);
pinMode (cPin, salida);
pinMode (trabajo, salida);
pinMode (ePin, salida);
pinMode (fPin, salida);
pinMode (gPin, salida);
pinMode (GND1, salida);
pinMode (GND2, salida);
pinMode (GND3, salida);
pinMode (shutterPin, salida);
Serial.Begin(9600); Esto es un poco útil de mantener para pruebas y depuración de código
}
Ejecutar este método continuamente
void loop()
{
currentTime larga sin signo = millis(); Seguimiento de cuánto tiempo el Arduino ha sido Running
potValue = analogRead(potPin); Leer el potenciómetro y guardarlo en potValue
Num = mapa (potValue, 0, 1023, 0, 99); Ajustar el rango de salida para ajustar el retardo
shutterDelay = num * 1000;
Como medida del tiempo natural de Arduino es en milisegundos, esto convierte num
en un retraso entre fotos en milisegundos
dig2Value = num / 10; Utilizar el truncamiento entero para hacer dig2Value los diez dígitos
dig3Value = num - (dig2Value * 10); Aritmética proporciona las cifras
Establecer los motivos de alta
digitalWrite (GND1, alto);
digitalWrite (GND2, alto);
digitalWrite (GND3, alto);
Mostrar una d retraso en dígitos uno
digitalWrite (GND1, LOW); Convertirlo
d(); Ver método void d()
Delay(brightnessDelay); Espere 3 ms por lo que se puede ver
digitalWrite (GND1, alto); Lo apague
digitalWrite (GND2, LOW);
Number(dig2Value); Vea number(int i) (método)
Delay(brightnessDelay);
digitalWrite (GND2, alto);
digitalWrite (GND3, LOW);
Number(dig3Value); Vea number(int i) (método)
Delay(brightnessDelay);
digitalWrite (GND3, alto);
servoPosition = cameraServo.read();
La servoPosition ser lo que es actualmente es en grados
photoresistorValue = analogRead(photoresistorPin); Leer el fotoresistor
if(photoresistorValue > 100)
Probar diferentes valores para ello. Opté por 100 sólo basada en la experimentación.
{
Si (currentTime - lastPicTime > shutterDelay)
Evaluar si ha transcurrido el retardo de obturador desde la última captura
{
Tomar la fotografía
digitalWrite (shutterPin, HIGH);
lastPicTime = currentTime;
Delay(200);
digitalWrite (shutterPin, bajo);
}
Evaluar la actividad de servo
Si (currentTime - lastServoTime > timeLapseDuration/180 & & servoPosition < 180)
{
servoPosition ++;
cameraServo.write(servoPosition); Mover el servo
lastServoTime = currentTime;
}
}
}
Este método utiliza notación de switch/case para llamar a los métodos de los dígitos en respuesta a un número entero de entrada
void number(int i) {}
{Switch(i)}
caso 1: one();
rotura;
caso 2: two();
rotura;
caso 3: three();
rotura;
caso 4: four();
rotura;
caso 5: five();
rotura;
caso 6: six();
rotura;
caso 7: seven();
rotura;
caso 8: eight();
rotura;
caso 9: nine();
rotura;
default: zero();
rotura;
}
}
Este método muestra la d retraso
d() vacío
{
digitalWrite (aPin, LOW);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, HIGH);
digitalWrite (fPin, LOW);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito uno
void one()
{
digitalWrite (aPin, LOW);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, LOW);
digitalWrite (ePin, LOW);
digitalWrite (fPin, LOW);
digitalWrite (gPin, LOW);
}
Este método muestra el dígito dos
void two()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, LOW);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, HIGH);
digitalWrite (fPin, LOW);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito tres
void three()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, LOW);
digitalWrite (fPin, LOW);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito cuatro
void four()
{
digitalWrite (aPin, LOW);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, LOW);
digitalWrite (ePin, LOW);
digitalWrite (fPin, HIGH);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito cinco
void five()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, LOW);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, LOW);
digitalWrite (fPin, HIGH);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito seis
void six()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, LOW);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, HIGH);
digitalWrite (fPin, HIGH);
digitalWrite (gPin, HIGH);
}
void seven()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, LOW);
digitalWrite (ePin, LOW);
digitalWrite (fPin, LOW);
digitalWrite (gPin, LOW);
}
Este método muestra el dígito ocho
void eight()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, HIGH);
digitalWrite (fPin, HIGH);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito nueve
void nine()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, LOW);
digitalWrite (fPin, HIGH);
digitalWrite (gPin, HIGH);
}
Este método muestra el dígito cero
void zero()
{
digitalWrite (aPin, HIGH);
digitalWrite (bPin, HIGH);
digitalWrite (cPin, HIGH);
digitalWrite (trabajo, HIGH);
digitalWrite (ePin, HIGH);
digitalWrite (fPin, HIGH);
digitalWrite (gPin, LOW);
}