Tunnista anturit

Johdanto

Hajuja, ääniä, lämpötiloja ja muita jatkuvanluonteisia asioita mitataan antureilla, joita voi kytkeä Arduinoonkin.

Tässä harjoituksessa testataan, millaisia antureita Mehackit Maker Kitistä löytyy. Antureiden nimiä ja toimintaa ei paljasteta tehtävänannossa, koska tehtävänäsi on selvittää itse, mihin eri anturit reagoivat!

Voit katsoa johdannoksi alta löytyvän videon, jossa pohditaan, minkälaista dataa erilaisilla antureilla voidaan saada tulevaisuuden älykkäässä kaupungeissa!

IBM Think Academy: How It Works: Smarter Cities

Tarvikkeet

Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.

OsaKuvaKuvaus
Jatkojohto x 3Anturit on tässä harjoituksessa kätevintä kytkeä jatkojohtojen päihin. Valitse musta, keltainen ja punainen!
LEDPidempi jalka (kuvassa mutkallinen) eli anodi + -napaan eli Arduinon porttiin. Lyhyempi jalka eli katodi miinus-napaan eli maahan.
Vastus 330 ΩVastus vastustaa sähkövirran kulkua. Vastuksen arvo mitataan ohmeissa (Ω) ja ilmoitetaan komponentissa eri värisinä raitoina (tässä oranssi, oranssi, ruskea ja kulta).
?Maker kitistäsi löytyy jompi kumpi, sillä nämä anturit mittaavat samaa asiaa! Jos sinulla on antureista alempi, sitä ei vielä kytketä osana tätä harjoitusta.
Kolmipaikkainen terminal block.Mikäli Maker kitistäsi löytyy tällainen, on siitä apua edellisen rivin ylemmän anturin kytkennässä.
??
?Maker-kitistä löytyvä versio voi näyttää erilaiselta, mutta siinä on joka tapauksessa pitkä pyörivä tappi.
?Huom: Mehackit Maker Kitissä on viisi samannäköistä mustaa komponenttia, mutta vain yksi niistä on oikea! Komponentin pinnalla on teksti "TMP 36GZ". Muut komponentit ovat transistoreita tai melodiapiirejä.

Virtapiiri

Maker-kitistä löytyvien johtimien väreillä ei ole väliä virtapiirin toimimisen kannalta. Ihmisen on kuitenkin helpompi ymmärtää virtapiirejä, jos esimerkiksi maakytkentöihin on aina käytetty mustia johtoja. Käytä tämän virtapiirin tekemiseen kuvassa olevia johtimien värejä, jotta pysyt itse paremmin kärryillä kytkennöistä! Kytke tavalliset johdot Mehackit-boardiin tai Arduinoon ja pidennä niitä jatkojohdoilla.

Varaa jo valmiiksi lähelle kuvassa näkyvät anturit: tehtävänä on seuraavaksi ohjelmoida Arduino ja sitten vaihtaa jatkojohtojen päähän eri antureita ja testata, mihin asioihin mikäkin anturi reagoi. Antureiden nimiä ei paljasteta vielä

HUOM!
Pienessä, mustassa anturissa on kirjaimet TMP. Maker kitissä on muitakin samannäköisiä komponentteja joten varmista, että käytössäsi on oikea komponentti.
HUOM!
Alla olevassa kuvassa näkyvän anturin kytkemiseen voit käyttää vihreää terminal blockia, jos sellainen löytyy Maker kitistäsi. Tällöin sinun tulee muodostaa koekytkentälevyltä kolmella johtimelta vielä yhteys Mehackit boardin maahan, jännitteeseen ja analogiseen porttiin.

Ohjelman tavoite

Anturit reagoivat ympäristön muutokseen ja välittävät tiedon tästä Arduinolle. Arduino tulkitsee anturista tulevan tiedon lukuna välillä 0-1023. Jos luku ylittää ohjelmassa määritellyn raja-arvon, Arduino laittaa porttiin 6 kiinnitetyn ledin päälle. Jos luku on on raja-arvoa pienempi, led on poissa päältä.

Tuttuja komentoja ja termejä:

