Intervento a Pycon 8 - Costruiamo un laboratorio di fisica con Arduino e Python

Pubblicato il - lettura in 5 min
Ludus Russo

Ludus Russo

Un maker, un robotico, un Roker!

Questo post è da supporto al mio intervento del 6 Aprile alla conferenza PyCon8. Qui trovate direttamente le slides del mio intervento, alcuni link utili per approfondire e il codice che userò da copiare-incollare durante il training.

##Link per i Download

##Articoli

Questo training è basato sugli articoli che link qui sotto:

##Link Utili

##Codice

Slide 23

def rc_simulation(t, tau):
    return 5*(1-np.exp(-1/tau * t))

tau = 0.1
t = np.arange(0,1,0.001)
v = rc_simulation(t, tau)
plot(t,v)

Slide 25

from datetime import datetime
from nanpy import ArduinoApi, SerialManager
from time import sleep

# connessione ad arduino sulla porta seriale specifica
connection = SerialManager(device='/dev/cu.usbmodem1461')
a = ArduinoApi(connection=connection)

# scarichiamo il condenatore
a.pinMode(2, a.OUTPUT)
a.digitalWrite(2, a.LOW)
sleep(2)

# carichiamo il condensatore e misuriamo l'andamento
vm, tm = [], []
a.digitalWrite(2, a.HIGH)
for i in range(0,50):
    tm.append(datetime.now())
    vm.append(5.0*a.analogRead(14)/1023.0)

# convertiamo i dati in numpy
ts = tm[0]
tm = [(i-ts).total_seconds() for i in  tm]

Slide 26

tm = np.array(tm)
vm = np.array(vm)

from scipy.optimize import curve_fit
popt, pcov = curve_fit(rc_simulation, tm, vm)

Slide 34

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)

Slide 37

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

Slide 48

from nanpy import ArduinoApi, SerialManager
...
a = ArduinoApi(connection=connection)

def luxmeter():
    v = a.analogRead(14) * 5.0/1023.0
    R = (5-v)/v*10e3
    return R

Slide 49

def plot_lux(T):
    from datetime import datetime, timedelta
    start_time = datetime.now()
    stop_time = start_time + timedelta(0, T)

    times = []
    luxs = []

    while datetime.now() < stop_time:
        L, R = luxmeter()
        times.append((datetime.now() - start_time).total_seconds())
        luxs.append(L)

    return times, luxs
Ludus Russo

Ludus Russo

Un maker, un robotico, un Roker!

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora