Widerstand – VB.Net Beispiel
Widerstände spielen in jeder Schaltung eine große Rolle. Sie ermöglichen es uns u.A. den Strom genau zu steuern und verhindern somit das Durchbrennen von LEDs und anderen Bauteilen. In diesem Programm dreht es sich speziell um die Widerstände der meist benutzen E24-Reihe. In dieser Reihe gibt es eine diskrete Anzahl von Widerstandswerten. Diese Werte kann man anhand der Farbringe ablesen. Die ersten beiden Ringe stehen für eine zweistellige Zahl, die noch mit einer Zahl 10x multipliziert wird. Der letzte Ring (meist golden) gibt die Genauigkeit dieser Angaben an (in diesem Fall 5%). Angenommen Sie suchen also einen 100-Ohm-Widerstand, müssen Sie nach den Farbringen braun (1), schwarz(0), braun (= 101 = 10) Ausschau halten. Die genauen Farbcodes finden Sie u.A. hier: http://www.elektronik-kompendium.de/sites/bau/1109051.htm
Dieses Programm beschäftigt sich mit den Widerstandsfarben. Sie können einen bestimmten Widerstandswert wählen und das Programm verändert den Farbcode des abgebildeten Widerstands. Zusätzlich können Sie auch noch eine Spannung einstellen. Das Programm rechnet dann den Strom und die Leistung am Widerstand aus. Wird der Strom zu groß, erscheint eine Warnmeldung: zu heiß. Erhöhen Sie die Spannung weiter, übersteigt der Strom einen Wert, der den Widerstand zerstört und eine weitere Warnmeldung erscheint. Sie können dann aber trotzdem noch den Widerstandswert auf einem unkritischen Wert erhöhen.
In dem Programm selber sind einige Elemente, die wir in anderen Programmen noch nicht hatten. Deswegen werde ich den Quelltext wieder Schritt für Schritt auseinander nehmen.
Quelltextauszug I: Arrays
In diesem Programm tauchen zum ersten Mal Arrays auf. Arrays könnte man als einen ganzen Haufen von Variablen bezeichnen, die sich bei gleichem Namen nur in einem Index unterscheiden. Wir sehen hier zum Beispiel das Array Werte. Die Zahl dahinter beschreibt, wie viele verschiedene Datenplätze freigehalten werden sollen. Später unter Form1_Load sieht man auch wie man einen Wert in das Array schreibt. Man benutzt einfach den Namen mit einem Index in den Klammern. Im Grunde funktioniert das wie bei einer gewöhnliche Variablen. Die Vorteile liegen jetzt aber unter anderem darin, dass man z.B. in einer For-Schleife den Index berechnen und dann den entsprechenden Wert aus dem Array lesen kann.
Das zweite Array mit dem Namen Farben zeigt, dass der Index schon bei Null beginnt und dass ein Array beliebige Datentypen (hier Color) beinhalten kann.
Dim Werte(24)
Dim Farben(9) As Color
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
‚Widerstandswerte der E27-Reihe
Werte(1) = 10
Werte(2) = 11
Farben(0) = Color.FromArgb(0, 0, 0)
Farben(1) = Color.Brown
End Sub
Quelltextauszug II: Logarithmischer Schieber
Logarithmische Funktionen zeichnen sich dadurch aus, dass die Werte nicht in Form einer geraden Linie, sondern in Form einer immer steiler werdenden Kurve steigen. Dies ist an dieser Stelle besonders geeignet, da sich die Widerstandswerte im Bereich von 10 Ohm bis zu 10 Mega Ohm befinden. Ein linearer Schieber würde also sehr lang oder extrem ungenau sein. Dieses Beispiel zeigt deswegen, wie ein linearer Schieber in logarithmische Werte umgerechnet werden kann:
‚Größenordnung bestimmen aus logarithmischen Schieber
vIn = sR.Value
Ziffern = vIn Mod 24
Expo = vIn \ 24
Gro = 0.1
For n = 1 To (Expo + 1)
Gro = Gro * 10
Next n
Quelltextauszug III: Berechnung der Werte
An dieser Stelle verweise ich nur kurz auf die Berechnung von Strom, Spannung und Leistung nach bekannten Gesetzen:
U = (hU.Value) / 10
lV.Text = „Spannung = “ + Str$(U) + “ V“
I = U / widerstand * 1000
I = Int(I * 1000) / 1000
lA.Text = „Strom = “ + Str$(Math.Round(I, 3)) + “ mA“
P = U * I
P = Int(P * 1000) / 1000
lP.Text = „Leistung = “ + Str$(Math.Round(P, 3)) + “ mW“
Quelltextauszug IV: Das Blinken der Warnungen
Sie werden bemerkt haben, dass die Warnungen auf dem Widerstand durch ihr Blinken besonders auf sich aufmerksam machen. Der Quelltext dahinter ist recht simpel. Ein Timer mit einem Intervall von 500 ms schaltet das entsprechende Label im Schadensfall abwechselnd auf sichtbar (Visible = True) und unsichtbar (Visible = False). Ob und wenn ja welches Label zu blinken beginnt entscheidet die Zustandsvariable vzuhei. Sie nimmt den Wert 1 an, wenn der Widestand zu heiß wird, den Wert 2, wenn der Widerstand kaputt ist und den Wert 3 im Normalfall.
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
‚Blinken von „Zu Heiß“
Select Case vzuhei
Case 1
lzh.Visible = Not lzh.Visible ‚True :
ldurch.Visible = False
Case 2
ldurch.Visible = Not ldurch.Visible ‚True :
lzh.Visible = False
Case Else
lzh.Visible = False
ldurch.Visible = False
End Select
Public Class frmWiderstand
‚Arrays mit Werten und Farben
Dim Werte(24)
Dim Farben(9) As Color
‚Zustand zu Heiß
Dim vzuhei As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
‚Widerstandswerte der E27-Reihe
Werte(1) = 10
Werte(2) = 11
Werte(3) = 12
Werte(4) = 13
Werte(5) = 15
Werte(6) = 16
Werte(7) = 18
Werte(8) = 20
Werte(9) = 22
Werte(10) = 24
Werte(11) = 27
Werte(12) = 30
Werte(13) = 33
Werte(14) = 36
Werte(15) = 39
Werte(16) = 43
Werte(17) = 47
Werte(18) = 51
Werte(19) = 56
Werte(20) = 62
Werte(21) = 68
Werte(22) = 75
Werte(23) = 82
Werte(24) = 91
‚Farbcodes der Farbringe
Farben(0) = Color.FromArgb(0, 0, 0)
Farben(1) = Color.Brown
Farben(2) = Color.Red
Farben(3) = Color.OrangeRed
Farben(4) = Color.Yellow
Farben(5) = Color.Green
Farben(6) = Color.Blue
Farben(7) = Color.Purple
Farben(8) = Color.Gray
Farben(9) = Color.White
berechnen()
End Sub
Private Sub hU_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs)Handles hU.Scroll
berechnen()
End Sub
Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.ScrollEventArgs) Handles sR.Scroll
berechnen()
End Sub
Private Sub berechnen()
‚Berechnungen
Dim Ziffern, Expo, Gro, vIn, R, ring1, ring2, ring3, widerstand
Dim U, I, P
‚Größenordnung bestimmen aus logarithmischen Schieber
vIn = sR.Value
Ziffern = vIn Mod 24
Expo = vIn \ 24
Gro = 0.1
For n = 1 To (Expo + 1)
Gro = Gro * 10
Next n
‚Widerstand bestimmen und beschriften
R = Werte(Ziffern + 1) * Gro
If R < 1000 Then lR.Text = Str$(R) + “ Ohm“
If R >= 1000 Then lR.Text = Str$(R / 1000) + “ KiloOhm“
If R >= 1000000 Then lR.Text = Str$(R / 1000000) + “ MegaOhm“
‚Texte
lR2.Text = Str$(Ziffern) + “ “ + Str$(Expo)
ring1 = (Werte(Ziffern + 1)) \ 10
lR1.Text = Str$(ring1)
‚Farbring eins festlegen
R1.BackColor = Farben(ring1)
ring2 = (Werte(Ziffern + 1)) Mod 10
lR2.Text = Str$(ring2)
R2.BackColor = Farben(ring2)
ring3 = Expo
lR3.Text = „“
If Expo > 0 Then
For n = 1 To Expo
lR3.Text = lR3.Text + „0“
Next n
End If
R3.BackColor = Farben(ring3)
lR4.Text = „±5%“
widerstand = R
U = (hU.Value) / 10
lV.Text = „Spannung = “ + Str$(U) + “ V“
I = U / widerstand * 1000
I = Int(I * 1000) / 1000
lA.Text = „Strom = “ + Str$(Math.Round(I, 3)) + “ mA“
P = U * I
P = Int(P * 1000) / 1000
lP.Text = „Leistung = “ + Str$(Math.Round(P, 3)) + “ mW“
If P < 250 Then hr1.FillColor = Color.FromArgb(255, 181, 115) : vzuhei = 0
If P > 250 Then hr1.FillColor = Color.FromArgb(255, 100, 100) : vzuhei = 1
If P > 1000 Then hr1.FillColor = Color.FromArgb(255, 40, 40) : vzuhei = 2
‚Farben angleichen
hr1.BorderColor = hr1.FillColor
hr2.FillColor = hr1.FillColor
hr2.BorderColor = hr1.FillColor
hr3.FillColor = hr1.FillColor
hr3.BorderColor = hr1.FillColor
R2.FillColor = R2.BackColor
R2.BorderColor = R2.BackColor
R1.FillColor = R1.BackColor
R1.BorderColor = R1.BackColor
R3.FillColor = R3.BackColor
R3.BorderColor = R3.BackColor
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
‚Blinken von „Zu Heiß“
Select Case vzuhei
Case 1
lzh.Visible = Not lzh.Visible ‚True :
ldurch.Visible = False
Case 2
ldurch.Visible = Not ldurch.Visible ‚True :
lzh.Visible = False
Case Else
lzh.Visible = False
ldurch.Visible = False
End Select
End Sub
End Class
Download Projektdatei
Wenn Sie nur an der Exe-Datei interessiert sind, befindet sich diese in dem Unterordner \bin\Debug.