Tehtävät

1. Perusasioita

Tehtävät

  1. Tee Arduino IDE:n asennus omaan (koti-)koneeseesi
  2. Lataa esimerkeistä Examples/Blink-ohjelma. Muokkaa ledin vilkkumissekvenssiä ”monimutkaisemmaksi”.
  3. Lataa Examples/DigitalReadSerial. Selvitä ohjelman toiminta. Testaa toiminta käyttämällä painokytkimen paikalla hyppylankaa. Mihin pinniin hyppylanka (painokytkin) liitetään? Mitä ohjelma kirjoittaa sarjamonitoriin, kun tulopinniin on yhdistetty 5V, GND tai ei mitään (ilmassa)?
  4. Lataa Examples/Button. Selvitä ohjelman toiminta. Testaa toiminta käyttämällä painokytkimen paikalla hyppylankaa pinnissä 2. Mikä on ohjelman vaste, kun tulopinniin on yhdistetty 5V, GND tai ei mitään (ilmassa)? Miten saisit luotettavasti aina saman vasteen, kun pinni on kytkemättä?
  5. Kirjoita ohjelma, joka vilkuttaa kolmea LEDiä eri tahtiin. LEDit (ja etuvastukset 220 ohm) kytketään pinneihin 8, 9 (ulkoiset komponentit) ja 13 (levyllä).

2. Lohkokaavion käyttö, hyvät ohjelmointikäytännöt, debuggaus

Tehtävät

  1. Selvitä miten seuraava ohjelma (lohkokaavio) toimii http://images.slideplayer.biz/10/2972446/slides/slide_11.jpg,
  2. Selvitä miten seuraava ohjelma (lohkokaavio) toimii http://images.slideplayer.biz/8/2282787/slides/slide_7.jpg
  3. Tee lohkokaavio (aikaisemmin) tekemäsi ohjelman toiminnasta. Lohkokaaviossa on oltava vähintään yksi toisto- tai valintarakenne (katso tehtävän 6 lohkokaavio)
  4. Muokkaa (jokin aikaisemmin) tekemäsi/käyttämäsi ohjelma hyvien ohjelmointikäytäntöjen mukaiseen muotoon.
  5. Kuvitellaan seuraava tilanne: olet saanut lohkokaavion http://images.slideplayer.biz/8/2282787/slides/slide_7.jpg mukaisen ohjelmakoodin, joka ei kuitenkaan toimi oikein. Sinulla ei ole tietoa missä ohjelman osassa vika (tai viat) on. Vian etsinnässä kannattaa aloittaa ohjelman testaaminen/tutkiminen yhdestä toiminnosta. Kun se todistettavasti toimii, lisätään seuraava toiminto, testataan se, jne. Lisäksi hyvä keino seurata ohjelman etenemistä on käyttää print-komentoja. Kerro miten ja mitä vaiheita käyttäen etsisit vikoja (=debuggaisit) edellä mainitun lohkokaavion mukaisesta koodista.

3. Muuttujat, tietotyypit

Tehtävät

  1. Mitä arvoja seuraavat muuttujat voivat saada?
    • int a;
    • boolean b;
    • char c;
    • byte d;
    • long e;
    • float f;
    • unsigned int g;
  2. Mitä tarkoittaa const (esim. const int avain;)? Milloin ja miksi sitä kannattaa käyttää?
  3. Mitä tarkoitetaan globaalilla ja lokaalilla muuttujalla?
  4. Selitä mitä seuraavat määrittelyt tarkoittavat (siis kerro selkokielellä mitä kullakin rivillä tarkoitetaan).
    • int sensorPin = A0; // select the input pin for the potentiometer
    • int ledPin = 13; // select the pin for the LED
    • int sensorValue = 0;
    • const int sensorMin = 0; // sensor minimum, discovered through experiment
    • const int sensorMax = 600; // sensor maximum, discovered through experiment
    • String firstName = "Benjamin";
  5. Määritä muuttuja (muuttujan nimi ja tyyppi) seuraaville:
    • henkilön pituus
    • henkilön paino
    • tunnussana
    • pii (3.14159)
    • auton matkamittari
    • digitaalipinnin numero

4. If-valinta (+Comparison Operators), For-toisto (+Compound Operators)

