Go Down

Topic: usare un servo per azionare la fotocamera (Read 5 times) previous topic - next topic

milvusmilvus


tonid

Mi sembra ti mancasse l'analogRead del potenziometro.....e poi tutta la serie di if andrebbero messe nal loop perche messe nel setup se vari il pot il valore letto non ti cambia più.....

milvusmilvus

in effetti lì' errore era proprio quello, ora ho messo gli if nel loop, volevo metterlo nel setup, cosi per cambiare il valore avrei dovuto resettare arduino... era un meccaniscmo di sicurezza, ora ho tutto nel loop. ma se provo a cambiare valore fa degli errori strani che non ho ancora capito, il tempo diventa negativo, con valori casuali, dopo aver spostato piu volte il potenzometro.. non ho ancora capito in base a cosa cambi i valori... oggi faccio alòtri test

tonid

Prova a postare il nuovo codice così si può dare un'occhiata  :smiley-mr-green:

milvusmilvus

#34
Jul 18, 2012, 02:41 pm Last Edit: Jul 18, 2012, 02:45 pm by milvusmilvus Reason: 1
riecco il codice :D

Code: [Select]

//time lapse - in base alla posizione del potenziometro, il programma attiva un servo per scattare foto con una fotocamera compatta

#include <Servo.h>

Servo myservo;  // crea un oggetto servo, per controllarne il movimento

int pos1 = 0; // posizione iniziale del servo
int pos2 = 20; // posizione finale, quella in cui preme il tasto
int time;
int pot = A1;//assegna il potenziometro sul pin A1
int potenziometro = 0;
void setup()

{
 myservo.attach(A2);  // attiva il pin A2 per il controllo del servo
}



void loop()
{      

potenziometro =  analogRead(pot);
 
 if(potenziometro >=  0 & potenziometro <= 100){
   time = 1000;
 }
 if(potenziometro > 100 & potenziometro <= 200){
   time = 2000;
 }
 if(potenziometro > 200 & potenziometro <= 300){
   time = 5000;
 }
 if(potenziometro > 300 & potenziometro <= 400){
   time = 10000;
 }
 if(potenziometro > 400 & potenziometro <= 500){
   time = 15000;
 }
 if(potenziometro > 500 & potenziometro <= 600){
   time = 20000;
 }
 if(potenziometro > 600 & potenziometro <= 700){
   time = 30000;
 }
 if(potenziometro > 700 & potenziometro <= 800){
   time = 60000;
 }
 if(potenziometro > 800 & potenziometro <= 900){
   time = 120000;
 }
 if(potenziometro > 1000){
   time = 300000;
 }
 
 
 Serial.begin(9600);
 Serial.println (potenziometro);
 Serial.println (time);

   myservo.write(pos2);              // sposta il serveo nella posizione finale
   delay(200);                      
   
   myservo.write(pos1);              //riporta il servo nella posizione iniziale
   delay(time - 200);                        
}


[edit]allora... sicuramente dipende dal fatto che non ho considerato i numeri tra 900 e 1000, infatti l' errore lo ha fatto a 952,ed ho corretto, ma siccome provavo a cambiare il tempo, mi sono accorto che superati i 10s ti tempo, la variabile time non cambiava piu.. e rimaneva a 10s

tonid

penso che il problema possa dipendere dalla variabile int che può assumere un valore massimo di (2^15)-1 ovvero 32767
vedi qui http://arduino.cc/en/Reference/Int prova a controllare facendo una stampa di ''time'' e controlli il valore effettivo...

milvusmilvus

stavo giusto pensando a quel problema...  infatti l' errore lo da per tempi superiori a 30000 ms, penso che cambiero tipo di variabile :)

ecco le stampe:

lettura potenziomentro
tempo

Code: [Select]

114
2000
145
2000
144
2000
194
2000
233
5000
233
5000
327
10000
395
10000
455
15000
563
20000
673
30000
822
-11072
724
-5536
567
20000
634
30000
689
30000
736
-5536

tonid

Si in effetti è li il problema.........tra 700 e 800 il time deve essere 60000, il time contiene circa 32700 quelli in eccesso circa 27000 li scala partendo dal valore massimo negativo (-32768) ed il risultato è congruo con il tuo circa -5500

tonid

Penso dovresti usare long o unsigned long ti mangiano 4 bytes (32 bit) ma riesci a svolgere ciò che ti serve....

milvusmilvus

ho inizializzato la varibile time come long, un po mi dispiace sprecare spazio cosi :D ma alla fine serve.. e non ho problemi di memoria.. quindi nessun problema, ora funziona bene, anzi gia sto facendo un time lapse, stasera, dopo il tramonto, posto il video che ho fatto :D sperando che sia decente.. poi aggiungo anche un paio di foto del supporto per il servo, e il "circuito" cosi che se qualcuno vuole replicarlo lo fa senza problemi

tonid

Bene son contento ed attendo il video .........ciao  :smiley-mr-green:

milvusmilvus

come promesso ecco il video
non è niente di particolare, e dopo circa 2 ore si è scarciata la fotocamera.. devi attrezzarmi con una matteria esterna anche per quella...


http://www.youtube.com/watch?v=PPea_etkMhc&feature=plcp

per usare arduino anche fuori casa, posso utilizzare una batteria da 9v? alimentandolo dal connettore? grazie

tonid

#42
Jul 18, 2012, 11:41 pm Last Edit: Jul 18, 2012, 11:42 pm by tonid Reason: 1
Per alimentare arduino con una pila da 9volt non ci sono problemi ma se hai anche un servo la pila ti durerà poco......potresti usare una 9volt per la scheda ed un pacco pile stilo per il servo......


ps..bello il video, ''l'accrocco'' sembra non dare nessun problema,è stabile.........posta qualche foto ?!  :smiley-mr-green:

Iz2rpn


come promesso ecco il video
non è niente di particolare, e dopo circa 2 ore si è scarciata la fotocamera.. devi attrezzarmi con una matteria esterna anche per quella...


http://www.youtube.com/watch?v=PPea_etkMhc&feature=plcp

per usare arduino anche fuori casa, posso utilizzare una batteria da 9v? alimentandolo dal connettore? grazie


ottimo risultato forse troppo veloce, ogni quanto hai fatto lo scatto? io di solito faccio 10 secondi, eccoti un esempio:
http://www.youtube.com/watch?v=7z9UPxhJ3sA

per il resto ti consiglio solo di fissare meglio la fotocamera ho visto dei piccolo micro mossi ma niente di che molto bello.

per la batterie a sto punto ti consiglio di acquistare una batteria lipo per uso da modellismo, dura molto tempo e sopratutto e compatta, la classica batteria da 9v io e anche altri utenti hanno riscontrato che non basta.

oppure compri un porta batterie da 8 stilo, e spendi anche meno ma ovviamente durano meno, valuta te.

Pietro

Iz2rpn

ho sbagliato video sorry era questo che volevo farti vedere: http://youtu.be/TBK08xBUYF4 400 fotogrammi fatti ogni 10 secondi.

ciao notte

Go Up