diff --git a/.dokumentation/Newsletter/CaravanPi-Newsletter-20240323.pdf b/.dokumentation/Newsletter/CaravanPi-Newsletter-20240323.pdf new file mode 100644 index 0000000..97e8bb4 Binary files /dev/null and b/.dokumentation/Newsletter/CaravanPi-Newsletter-20240323.pdf differ diff --git a/analogSignals/spannungsteilerErrechnen.py b/analogSignals/spannungsteilerErrechnen.py index 4c719ed..8b5f226 100644 --- a/analogSignals/spannungsteilerErrechnen.py +++ b/analogSignals/spannungsteilerErrechnen.py @@ -5,43 +5,47 @@ # # ----------------------------------------------------------------- -def finde_spannungsteiler(widerstaende, Vin, Vout_ziel): - beste_differenz = Vin # Startwert für die kleinste gefundene Differenz, unrealistisch hoch - beste_kombination = None +def konvertiere_eingabe(eingabe): + return float(eingabe.replace(',', '.')) + +def finde_top_spannungsteiler(widerstaende, Vin, Vout_ziel, top_n=5): + kombinationen = [] for R1 in widerstaende: for R2 in widerstaende: Vout = Vin * (R2 / (R1 + R2)) - differenz = Vout_ziel - Vout - if 0 < differenz < beste_differenz: # Vout soll knapp unter Vout_ziel sein - beste_differenz = differenz - beste_kombination = (R1, R2, Vout) + differenz = abs(Vout_ziel - Vout) # Absolutwert der Differenz, um Nähe zur Zielspannung zu messen + if Vout <= Vout_ziel: # Vout darf nicht über Vout_ziel sein + kombinationen.append((R1, R2, Vout, differenz)) + + # Sortiere die Kombinationen basierend auf der Nähe zu Vout_ziel und wähle die top_n Kombinationen + kombinationen = sorted(kombinationen, key=lambda x: x[3])[:top_n] + + beste_kombinationen = [] + for R1, R2, Vout, _ in kombinationen: + I = Vin / (R1 + R2) # Stromstärke in A + P_R1 = (I ** 2) * R1 # Leistung an R1 in W + P_R2 = (I ** 2) * R2 # Leistung an R2 in W + beste_kombinationen.append((R1, R2, Vout, I, P_R1, P_R2)) - return beste_kombination + return beste_kombinationen # Vorhandene Widerstände in Ohm widerstaende = [10, 20, 47, 82, 100, 150, 220, 470, 560, 1000, 2200, 4700, 10000, 22000, 47000, 100000, 220000, 470000, 1000000] -# Benutzereingaben -Vin = float(input("Bitte geben Sie die Eingangsspannung (Vin) ein: ")) -Vout_ziel = float(input("Bitte geben Sie die gewünschte Ausgangsspannung (Vout) ein: ")) - -# Beste Kombination finden -beste_kombination = finde_spannungsteiler(widerstaende, Vin, Vout_ziel) - -if beste_kombination: - R1, R2, Vout = beste_kombination - print(f" ") - print(f" ") - print(f"an vorhandenen Widerständen wurden dabei angenommen: {widerstaende}") - print(f" ") - print(f" ") - - print(f"Beste Kombination: R1 = {R1} Ohm") - print(f" R2 = {R2} Ohm") - print(f" Eingangsspannung = {Vin:.2f} V") - print(f" erw. Ausgangsspannung = {Vout:.2f} V") - print(f" ") - print(f"Schema: {Vin:.2f} V ----- {R1} Ohm ----- {Vout:.2f} V ----- {R2} Ohm ----- GND") +# Benutzereingaben mit Konvertierung +Vin_eingabe = input("Bitte geben Sie die Eingangsspannung (Vin) ein: ") +Vin = konvertiere_eingabe(Vin_eingabe) + +Vout_ziel_eingabe = input("Bitte geben Sie die gewünschte Ausgangsspannung (Vout) ein: ") +Vout_ziel = konvertiere_eingabe(Vout_ziel_eingabe) + +# Beste Kombinationen finden +beste_kombinationen = finde_top_spannungsteiler(widerstaende, Vin, Vout_ziel, 5) + +if beste_kombinationen: + print("Top 5 Kombinationen (R1, R2, Vout, Stromstärke I):") + for R1, R2, Vout, I, P_R1, P_R2 in beste_kombinationen: + print(f"R1 = {R1} Ohm, R2 = {R2} Ohm, Vout = {Vout:.2f} V, I = {(I * 1000):.2f} mA, P_R1 = {(P_R1 * 1000):.4f} mW, P_R2 = {(P_R2 * 1000):.4f} mW") else: print("Keine geeignete Kombination gefunden.")