Tehtävät

  1. Lisää ohjelmaan (Blink_if_else) sopivat ehdot, jotta ohjelma toimii.
  2. Mitä vikaa on seuraavassa if-lausessa?
    • if (num=1);
    • {
    • digitalWrite(13, HIGH); // turn the LED on
    • }
  3. Mitä ohjelma (Dim_LED) tekee? Muuta for-silmukkaa siten, että sekvenssi etenee nopeammin (siis EI muuttamalla delay-arvoa).
  4. Muuta (Dim_LED) ohjelmaa siten, että sekvenssi etenee portaattomasti sekä ylöspäin että alaspäin (0, 1, 2,…,254, 255, 254, 253,…, 2, 1, 0, 1, 2, …)
  5. Muokkaa ja testaa ohjelmaa (examples/ReadAnalogVoltage, https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage) seuraavasti:
    • lisää silmukkaan kahden sekunnin viive, jotta sarjamonitorin seuraaminen on helpompaa
    • lisää toinen kirjoituskäsky, joka kertoo onko jännite digitaalilogiikan rajojen mukaan nolla, yksi vai epämääräinen.
      • jos jännite on välillä 0 … 0,8 V, niin se on looginen nolla
      • jos jännite on välillä 2,0 … 5,0 V, niin se on looginen yksi
      • Jos jännite on välillä 0,8 … 2,0 V, niin se on määrittämätön (epämääräinen tila)

5. SerialRead, Aritmeettiset operaatiot, bittioperaatiot

