Protipo shield intervallometro

Eccovi qua la mia prima versione di intervallometro per DSLR.
Un intervallometro serve per pilotare gli scatti di una macchina fotografica con un tempo regolare, questa tecnica viene principalmente utilizzata per l'effetto timelapse, cioè quei filmati in cui si vedono in poco tempo eventi di più lunga durata. questo è un video che ho realizzato con il circuito:
video intervallometro

Per il progetto mi sono ispirato al videotutorial per lo sviluppo di un "intervalluino":
link videotutorial

Il concetto controllare una macchina reflex semiprofessionale è molto semplice, basta sfruttare l'ingresso per il telecomando con cavo (tipicamente di tipo jack come quello audio), e chiudere i 2 contatti (fuoco e scatto) in base alla necessità. Per fare ciò si utilizzando dei fotoaccoppiatori.
Quelli che ho utilizzato sono a 4 pin, ma tipicamente sono a 6 (anche se cmq le porte usate rimangono 4).

Al circuito ho anche aggiunto un per un motorino unipolare, predisponendo così lo shield anche per un carrellino, detto anche dolly

a seguire alcune foto:

Video del prototipo

codice:

int shutter_on = 200; //tempo di pressione per attivare la cam, da settare intorno i 100 e 300
int shutter_off = 1500; // tempo di attesa prima di attivare il motorino

int wakeup = 300; //time to activate wakeup (focus)
int wakewait =200; //time between wake and shutter


int outpin = 13; //uscita per lo scatto
int wakepin = 12; //uscita per la messa a fuoco

// init motorino
int motorPin1 =8;
int motorPin2 =9;
int motorPin3 =10;
int motorPin4 =11;
int delayTime = 500;

void setup() {
  // init dei pin per lo scatto
  pinMode(outpin, OUTPUT); //outpin gives output
  pinMode(wakepin, OUTPUT); //wakepin gives output
  
  // tempistiche per lo scatto, modificare in base alle esigenze
  shutter_on = 200; 
  
  
  // init dei pin per il motorino
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  

}

/////////// Loop ////////////

void loop(){

    digitalWrite(wakepin, HIGH); //turn wakeup/focus on
    delay(wakeup); //keep focus
    digitalWrite(wakepin, LOW); //turn wakeup off
    delay(wakewait); //wait
    digitalWrite(outpin, HIGH); //press the shutter
    delay(shutter_on); //wait the shutter release time
    digitalWrite(outpin, LOW); //release shutter
    delay(shutter_off); //wait for next round
    
    rotate3();
   
}

void rotate3(){
  // in base al numero delle chiamate il motorino farà più o meno scatti
  rotate();
  rotate();
  rotate();
}

void rotate(){
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
}

Il progetto comunque è lasciato a metà, ci sono molte possibilità di espansione, ho anche fatto prove con fotoreristenze per regolare la durata dello scatto (in modalità bulb).
Una delle idee che avevo era quella di creare qualcosa di modulare come comunque altri progetti, ma comunque di puntare alla creazione di un prodotto facile da usare e dal basso costo. Per fare ciò ho pensato di eliminare la configurazione da display abbassando i costi e togliendo menù macchinosi, ma di gestire tutto tramite un programmino ad hoc. Per ora però è tutto "parcheggiato"

Gli altri progetti basati su arduino per pilotare DSLR sono:
Camera axe
Photoduino

Bel progetto, attendo il codice aggiornato ma già che ci sei potresti mettere anche uno schema elettrico e magari la lista dei componenti?

Grazie

Lo schema elettrico a grandi linee è questo:

Fai conto che comunque non ho inventato nulla di particolare, ma solo messo nello stesso circuito il controllo per il motore (trovato nei tutorial arduino) ma senza alimentazione esterna, e poi ho aggiunto 2 fotoaccoppiatori.

Per la connessioni dei fili del motore dipende da motore a motore, io ho usato come riferimento questa guida (ma anche altri post di quel sito mi sono stati di aiuto).

adesso vedo se trovo anche il codice..

Ho messo codice e video in testa al post

Che velocità...grazie :smiley:

Ciao, complimenti!
Ma il motore quanto assorbe in lavoro? riesci a fare tutto con i 500mA dei +5V di Arduino?

