Weerstanden zijn passieve elektrische componenten met twee aansluitingen. Ze bemoeilijken de doorgang van elektrische stroom. In elektronische schakelingen worden weerstanden gebruikt om de stroomsterkte te verminderen, signaalniveaus aan te passen, spanningen te verdelen en transmissielijnen te beëindigen.
Om de sterkte van een weerstand aan te duiden, wordt gebruikgemaakt van de elektronische kleurcode (huidige internationale standaard: IEC 60062:20161). Hierbij worden drie, vier of vijf gekleurde banden op de weerstand aangebracht. Bij reparaties van gemonteerde weerstanden bleek het immers niet altijd eenvoudig om de gedrukte tekst te lezen op deze kleine componenten. Zeker als de bedrukte kant niet goed zichtbaar was omdat ze tegen het chassis of een andere component lag. Gekleurde banden hebben echter ook hun nadelen, zeker voor personen met kleurenblindheid. Oververhitting of vervuiling van een weerstand kunnen er ook voor zorgen dat bruin moeilijk te onderscheiden valt van rood of oranje.
Om onderscheid te maken tussen links en rechts wordt er een breder gat gelaten tussen de voorlaatste (C/D) en de laatste (E) band. De sterkte van de weerstand wordt als volgt gecodeerd door de gekleurde banden:
band A is het eerste significante cijfer van de sterkte
band B is het tweede significante cijfer van de sterkte
band C is het derde significante cijfer van de sterkte (optionele band; enkel bij 5 banden)
band D is de decimale vermenigvuldigingsfactor
band E geeft procentueel de nauwkeurigheid van de sterkte aan (optionele band; niet bij 3 banden)
Daarbij schrijft de IEC 60062:20162 standaard de volgende kleurcodes voor:
kleur | significant cijfer | vermenigvuldigingsfactor | nauwkeurigheid (%) |
---|---|---|---|
(geen) | - | - | 20 |
PINK | - | $$\times 10^{-3}$$ | - |
SILVER | - | $$\times 10^{-2}$$ | 10 |
GOLD | - | $$\times 10^{-1}$$ | 5 |
BLACK | 0 | $$\times 10^{0}$$ | - |
BROWN | 1 | $$\times 10^{1}$$ | 1 |
RED | 2 | $$\times 10^{2}$$ | 2 |
ORANGE | 3 | $$\times 10^{3}$$ | - |
YELLOW | 4 | $$\times 10^{4}$$ | - |
GREEN | 5 | $$\times 10^{5}$$ | 0.5 |
BLUE | 6 | $$\times 10^{6}$$ | 0.25 |
VIOLET | 7 | $$\times 10^{7}$$ | 0.1 |
GRAY | 8 | $$\times 10^{8}$$ | 0.05 |
WHITE | 9 | $$\times 10^{9}$$ | - |
Stel dat we bijvoorbeeld een weerstand hebben met vier gekleurde banden: geel-violet-rood-goud (van links naar rechts; YELLOW-VIOLET-RED-GOLD). Het eerste cijfer van de sterkte is een 4 (geel in bovenstaande tabel), het tweede cijfer een 7 (violet), gevolgd door 2 nullen (rood = $$\times 10^{2}$$): 4700 ohm. Goud geeft aan dat de nauwkeurigheid ±5% is, waardoor de werkelijke sterkte van de weerstand ergens tussen de 4465 en 4935 ohm ligt.
De specificatie van een elektronische kleurcode wordt vastgelegd in een CSV-bestand (comma-separated values) waarvan elke record de eigenschappen van één kleur uit de standaard omschrijft. Elke record (regel) van het bestand bevat vier informatievelden die van elkaar gescheiden worden door komma's: i) naam van de kleur, ii) waarde van de kleur als significant cijfer van de sterkte, iii) waarde van de kleur als vermenigvuldigingsfactor van de sterkte (waarde $$m$$ betekent vermenigvuldigen met $$10^m$$) en iv) nauwkeurigheid van de weerstand (percentage).
Een informatieveld met een koppelteken (-) geeft aan dat de specificatie niet toelaat om die kleur (record) te gebruiken voor die eigenschap (veld). De nauwkeurigheid van de weerstand bij het ontbreken van band E (3 gekleurde banden) wordt in de specificatie voorgesteld als de nauwkeurigheid van de fictieve kleur NONE. De kleur NONE heeft per definitie koppeltekens staan voor eigenschappen ii) en iii). Dit is het CSV-bestand dat de huidige internationale standaard (IEC 60062:20163) voor de elektronische kleurcode specificeert:
color,significant digit,multiplicator,tolerance (%) NONE,-,-,20 PINK,-,-3,- SILVER,-,-2,10 GOLD,-,-1,5 BLACK,0,0,- BROWN,1,1,1 RED,2,2,2 ORANGE,3,3,- YELLOW,4,4,- GREEN,5,5,0.5 BLUE,6,6,0.25 VIOLET,7,7,0.1 GRAY,8,8,0.05 WHITE,9,9,-
Gevraagd wordt:
Schrijf een functie lees_specificatie waaraan de locatie (str) van een CSV-bestand met de specificatie van een elektronische kleurcode moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven waarvan de sleutels gevormd worden door de namen (str) van de kleuren uit de gegeven specificatie. Hierbij moeten de namen van de kleuren altijd omgezet worden naar kleine letters. Elke kleur moet door de dictionary afgebeeld worden op een nieuwe dictionary (dict), die de waarde van de kleur (int of float) voor de verschillende eigenschappen toekent aan de volgende sleutels (str):
cijfer: de waarde van de kleur als significant cijfer (int)
factor: de waarde van de kleur als vermenigvuldigingsfactor (int)
nauwkeurigheid: de waarde van de kleur als nauwkeurigheid (float)
Enkel de sleutel/waarde-paren waarvoor de specificatie een waarde vastlegt voor de eigenschap van de kleur mogen in de dictionary voorkomen. Er mogen met andere woorden geen sleutel/waarde-paren voorkomen die corresponderen met informatievelden (eigenschappen) die een koppelteken (-) bevatten in het CSV-bestand.
Schrijf een functie opzoeken waaraan drie argumenten moeten doorgegeven worden: i) een kleur (str), ii) een eigenschap (str; cijfer, factor of nauwkeurigheid) en iii) de specificatie van een elektronische kleurcode (dict) zoals die door de functie lees_specificatie wordt teruggegeven. Als de gegeven specificatie geen waarde vastlegt voor de gegeven eigenschap van de gegeven kleur, dan moet een AssertionError opgeworpen worden met de boodschap ongeldige code. Anders moet de functie de waarde (int of float) van de gegeven eigenschap voor de gegeven kleur teruggeven zoals vastgelegd in de gegeven specificatie van de elektronische kleurcode.
Schrijf een functie weerstand waaraan twee argumenten moeten doorgegeven worden: i) een patroon van gekleurde banden (str) en ii) de specificatie van een elektronische kleurcode (dict) zoals die door de functie lees_specificatie wordt teruggegeven. Het patroon van gekleurde banden moet omschreven worden als een string (str) die een geldige reeks kleuren bevat volgens de gegeven specificatie, telkens van elkaar gescheiden door spaties. Als dit niet het geval is, dan moet een AssertionError opgeworpen worden met de boodschap ongeldige code. Anders moet de functie een string (str) teruggeven die de sterkte en de nauwkeurigheid omschrijft van een weerstand die gelabeld is met het gegeven patroon van gekleurde banden. Hiervoor moet het volgende formaat gebruikt worden:
sterkteΩ (±nauwkeurigheid%)
waarbij de sterkte wordt uitgedrukt als een kommagetal met drie decimale cijfers en de nauwkeurigheid als een kommagetal met twee decimale cijfers. Gebruik afronding bij de weergave van kommagetallen met een vast aantal decimale cijfers.
De functies opzoeken en weerstand mogen geen onderscheid maken tussen hoofdletters en kleine letters in de namen van de kleuren en de eigenschappen die eraan doorgeven worden.
In onderstaande voorbeeldsessie gaan we ervan uit dat het CSV-bestand IEC60062_2016.csv4 zich in de huidige directory bevindt.
>>> specificatie = lees_specificatie('IEC60062_2016.csv5')
>>> specificatie
{'none': {'nauwkeurigheid': 20.0}, 'pink': {'factor': -3}, 'silver': {'factor': -2, 'nauwkeurigheid': 10.0}, 'gold': {'factor': -1, 'nauwkeurigheid': 5.0}, 'black': {'cijfer': 0, 'factor': 0}, 'brown': {'cijfer': 1, 'factor': 1, 'nauwkeurigheid': 1.0}, 'red': {'cijfer': 2, 'factor': 2, 'nauwkeurigheid': 2.0}, 'orange': {'cijfer': 3, 'factor': 3}, 'yellow': {'cijfer': 4, 'factor': 4}, 'green': {'cijfer': 5, 'factor': 5, 'nauwkeurigheid': 0.5}, 'blue': {'cijfer': 6, 'factor': 6, 'nauwkeurigheid': 0.25}, 'violet': {'cijfer': 7, 'factor': 7, 'nauwkeurigheid': 0.1}, 'gray': {'cijfer': 8, 'factor': 8, 'nauwkeurigheid': 0.05}, 'white': {'cijfer': 9, 'factor': 9}}
>>> opzoeken('BLUE', 'cijfer', specificatie)
6
>>> opzoeken('black', 'FACTOR', specificatie)
0
>>> opzoeken('PINK', 'NAUWKEURIGHEID', specificatie)
Traceback (most recent call last):
AssertionError: ongeldige code
>>> opzoeken('none', 'nauwkeurigheid', specificatie)
20.0
>>> weerstand('yellow violet red gold', specificatie)
'4700.000Ω (±5.00%)'
>>> weerstand('orange orange brown', specificatie)
'330.000Ω (±20.00%)'
>>> weerstand('GRAY RED ORANGE GOLD', specificatie)
'82000.000Ω (±5.00%)'
>>> weerstand('green red brown black brown', specificatie)
'521.000Ω (±1.00%)'
>>> weerstand('green gold brown', specificatie)
Traceback (most recent call last):
AssertionError: ongeldige code
Merk op dat het eerste voorbeeld voor de functie weerstand overeenkomt met het voorbeeld dat uitgewerkt wordt onder de tabel in de inleiding van deze opgave. De drie andere voorbeelden van de functie weerstand hebben we gehaald uit de figuur in de inleiding van deze opgave. Hieronder leggen we in detail uit hoe de sterkte en de nauwkeurigheid kan bepaald worden van weerstanden die gelabeld zijn met het patroon van gekleurde banden uit deze drie voorbeelden.