Studio di sorgenti LED variabili nel tempo

Salve Ragazzi , sono un nuovo Utente e da poco più di due settimane sono entrato nel fantastico Mondo di Arduino .

Vi scrivo poichè ho la necessità di replicare un'esperimento effettuato in laboratorio di Fisica III.

L'esperimento in questione riguarda lo studio di Sorgenti Luminose Variabili nel Tempo.

Ciò che mi serve è creare un circuito composto da un sensore di Luce ( fotoresistenza ) e un LED ,in modo tale che la fotoresistenza legga l'intensità luminosa del LED e la stampi a video .
Devo due grafici con i valori del Tempo, Luminosità e Tensione .

Allego il circuito con le foto del circuito e del codice sorgente .

I problemi che riscontro sono :

  1. Non leggo nessuna variazione della luminosità ,voltaggio , resta fissa a zero.
  2. Non riesco a leggere i decimali sui dati relativi al tempo e luminosita'. Leggo sfilze di 0.00 ... poi 1.00 .. poi 2.00 e cosi via , nonostante il campionamento sia ogni millesimo di secondo.
  3. come posso inserire in serie alla resistenza un potenziometro? in modo da far variare l'intensità del LED?
  4. il LED non si accende.

Ecco il Codice :

float lum=0; // Variabile luminosita'
float Sensore=A0; // Variabile sensore
float time=0; 
float tensione=0;
float volt=A1;

void setup () {
  Serial.begin(9600);
}
void loop () { 
  lum=analogRead(Sensore); // Lettura Sensore
  volt=analogRead(tensione); // Lettura Tensione
  time=millis()/1000;
  Serial.print("\t");
  Serial.print(time,3);
  Serial.print("\t");
  Serial.print(lum,3);
  Serial.print("\t");
  Serial.print(volt,3);
  Serial.print("\n");
  delay(1); // Campionamento ogni millisecondo , 1000 Hz
}

Qui vi è il circuito : Imgur: The magic of the Internet

Grazie in anticipo per l'eventuale aiuto , è molto importante per me :slight_smile:

Ciao,
prima di tutto, essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

Salve Guglielmo ,

Regolamento già letto e presentazione postata :slight_smile:

Controlla bene il codice, hai invertito varie cose e definito male varie altre ...

Esempio ...

float Sensore=A0; // Variabile sensore

... è sbagliato. Dato che per te quello è solo un mnemonico per il pin, un byte è più che sufficiente e per di più conviene dichiaralo const, o, anche, metterlo in una #define così da risparmiar anche quel byte :smiley:

const byte Sensore = A0;

Poi ... metti il pin dove leggi il voltaggio (A1) nella variabile volt (anch'essa erratamente dichiarata float), ma poi leggi da un'altro pin :o :o :o

volt=analogRead(tensione); // Lettura Tensione

Magari tu volevi scrivere ...

const byte tensione = A1;
...
...
volt=analogRead(tensione); // Lettura Tensione

... che legge la così la tensione presente sul pin A1 :wink:

Insomma ... quando si programma occorre prestare attenzione a ciò che si scrive e stare attenti a non confondere fischi per fiaschi :grin:

Controlla bene tutto, correggi e ... posta il programma corretto.

Guglielmo

Io aggiungerei anche di mettere un poco di ordine nello schema cominciando a usare i colori dei fili secondo convenzione:
Rosso -> +Vcc
Nero -> Gnd

Se non ho visto male hai anche invertito i collegamenti sulla breadboard mettendo il +Vcc sulla linea nera e il Gnd sulla linea rossa. Su uno schema semplice come questo i collegamenti si trovano facilmente, se però fai qualcosa di più complicato e non rispetti un minimo di ordine puoi facilmente trovarti in difficoltà. :wink:

Ciao

Attilio

Grazie per l'interessamento a tutti :slight_smile:

ultimo_53:
Su uno schema semplice come questo i collegamenti si trovano facilmente, se però fai qualcosa di più complicato e non rispetti un minimo di ordine puoi facilmente trovarti in difficoltà. :wink:

Nella realtà ragiono cosi , non pensavo che si potessero cambiare i colori dei fili con Fritzing, comunque sia ho rimediato . Posto nuovamente l'immagine , ho aggiunto pure un potenziometro a 3 piedini .

Imgur

gpb01:
Controlla bene tutto, correggi e ... posta il programma corretto.

Ho controllato il codice , alcune cose si sono sistemate ,altre meno . Ecco il Codice :

#define sensore A0
#define tensione A1
float lum=0;
float volt=0;
float time=0;

void setup () {
  Serial.begin(9600);
  Serial.print(" Tempo [s] Intensita'[cd] Tensione [V] \t \n ");
}

void loop () { 
  time=millis()/1000;
  lum=analogRead(sensore);
  volt=(analogRead(tensione)/1024.0)*0.5; // Definito cosi dopo aver letto il libro progetti
  Serial.print("\t");
  Serial.print(time,3);
  Serial.print("\t");
  Serial.print(lum,3);
  Serial.print("\t");
  Serial.print(volt,2);
  Serial.print("\n");
  delay(1);
}

Problemi riscontrati :

  1. Il LED si accende e leggo 0.5 Volt di tensione , anche variando il potenziometro non si hanno cambiamenti.

  2. Dalla Fotoresistenza leggo sempre 1023 , nessuna variazione nel tempo ( stanza al buio ) .

  3. Non riesco a stampare i decimali del tempo , vorrei campionare ogni millisecondo ( il settaggio del delay è corretto ) ma Arduino mi stampa solo i secondi e fissa i decimali a 0.

Scusatemi se magari sbaglio cose banali , ma questo è il mio 4o progetto :confused:

Cominciamo dalla variazione del led.
Guarda se così funziona (vedi allegato)

Ciao

Attilio

Led.pdf (871 KB)

ultimo_53:
Cominciamo dalla variazione del led.

Ho variato il posizionamento di A0 con A1 , Funziona perfettamente! :slight_smile: :slight_smile:

Ho risolto il funzionamento della Fotoresistenza :slight_smile:

Mi manca da sistemare la stampa a video del tempo , avete qualche dritta da darmi?