Fotovoltaico: Python per Diametro, Sezione, AWG dei Cavi

Fotovoltaico: Python per Diametro, Sezione, AWG dei Cavi

1920 1280 Nicola Montemurro

Un esercizio di stile...un altro.

Come già descritto nell’articolo Fotovoltaico: Approccio Python per Serie, Parallelo e Regolatori di Carica, un po’ per deformazione professionale e un po’ per il costante rifiuto dei fogli di calcolo, preferisco fare lo sforzo iniziale nel codificare uno strumento ad HOC per poi cullarmi nella pigrizia del suo utilizzo.

Concetti di Base

Il corretto dimensionamento dei cavi è parte importante nella progettazione di un impianto fotovoltaico, per garantire il massimo rendimento energetico, evitando eccessive perdite di tensione e per la  sicurezza dello stesso. In questo articolo, esploreremo come uno script Python può aiutarci a calcolare la sezione commerciale in mm², la sezione secondo il metodo AWG  (American Wire Gauge) e il diametro del cavo, in base alla tensione e corrente che lo attraverseranno, la sua lunghezza e la caduta di tensione ammissibile.

Codice Python

Il codice, di seguito proposto, semplifica:

Il calcolo della sezione in mm²: Si usa la formula che lega la corrente, la lunghezza e la caduta di tensione ammissibile per determinare la sezione ideale del cavo.
La conversione in AWG: Viene eseguita una conversione della sezione calcolata in mm² al sistema AWG (American Wire Gauge), che è uno standard ampiamente utilizzato per i cavi elettrici.
il calcolo del diametro: Una volta determinata la sezione, si può calcolare anche il diametro del cavo, utile per la scelta pratica dei cavi.

import json

# Funzione per calcolare la sezione minima ammissibile
def calcola_sezione_minima(tensione, corrente, lunghezza, caduta_tensione_percentuale):
    # Carica i dati dal file JSON
    with open('cavi.json', 'r') as file:
        cavi = json.load(file)['cavi']

    # Calcola la caduta di tensione massima consentita in volt
    caduta_tensione_massima = (caduta_tensione_percentuale / 100) * tensione

    # Trova la sezione minima ammissibile
    sezione_minima = None
    dettagli_sezione = None

    for cavo in cavi:
        # Calcola la resistenza del cavo
        resistivita = cavo['resistivita_ohm_m']
        resistenza = resistivita * lunghezza  # Resistenza per la lunghezza specificata

        # Calcola la caduta di tensione usando la formula ΔV = I * R
        caduta_tensione = corrente * resistenza

        # Verifica se la caduta di tensione è accettabile
        if caduta_tensione <= caduta_tensione_massima:
            sezione_minima = cavo['sezione_mm2']
            dettagli_sezione = {
                "AWG": cavo['awg'],
                "Diametro (mm)": cavo['diametro_mm']
            }
            break

    if sezione_minima is not None:
        return sezione_minima, dettagli_sezione
    else:
        return "Nessuna sezione adeguata trovata."

# Input dell'utente
def main():
    try:
        tensione = float(input("Inserisci la tensione (V): "))
        corrente = float(input("Inserisci la corrente (A): "))
        lunghezza = float(input("Inserisci la lunghezza del cavo (m): "))
        caduta_tensione_percentuale = float(input("Inserisci la percentuale di caduta di tensione consentita (%): "))

        # Calcola la sezione minima ammissibile
        sezione_minima, dettagli_sezione = calcola_sezione_minima(tensione, corrente, lunghezza, caduta_tensione_percentuale)

        # Stampa il risultato
        print(f"La sezione minima ammissibile del cavo (CC) è: {sezione_minima} mm²")
        if isinstance(dettagli_sezione, dict):
            print(f"Dettagli: AWG {dettagli_sezione['AWG']}, Diametro: {dettagli_sezione['Diametro (mm)']} mm")

    except ValueError as e:
        print(f"Errore: {e}. Assicurati di inserire valori numerici validi.")
    except FileNotFoundError:
        print("Errore: il file 'cavi.json' non è stato trovato.")
    except json.JSONDecodeError:
        print("Errore: il file 'cavi.json' non è formattato correttamente.")

if __name__ == "__main__":
    main()

File cavi.json

