Nuova sezione libri disponibile!

Misurare la costante di Planck con Arduino e Python - Parte 2

Ludovico Russo

lettura in 4 minuti

Dopo una lunga pausa, dovuta principalmente al lavoro necessario per la consegna della tesi che mi ha preso tutto il tempo libero delle ultime due settimane, al mio lavoro con HotBlack Robotics che si fa sempre più denso, e ad alcuni progetti che sto facendo partire di cui parlerò a breve, ecco che finalmente trovo il tempo per riprendere in mano questo tutorial lasciato a metà.

Misura della caratteristica di Led

Per chi si fosse perso la prima parte (più teorica), può trovarla cliccando qui. In questa seconda parte iniziamo con il vero smanettamente con Aruduino.

Misura della caratteristica dei Led con Arduino e Nanpy

Iniziamo subito a vedere come è possibile misurare la caratteristica reale di un led sfruttando Arduino, Nanpy e un paio di componente (una resistenza e un condensatore).

In particolare, per misurare la caratteristica del Led (o di un qualsiasi componente), dobbiamo misurare contemporaneamente i valori di corrente e tensione che attraversano il Led stesso, andando a variare nel tempo una di queste due grandezze e misure l'andamento dell'altra.

Riprendendo l'idea del Prof. Alfonso d'Ambrosio, ho utilizzato il semplice circuito sottostante per la misura di queste grandezze con il metodo volt-amperometrico

Circuito LED

Come funziona

L'idea alla base è molto semplice: con Arduino, impostiamo la tensione VinV_{in} e misuriamo la tensione vdv_d. In questo modo, possiamo variare la tensione in ingresso al circuito e misurare la tensione sul condensatore.

Per misurare la corrente, possiamo sfruttare proprio la tesistenza RR (di valore noto). Infatti, iini_{in} è semplicemente misurabile con la formula

iin=VinvdRi_{in} = \frac{V_{in} - v_d}{R}

Il condensatore CC si trova in quella posizione per le sue capacità di filtro. Infatti ricordiamo che Arduino non è in grado di generare una tensione variabile, ma sfrutta il metodo PWM. Il condensatore quindi è necessario per filtrare la tensione in ingresso.

Nel nostro esperimento, supponiamo (un'approssima quasi vera) che tutta la corrente iini_{in} fluisce all'interno del Diodo Led, in altre parole, supponiamo che

iin=idi_{in} = i_d

Implementazione in Arduino

Utilizzando Arduino ed una breadboard, implementiamo il circuito sopra indicato. Nel mio circuito ho utilizzato i seguenti componenti:

  • Resistenza R=1kΩR=1k\Omega
  • Condensatore elettrolitico C=100μFC=100\mu F
  • Arduino UNO
  • Breadboard

Usiamo come input il Pin6 di Arduino, e come lettura il Pin A0, come indicato in figura.

Schema Arduino

Codice di Acquisizione

Andiamo quindi ad implementare una funzione per l'aquisizione dei dati.

La funzione deve generare come input tutti i valori di tensione possibili, utilizando il comando analogWrite sul Pin 6 (ricordo che i valori di questa funzione sono codificati su 8 bit: 00V0 \rightarrow 0V, 2535V253 \rightarrow 5V).

Per ogni valore, deve misurare la tensione sul Pin A0, usando la funzione analogRead, che (a differenza della precedente), è codificata su 10bit: 00V0 \rightarrow 0V, 10235V1023 \rightarrow 5V).

Per ogni coppia di valori I,OI, O, andare a misurare le grandezze VinV_{in}, vdv_d e iini_{in}, usando le seguenti equzioni:

Vin=5V255IV_{in} = \frac{5V}{255} \cdot I
vd=5V1023Ov_d = \frac{5V}{1023} \cdot O
iin=VinvdRi_{in} = \frac{V_{in} - v_d}{R}

Implementiamo questa funzione all'interno di un file led.py

from nanpy import ArduinoApi, SerialManager
from time import sleep

import numpy


connection = SerialManager(device='/dev/cu.usbmodem1461')
a = ArduinoApi(connection=connection)

R = 1e3

def characterize_led():
    a.pinMode(6, a.OUTPUT)

    from datetime import datetime
    a.analogWrite(6, 0)
    sleep(5)
    ts = datetime.now()
    v, i = [], []
    for I in range(0,255,1):
        a.analogWrite(6, I)
        O = a.analogRead(14)
        v_d = O * 5/1023.0
        v_in = I * 5.0/255.0
        i_in = (v_in-v_d)/R
        v.append(v_d)
        i.append(i_in)
        sleep(0.01)

    i = numpy.array(i)
    v = numpy.array(v)
    return v, i

