Pojdi na vsebino

Arduino

Iz Wikipedije, proste enciklopedije
Arduino Uno r. 3 SMD


Arduino je mikrokrmilnik na matični plošči, ki je zasnovan tako, da bi bil postopek z uporabo elektronike v multidisciplinarnih projektih, bolj dostopen. Strojno opremo sestavljajo odprtokodna oblika plošče in 8-bitni mikrokontroler Atmel AVR ali 32-bitni Atmel ARM. Programska oprema je sestavljena iz standardnega programskega jezika, prevajalnika in zagonskega nalagalnika, ki se izvaja na mikrokrmilniku. Razvojne plošče Arduino so naprodaj že sestavljene ali pa v »sestavi sam« izvedbi.

Mikrokrmilnik so razvili na šoli oblikovanja v italijanskem mestu Ivrea in predstavlja enega zgodnjih mejnikov v gibanju odprtokodne strojne opreme.[1]

Sklici in opombe

# Mornar Filip

#

# Mornar Filip rad zahaja na kozarec ruma na bližnji otok. Zadnjič pa ga je ob

# vračanju z enega njegovih izletov ujela nevihta, ki mu je močno poškodovala

# barko. Na srečo je opazil, da skozi nastalo luknjo v barki padajo različni

# predmeti.  Kljub rumu je zbral dovolj koncentracije in si v zvezek začel

# pisati koordinate, kjer so določeni predmeti padli z barke. Poleg predmeta si

# je v zvezek napisal tudi vrednost, ki mu določen predmet pomeni.  Pomagaj

# mornarju Filipi rešiti predmete, preden jih odnesejo morski tokovi.

# =====================================================================@030011=

# 1. podnaloga

# Najprej je treba, za boljšo preglednost, sestaviti seznam koordinat, ki

# označujejo mesta predmetov. Napišite funkcijo `koordinate(slovar)`. Sprejme

# naj slovar, ki ima za ključe koordinate in za vrednosti pare (ime, vrednost),

# vrne pa naj seznam koordinat, urejene padajoče po vrednosti predmetov, ki se

# tam nahajajo. V primeru, da ima več predmetov enako vrednost, jih uredite po

# abecednem vrstnem redu po imenih. Predpostavite, da ne moreta biti dva enaka

# predmeta z isto vrednostjo na dveh različnih koordinatah.

#

# Primer:

#

#     >>> koordinate({(1, 4) : ("kipec", 14),

#                     (8, 7) : ("zoga", 55),

#                     (3, 1) : ("vrv", 1),

#                     (11, 6) : ("sotor", 27),

#                     (7, 10) : ("abakus", 27),

#                     (5, 3) : ("rum", 78)})

#     [(5, 3), (8, 7), (7, 10), (11, 6), (1, 4), (3, 1)]

# =============================================================================

def koordinate(slo):

    nov_sez = []

    for koordinate in slo.keys():

       

# =====================================================================@030012=

# 2. podnaloga

# Sedaj je pa treba te predmete tudi pobrati. Sestavite funkcijo `pot(slovar)`,

# ki bo sprejela enak slovar kot zgoraj, vrnila pa skupno dolžino Filipove

# poti, če želi pobrati vse predmete. Njegova pot se začne v domačem

# pristanišču (na koordinatah (0, 0)), gre do najvrednejšega predmeta, nato do

# drugega najvrednejšega in tako dalje, na koncu pa se spet vrne v domače

# pristanišče.

#

# Razdaljo med dvema točkama izračunamo po običajni formuli:

#

# razdalja med `(x1, y1)` in `(x2, y2)` je

# enaka `((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5.`

#

# Primer:

#

#     >>> pot({(1, 4): ("kipec", 14),

#              (8, 7): ("zoga", 55),

#              (3, 1): ("vrv", 1),

#              (11, 6): ("sotor", 27),

#              (7, 10): ("abakus", 27),

#              (5, 3): ("rum", 78)})

#     36.615951767324

# =============================================================================

# =====================================================================@030013=

# 3. podnaloga

# Ta naivna pot je že skoraj prava, ampak Filip te predmete pobira s

# prijateljevo barko, ki je manjša od njegove. Zato je prostorsko omejen in se

# mora vmes vračati domov. Napišite funkcijo `pot_omejena(slovar, kapaciteta)`,

# ki sprejme slovar predmetov in največjo kapaciteto barke. Filip bo začel

# svojo pot enako kot prej, le da bo moral, preden bo kapaciteta barke

# presežena, nazaj v domače pristanišče odložit predmete. Vsak predmet ima

# velikost enako dolžini njegovega imena. Naprimer, velikost predmeta "sodcek"

# je 6. Predpostavite, da je kapaciteta barke večja od vseh velikosti

# posameznih predmetov.

#

# Primer:

#

#     >>> pot_omejena({(1, 4): ("kipec", 14),

#              (8, 7): ("zoga", 55),

#              (3, 1): ("vrv", 1),

#              (11, 6): ("sotor", 27),

#              (7, 10): ("abakus", 27),

#              (5, 3): ("rum", 78)}, 8)