menniti:
Ciao, complimenti!
Ma il motore quanto assorbe in lavoro? riesci a fare tutto con i 500mA dei +5V di Arduino?

Ad essere onesto sono stato molto grezzo. lo stepper l'ho preso ad una fiera tra del materiale usato, quindi non ne conoscevo le esatte specifiche, ho visto però l'etichetta che indicava 6 volt, quindi l'ho attaccato così com'era. Vedendo che funzionava non mi sono posto altri problemi :smiley:

WOW complimenti, ottimo!!! Lo provo anch'io!

ci siamo quasi...ho trovato un ULN2803AG, andrà bene lo stesso?

Guarda, non saprei che differenze ci siano tra quello che ho usato e quello che hai trovato, ti conviene cercare qualche data sheet, almeno per vedere se la piedinatura è la stessa.
oppure speriamo nell'intervento di qualcuno di più esperto.

Ok mi sono informato, sono identici!!! Prima di farlo vorrei sapere se si possono apportate queste modifiche:

mi piacerebbe che il movimento del motore sia regolabile, tipo: avanza di 1cm, attendi "tot" secondi o minuti, scatta una foto, e poi avanzi ancora di 1 cm..

Credi che sia possibile? quali valori dovrei modificare?

chiedo questo perchè se facessi un dolly lungo 1mt o 2mt, il time lapse finirebbe presto! così invece posso fare dei time lapse che durano quanto mi pare!!

Oppure montare la camera sul motore, e fare dei time lapse dove la camera ruota su se stessa..

che te ne pare?

per mettere un'attesa dopo il movimento basta un delay..

void loop(){

    digitalWrite(wakepin, HIGH); //turn wakeup/focus on
    delay(wakeup); //keep focus
    digitalWrite(wakepin, LOW); //turn wakeup off
    delay(wakewait); //wait
    digitalWrite(outpin, HIGH); //press the shutter
    delay(shutter_on); //wait the shutter release time
    digitalWrite(outpin, LOW); //release shutter
    delay(shutter_off); //wait for next round
    
    rotate3();

   [b]delay(1000); // qui metti in millisendi quanto vuoi attendere prima di scattare [/b]
   
}

per la lunghezza del movimento invece non saprei dirti bene, io ho replicato la chiamata alla rotate finchè non si muoveva di un tot che mi soddisfacesse.
ciao

Grande!! bene non mi resta che provare!!! Così potrò anche fare dei video time lapse a 360, se monto la camera direttamente sul motore!

Bravissimo !
Ciao .anche io mi sono avventurato in questa impresa. Impresa perchè proprio di questo si tratta!
Ho realizzato un dolly autocostruito, con un profilato di alluminio, guide e motore; Ho acquistato arduino uno e ......quì incominciano le notti insonni!
Scherzi a parte sono riuscito a far funzionare il tutto con Arduino uno + shield x controllo motore acquistato da robotstore (quello con L298p da 2 A)
Siccome non sono molto afferrato nel gestire il codice sono andato x vari tentativi cercando di capire cosa stavo facendo! alla fine sono riuscito a farlo funzionare ...questo benedetto motore!
Per lo scatto mi servo di un intervallometro Nikon!
Ora ti domanderai: "che vuole allora questo qua?"
Siccome per variare la velocità del motore devo variare dei parametri nello Sketch, qiundi bisogna servirsi del pc tramite il programma di caricamento Sketch! Questa si è rivelata una scomodità eccelsa!(con la barra, il carrello ,il motore, la fotocamera,ecc.ecc.... pure il PC?)
Ho visto su robotstore un lcd shield 16x2 e mi sono chiesto se con questi sarei riuscito a variare gli stessi parametri installando sullo shield controllo motore e Arduino questo LCD.
Ti ringrazio anticipatamente di una tua risposta in merito ed eventualmente una qualche dritta x poter scrivere uno Sketch per sta roba qua!
Anche perchè di sicuro quello che ti descrivono nella documentazione che ne accompagna l'acquisto, non servirà alcunchè!
Spero e ne sono sicuro di essermi rivolto alla persona giusta!
Ciao.

Prima del display dovresti capire quali parametri vuoi variare e come, la soluzione più comoda e pratica è usare uno o più potenziometri.
Ovviamente se metti anche la parte dell'intervallometro da arduino riduci anche gli aggeggi da portarti dietro, peró se sei comodo così ovviamente non è necessario.
Magari anche se posti il tuo codice potrebbe aiutare..