{
    "cavi": [
        {
            "sezione_mm2": 0.5,
            "resistivita_ohm_m": 0.0336,
            "awg": 20,
            "diametro_mm": 0.81
        },
        {
            "sezione_mm2": 0.75,
            "resistivita_ohm_m": 0.0224,
            "awg": 18,
            "diametro_mm": 0.82
        },
        {
            "sezione_mm2": 1,
            "resistivita_ohm_m": 0.0168,
            "awg": 17,
            "diametro_mm": 1.0
        },
        {
            "sezione_mm2": 1.5,
            "resistivita_ohm_m": 0.0112,
            "awg": 16,
            "diametro_mm": 1.15
        },
        {
            "sezione_mm2": 2.5,
            "resistivita_ohm_m": 0.00672,
            "awg": 14,
            "diametro_mm": 1.63
        },
        {
            "sezione_mm2": 4,
            "resistivita_ohm_m": 0.004032,
            "awg": 12,
            "diametro_mm": 2.05
        },
        {
            "sezione_mm2": 6,
            "resistivita_ohm_m": 0.002688,
            "awg": 10,
            "diametro_mm": 2.59
        },
        {
            "sezione_mm2": 10,
            "resistivita_ohm_m": 0.001680,
            "awg": 8,
            "diametro_mm": 3.31
        },
        {
            "sezione_mm2": 16,
            "resistivita_ohm_m": 0.001050,
            "awg": 6,
            "diametro_mm": 4.11
        },
        {
            "sezione_mm2": 25,
            "resistivita_ohm_m": 0.000672,
            "awg": 4,
            "diametro_mm": 5.19
        },
        {
            "sezione_mm2": 35,
            "resistivita_ohm_m": 0.000486,
            "awg": 2,
            "diametro_mm": 6.25
        },
        {
            "sezione_mm2": 50,
            "resistivita_ohm_m": 0.000336,
            "awg": 1,
            "diametro_mm": 7.35
        },
        {
            "sezione_mm2": 70,
            "resistivita_ohm_m": 0.000242,
            "awg": 1,
            "diametro_mm": 8.67
        },
        {
            "sezione_mm2": 95,
            "resistivita_ohm_m": 0.000176,
            "awg": 2,
            "diametro_mm": 10.24
        }
    ]
}

Esecuzione dello script

    • Da terminale: Spostati nella cartella dove si trova il tuo file Python e utilizza il comando:
      • python nome_del_file.py
    • Da un IDE: Apri il file nel tuo ambiente di sviluppo preferito e avvia l’esecuzione del codice.

    Vi sarà richiesto di inserire:

    Tensione (V): La tensione che attraverserà il cavo, che dipende dalla potenza generata dai pannelli e da come saranno uniti tramite serie e parallelo.
    Corrente (I): La corrente che attraversa il cavo, che dipende dalla potenza generata dai pannelli fotovoltaici e da come saranno uniti tramite serie e parallelo. I valori di tensione e corrente.
    Entrambi questi valori li potete determinare utilizzando lo strumento descritto in Fotovoltaico: Approccio Python per Serie, Parallelo e Regolatori di Carica
    Lunghezza del cavo (L): La distanza tra i componenti principali dell’impianto (pannelli, regolatore di tensione), considerando che la lunghezza deve essere la tratta di andata e ritorno che l’energia compie per ciascun polo quindi doppia rispetto alla distanza reale esistente tra pannelli e regolatore di carica;
    Caduta di tensione (ΔV): La perdita di tensione lungo il cavo a causa della sua resistenza. Una caduta di tensione eccessiva può compromettere il funzionamento dell’impianto, perciò di solito non deve superare il 2-3% del valore nominale.

    E:\Progetti\software\scripts\python\calcolo sezione cavo>python calcolocavo.py
    
    Inserisci la tensione (V): 250
    Inserisci la corrente (A): 35
    Inserisci la lunghezza del cavo (m): 60
    Inserisci la percentuale di caduta di tensione consentita (%): 2
    

    Risultato:

    La sezione minima ammissibile del cavo (CC) è: 10 mm²
    Dettagli: AWG 8, Diametro: 3.31 mm
    

Consapevolezza sull'uso

Il codice software pubblicato è fornito esclusivamente a scopo didattico e viene messo a disposizione “così com’è”. L’uso del software avviene a rischio dell’utente. Non si garantisce che il codice sia esente da errori o difetti, né si forniscono garanzie riguardo alla sua idoneità per scopi specifici.

L’autore non è responsabile per eventuali danni, perdite o conseguenze derivanti dall’uso o dall’impossibilità di utilizzo del software.

Data: La data di pubblicazione del presente articolo.
Pubblicato su: blog.nicolamontemurro.com

Considerazioni finali

Questo codice Python offre un modo interessante per esplorare il dimensionamento dei cavi e trovare le soluzioni più adatte, ma è da intendersi ad uso didattico; Non può in alcun modo, sostituire il computo effettuato da un professionista.

    Preferenze Privacy

    Quando visiti il nostro sito web, possono essere memorizzate alcune informazioni, di servizi specifici, tramite il tuo browser, di solito sotto forma di cookie. Qui puoi modificare le tue preferenze sulla privacy. Il blocco di alcuni cookie può influire sulla tua esperienza sul nostro sito Web e sui servizi che offriamo.

    Click to enable/disable Google Analytics tracking code.
    Click to enable/disable Google Fonts.
    Click to enable/disable Google Maps.
    Click to enable/disable video embeds.
    Il nostro sito web utilizza cookie, principalmente di terze parti. Personalizza le preferenze sulla privacy e/o acconsenti all'utilizzo dei cookie.