#     85.50490368290278

# ============================================================================= # Izpiti #

# Svetovno znani profesor Leopold Poldi je tako pameten gospod, da se mu vse

# naloge na izpitih zdijo trivialne. Raziskave pa so pokazale, da je smiselno

# naloge na izpitu razvrstiti po težavnosti. Ker on ne ve, kaj je težko,

# potrebuje vašo pomoč (očitno le ne zna vsega ;) ).

#

# *OPOMBA*: Pri nalogah uporabljaj kodiranje "utf-8".

# =====================================================================@030014=

# 1. podnaloga

# Vaša prva naloga je, da iz besedila naloge odstranite vse matematične/fizikalne

# formule in izraze. Vsaka formula se začne z znakom `$` in konča z znakom `$`.

# Predpostavite lahko, da pred znakom `$` ni nikoli presledka.

#

# Primer naloge:

#

#       .)1.) Določi nihajni čas matematičnega nihala z maso$m = 10g$, ki visi

#       na vrvici dolžine$10cm$.

#

# Napišite funkcijo `odstrani_formule(naloga)`, ki iz naloge `naloga` odstrani

# vse formule in vrne novo besedilo naloge v eni vrstici (brez znakov za

# novo vrstico `\n`), torej `\n` zamenjaj s `" "`. Po klicu funkcije na zgornji

# nalogi, naša funkcija torej vrne:

#

#       .)1.) Določi nihajni čas matematičnega nihala z maso, ki visi na vrvici dolžine.

# =============================================================================

# =====================================================================@030015=

# 2. podnaloga

# Leopold ima naloge shranjene v tekstovni datoteki `ZAUPNO.txt`, ki zgleda

# takole:

#

#       .)1.) Izračunaj nihajni čas matematičnega nihala z maso$m = 10g$, ki visi

#       na vrvici dolžine$10cm$.

#       .)*2.) Dokaži, da barvo krave, če je glasnost njenega zvonca izračunana

#       po formuli$c = \pi * 9 - 6 \psi^2$, izračunamo kot$a^2 + b^2 = c^2$.

#       .)3.) Izračunaj današnji datum v Inkovskem koledarskem načinu.

#       .)*4.) Pokaži, da si je besedilo naslednje naloge težko izmisliti na$3$

#       decimalke natančno.

#       .)5.) Pokaži, da mi je ime$Leopold Poldi$.

#

# Sestavite funkcijo `loci_po_nalogah(vhodna)`, ki sprejme ime vhodne datoteke

# in vrne seznam nalog, ki ne vsebujejo več formul (namesto `\n`, pa vsebuje `" "`).

# Klic funkcije naj torej na datoteki `vhodna = "ZAUPNO.txt"` vrne naslednji seznam:

#

#       ['.)1.) Izračunaj nihajni čas matematičnega nihala z maso, ki visi na vrvici dolžine.',

#       '.)*2.) Dokaži, da barvo krave, če je glasnost njenega zvonca izračunana po formuli, izračunamo kot.',

#       '.)3.) Izračunaj današnji datum v Inkovskem koledarskem načinu.',

#       '.)*4.) Pokaži, da si je besedilo naslednje naloge težko izmisliti na decimalke natančno.',

#       '.)5.) Pokaži, da mi je ime.']

#

# Predpostavite, da se nikjer v besedilu, razen pred in za zaporedno številko naloge, ne pojavi `.)`.

# =============================================================================

# =====================================================================@030016=

# 3. podnaloga

# Za konec je vaša naloga, da uredite naloge po težavnosti. Težavnost naloge

# določamo na treh nivojih. Najprej najtežje naloge pred zaporedno številko

# naloge vsebujejo `*`, potem se težavnost določa na podlagi besed, ki jih

# naloga vsebuje. Če navodilo naloge vsebuje besedo `dokaži`, je naloga težja,

# kot če vsebuje besedo `pokaži`, najlažja pa je naloga, ki ne vsebuje nobene

# od teh besed.

# Predpostavite, da ti besedi upoštevamo samo v imenovalniku (nominativu),

# torej le dobesedno tako, kot sta napisani v navodilu te naloge (lahko spreminjamo

# le velike in male črke), nadalje gledamo zaporedno številko naloge (večja številka,

# težja naloga).

# Ni nujno, da naloga vsebuje besede "dokaži" ali "pokaži", nobena naloga pa ne

# vsebuje več teh besed.

#

# Napišite funkcijo `uredi_po_tezavnosti(vhodna, izhodna)`, ki sprejme vhodno datoteko

# v taki obliki, kot je napisano zgoraj (v daoteki `ZAUPNO.txt`) in v izhodno

# datoteko `izhodna` zapiše zaporedne številke nalog, vsako v svojo vrstico, od

# najlažje do najtežje.

#

# Po klicu `uredi_po_tezavnosti("ZAUPNO.txt", "test.txt")` se torej v datoteki

# `test.txt` nahaja:

#

#     1

#     3

#     5

#     4

#     2

#

#

# namig: Vsaki od besed, ki določa težavnost, priredite ustrezno številko in

