Intervento a Pycon 8 - Costruiamo un laboratorio di fisica con Arduino e Python
Ludovico Russo • 5th April, 2017 • read in 1 mins

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.1t = np.arange(0,1,0.001)v = rc_simulation(t, tau)plot(t,v)
Slide 25
from datetime import datetimefrom nanpy import ArduinoApi, SerialManagerfrom time import sleep# connessione ad arduino sulla porta seriale specificaconnection = SerialManager(device='/dev/cu.usbmodem1461')a = ArduinoApi(connection=connection)# scarichiamo il condenatorea.pinMode(2, a.OUTPUT)a.digitalWrite(2, a.LOW)sleep(2)# carichiamo il condensatore e misuriamo l'andamentovm, 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 numpyts = 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_fitpopt, 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] = 0else:i[k] = (v[k]-VD)/RDreturn imask = v > 0.7RD, VD = polyfit(i[mask],v[mask],1)
Slide 37
def characterize_led():a.pinMode(6, a.OUTPUT)from datetime import datetimea.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.0v_in = I * 5.0/255.0i_in = (v_in-v_d)/Rv.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.0R = (5-v)/v*10e3return R
Slide 49
def plot_lux(T):from datetime import datetime, timedeltastart_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