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

Gesamter Quelltext

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

[collapse]

Download Projektdatei

Wenn Sie nur an der Exe-Datei interessiert sind, befindet sich diese in dem Unterordner \bin\Debug.