Misurare la costante di Planck con Arduino e Python - Parte 1
Prendo ispirazione da questo post pubblicato dal prof. Alfonso d'Ambrosio per sviluppare il prossimo esperimento di fisica basato su Python e Arduino.
In questo esperimento, misureremo la curva tensione corrente di alcuni diodi led colorati, verificandone l'andamento esponezione. In seguito, useremo i dati raccolti per misurare sperimentalmente il valore di una delle costanti fondamentali dalla fisica: la costante di Planck .
Per ulteriori informazioni su come utilizzare e installare Spyder e la libreria nanpy per il controllo seriale di Arduino, rimando al mio precedente post.
Diodo LED
Un Diodo LED è uno dei componenti più utilizzati in elettronica, ed è uno dei primi componenti elettronici che si affrontano quando si iniziano a fare i primi esperimenti in elettronica. Essenzialmente, un Led è un componente elettronico che emette radiazioni luminose di un colore noto quando alimentato.
Teoria e simulazione di un Diodo
Da un punto di vista elettronico, il Led è un Diodo: una resistenza non lineare il cui andamento corrente-tensione (ideale) è logaritmico e può essere descritto dalla seguente equazione
Dove e sono, rispettivamente, corrente che attraversa il diodo e tensione ai suoi capi, mentre (corrente di saturazione) e (tensione termica) sono parametri che caratterizzano il diodo stesso.
Utilizzando i valori tipici per queste due costanti ( e 25.85mV$), è possibile simulare un classico diodo di silicio in Python e Spyder. Lo script utilizzato è il seguente
from pylab import *
def diode(v, I0, VT):
return I0*(exp(v/VT)-1)
I0 = 1e-12
VT = 25.85e-3
v = arange(0, 0.73, 0.01)
plot(v, diode(v, I0, VT))
xlabel("$v [V]$")
ylabel("$i [A]$")
Che produce, come risultato
In prima approssimazione, la curva logaritmica di un diodo può essere approssimata con una funzione spezzata descritta come segue
dove è detta tensione di attivazione, ed è una costante empirica che rappresenta la minima tensione a partire dalla quale il diodo inizia a condurre. approssima la resistenza interna al diodo.
Per approssimare una curva logartimica, si può procedere in vari modi. Io suggerisco di utilizzare la funzione polyfit
(che approssima una serie di punti con un polinomio) considerando solo i punti dei grafico in cui la curva inizia effettivamente a crescere. La selezione di questi punti viene fatta manualmente, ad esempio, selezionando tutti i punti per cui , come nello script qui riportato
mask = v > 0.7
RD, VD = polyfit(i[mask],v[mask],1)
Per plottare questi dati, dobbiamo prima di tutto implementare una funzione che genera a partire da :
import numpy as np
def diode_approx(v, VD, RD):
i = np.array(v)
for k in range(len(v)):
if v[k] < VD:
i[k] = 0
else:
i[k] = (v[k]-VD)/RD
return i
e a questo punto, possiamo plottare insieme i due grafici, ottenendo quanto riportato in figura
Teoria sul LED
Capiti i diodi, possiamo finalmente parlare di LED. Essenzialmente un diodo Led è un Diodo che emette fotoni (luce) di un particolare colore se polarizzato. La caratteristica dei diodi LED è che la tensione dipende dalla frequenza luminosa emessa, ed è esprimibile in questo modo:
Dove è la frequenza della radiazione emessa, è la costante di Planck e è la carica elettrica dell'elettrone (in valore assoluto).
È quindi facile capire che, conoscendo la carica elettrica dell'elettrone, è possibile ottenere una stima della costante di Planck misurando la tensione di led di diverso colore.
Conclusione prima parte
Per adesso mi fermo qui, per non far diventare questo tutorial troppo lungo! Nel prossimo tutorial, vedremo come utilizzare la teoria presentata oggi per caratterizzare sperimentalmente un led con Arduino e Python e misurare la costante di Planck in modo sperimentale.
Sotto trovate il codice completo utilizzato in questo tutorial.
from pylab import *
import numpy as np
def diode(v, I0, VT):
return I0*(exp(v/VT)-1)
def diode_approx(v, VD, RD):
i = np.array(v)
for k in range(len(v)):
if v[k] < VD:
i[k] = 0
else:
i[k] = (v[k]-VD)/RD
return i
I0 = 1e-12
VT = 25.85e-3
v = arange(0, 0.79, 0.01)
i = diode(v, I0, VT)
plot(v, i)
xlabel("$v [V]$")
ylabel("$i [A]$")
def diode_approx(v, VD, RD):
i = np.array(v)
for k in range(len(v)):
if v[k] < VD:
i[k] = 0
else:
i[k] = (v[k]-VD)/RD
return i
mask = v > 0.7
RD, VD = polyfit(i[mask],v[mask],1)
plot(v, diode_approx(v, VD, RD))