Aquisiamo i dati

Una volta implementata la funzione, possiamo aprire una shell python usando il comando ipython --pylab (o alternativamente usando un IDE come Spyder) ed eseguire i seguenti comandi

from led import characterize_led
v, i = characterize_led()
plot(v, i)

Se tutto è andato bene, dovrette ottenere un grafico simile a seguente (in questo caso ho usato un Led Blu).

led blu caratteristica

Notiamo subito una cosa molto diversa dal caso ideale: quando il led non couduce (è spento), in realtà passa una corrente, molto piccola, nel circuito (iin<0.5mAi_in < 0.5mA). Questa corrente è dovuta alle resistenze interne del condesatore C.

Tuttavia, è facilissimo trovare la tensione di attivazione del Diodo Led, che in questo caso è di circa VD=2.5VV_D = 2.5V.

Cambiando il led e rieseguendo il codice, potete disegnare sullo stesso grafico le caratteristiche di led colorati diversi. Nell'immagine successiva, trovate le caratteristiche di 4 led (Rosso, Verde, Giallo, Blu) generati dal seguente codice (cambiando manualmente i led).

from led import characterize_led

# Inserisco led blu
vb, ib = characterize_led()
plot(vb, ib, 'b')

# Inserisco led rosso
vr, ir = characterize_led()
plot(vr, ir, 'r')

# Inserisco led giallo
vy, iy = characterize_led()
plot(vy, iy, 'y')

# Inserisco led verde
vg, ig = characterize_led()
plot(vg, ig, 'g')

led tutti caratteristica

Notare che per ogni led misuriamo una corrente molto bassa in ingresso prima che il led si accenda. Si noti anche che i led verde e giallo hanno una caratteristica quasi identica.

Conclusioni seconda Parte

Concludo la seconda parte di questa guida a questo punto. Con la promessa che la prossima (e ultima) parte verrà pubblicata a breve.

Ti è piaciuto questo post?

Registrati alla newsletter per rimanere sempre aggiornato!

Ci tengo alla tua privacy. Leggi di più sulla mia Privacy Policy.

Ti potrebbe anche interessare

