Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
##!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ==============================================================================
# MODULE INFO
# ==============================================================================
"""
Module: simple_example_resistance_calculation
Description: Simple example of resistance calculation
[fr] Exemple simple de calcul de valeurs de resistance pour pont diviseur
[en] Simple example of calculating resistance 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.
"""
# =============================================================================
# IMPORTS LIBRAIRIES
# =============================================================================
# Ajout du chemin d'accès du module `voltage_divider_calculator.py` dans le fichier `example_resistance_calculation.py`
import os

Arnauld
committed
import sys

Arnauld
committed
# Ajoute un chemin au sys.path, pour permettre à Python de trouver et d'importer des modules
# situés dans des répertoires parents :
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
from src.calculator.voltage_divider import get_resistor_bridge_values
from src.calculator.e_series_gererator import generate_e_series_resistor
# =============================================================================
# INFO DEVELOPPEUR
# =============================================================================
__author__ = ["Arnauld BIGANZOLI"]
__copyright__ = "Copyright (c) 2025 LAPLACE, UMR INP-UPS-CNRS N°5213"
__credits__ = ["Arnauld BIGANZOLI"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Arnauld BIGANZOLI"
__email__ = "arnauld.biganzoli@laplace.univ-tlse.fr"
__status__ = "Development"
# ==============================================================================
# MAIN (LOCAL TESTS AND EXAMPLES)
# ==============================================================================
if __name__ == "__main__":
# Démo d'utilisation de la fonction de calcul de résistance pour pont diviseur
# Exemple de calcul de valeurs de resistance pour pont diviseur
# pour une tension d'alimentation de 5 V et une tension de sortie de 4 V
# avec des resistances de 4 k à 10k de la serie E6, dont la somme maximale ne doit pas dépasser 15000 ohms
# et une erreur minimale de 0.6 V qui permettant de valider les valeurs de resistances calculées.
# Changer la valeur de l'erreur minimale pour voir l'impact sur les valeurs de resistances calculées.
# Les valeurs de resistances calculées seront affichées dans le terminal.
#
# Voici la sortie attendue de cette exemple simple :
# -------------------------------------------------
# Pour une tension d'alimentation de 5 V et une tension de sortie de 4 V,
# si l'on prend des valeurs de résistances entre 4.0 k à 10.0 k dans la série E6, soit [4700, 6800, 10000] en ohms,
# et que l'on souhaite que la somme maximale de R1 + R2 ne dépasse pas 15 kohms, avec une erreur minimale de 0.6 V,
# alors les valeurs de résistances retournées sont :
#
# R1 = 4700 ohms
# R2 = 10000 ohms
#
# La tension de sortie calculée est de 3.401 V
# L'erreur de calcul est de 0.5986 V
# L'erreur maximale autorisée était de 0.600 V
#
# L'erreur de calcul est inférieure à l'erreur maximale autorisée, les valeurs de résistances sont validées

BIGANZOLI Arnauld
committed
Vin = 5 # Tension d'alimentation
Vout = 4 # Tension de sortie
r_start = 4000 # Valeur minimale de la résistance
r_end = 10000 # Valeur maximale de la résistance
serie = "E6" # Test the function with E6 serie
max_somme = 15000 # Somme maximale des resistances
resistor_in_serie = generate_e_series_resistor(
r_start, r_end, serie
) # Generate resistors values from E serie
# erreur_min = 0.5 # Seuil d'erreur acceptable non atteint
erreur_min = 0.6 # Seuil d'erreur acceptable atteint
# 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
)
# Affichage des valeurs de résistances trouvées
print(
f"\nPour une tension d'alimentation de {
Vin} V et une tension de sortie de {Vout} V,"
f"si l'on prend des valeurs de résistances entre {
r_start/1000} k à {r_end/1000} k dans la série {serie}, soit {resistor_in_serie} en ohms,"
)
# Afficher max_somme/1000 pour afficher la valeur en kOhms sans la partie décimale
print(
f"et que l'on souhaite que la somme maximale de R1 + R2 ne dépasse pas "
+ f"{round(max_somme/1000)} kohms, avec une erreur minimale de {erreur_min} V,"
)
# print("alors les valeurs de résistances retournées sont:")
# print(f"R1 = {int(R1)} ohms")
# print(f"R2 = {int(R2)} ohms\n")
# Calcul de la longeur de la chaîne pour la valeur de la somme des résistances pour l'affichage
# Calculer la longueur de max_somme
str_resistor_value_len = len(str(max_somme))
print("alors les valeurs de résistances retournées sont :\n")
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"
)