Uusia komentoja:

  • analogRead(portti): Komennolla luetaan onkin analogiportin (A0-A5) arvo. Analogiportit ovat lähtökohtaisesti sisääntuloja, eli niihin on tarkoitus kiinnittää antureita. Luettu arvo on luku väliltä 0-1023, ja yleensä se tallennetaan muuttujaan esimerkiksi seuraavalla komennolla.
int sensor = analogRead(A0);
if(sensor > 300){
	//Jotain tapahtuu
}
else{
	//Jotain muuta tapahtuu
}

Ohjelmointi

Tehtävä
Täydennä seuraava ohjelma kommenteissa olevien ohjeiden mukaan ja syötä se sitten Arduinollesi. Kytke jatkojohtojen päihin vuorotellen eri antureita ja testaa, mitä antureille pitää tehdä, jotta Serial monitorissa näkyvät lukemat muuttuvat.
void setup() {
  // määrittele komennolla pinMode portti 6 ulostuloksi (OUTPUT)
  Serial.begin(9600);
}

void loop() {
  // määrittele kokonaislukumuuttuja (int) nimeltä sensor, ja aseta sen arvoksi 
  // portin 'A0' lukema komennolla analogRead.
  
  Serial.println(sensor);
  // lisää 10 millisekunnin viive käskyllä delay

  if (sensor < 300) {
    // laita portissa 6 oleva led päälle (HIGH) komennolla digitalWrite.
  } else {
    // laita portissa 6 oleva led pois päältä (LOW) komennolla digitalWrite.
  }

}
HUOM!
Ole erityisen tarkka anturin nro 2 kanssa - se voi kärähtää, jos kytket johdot väärin päin!
Tehtävä
Kun olet keksinyt mihin anturi reagoi, muuta tarvittaessa if-lauseen raja-arvoa (nyt 300) järkevämmäksi niin, että saat ledin päälle ja pois anturin avulla. Voit myös vaihtaa pienempi kuin -merkin ( < ) tilalle suurempi kuin -merkin ( > ). Kun olet testannut kaikkia neljää anturia, vastaa alla oleviin monivalintakysymyksiin!

Anturi numero 1 reagoi...
Anturi numero 2 reagoi...
Anturi numero 3 reagoi...
Anturi numero 4 reagoi...

Lisätehtävä: Tolkkua lämpötilalukemiin

Kun käytit aiemmin lämpötila-anturia, sen lukemista saattoi päätellä lämpötilan muutoksia, vaikka numerot eivät edustaneetkaan esimerkiksi celcius-asteita. Miten lämpötila-anturin datasta saisi helpommin ymmärrettävää?

  • Liitä ensin lämpötila-anturi takaisin kytkentään ja varmista että johdot ovat oikein.
Tehtävä

Syötä alta löytyvä koodi Arduinollesi. Lue huolella koodin kommentit.

Avaa Serial monitor. Kokeile nyt lämmittää anturia ja anna sen viilentyä. Tutki mitä lukemia saat ja vastaa lopuksi sivun alalaidassa olevaan monivalintaan.

float jannite = 0.0;  
float lampo = 0.0;  // float: desimaalilukujen tyyppi, nyt ei pärjätä kokonaisluvuilla
  
void setup()
{
  Serial.begin(9600);
}
  
void loop()         
{
  //Mehackit-board mittaa anturiporteissa aina jännitteen muutosta, 
  //ja muuttaa jännitteen numeroksi välillä 0-1023. 
  //Alla muutetaan anturilukema takaisin jännitelukemaksi. 
  //Jännite täytyy tietää, jotta voidaan laskea lämpötila.
  jannite = analogRead(A0) * 5.0 / 1024;   Serial.print(jannite);  
  Serial.print("V   ");
  // Alla olevalla kaavalla lasketaan, mikä anturin havaitsema lämpötila on
  //celcius-asteina.  Kaava on anturin valmistajan tuottama. 
  lampo = (jannite-0.5) * 100;  
  //Lopuksi tulostetaan lämpoötila-arvo Serial monitoriin. 
  Serial.print(lampo);  
  Serial.println("'C");
  delay(300);
}

Anturin mittaamat lämpötilat vaihtelevat aika paljon.
Mitä mielestäsi voisi tehdä, jotta lämpötilamittauksesta tulee tarkempi?