Ciao a tutti!
Chiedo aiuto a voi per un progetto che vorrei realizzare...
Sono appassionato di fotografia e vorrei realizzare un video timelapse della durata di un anno con la mia reflex (fin qui nessun problema...) riguardante la costruzione di un carro di carnevale.
Il punto è che avrei bisogno che scattasse una foto ogni 20/30 minuti quando nessuno è al lavoro, così da velocizzare i momenti morti, e uno scatto ogni minuto quando i ragazzi sono all'opera.
Ho un comando per lo scatto remoto che potrei collegare alla macchina.
Quello che vorrei realizzare è qualcosa che attraverso un "interruttore", collegato a due timer (uno impostato a 30 min e uno a 1min) modifichi il lasso di tempo con cui dare il comando di scatto alla macchina.
È realizzabile?
Preciso che sono totalmente ignorante nel campo Arduino e programmazione in generale, chi vorrà aiutarmi avrà tutta la mia gratitudine!
E' sicuramente realizzabile.
Giusto come spunto iniziale puoi guardare l'esempio che c'è nell'IDE che si chiama "blink without delay". In pratica tu invece di far lampeggiare un led, quando passa il tempo desiderato fai scattare la macchina.
Però prima di preoccuparmi di dei timer cercherei di capire come collegare arduino alla reflex... lo scatto remoto è wireless?
Ok grazie lo farò!
Lo scatto remoto è via cavo e comanda solamente la messa a fuoco a metà corsa del pulsante e lo scatto a fondo.
Credo che smontandolo troverò tre contatti, due per lo scatto e uno per la messa a fuoco, che però imposterò manualmente.
Eventualmente farò qualche tentativo con lo scatto remoto smontato e collegato alla reflex, e provando a collegare i contatti manualmente per capire come funziona..
Avevo realizzato qualcosa di simile anni fa, e almeno per la mia panasonic il comando da remoto era come lo hai descritto tu, tre contatti di cui chiudendo i primi due metteva a fuoco e con l'altro effettuava lo scatto, semplicissimo, avevo utilizzato due micro relé tanto per non avere alimentazioni in comune tra macchina fotografica e pic.
Arduino non é nessun problema. Vedo problematico lato macchina fotografica.
Per primo devi installare la macchina fotografica in modo fisso che non viene postato durante tutto l' arco del tempo di ripresa.
Per secondo come la alimenti? la batteria non durerá cosí a lungo e non puoi sostituire le batterie perché rischi di muovere la macchina fotografica.
Per terzo che memoria vuoi usare. Anche per questo vale che non hai difficoltá di sostituirla perché la macchina fotografica deve stare ferma.
Comunque io non prenderei una reflex ma una piccola compatta da 2 soldi o una di seconda mano (una col scatto remoto oppure con comando a infrarossi. Se vuoi fare un filmato basta anche una qualitá scarsa e una risoluzione piccola.
Ciao Uwe
per alimentarla potrebbe usare un alimentatore, almeno per la mia esiste una batteria finta in cui collegare un alimentatore esterno, certo che tenerla accesa un anno intero non so.... un problema nel fare una ripresa simile sarà anche la luce se non è artificiale e fissa, ogni giorno con la luce naturale del sole si vedrebbero delle continue variazione di luminosità, proiezione delle ombre, ecc. ecc
Fissaggio macchina: un bel paio di prismi e qualche sacchetto di sabbia, per mantenerla sempre nella stessa posizione e costruirci intorno una specie di riparo (circondato da cartelli "achtung minen", filo spinato, fossato con coccodrilli, ed un paio di antiche maledizioni sumere rivolte a chi te la sposta ...
:D)
Capienza memoria ... li si va sul costoso ... ci sono SD da 256GB, ma costano un casino ... comunque dato che poi ci devi realizzare un filmato, non serve certo la massima risoluzione, anzi, 640x480, o poco piu, e di foto ne mantiene parecchie ... certo un'anno di foto sono tante ... sarebbe bello se fosse possibile "portare fuori" con un'adattatore o qualcosa di simile la SD, in modo da poterla cambiare senza muovere la macchina ...
Alimentazione ... qui e' d'obbligo un'alimentatore esterno, completo di robusta batteria tampone e sistema di ricarica automatico ... per questi ultimi due punti viene ottimo il suggerimento di uwe, di recuperare una compattina, magari usata sui vari giornaletti tipo soffiata o ebay, in modo da poterla massacrare ehm, volevo dire "modificare" senza farsi troppi problemi portando fuori sia l'alimentazione che la memoria ...
... fattibile ... non semplicissimo, ma fattibile ...
Da quello che ho visto io, di solito i carri di carnevale li costruiscono in interno, quindi dovrà per forza prevedere della luce artificiale e magari regolare l'esposizione di volta in volta.
Poi, vista la durata dell'esperimento, io non lascerei la macchina montata tutto l'anno... anche se vale poco c'è sempre il rischio che se la freghino e oltre al valore della macchina perderei anche una parte delle foto fatte... credo convenga fissarsi dei punti fissi nell'inquadratura, per poter posizionare la macchina nello "stesso" modo ogni volta.
Per alcuni modelli di macchine c'è la possibilità di collegarle e controllarle da pc, magari c'è anche il modo di salvare le foto su pc invece della scheda...
Allora, innanzitutto voglio ringraziarvi per le risposte che mi sono di grande aiuto e mi mostrano il bellissimo ambiente di collaborazione in questo forum.
Vi spiego brevemente come ho pensato alla soluzione dei problemi che mi avete esposto.
. La macchina avrei pensato di usare la reflex in quanto è una vecchia Nikon d200 che sarei anche disposto a sacrificare per questo lavoro in quanto è oltre che sorpassata come modello, nonché mio secondo corpo macchina, anche alla frutta come usura..
. In alternativa avrei una action camera tipo GoPro da usare nello stesso modo il cui valore è nettamente inferiore;
. La posizionero decisamente in alto ( tipo 7/8 metri di altezza) con una staffa costruita ad hoc in ferro tassellata al muro, a cui potrò accedere con una scala in ogni momento;
. Per quanto riguarda la sicurezza è un capannone chiuso protetto da antifurto e videosorveglianza dove la mia macchina è la cosa di minor valore, c'è un arsenale di attrezzature professionale di costo ben maggiore..
. Alimentazione fotocamera: per la reflex ho un alimentatore che si collega alla rete elettrica, difficilmente mancherà la luce e anche nel caso hanno un gruppo di continuità che garantisce la corrente anche nel caso di Black out;
. Per la memoria userei memorie anche piccole ( tipo 8gb) che scaricherei settimanalmente così da fare spezzoni di video più leggeri per il mio PC che altrimenti impazzirebbe, man mano uniro poi i vari spezzoni per creare il time lapse definitivo;
. I ragazzi lavoreranno principalmente di notte quindi imposterò la macchina esposta correttamente come tempi e diaframma per quando le luci sono accese e loro lavorano, ovviamente ci saranno momenti in cui i fotogrammi saranno più o meno bui ma saranno frazioni di secondo a 30frame al secondo;
Il mio dubbio è proprio cosa usare per dire alla macchina di scattare ogni minuto o ogni 30 minuti...
Grazie ancora ragazzi siete fantastici!!!
Se escludi l'autofocus, basta un reed collegato al contattino centrale del pulsante del remoto ... poi per attivarlo, puoi fare timer ciclici praticamente con tutto, tranne che due forcine ed un'elastico ... arduino, un 555, porte logiche, comperarne uno gia fatto e modificarlo, quello che vuoi.
Se decidi di usare arduino, non vedo molte difficolta' neppure io che non sono un programmatore ... prima cosa, garantirgli alimentazione costante, quindi alimentatore e batteria tampone, il circuito e' semplicissimo ... poi, dato che non ti serve la precisione dell'ora ma solo gli intervalli, fai un'if che controllando il tempo trascorso mediante millis attiva per 1 secondo un'uscita con cui piloti il reed ... il tempo che deve controllare lo metti in una variabile (chiamala "intervallo", ad esempio), il cui valore cambi con un'altro if secondo che un'ingresso sia aperto o chiuso (il tuo interruttore) ... ad esempio, se e' aperto "intervallo" vale 60000 (i millisecondi in un minuto), mentre se e' chiuso vale 1800000 (i millisecondi in 30 minuti)
Dato che il tutto non dovra' fare assolutamente nient'altro, potresti anche usare dei delay, ma sono bloccanti, quindi l'intervallo non cambierebbe nel momento in cui sposti l'interruttore ma solo dopo che il precedente intervallo e' trascorso ... ad esempio, se passi da 30 minuti ad 1 minuto mentre la macchina era sui 30 minuti ed ha appena scattato la foto, prima che inizi a scattare una volta al minuto passerebbe un'altro intervallo di 30 minuti, o 30 meno il tempo che e' gia trascorso dal momento dello scatto, lo stesso passando da 1 a 30 ... se per te questo non e' un problema, con i delay e' addirittura banale realizzarlo ...
Sai già quanto deve durare tutto il filmato, 1 minuti, 5, 10? Conoscendo prima quanto deve durare tutto il filmato puoi gestire meglio sia l'intervallo di scatto che il taglio di memoria da utilizzare per tutte le foto, visto il periodo lungo di tutta l'operazione è meglio pianificare prima gli intervalli per non ritrovarsi con giga di foto e ore di filmato che poi si riducono a pochi minuti di video.
Per i delay con arduino puoi anche utilizzarne di 60 secondi e incrementare un contatore fino a 30 così da non avere il programma bloccato per periodi di 30 minuti alla volta.
Ciao a tutti e grazie ancora per le risposte.. Vi aggiorno sul progetto nel caso dovesse essere utile a qualcuno
Per ora ho semplicemente collegato un interruttore a due vie alle due modalita di scatto (tempi, 1 minuto da una parte e 30 minuti dall'altra), come contatto comune il pin 5v, che, a seconda di come e impostato lo switch va a comunicare con un pin diverso della scheda arduino (8 e 9). per il comando di scatto ho semplicemente collegato un pin (11) a gnd (passando per un relè che chiude il contatto sulla macchina).
L'idea mi piace e come versione "beta" può andare, penso che me la studiero bene, e soprattutto studiero il linguaggio, perchè vorrei collegare, anzichè l'interruttore, un potenziometro e un lcd per poter modificare liberamente i parametri.
Grazie a tutti!! 8)
p.s.
vi mostro in allegato lo schema, ci sono anche due led per indicare quale delle due modalità è in funzione e invece di un relè ce ne sono due, perche ho notato che la mia macchina ha bisogno che tutti e tre i contatti (due per la messa a fuoco e uno scatto) devono collegarsi contemporaneamente, altrimenti scatta solo una volta.
Dimenticavo, questo è lo sketch, per me è il primo esperimento di questo genere e già esserci riuscito è un grande traguardo!!
/intervallometro due tempi di scatto per time lapse
int m1=8; /identifico con m1 e m2 i due tempi di scatto ai relativi pin sulla scheda
int m2=9;
int scatto=11; /contatto che controlla lo scatto
int val1=0; /imposto due valori a 0 come riferimento per identificare la variazione di stato di m1 e m2
int val2=0;
void setup()
{
pinMode(scatto, OUTPUT);
pinMode(m1, INPUT);
pinMode(m2, INPUT);
}
void loop()
{
val1=digitalRead(m1); /legge il valore di m1
digitalWrite(scatto,val1); /qualora il valore di m1 fosse "1" darebbe il comando di scatto
delay(100); /tiene "premuto" per 100millisecondi
digitalWrite(scatto,LOW); /scollega il contatto dello scatto
delay(60000); /aspetta un minuto
val2=digitalRead(m2); /stessa cosa per m2 ma il tempo è di 30 minuti.
digitalWrite(scatto,val2);
delay(100);
digitalWrite(scatto, LOW);
delay(1800000);
}
Fede1888: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More > Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie.
Guglielmo
Ciao a tutti! Finalmente è arrivato tutto il materiale e ho potuto fare una prova del progetto... Ma c'e qualcosa che non va...appena acceso fa solo uno scatto, a volte due molto vicini e poi basta...credo che il problema sia nel codice...chi mi può aiutare?
... nello sketch ti limiti a leggere ciclicamente gli ingressi ed a pilotare l'uscita, ma senza effettuare alcun controllo ? ... come farebbe a poter funzionare ?
Dovresti prima leggere lo stato di un'ingresso (ne basta uno, se e0 alto tempo un minuto, se e' basso tempo 30 minuti), poi in base a quello, dici allo sketch anche solo con un'if/else, anto non devi fare nulla di particolare), se aspettare uno o trenta minuti ...
Solo una cosa, le temporizzazioni interne non sono precise come un'orologio, su tempi lunghi potrebbero scartare anche di molti minuti ... ma se non e' un problema, allora ok, altrimenti dovrai usare un RTC ...
mmm...ok, credo di aver capito...Ho modificato il codice come mi hai detto tu semplicemente con un if che controlla lo stato di un pin. Ora però il problema è che anche se cambia lo stato del pin non cambia i tempi... Per fare una simulazione ho collegato un led e ridotto i tempi a pochi secondi, ma resta come se il pin fosse sempre HIGH.
Portate pazienza sono partito da zero e capisco ancora molto poco di questo mondo, anche se mi appassiona molto
int m1=8;
int scatto=11;
void setup()
{
pinMode(scatto, OUTPUT);
pinMode(m1, INPUT);
}
void loop()
{
digitalRead(m1);
if
(m1=HIGH)
{
digitalWrite(scatto,HIGH);
delay(5000);
digitalWrite(scatto,LOW);
delay(1000);
};
if
(m1=LOW)
{
digitalWrite(scatto,HIGH);
delay(500);
digitalWrite(scatto,LOW);
delay(500);
}
}
Cosi ad occhio, vedo un paio di errori di sintassi (il C ed in genere i linguaggi di programmazione sono piuttosto permalosi, basta sbagliare una virgola o simile, e si rifiutano di funzionare ;)) ... il punto e virgola dopo le graffe, ad esempio, non ci va ... poi, dato che il tuo sketch deve fare solo o una cosa o l'altra, unìif/else e' piu che sufficente ... ad esempio, vedi le differenze ?
int m1=8;
int scatto=11;
void setup()
{
pinMode(scatto, OUTPUT);
pinMode(m1, INPUT);
}
void loop()
{
digitalRead(m1);
if (m1=HIGH)
{
digitalWrite(scatto,HIGH);
delay(500);
digitalWrite(scatto,LOW);
delay(5000);
}
else
{
digitalWrite(scatto,HIGH);
delay(500);
digitalWrite(scatto,LOW);
delay(1000);
}
}
Inoltre, hai messo la resistenza di pull-up sull'ingresso (oppure abilita quella interna con "INPUT_PULLUP" invece che solo input, ovviamente l'interruttore deve chiudere verso massa) ? ... e servirebbe un condensatore da 100n fra ingresso e massa come debounce (anche se per un'interruttore si potrebbe ignorare, e' sempre meglio prevederlo)
Per controllare se funziona, spero tu stia usando un led (con la resistenza), e non un rele' collegato direttamente ad un pin, dato che c'e' il rischio di sovraccaricarlo e bruciarlo, ed inoltre non si collega mai un carico induttivo ad un'uscita logica direttamente ...
Grazie mille Etemenanki per l'aiuto! I tuoi consigli sono stati un grande insegnamento per me!
Ho fatto tutto quello che hai detto, però purtroppo il problema continua , non si modificano i tempi del delay al modificarsi dello stato del pin :-\
Non capisco davvero quale sia il problema...
nell'if se usi un = solo fai un'assegnazione.
per il confronto devi usare ==
EDIT: non avevo notato che non assegni il valore della lettura ad una variabile...
a quel punto metti la digitalRead direttamente nell'if
if (digitalRead(m1) == HIGH)
Vero, c'era anche quello e non ci avevo neppure fatto caso, bravo fratt