Tehtävät

  1. Toteuta mallin (http://www.instructables.com/id/Arduino-Function-Serialread-And-SerialreadString/?ALLSTEPS) avulla toiminto, jossa
    • sarjamonitorilta voi syöttää sanan ohjelmaan.
    • ohjelma toistaa syötetyn sanan ja edellisen sanan joka kerta kun uusi syötetään
  2. Toteuta toiminto, jossa
    • ledi vilkkuu kokonaisluvun määrittämänä
    • sarjamonitorilla pyydetään kaksi kokonaislukua ja ledi vilkkuu niiden summan verran.
  3. Toteuta nelilaskin, joka toimii (kokonaisluvuilla) seuraavasti: Ensin käyttäjältä kysytään laskutoimitusta (vaihtoehdot: yhteen-, vähennys-, kerto- ja jakolasku+jakojäännös). Seuraavaksi käyttäjältä kysytään kahta kokonaislukua. Lopuksi tulostetaan laskun tulos.
  4. Laadi ohjelma, joka pyytää käyttäjältä luvun ja kirjoittaa sen kertotaulun yhdestä kymmeneen. Esimerkiksi 3, 6, 9, 12, 15, 18, 21, 24, 27, 30.
  5. Laadi ohjelma, joka pyytää käyttäjältä luvun x ja kirjoittaa x kertotaulua yhdestä kymmeneen. Esimerkiksi jos luku on 2, niin kertotaulut ovat 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 sekä 2, 4, 6, 8, 10, 12, 14, 16, 18, 20.

6. While (Boolean Operators), Do, Switch, Break, Continue

Tehtävät

  1. Laadi ohjelma, joka tulostaa Fibonaccin lukujonon lukuja (https://fi.wikipedia.org/wiki/Fibonaccin_lukujono) alkaen nollasta ja pysähtyy kun luku on suurempi kuin 100. Käytä while-lausetta.
  2. Laadi ohjelma, joka tulostaa Fibonaccin lukujonon lukuja alkaen nollasta ja pysähtyy kun luku on suurempi kuin 100. Käytä do-while-lausetta.
  3. Laadi ohjelma, joka pyytää käyttäjältä sanan (määrittele itse tarkemmin). Sanan perusteella ohjelma kirjoittaa sarjamonitoriin ja vilkuttelee lediä/ledejä eri tavoin. Eri vaihtoehtoja on vähintään viisi. Käytä switch...case –rakennetta.
  4. Laadi ohjelma, joka pyytää käyttäjältä viisi lukua. Seuraavaksi ohjelma tulostaa luvut suuruusjärjestyksessä pienimmästä suurimpaan.
  5. Tee ohjelma, joka kysyy käyttäjältä kokonaislukuja, kunnes käyttäjä antaa luvuksi -1. Ohjelma tulostaa näytölle jokaisen luvun antamisen jälkeen ko. luvun neljännen potenssin. Käytä do-while-lausetta.

7. Funktiot

Tehtävät

  1. Laadi funktio, joka tekee 10 mittausta analogia input-portista 1 ja palauttaa tulosten keskiarvon.
  2. Lisää edelliseen funktioon parametreiksi input-portin numero ja mittauskertojen määrä eli funktion kutsussa määritetään mistä portista mitataan ja kuinka monta kertaa.
  3. Kirjoita funktio, joka pyytää käyttäjältä luvun annetulta väliltä ja tarkistaa luvun kelvollisuuden. Mikäli luku ei ole annetulla välillä tai se ei ole numeerinen, sitä pyydetään funktiossa uudelleen. Funktio palauttaa kutsujalleen käyttäjän syöttämän luvun. Funktiota kutsutaan seuraavasti: luku = pyyda_luku_valilta (alaraja, ylaraja);
  4. Kirjoita funktio, joka vilkuttaa lediä n kertaa portissa m. n ja m ovat funktion parametreja (nimeä ne kuvaavasti). Kirjoita ja testaa pääohjelma, joka käyttää funktiota ledien vilkuttamiseen eri porteissa.
  5. Kirjoita funktio, joka muuntaa Fahrenheit -asteet Celsius -asteiksi. Funktion otsikko on float FahrenheitToCelsius (float fFahrenheit);

8. IO-Portit (analogiset, digitaaliset), sensorin liittäminen, kirjastot

Tehtävät

  1. Tee toteutus, jossa kahdella kytkimellä ohjataan neljää LEDiä. Kun kumpikin kytkin on auki -> LED1 palaa, muut ei. Kun kytkin1 on kiinni ja kytkin2 auki -> palaa LED2, jne. Kytkimenä voi käyttää johtoa, joka kytketään maahan (0) tai käyttöjännitteeseen (1). LEDeillä pitää olla etuvastukset jotta ne eivät mene rikki.
  2. NTC-vastuksen käyttö lämpötilan mittaamiseen: kytkentään tarvitaan NTC-vastus ja 10kohm vastus, jotka kytketään sarjaan käyttöjännitteen ja maan välille. Keskipiste kytketään AD-muuntimen tuloon.
    • Testaa esimerkkiohjelman (NTC_readValue) toiminta
    • Lisää mittauksen luotettavuutta seuraavalla toiminnolla: tee mittaus 10 kertaa (for-silmukka) ja ota mittauksista keskiarvo, jota jatkokäsitellään ohjelmassa.
    • Optio: Ota 11 mittauksesta mediaani. Kumpi olisi mielestäsi parempi tapa (keskiarvon vai mediaanin käyttö)?
  3. NTC-vastusmittauksen kalibrointi:
    • Edellisen tehtävän mukaisen mittauksen perusteella määritellään lämpötila. Muunnoksen (ja kalibroinnin) voi tehdä esim. käyttämällä B-parametriyhtälöä (https://learn.adafruit.com/thermistor/using-a-thermistor) tai muodostamalla yhtälö Excelillä (trendline). Tavoitteena on < 1 C asteen tarkkuus.
  4. DS18x20-anturin käyttö lämpötilan mittaamiseen (esim. http://www.pjrc.com/teensy/td_libs_OneWire.html):
    • Asenna kirjasto (Onewire tai vastaava)
    • Etsi ja testaa esimerkkikoodi
    • Tutustu koodiin ja tee omia muutoksia toimintaan.
  5. Servon ohjaaminen: servon ohjaaminen tapahtuu PWM-lähdöllä (pulssinleveysmodulaatio)
    • Tutustu mitä servo ja PWM tarkoittaa ja miten ne toimivat. Optio: mittaa PWM-lähtöä oskilloskoopilla se seuraa miten se muuttuu, kun muutat parametreja.
    • Etsi sopiva koodi servon ohjaamiseen ja testaa toiminta.
    • Muokkaa ohjelma siten, että syöttämällä kulman suuruuden sarjamonitoriin tai potentiometrilla servo kääntyy oikeaan kulmaan. Mitkä ovat suurin ja pienin kulma mihin servo kääntyy?

9. Keskeytys (ulkoiset, pinnimuutos, UART/SPI/EEPROM), (sisäiset, timer, ADC)

Tehtävät

  1. Keskeytys_INT0 -> Testaa ohjelman toiminta lisäämällä keskeytystuloon (int0) jokin komponentti/laite, joka tuottaa keskeytyksiä. Lisää ohjelmaan laskuri, joka laskee keskeytysten määrän ja raportoi siitä sarjamonitorille.
  2. Keskeytys_Timer -> muuta Timer0 ja Timer2 keskeytystaajuuksia mahdollisimman pieneksi. Laske uudet keskeytystaajuudet. Testaa ja tarkista mittaamalla.
  3. Keskeytys_ADC -> muuta näytteenottotaajuutta n. 8kHz:ksi. Syötä ADC:hen signaali funktiogeneraattorista (1kHz) ja mittaa PortD:n kytketyn ulkopuolisen DAC:n lähtöä oskilloskoopilla.
  4. Suunnittele ja toteuta ohjelma, jossa käytetään monipuolisesti tällä kurssilla esiteltyjä rakenteita sekä tulo- ja lähtöportteja. Ohjelman tulee olla laajuudeltaan aikaisempia harjoituksia monipuolisempi.
  5. Dokumentoi edellisen tehtävän projekti: vuokaavio, hyvin kommentoitu ja jäsennelty koodi, käyttöohje loppukäyttäjälle, yhteenveto/pohdinta.

Lisätehtäviä

  1. Kirjoita funktio minimi(), joka palauttaa arvonaan kahdesta annetusta luvusta pienemmän. Luvut välitetään funktiolle parametreina.
  2. Kirjoita funktio, joka pyytää käyttäjältä 10 positiivista kokonaislukua ja palauttaa arvonaan kutsujalleen (=pääohjelmalle) niistä suurimman. Funktio kelpuuttaa syötteiksi vain positiiviset luvut. Virheellisestä syötteestä tulostetaan ilmoitus ja lukua pyydetään uudelleen (tarvittaessa toistuvasti).
  3. Toteuta metronomi, jonka tahdin voi käyttäjä määritellä painonappia painanalla sopivassa rytmissä. Käytä keskeytystä (ajan mittaamiseen).
  4. IR vastaanotin TV-kaukosäätimelle: http://www.instructables.com/id/How-to-control-your-TV-with-an-Arduino/
  5. 3D kiihtyvyysanturin testaus ja kalibrointi (examples/ADXL3xx, https://www.arduino.cc/en/Tutorial/ADXL3xx):
    • Liitä kiihtyvyysanturi Unoon ja tee tarvittaessa muutoksia koodiin. Testaa kiihtyvyysanturin toiminta seuraamalla sarjamonitoria.
    • Kalibroi kiihtyvyysanturin x-akseli
    • Kalibroi myös y- ja z-akseli edellisen proseduurin mukaisesti

Oppimisen testaus (osion 5 jälkeen)

  • Ohjelmointitehtävä: Toteuta opettajan antaman määrittelyn mukainen ohjelma. Palauta listaus ohjelmakoodista ja kuvankaappaus sarjamonitorista ohjelman suorituksen jälkeen.
  • Tehtävässä tulee huomioida:
    • Järjestelmällinen työskentely, vaiheittainen toteutus ja testaus
    • Selkeä luettavuus ja kommentointi
    • Muuttujien käyttö ja nimeäminen
    • If- ja For-rakenteiden käyttö
    • Tiedon syöttäminen ja tulostus (sarjamonitori, sensorit, ledit, tms.)
  • Loppuun itsearviointi: oman osaamisen arviointi kunkin edellä luetellun osa-alueen suhteen: osaan hyvin / jotenkuten / pitäisi vielä harjoitella

Esimerkkitehtävä:

Laadi ohjelma, joka

- lukee digitaaliportin 4 tilan

- kysyy käyttäjältä vilkutetaanko lediä (1) vai kirjoitetaanko tekstiä (2)

- tilan ja vastauksen perustella (neljä vaihtoehtoa) perusteella joko

- vilkutetaan lediä 2 kertaa

- vilkutetaan lediä 10 kertaa

- ohjelma kirjoittaa nimesi

- ohjelma kirjoittaa osoitteesi

Peda.net käyttää vain välttämättömiä evästeitä istunnon ylläpitämiseen ja anonyymiin tekniseen tilastointiin. Peda.net ei koskaan käytä evästeitä markkinointiin tai kerää yksilöityjä tilastoja. Lisää tietoa evästeistä