HB Cloud Tutorial #1 - Uso dei Led
Iniziamo ad utilizzare la piattaforma di Cloud Robotics
HB Cloud Tutorial #2 - Uso dei Bottoni
Rieccomi con il secondo tutorial legato all'uso dei bottoni per il robot **DotBot-ROS**. In questo tutorial, vedremo come configurare ed utilizzare in Python un bottone attaccato ad un pin GPIO del Raspberry Pi 3.
HB Cloud Tutorial #3 - I Motori
I Motori sono una delle parti essenziali dei robot. In questo tutorial, vederemo come è possibile in modo semplice ed intuitivo implementare un programma in Python che controlla i motori in base a comandi inviati via Wifi al Robot.
Utilizzare la RaspiCam in streaming con la piattaforma Cloud
Breve tutorial che spiega come abilitare la RaspiCam su ROS e la piattaforma di Cloud Robotics
Installiamo ROS su Raspberry Pi
Un breve tutorial su come utilizzare ROS sul Raspberry Pi
Video Corso ROS Rokers - Completati i video di Introduzione
Sono disponibili online i video tutorial del corso di ROS partito dalla community Rokers
Inviare Goals alla Navigation Stack - versione nodo ROS Python
Inviare un goal all ROS navigation stack utilizzando un nodo Python
Controllare siBOT dalla piattaforma HBR
Come controllare il manipolatore siBOT utilizzando la piattaforma HBR
Sviluppare un rilevatore di fiamma con la visione artificiale
Sviluppare un rilevatore di fiamma con la visione artificiale
Scriviamo un Blog in Python e Flask
Tutorial su come implementare, a partire da zero, un blog personale utilizzando Python e Flask! Prima parte!
Un laboratorio di Fisica con Arduino e Python
Primi esperimenti con Arduino e Python per realizzare un semplice laboratorio di fisica sfruttando la potenza di Python e la versatilità di Arduino
Un IDE web Arduino sviluppato in Python e Flask
Un mio progetto dell'estate del 2015 che permette di programmare Arduino da un'interfaccia Web esposta da un Raspberry Pi
Utilizziamo Atom come editor di testo remoto su Raspberry Pi
Come usare Atom come editor di testo remoto per Raspberry Pi
Canopy: una Pythonica alternativa a Matlab
Presento questo interessante tool python che può essere considerato una buona alternativa a Matlab per l'analisi dei dati!
Spyder, un'altra alternativa in Python a Matlab
Una velocissima prova del tool interattivo Spyder per l'analisi scientifica in Python
Simuliamo il moto parabolico in Python e Spyder
Un piccolo tutorial per iniziare ad utilizzare Spyder con Python
Python + Arduino = Nanpy
Programmare Arduino in Python con Nanpy
Utilizzo di Nanpy con il sensore di temperatura/umidità della famiglia DHT
Come utilizzare Nanpy col sensore DHT di temperatura e Umidità
Pasqua al Liceo Stampacchia di Tricase: Corsi di Arduino e Stampa 3D
In occasione delle vacanze di Pasqua 2017, il Liceo G. Stampacchia organizza due corsi tenuti da me su Arduino e stampa 3D.
Breve Introduzione all'utilizzo di Spyder per il Plot dei dati a livello scientifico
Una brevissima guida che mostra come utilizzare Spyder per il plot dei dati a livello scientifico
Accendere led con Arduino e Telegram
Un bot telegram in grado di controllare Arduino realizzato da 3 ragazzi del Liceo Stampacchia
Gestire le macchine virtuali senza sforzo con Vagrant
Introduzione ed esempio di utilizzo su Vagrant, il tool che semplifica la gestione delle macchine virtuali per lo sviluppo.
Implementiamo un bot Telegram con Python
Una semplice guida per iniziare a muovere i primi passi nello sviluppo di chatbot Telegram con Python
Pillole di Python: pyscreenshot
Una semplice tutorial che mostra il funzionamento della libreria pyscreenshot
Sviluppiamo un'app in Electron per controllare la scheda Arduino - parte 2
In questo tutorial, vediamo come sviluppare un oscilloscopio con Node.js, Electron e Typescript
Python Decorators
Introduzione ai decoratori in Python
TDD con Flask e PyTest per lo sviluppo di API REST. Parte 1
Tutorial su come usare il Test Driver Development (TDD) con Flask e PyTest per sviluppare delle semplici API REST
Implementiamo un bot Telegram con Python - I Comandi
Vediamo come gestire i comandi del nostro bot in Telegram
4 (+1) Libri su Python (in Inglese) da cui imparare
Una lista di libri su Python (in Inglese) da cui ho imparato a programmare
Virtualenv: gestiamo meglio le dipendenze in Python
A cosa servono e come si utilizzano i virtualenv Python
Leggere i codici a barre con OpenCV e zbar in Python
Come usare Python per leggere i codici a barre degli alimenti e ricavarne alcune informazioni utili
TDD con Flask e PyTest per lo sviluppo di API REST. Parte 2
Tutorial su come usare il Test Driver Development (TDD) con Flask e PyTest per sviluppare delle semplici API REST
Sviluppiamo un bot Telegram che legge i codici a barre degli alimenti
Implementiamo un bot Telegram in grado di leggere ed analizzare le immagini per la lettura ed interpretazione dei codici a barre
TDD con Flask e PyTest per lo sviluppo di API REST. Parte 3
Tutorial su come usare il Test Driver Development (TDD) con Flask e PyTest per sviluppare delle semplici API REST
Divertiamoci sviluppando UI da terminale con ASCIIMATICS
Le UI da terminale fanno molto anni '80, però sono sempre diventerti da implementare. Oggi vi voglio introdurre ad una semplice libreria per creare questo tipo di applicazione.
Sviluppiamo un Robot con tecnologie Open Source
Inizio una serie di videoguide, in cui voglio introdurvi al mondo della robotica di servizio in modo pratico, facendo vedere come è possibilile, sfruttando tecnologie completamente Open Source, quali Arduino, Raspberry Pi, ROS e Docker, costruire un piccolo robot di Servizio.
Parliamo come GMaps: come creare file audio con gtts (Google Text to Speech) in Python
gtts è una libreria in Python per sfruttare le API di Google Text to Speech per generare file audio dal testo
Robot Open Source - Introduzione a Docker
È disponibile il video "Introduzione a Docker".
I chatbot possono Parlare? Sviluppiamo un bot telegram che manda messaggi vocali
Usiamo le API di sintesi vocale di google per creare un bot in grado di mandare messaggi vocali
Robot Open Source - Docker e Raspberry
È disponibile il video "Docker e Raspberry".