Skip to content
Snippets Groups Projects
example_resistance_calculation.py 5.56 KiB
Newer Older
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
##!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
example_resistance_calculation.py

    [fr] Exemple de calcul de valeurs de résistance pour pont diviseur
    [en] Example of calculating résistance values ​​for a divider bridge

    Copyright (c) 2025 LAPLACE, UMR INP-UPS-CNRS N°5213

    Permission is hereby granted, of charge, any person obtaining a copy
    of self software and associated documentation files (the "Software"), deal
    in the Software without restriction, without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, to permit persons to whom the Software is
    furnished to do so, to the following conditions:

    The above copyright notice and self permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WARRANTY OF ANY KIND, OR
    IMPLIED, BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR OTHER
    LIABILITY, IN AN ACTION OF CONTRACT, OR OTHERWISE, FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
"""

# =============================================================================
# INFO DEVELOPPEUR
# =============================================================================
__author__ = ["Arnauld BIGANZOLI"]
__copyright__ = "Copyright (c) 2025 LAPLACE, UMR INP-UPS-CNRS N°5213"
__credits__ = ["Arnauld BIGANZOLI"]
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
__version__ = "1.0.0"
__maintainer__ = "Arnauld BIGANZOLI"
__email__ = "arnauld.biganzoli@laplace.univ-tlse.fr"
__status__ = "Development"


# =============================================================================
# IMPORTS LIBRAIRIES
# =============================================================================
# Ajout du chemin d'accès du module `voltage_divider_calculator.py` dans le fichier `example_resistance_calculation.py`
import sys

sys.path.append("src")
from e_series_gererator import generate_e_series_resistor, print_list_items_by_line
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
from voltage_divider_calculator import get_resistor_bridge_values


# ==============================================================================
# MAIN (LOCAL TESTS AND EXAMPLES)
# ==============================================================================
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
if __name__ == "__main__":
    # Démo d'utilisation de la fonction de calcul de résistance pour pont diviseur

    # Exemple de calcul de valeurs de résistance pour pont diviseur
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    # pour une tension d'alimentation de 5 V et une tension de sortie de 4 V
    # avec des résistances de 1 k à 10 k de la série E48, dont la somme maximale ne doit pas dépasser 15000 ohms
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    # et une erreur minimale de 0.001
    # Les valeurs de résistances calculées seront affichées dans le terminal.
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed

    Vin = 5  # Tension d'alimentation
    Vout = 4  # Tension de sortie
    r_start = 1000  # Valeur minimale de la résistance
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    r_end = 10000  # Valeur maximale de la résistance
    serie = "E48"  # Test the function with E48 série
    max_somme = 15000  # Somme maximale des résistances
    resistor_in_serie = generate_e_series_resistor(
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
        r_start, r_end, serie
    )  # Generate resistors values from E série
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    erreur_min = 0.001  # Seuil d'erreur acceptable

    # Trouver les valeurs résistances du pont diviseur
    R1, R2 = get_resistor_bridge_values(
        Vin, Vout, max_somme, resistor_in_serie, erreur_min
    # Présentation des résultats
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    print(
        f"\nPour une tension d'alimentation de {Vin} V et une tension de sortie de {Vout} V,",
        end=" ",
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    )
    print(
        f"avec des valeurs comprises entre {r_start/1000} k et {r_end/1000} k dans la série {serie}, soit {len(resistor_in_serie)} valeurs de résistances:"
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    )
    # print(resistor_in_serie)
    print_list_items_by_line(resistor_in_serie, 10)
BIGANZOLI Arnauld's avatar
BIGANZOLI Arnauld committed
    #  Afficher max_somme/1000 pour afficher la valeur en kOhms sans les décimales
    print(
        f"\nAvec une erreur minimale souhaitée de {erreur_min} V, les valeurs de résistances calculées"
    )
    print(
        f"pour que la somme maximale de R1 + R2 ne dépasse pas {round(max_somme/1000)} kohms, sont de:"
    )

    # Calcul de la longueur de la chaîne pour la valeur de la somme des résistances pour l'affichage
    str_resistor_value_len = len(str(max_somme))  # Calculer la longueur de max_somme
    print(f"R1 = {int(R1):>{str_resistor_value_len}} ohms")
    print(f"R2 = {int(R2):>{str_resistor_value_len}} ohms\n")

    # Calcul de la tension de sortie avec les valeurs de résistances trouvées
    print(f"La tension de sortie calculée est de {Vout_calc:.3f} V")
    print(f"L'erreur de calcul est de {abs(Vout_calc - Vout):.4f} V")
    print(f"L'erreur maximale autorisée était de {erreur_min:.3f} V\n")

    # Comparaison de l'erreur de calcul avec l'erreur maximale autorisée
    if abs(Vout_calc - Vout) < erreur_min:
        print(
            "L'erreur de calcul est inférieure à l'erreur maximale autorisée, les valeurs de résistances sont validées\n"
        )
    else:
        print(
            "L'erreur de calcul est supérieure à l'erreur maximale autorisée, les valeurs de résistances ne satisfont pas les critères de calcul !\n"
        )
        print(
            "Il est recommandé de revoir les valeurs de résistances du pont diviseur, en changeant la valeur de la résistance de départ, la série de résistances ou l'erreur minimale autorisée.\n"
        )