Piiri pieni pyörii¶
Tehtäväsi on toteuttaa ohjelma, joka laskee vaihtovirtapiirin komponenttien jännitteet ja virrat ilmoittaen ne osoitinmuodossa. Kytkemisestä aiheutuvia muutoksia emme tässä laske, vaan tasoittuneen (steady-state) tilanteen. Ohjelman ei myöskään tarvitse ymmärtää dc-tasoa.
Ohjelman toiminta¶
Ensin käyttäjältä on kysyttävä piirin tehonlähteen jännite (merkitään kirjamella U) ja taajuus (f), sekä piirin komponentit ja niiden arvot. Komponenteille on laskettava impedanssit. Lopuksi yksittäisille komponenteille on laskettava jännite ja virta. Yksinkertaisuuden vuoksi riittää, että jännitelähteestä voi lähteä useita haaroja, ja haaroissa komponentit ovat sarjoissa. Haaroja käsitellään laskuissa erillisinä piireinä eli ne eivät vaikuta toisiinsa.
Tosin ohjelman hyödyllisyyden vuoksi on perusteltua vaatia, että haaran sisällä on voitava olla rinnankytkettyjä komponentteja. Tiedonkäsittelyn ja laskennan helpottamiseksi riittää, että haarassa oleva rinnankytkentä käsitellään yhtenä komponenttina. Rinnankytkennän syöttämisen jälkeen sitä saa käsitellä yhtenä impedanssina, joka on sarjassa muiden haaran komponenttien kanssa. Haarassa olevalle rinnankytkennälle ei siis tarvitse laskea komponenttikohtaisia virtoja ja jännitteitä, vaan ainoastaan rinnankytkennän yli oleva jännite ja läpi kulkeva virta.
Tarpeellista teoriaa¶
Piirin komponentit ja impedanssien laskeminen:
Vastuksista on kysyttävä resistanssit (R), kondensaattoreista kapasitanssit (C) ja keloista induktanssit (L). Suluissa olevilla kirjaimilla kuvataan yleisesti kyseistä suuretta.
Impedanssi kuvaa komponentin aiheuttamaa vastusta sähkövirralle vaihtovirtapiirissä. Impedanssia kuvataan yleisesti kirjaimella Z.
Vastuksien impedanssien laskeminen on helppoa, sillä vastuksen impedanssi on sama kuin sen resistanssi. Eli vastuksille
Vastuksista on kysyttävä resistanssit (R), kondensaattoreista kapasitanssit (C) ja keloista induktanssit (L). Suluissa olevilla kirjaimilla kuvataan yleisesti kyseistä suuretta.
Impedanssi kuvaa komponentin aiheuttamaa vastusta sähkövirralle vaihtovirtapiirissä. Impedanssia kuvataan yleisesti kirjaimella Z.
Vastuksien impedanssien laskeminen on helppoa, sillä vastuksen impedanssi on sama kuin sen resistanssi. Eli vastuksille
Z = R
Kondensaattorin impedanssi on
Z = {1 \over { (2 \cdot \pi \cdot f \cdot C \cdot 1j) }}
Kelan impedanssi on
Z = 2 \cdot \pi \cdot f \cdot L \cdot 1j
Edellisissä esiintyvä j on imaginääriyksikkö, jota käytetään laskiessa kompleksiluvuilla.
Seuraavassa pari tärkeintä laskusääntöä imaginääriyksiköihin liittyen:
1 / 1j = -1j
(1j) ** 2 = -1 (näin imaginääriyksikkö määritellään, koodissasi tuskin tarvit tätä)
Seuraavassa pari tärkeintä laskusääntöä imaginääriyksiköihin liittyen:
1 / 1j = -1j
(1j) ** 2 = -1 (näin imaginääriyksikkö määritellään, koodissasi tuskin tarvit tätä)
Osoitinmuoto¶
Osoitinmuodossa ilmoitetaan kompleksiluvun etäisyys origosta, ja suuntakulma. Etäisyys on reaali- ja kompleksiosien toisten potenssien summan neliöjuuri.
Osoitinmuodossa:
1j = 1 < 90°
-1 = 1 < 180°
1 + 1j = 1,41421 < 45°
Merkinnällä 1 < 90° tarkoitetaan, että luvun etäisyys origosta on 1, mutta se on 90 asteen kulmassa (vastapäivään) positiiviseen reaaliakseliin nähden. Merkittäessä kulmaa jännitteelle ja/tai virralle, asteilla merkitään sen siirtymä verrokkisignaaliin (jännitelähteeseen) nähden, tätä siirtymää sanotaan vaiheeksi. Jäljessä tulevan signaalin vaihe on negatiivinen. Etuajassa olevalla signaalilla vaihe on positiivinen.
Käytä yksittäisestä imaginääriyksiköstä merkintää 1j, jotta python ymmärtää sen oikein. Tutustu ehdottomasti cmath-moduuliin, sillä siitä löytyy funktioita, jotka helpottavat paljon työtäsi! Esimerkiksi muunnokselle reaali+imaginääri -muodosta osoitinmuotoon löytyy funktio, joka hoitaa kaiken, kuten etäisyyden ja suuntakulman laskemisen.
Osoitinmuodossa:
1j = 1 < 90°
-1 = 1 < 180°
1 + 1j = 1,41421 < 45°
Merkinnällä 1 < 90° tarkoitetaan, että luvun etäisyys origosta on 1, mutta se on 90 asteen kulmassa (vastapäivään) positiiviseen reaaliakseliin nähden. Merkittäessä kulmaa jännitteelle ja/tai virralle, asteilla merkitään sen siirtymä verrokkisignaaliin (jännitelähteeseen) nähden, tätä siirtymää sanotaan vaiheeksi. Jäljessä tulevan signaalin vaihe on negatiivinen. Etuajassa olevalla signaalilla vaihe on positiivinen.
Käytä yksittäisestä imaginääriyksiköstä merkintää 1j, jotta python ymmärtää sen oikein. Tutustu ehdottomasti cmath-moduuliin, sillä siitä löytyy funktioita, jotka helpottavat paljon työtäsi! Esimerkiksi muunnokselle reaali+imaginääri -muodosta osoitinmuotoon löytyy funktio, joka hoitaa kaiken, kuten etäisyyden ja suuntakulman laskemisen.
Sarjaan- ja rinnankytkennät¶
Sarjaankytkentä tarkoittaa, että komponentit ovat kytketty peräkkäin. Sarjaankytkennän kokonaisimpedanssi on sarjaan kytkettyjen komponenttien impedanssien summa.
Rinnankytkentä tarkoittaa, että komponentit on kytketty vierekkäin. Rinnankytkennän kokonaisimpedanssi on rinnankytkettyjen komponenttien impedanssien käänteisarvojen summan käänteisarvo.
Rinnankytkentä tarkoittaa, että komponentit on kytketty vierekkäin. Rinnankytkennän kokonaisimpedanssi on rinnankytkettyjen komponenttien impedanssien käänteisarvojen summan käänteisarvo.
Jännitteiden ja virtojen laskeminen¶
Rinnakkain olevilla komponenteilla ja haaroilla on sama jännite (jos ei olisi, se tasoittuisi heti, sillä jännite on kuin vedenpinnan korkeus).
Sarjassa (peräkkäin) olevilla komponenteilla on sama virta (koska virta ei pääse haarautumaan muuallekaan, vähän kuin vesi joessa).
Virtaa merkitään usein kirjaimella I.
Jännitteiden ja virtojen välillä on myös vaihtovirran tapauksessa yhteys, sillä U = Z * I, eli jännite on impedanssin ja virran tulo.
Sarjaankytkennässä jännite jakautuu impedanssien suhteessa (jos sarjassa olisi komponentit, joiden impedanssit olisivat 1 ja 2 ohmia, ja niiden yli kytkettäisiin 3 voltin jännite, 1 ohmin impedanssin yli olisi 1 voltin jännite, ja 2 ohmin yli olisi 2V jännite.)
Rinnankytkennässä virta jakautuu johtavuuden mukaan, eli impedanssien käänteisarvojen mukaan (jos rinnan olisi 1 ja 2 ohmin impedanssit ja rinnankytkennän läpi kulkisi 3A virta, kulkisi 1 ohmin läpi 2A virta, ja 2 ohmin läpi 1A virta.)
Sarjassa (peräkkäin) olevilla komponenteilla on sama virta (koska virta ei pääse haarautumaan muuallekaan, vähän kuin vesi joessa).
Virtaa merkitään usein kirjaimella I.
Jännitteiden ja virtojen välillä on myös vaihtovirran tapauksessa yhteys, sillä U = Z * I, eli jännite on impedanssin ja virran tulo.
Sarjaankytkennässä jännite jakautuu impedanssien suhteessa (jos sarjassa olisi komponentit, joiden impedanssit olisivat 1 ja 2 ohmia, ja niiden yli kytkettäisiin 3 voltin jännite, 1 ohmin impedanssin yli olisi 1 voltin jännite, ja 2 ohmin yli olisi 2V jännite.)
Rinnankytkennässä virta jakautuu johtavuuden mukaan, eli impedanssien käänteisarvojen mukaan (jos rinnan olisi 1 ja 2 ohmin impedanssit ja rinnankytkennän läpi kulkisi 3A virta, kulkisi 1 ohmin läpi 2A virta, ja 2 ohmin läpi 1A virta.)
Toimiva toteutus¶
Edellä oli tehtävän kannalta tarpeellisia perusjuttuja sähköopista, mutta kerrataanpa vielä tiivistetysti mitä hyväksytyltä lopputyöltä odotetaan:
Tärkeimpänä vaatimuksena, joka erottaa hyväksytyn ja hylätyn lopputyön toisistaan on ohjelman toimivuus. Hyväksytyn lopputyön pystyttävä seuraaviin asioihin:
- Ohjelmalle voi syöttää erilaisia piirejä graafisesta käyttöliittymästä
- Syötössä voidaan käyttää SI-kerrannaisyksiköitä
- Ohjelma piirtää piirikaavio näkyviin ja päivittää sitä aina kun lisätään uusi komponentti
- Ohjelma tulostaa piirin valmistuttua käyttöliittymässä olevaan tekstilaatikkoon oikein lasketut jännitteet ja virrat
- Tulokset ovat ymmärrettävissä ja jännitteet sekä virrat esitetään osoitinmuodossa
- Piiriin voidaan lisätä useita haaroja. Niiden ei tarvi vaikuttaa toisiinsa.
Grafiikka¶
Käyttöönotto¶
Kirjasto rakentuu Pythonin normaaliasennuksessa mukana tulevan TkInter-kirjaston päälle, ja tarjoaa siitä rajusti yksinkertaistetun rajapinnan funktioiden kautta. Kirjaston dokumentaatiomerkkijonot kertovat miten sitä käytetään. Kirjaston pääohjelmassa on myös lyhyt esimerkki siitä, miten sillä tehdään yksinkertainen käyttöliittymä. Piirien piirtely vaatii myös matplotlib-kirjaston asentamisen (
pip install matplotlib
), sekä SchemDraw-kirjaston asentamisen (pip install schemdraw==0.8
), johon löytyy myös alta lisäapalikka, joka tarvitaan siihen, että piirit saadaan piirrettyä käyttöliittymäikkunan sisälle (ei toimi schemdrawin uusimmalla versiolla, joten asennamme version 0.8).Käyttöliittymäkirjastojen 101¶
Käyttöliittymäohjelmoinnissa kirjastoissa on tyypillisesti pääohjelmasilmukka, joka pyörii ns. konepellin alla. Kaikki mitä käyttäjä tekee käyttöliittymässä kytketään yleensä käsittelijäfunktioihin. Kun käyttäjä vaikkapa painaa nappia, kutsutaan nappiin kiinnitettyä käsittelijäfunktiota, joka tekee Jotain (tm). Ohjelma ei siis etene samalla tavalla lineaarisesti kuin tähän asti on totuttu. Käyttöliittymät muodostuvat elementeistä joita kutsutaan widgeteiksi. Nämä voivat olla yksinkertaisia, kuten painonapit, tai monimutkaisempia kuten vaikkapa kokonainen tiedostonavausikkuna, joita näkee useimmissa ohjelmissa.
Tyypillisesti pääohjelmassa luodaan käyttöliittymän ulkoasu valitsemalla mitä elementtejä sinne laitetaan. Samalla määritellään elementtien ominaisuudet ja erityisesti niiden käsittelijäfunktiot. Loppu koodauksesta on näiden käsittelijäfunktioiden sekä erilaisten apufunktioiden tekemistä (joita käsittelijäfunktiot käyttävät).
Yksi erityispiirre on se, että koska funktioita kutsutaan ulkoisesti kirjaston toimesta, emme voi hallita sitä mitä tietoa niille annetaan. Ohjelman tilaa ei siis voi kuljettaa funktion argumenteissa, vaan se täytyy esittää jollain muulla tavalla. Hyvä vaihtoehto tämän lopputyön kontekstissa on tehdä sanakirja, johon talletetaan esim. ladattu data sekä pisteet, jotka käyttäjä on valinnut. Jos sanakirja on määritelty pääohjelmassa, sitä voidaan muuntuvuutensa ansiosta käsitellä kaikissa funktioissa. Tällöin mikä tahansa funktio voi lukea ja muuttaa ohjelman tilaa ilman, että sille tarvii antaa sitä argumenttina.
Piirien piirtely¶
Piirin esillepanoa varten käyttöliitymäikkunaan tulee luoda erillinen piirinpiirtoalue. Piirin piirto aloitetaan jännitelähteen piirtämisellä, jonka jälkeen piirretään yksi haara kerrallaan. Kirjasto huolehtii suurimmasta osasta piirin asettelua. Piirtelyn pitäisi onnistua siis kohtalaisen hyvin kunhan luet huolellisesti piiristo-moduulin dokumenttiimerkkijonoista ohjeet.
Palautus¶
Palautustakaraja: 2024-08-31 23:59