# si v slovar za vsako nalogo zabeležite, katero od besed vsebuje.

# =============================================================================

  1. =============================================================================
  1. Formula E gre visss! - Numpy
  1. Formula E je najprestižnejše tekmovanje dirkalnikov na električni pogon na
  1. svetu. Sedaj prosijo vas za pomoč. V zameno za nekaj točk na izpitu jim
  1. pomagajte napisati program, ki bo določil razvrstitev dirkalnikov v
  1. kvalifikacijskem krogu. Vsak dirkalnik prevozi en tak krog. Dirkalniki
  1. imajo vgrajen števec za hitrost, katerega vrednosti si vsako sekundo
  1. shranjujemo v tabelo.
  1. Kot primer tabele hitrosti definirajmo:
  1.     primer_hitrosti = np.array([[4.11, 52.54, 79.04, 82.01],
  1.                                 [4.14, 53.41, 81.34, 90.23],
  1.                                 [5.33, 50.01, 90.81, 92.24]])
  1. V vsaki vrstici so podatki pripadajoči posameznemu drikalniku, v stolpcih
  1. pa so njihove hitrosti ob različnih časovnih intervalih.
  1. Prva meritev hitrosti je narejena 1s po začetku, vse ostale ji sledijo
  1. s časovnimi zamiki 1s. Vse hitrosti so merjene v m/s.
  1. Za reševanje naloge uporabite knjižnjico numpy, zanke so prepovedane.
  1. Če ne gre brez uporabe zank, poskusite nalogo rešiti z uporabo zank,
  1. saj vam taka rešitev še vedno lahko prinese 1/2 vseh možnih točk.
  1. Pri nalogi vam bodo v pomoč tudi funkcije na [povezavi](https://numpy.org/doc/stable/reference/routines.sort.html).
  1. =====================================================================@030017=
  1. 1. podnaloga
  1. Najprej moramo iz podatkov o hitrostih dirkalnikov ugotoviti njihovo
  1. prevoženo razdaljo ob vsakem času. To naredimo s preprostim "integralom"
  1. (dejansko gre za diskretno vsoto), kjer predpostavimo, da je bila hitrost
  1. na preteklem intervalu konstantna, prevožena pot na intervalu pa se tako
  1. izračuna po enačbi
  1. $$ s = v \cdot \Delta t $$
  1. Sestavite funkcijo `prevozena_razdalja(hitrosti)`, ki sprejme tabelo
  1. `hitrosti`, ter vrne tabelo prevožene razdalje do vsakega časovnega intervala.
  1.     >>> prevozena_razdalja(primer_hitrosti)
  1.     np.array([[4.11, 56.65, 135.69, 217.7 ]
  1.               [4.14, 57.55, 138.89, 229.12]
  1.               [5.33, 55.34, 146.15, 238.39]])
  1. =============================================================================
  1. =====================================================================@030018=
  1. 2. podnaloga
  1. Za primerjavo med različnimi načini vožnje skozi ovinke, je zanimivo
  1. pogledati, kakšna je bila razvrstitev mest v vsakem trenutku med
  1. kvalifikacijskim krogom.
  1. Sestavite funkcijo `trenutni_vodilni(hitrosti)`, ki sprejme tabelo `hitrosti`,
  1. ter izračuna indeks vodilnega dirkača ob vsakem času. Indekse vrne v 1D tabeli.
  1.     >>> trenutni_vodilni(primer_hitrosti)
  1.     np.array([2, 1, 2, 2])
  1. =============================================================================
  1. =====================================================================@030019=
  1. 3. podnaloga
  1. Seveda pa organizatorje najbolj zanima končna razporeditev dirkalnikov
  1. od najhitrejšega do najpočasnejšega. Dirkalnikov čas je merjen od začetka
  1. tabele, pa do časovnega intervala, pri katerem doseže ali pa preseže
  1. dolžino kroga. V nalogi lahko privzamete, da nobena dva dirkalnika cilja
  1. ne dosežeta ob istem času. Števec hitrosti preneha beležiti hitrosti
  1. šele, ko se dirkalnik pripelje nazaj v bokse, zato konec dirke nikoli
  1. ni na koncu tabele, ampak že nekje vmes.
  1. Sestavite funkcijo `koncna_razporeditev(hitrosti, dolzina_proge)`, ki
  1. sprejme tabelo `hitrosti` in `dolzina_proge` v metrih, ter vrne 2D
  1. tabelo, kjer so v prvem stolpcu zapisani indeksi dirkalnikov od
  1. najhitrejšega do napočasnejšega, v drugem stolpcu pa so zapisani
  1. njihovi časi v sekundah.
  1.     >>> koncna_razporeditev(primer_hitrosti, 137)
  1.     np.array([[1, 3]
  1.               [2, 3]
  1.               [0, 4]])
  1. Namig: Prav vam lahko pride numpy funkcija po imenu `argsort()`.
  1. =============================================================================
  1. Lahart, Justin (27. november 2009). »Taking an Open-Source Approach to Hardware«. The Wall Street Journal. Pridobljeno 27. oktobra 2013.

Zunanje povezave