Differenze tra le versioni di "Misurare la corrente con un anello amperometrico"

Da raspibo.
Jump to navigation Jump to search
Riga 18: Riga 18:
 
analog_addr = 0x68
 
analog_addr = 0x68
 
I2C_SLAVE  = 0x0703
 
I2C_SLAVE  = 0x0703
SAMPLES = 50
+
SAMPLES = 48
  
 
devname = "/dev/i2c-0"
 
devname = "/dev/i2c-0"
Riga 46: Riga 46:
 
Come si vede viene rilevato un certo numero di campioni e poi ne viene calcolato lo scarto quadratico medio dalla tensione nulla.
 
Come si vede viene rilevato un certo numero di campioni e poi ne viene calcolato lo scarto quadratico medio dalla tensione nulla.
 
Il fattore di conversione 30/1000 si deve al fatto che la misura e' in millivolt e 1 volt corrisponde a 30 Ampere.
 
Il fattore di conversione 30/1000 si deve al fatto che la misura e' in millivolt e 1 volt corrisponde a 30 Ampere.
 +
48 campioni consentono di misurare 10 cicli interi di alternata (240 campioni al secondo, 48 campioni sono 1/5 di secondo).
 +
Se si vuole maggiore precisione occorre aumentare il numero di campioni (ma la rilevazione richiedera' piu' tempo). Per esempio con 240 secondi impiega 1 secondo.

Versione delle 18:50, 3 mar 2013

Questo esperimento usa la scheda Input Analogico collegata come descritto in "Collegare dispositivi I2C" e questo sensore amperometrico

Il sensore amperometrico viene fornito con un jack di collegamento. Attaccate i due contatti del Jack a un entrata della scheda di input analogico (il programma presentato di default ipotizza che sia collegato sulla porta 0). Non importa la polarita', infatti questo sensore amperomentrico non e' altro che un trasformatore a una spira di primario con una resistenza di carico, generera' in output una tensione proporzionale alla corrente in transito raggiungendo 1V al passaggio di 30A.

Il sensore amperometrico si apre come una pinza, occorre richiuderlo in modo che abbracci il uno dei due fili che portano la corrente ad un utilizzatore (a 230V alternata).

Cursensor.png

Questo e' il programma Python che calcola l'intensita' di corrente istantanea in transito:

#!/usr/bin/env python3

import sys,fcntl,os,time,struct,math

analog_addr = 0x68
I2C_SLAVE   = 0x0703
SAMPLES = 48

devname = "/dev/i2c-0"

if len(sys.argv) < 2:
        line = 0
else:
        line = int(sys.argv[1])

dev=os.open("/dev/i2c-0", os.O_RDWR)

fcntl.ioctl(dev, I2C_SLAVE, analog_addr)

cmd=bytearray([0x80 | 0x10 | (line<<5)])
os.write(dev, cmd)
sqsum=0
for j in range(SAMPLES):
        time.sleep(0.004167)
        ret=os.read(dev, 2)
        value=struct.unpack('>h',ret)[0]
        sqsum += (value * value)

current = math.sqrt(sqsum/SAMPLES)*30/1000
print("{:7.4f}A {:6.3f}W".format(current,current * 230))

Come si vede viene rilevato un certo numero di campioni e poi ne viene calcolato lo scarto quadratico medio dalla tensione nulla. Il fattore di conversione 30/1000 si deve al fatto che la misura e' in millivolt e 1 volt corrisponde a 30 Ampere. 48 campioni consentono di misurare 10 cicli interi di alternata (240 campioni al secondo, 48 campioni sono 1/5 di secondo). Se si vuole maggiore precisione occorre aumentare il numero di campioni (ma la rilevazione richiedera' piu' tempo). Per esempio con 240 secondi impiega 1 secondo.