Il sito dedicato all'informatica ideato da Iasparra Francesco

Arduino lightning Trigger for Canon

  • Scattare una foto ad un fulmine, con Arduino si puo'.

  • Data: 29/10/2013 Autore: Di Donato Francesco 


Ahh!! Quanti di voi non hanno mai desiderato scattare una splendida foto ad un fulmine? Magari stagliato sullo sfondo di un evocativo castello scozzese ???? eh????

Va bene, deliri a parte, oggi vi spiegherò come costruire un semplice circuito remoto per le vostre Nikon e Canon che permette di scattare fotografie solamente in presenza dei nostri elettrizzanti amici ( ma quanto sono simpatico da 1 a 10 ?! )

Arduino componenti necessari

Ecco i componenti e la relativa foto:

1. Arduino Uno Rev 3 (O qualsiasi altro Arduino)

2. Fotoresistenza (Io ho utilizzato un Keyes KY018 a 3 ingressi [S, - , +] a 5v )

3. Emettitore IR (Utilizzo un Keyes KY005 a 3 ingressi [S, - , +] a 5v )

4. Breadboard

5. Cables (Tanti cavetti colorati :) )

Ho collegato innanzitutto i pin 5V e GND di Arduino agli ingressi + (linea rossa) e – (linea blu) della BredBoard.

Inseriti i due sensori (Fotoresistenza e Emettitore IR) mi sono occupato di collegarli alla GND e alla 5V della BredBoard.

Il pin di ingresso della fotoresistenza , su cui leggeremo i valori , è il pin analogico A2, mentre il segnale all'emettitore IR è collegato al pin digitale di Output 3.

Come si può notare, la mancanza di resistenze rende tutti più semplice.


Il codice si commenta da solo !

#define irLED 3                // Pin di Output dell'emettitore IR
#define TRIGGER_THRESHOLD 20   // Valore consentito di variazione di luce

int lightningVal;

const int analogInPin = A2; // Pin analogico di input    (Fotoresistenza)
int sensorValue = 0;        // valore di ritorno del sensore di luce
int sensorNow = 0;          // valore di ritorno del sensore di luce

/**
 * Inizializzazione del pin a cui è collegato il sensore IR (OUTPUT)
 *
 */
void setup() {
 
  pinMode(irLED, OUTPUT);                    //Inizializzo l'IR Led come OUTPUT
  lightningVal = analogRead(analogInPin);    //Inizializzo il valore della luce leggendo la prima misurazione
}

void loop() {
/*
   Leggo il nuovo valore analogico dalla fotoresistenza.
   Se la differenza (in valore assoluto) tra il nuovo valore letto
   e il valore inizializzato nel metodo setup() supera la soglia
   stabilita, allora si invoca il metodo scatta();
   (occhio che una differenza in valore assoluto significa che
    anche variazioni di luce negative, cioè quando si passa dalla
    luce al buio, permettono il verificarsi della condizione)
*/
  int newLightningVal = analogRead(analogInPin);

  if (abs(newLightningVal - lightningVal) > TRIGGER_THRESHOLD) {
    scatta();
    delay(35);  // PER CANON
  }
}

void scatta() {
  sendSignal();
  delayMicroseconds(7330);
  sendSignal();
}

/*
 Questo fantastico pezzo di codice è il risultato di una lunghissima
 analisi del segnale che si deve inviare ad una canon per farle scattare
 una foto ! apprezzatelo !
*/

void sendSignal() {
  for(int i=0; i<16; i++) {
    
    digitalWrite(irLED, HIGH);   // segnale HIGH
    delayMicroseconds(11);       // aspetta 11 microsecondi
    digitalWrite(irLED, LOW);    // segnale LOW
    delayMicroseconds(11);       // aspetta 11 microsecondi
    
  }
}    

Arduino scheda montata

In questo esempio vi dimostrero' come sia facile far comunicare una scheda Shield Ethernet di Arduino UNO con il Computer su protocollo TCP/IP con un semplicissimo programma.

Qui sopra il risultato finale.

Vi allego inoltre un file .zip con il codice completo dello sketch e il video dimostrativo del funzionamento.

Ps: Purtroppo aspettare una notte di fulmini e saette è risultato lungo e noioso, così il test viene effettuato utilizzando un flash di una macchina fotografica per simulare la variazione di luce.

Buon Divertimento !


  • Java

  • Php

  • Mysql

  • Apache ant

  • Eclipse

  • Spring

  • Hibernate

  • Netbeans

  • Debian

  • Linux

  • Maven