Pages: 1 2 [3] 4 5   Go Down
Author Topic: usare un servo per azionare la fotocamera  (Read 4760 times)
0 Members and 1 Guest are viewing this topic.
Banzi (PZ)
Offline Offline
God Member
*****
Karma: 2
Posts: 692
Impara l'arte, e usala!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

come non detto.... ho risolto smiley-grin
Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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ù.....
Logged

Banzi (PZ)
Offline Offline
God Member
*****
Karma: 2
Posts: 692
Impara l'arte, e usala!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Banzi (PZ)
Offline Offline
God Member
*****
Karma: 2
Posts: 692
Impara l'arte, e usala!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

riecco il codice smiley-grin

Code:
//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
« Last Edit: July 18, 2012, 07:45:48 am by milvusmilvus » Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Banzi (PZ)
Offline Offline
God Member
*****
Karma: 2
Posts: 692
Impara l'arte, e usala!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

ecco le stampe:

lettura potenziomentro
tempo

Code:
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
Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Banzi (PZ)
Offline Offline
God Member
*****
Karma: 2
Posts: 692
Impara l'arte, e usala!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho inizializzato la varibile time come long, un po mi dispiace sprecare spazio cosi smiley-grin 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 smiley-grin 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
Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Banzi (PZ)
Offline Offline
God Member
*****
Karma: 2
Posts: 692
Impara l'arte, e usala!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...




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


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: July 18, 2012, 04:42:36 pm by tonid » Logged

Varese
Offline Offline
God Member
*****
Karma: 8
Posts: 585
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...




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:


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
Logged

Varese
Offline Offline
God Member
*****
Karma: 8
Posts: 585
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

ciao notte
Logged

Pages: 1 2 [3] 4 5   Go Up
Jump to: