Newer
Older
##!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
example_resistance_calculation.py

BIGANZOLI Arnauld
committed
[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.
"""
# =============================================================================
# INFO DEVELOPPEUR
# =============================================================================
__author__ = ["Arnauld BIGANZOLI"]
__copyright__ = "Copyright (c) 2025 LAPLACE, UMR INP-UPS-CNRS N°5213"
__credits__ = ["Arnauld BIGANZOLI"]

BIGANZOLI Arnauld
committed
__license__ = "GNU GPLv3"
__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
from voltage_divider_calculator import get_resistor_bridge_values
# ==============================================================================
# MAIN (LOCAL TESTS AND EXAMPLES)
# ==============================================================================
if __name__ == "__main__":
# Démo d'utilisation de la fonction de calcul de résistance pour pont diviseur

BIGANZOLI Arnauld
committed
# Exemple de calcul de valeurs de résistance pour pont diviseur
# pour une tension d'alimentation de 5 V et une tension de sortie de 4 V

BIGANZOLI Arnauld
committed
# 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
committed
# Les valeurs de résistances calculées seront affichées dans le terminal.

BIGANZOLI Arnauld
committed
Vin = 5 # Tension d'alimentation
Vout = 4 # Tension de sortie
r_start = 1000 # Valeur minimale de la résistance

BIGANZOLI Arnauld
committed
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
committed
) # Generate resistors values from E série
erreur_min = 0.001 # Seuil d'erreur acceptable
# Trouver les valeurs résistances du pont diviseur
R1, R2 = get_resistor_bridge_values(

BIGANZOLI Arnauld
committed
Vin, Vout, max_somme, resistor_in_serie, erreur_min
# Présentation des résultats

BIGANZOLI Arnauld
committed
f"\nPour une tension d'alimentation de {Vin} V et une tension de sortie de {Vout} V,",
end=" ",
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:"
# print(resistor_in_serie)
print_list_items_by_line(resistor_in_serie, 10)

BIGANZOLI Arnauld
committed
# Afficher max_somme/1000 pour afficher la valeur en kOhms sans les décimales

BIGANZOLI Arnauld
committed
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

BIGANZOLI Arnauld
committed
Vout_calc = Vin * R2 / (R1 + R2)
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"
)