Scusa ma qualcosa mi sfugge...il tuo motore quindi funziona a 5v? per questo non usi lo shield per motori passo passo?

Io mi ritrovo un motore a 24v della NMB modello PM42L-048-KLB8 con 6 fili, ma non capisco come collegarlo al tuo circuito! O forse, non posso collegarlo anche perchè è a 24v?

Sulla guida di Mauroalfieri non riesco a capire come collegarlo, probabilmente nn si riferisce a motori come il mio!!

Ora che ho capito quali sono i fili: a+,a-,b+,b-,b,a con quale criterio lo collego all' ULN e all' alimentazione esterna?

io l'ho collegato ai 5v di arduino per comodità e per non avere un'altra alimentazione..
ma l'ideale è dare il voltaggio corretto, quindi invece di collegarlo ai 5 volt di arduino lo colleghi alla sorgente che hai tu. i vari ground invece li metti in comune.

Ti ringrazio x l'interessamento!!!!!
Hai ragione! un potenziometro sarebbe la soluzione piu' semplice (anche se non saprei come utilizzarlo abbinato alla scheda!, conosco poco di elettronica ,ma sono però un trafficone!), però preso dall'entusiasmo e dopo aver visto quel dolly comandato da Arduino tramite questa famosa shield lcd......sono partito all'acquisto , prima di Arduino uno poi della shield controllo motore ed ora attendo l'arrivo .....dalla cina dell'LCD.
Naturalmente dirotterò l'idea in caso di insuccesso verso il tuo più sicuramente sensato consiglio!
Mi piacerebbe però almeno provarci!
Ti invio il codice che attualmente uso ( con i commenti delle modifiche) e il codice dell'LCD che ho scaricato dal sito dove l'ho acquistato, nell'allegato.
vi era anche un doc readme che negli allegati non ci stava:
This is a C++ library for Arduino for controlling an HD74800-compatible LCD in 4-bit mode.
Tested on Arduino 0010

Installation

To install this library, just place this entire folder as a subfolder in your
Arduino/lib/targets/libraries folder.

When installed, this library should look like:

arduino-0010/hardware/libraries/LCD4Bit_mod (this library's folder)
arduino-0010/hardware/libraries/LCD4Bit_mod/LCD4Bit_mod.cpp (the library implementation file)
arduino-0010/hardware/libraries/LCD4Bit_mod/LCD4Bit_mod.h (the library description file)
arduino-0010/hardware/libraries/LCD4Bit_mod/keywords.txt (the syntax coloring file)
arduino-0010/hardware/libraries/LCD4Bit_mod/examples (the examples in the "open" menu)
arduino-0010/hardware/libraries/LCD4Bit_mod/readme.txt (this file)

Building

After this library is installed, you just have to start the Arduino application.
You may see a few warning messages as it's built.

To use this library in a sketch, go to the Sketch | Import Library menu and
select LCD4Bit_mod. This will add a corresponding line to the top of your sketch:
#include <LCD4Bit_mod.h>

To stop using this library, delete that line from your sketch.

Geeky information:
After a successful build of this library, a new file named "LCD4Bit_mod.o" will appear
in "Arduino/lib/targets/libraries/LCD4Bit". This file is the built/compiled library
code.

If you choose to modify the code for this library (i.e. "LCD4Bit_mod.cpp" or "LCD4Bit_mod.h"),
then you must first 'unbuild' this library by deleting the "LCD4Bit_mod.o" file. The
new "LCD4Bit_mod.o" with your code will appear after the next press of "verify"

Ciao.

codice controllo motore.txt (2.63 KB)

LCD4Bit_mod.cpp (7.45 KB)

LCD4Bit_mod.h (622 Bytes)

readme.txt (1.78 KB)

wow, con anche i commenti in cinese !! :stuck_out_tongue:
i file che hai allegato .cpp e .h sono per la libreria, che a quanto pare è basata sulla versione 10 dell'ide, un po' vecchiotta..
ma comunque quando arriva mandi 2 foto e magari si capisce a quale modello corrisponde e quale sia la lib più adatta.
comunque usare il potenziometro non esclude l'utilizzo dell'lcd, anzi sarà comodo per vedere velocemente i settaggi impostati.