Yleistä

Valovastus eli LDR on vastus, joka reagoi valon määrään. Sitä voikin käyttää sensorina jolla saamme vaikka valot syttymään kun on pimeää tai vaikka vaihdella valojen vilkutuksen nopeutta. Esimerkissä rakennetaan kytkentä ja ohjelma, jossa led syttyy päälle kun tulee tarpeeksi pimeää.

Tarvitset tehtävää varten tietokoneen.

Voit tehdä kytkennän alla mainituilla osilla tai hyödyntää valmista permaproto-kytkentää, jonka löydät Meta-boxi tarvikkeista. Permaproto-kytkennän kanssa tarvitset Arduino-mikrokontrollerin, tietokoneen ja USB-johdon.

 

Osat

Valovastus

Led

 

Vastus (220 ohm ja 4.7kOhm)

Tarvitset kaksi vastusta, yksi vastus valovastukselle ja yksi ledille. Voit käyttää ledille 220 ohmin vastusta (värikoodi: punainen, punainen ruskea, kulta) ja valovastukselle esimerkiksi 4.7 kilo-ohmin (keltainen, violetti, punainen, kulta) tai 10 kilo-ohmin vastuksen (ruskea, musta, oranssi, kulta). Vastuksen koko vaikuttaa valovastuksen arvoihin.

Arduino

 

Koekytkentälevy

 

 Hyppylankoja

Tarvitset jokaiselle kirjasinnäytön kirjaimen ledille oman hyppylangan. Koko näytön käyttämiseen tarvitset siis yhdeksän hyppylankaa.

USB A-B

Kytkennät

Alla oleva kuva näyttää valovastuksen (viitataan jatkossa nimellä LDR (light dependant resistor) ja ledin kytkemisen. Tässä vielä huomioita

  1. Led on kytketty pinniin 9.
  2. Valovastus on kytketty 5-volttiin ja maahan (GND) ja valovastuksen ja maan välissä on 10 kilo-ohmin tai 4.7-kilo-ohmin vastus. Valitsemasi vastus vaikuttaa valovastuksen tuottamiin arvoihin, mutta periaatteessa voit käyttää kumpaa vain vastusta.
  3. Valovastuksen arvo luetaan sen toisesta jalasta, samasta mistä vastus lähtee kohti maata. Ajatuksena on siis se että Arduino vain kuuntelee mitä valovastuksessa tapahtuu ja kertoo sen meille, jolloin voimme ohjelmoida Arduinon tekemään jotain tämän tiedon perusteella.

Ohjelmointi

Graafinen ohjelmointi Snap4Arduinolla

  1.     Avaa Arduino IDE
  2.     Kytke Arduino UNO koneeseen USB kaapelilla
  3.     Avaa Arduino IDE ja lataa Arduinoon Firmata-koodi (Tiedosto -> Esimerkit -> Firmata -> StandartFirmata). 
  4.     Avaa Snap4Arduino-ohjelmointiympäristö ja aktivoi Arduino ohjelmointiympäristöön painamalla ”Connect Arduino”. Katso kuvasta.

Koodin rakentaminen Snap4Arduino ohjelmointiympäristössä

Alla valmis koodi. Vaiheittaiset ohjeet löydät kuvan alta.

6. Selvittääkseen onko valoisuus tarpeeksi alhainen, on valovastuksesta tuleva arvo tallennettava. Tälläisten tietojen tallentamiseen ohjelmoinnissa käytetään muuttujia. Muuttuja voi olla mikä vain sana ja se tulee määritellä itse. Määrittele muuttuja Muuttujat-välilehdestä.

Valitse ”Uusi muuttuja” ja anna muuttujan nimeksi jokin kuvaava nimi. Esimerkiksi ”ldr”.

7. Aloita koodi valitsemalla Ohjaus-välilehdestä komento ”kun klikataan (vihreä lippu)”. Löydät kuvan valmiista koodista kokonaisuudessaan alta.

8. Valitse Ohjaus-välilehdestä ”ikuisesti”-komento ja raahaa se koodin jatkoksi.

9. Koska ohjelma sytyttää tai sammuttaa ledin valoisuuden mukaan, tarvitsee koodiin tuoda muuttuja ”ldr”. Valitse Muuttujat-välilehdestä aktiiviseksi muuttuja ldr ruksittamalla muuttuja valikosta. Raahaa ”aseta muuttujan [ ] arvoksi [0]”-komento ikuiseti-ehtolauseen sisään. Valitse komennon alasvetovalikosta muuttuja ”ldr”.

10. Raahaa Arduino-valikosta muuttujan arvoksi ldr:stä saatava arvo, eli ”analog reading ( )” ja upota se luvun 0 tilalle oranssiin palikkaan. Valitse tämän jälkeen analog reading -palikan alasvetovalikosta oikea pinni, johon ldr on kiinnitetty, eli pinni 0.

11. Valitse Muuttujat-valikosta vielä ”näytä muuttuja”-komento, raahaa se seuraavaksi koodiin ja valitse alasvetovalikosta ”ldr”. Nyt arvo näkyy varmasti koko ajan ohjelmaruudussa.

12. Valitse Ohjaus-välilehdestä ”jos/muuten”-ehtolause ja raahaa se ohjelmaan. Sijoita ehtolause ”ikuisesti”-ehtolauseen sisään, edellisen muuttujaskriptin jatkoksi.

13. Valitse Laskenta-välilehdestä ”[ ] < [ ]” eli ”on pienempi kuin” lause ja liitä se ”jos/muuten” ehtolauseen ehtokenttään. Täytä tarvittavat arvot tyhjiin kenttiin seuvaavanlaisesti.

14. Valitse Arduino-välilehti ja raahaa ”analog reading ( )” ensimmäiseen tyhjään ruutuun. Valitse alasvetovalikosta arvoksi ”0”.

15. Ehtolauseen ehdon raja-arvoksi tulee esimerkissä arvo 200. Kirjoita luku 200 ”on pienempi kuin” lauseen tyhjään ruutuun. Voit kokeilla ensin hakea sopivaa arvoa peittämällä ldr:ää koekytkentälevystä ja lukemalla mikä arvo ohjelmaruudun muuttujakentässä näkyy. Analog readgin arvo voi vaihdella paljonkin riippuen siitä kuinka valoisa huone on missä työskentelet. Lukema voi olla esim. 700. Kokeile mikä on sinulle oikea arvo.

16. Määritä mitä tapahtuu kun valoisuuden arvo on alle 200. Esimerkissä led syttyy päälle. Valitse Arduino-välilehdestä ”set digital pin ( ) to < >” ja raahaa se ”jos analog reading 0 < 200” alle. Täytä arvoiksi alavalikosta pin 9 ja valitse se menemään aktiiviseksi.

17. Aseta ehtolauseen ”jos/muuten” jälkimmäiseen, eli muuten-osioon led sammumaan. Valitse Arduino-välilehdestä ”set digital pin (9) to <x>”.


Tekstipohjainen ohjelmoiminen Arduino IDE:ssä

  1.     Avaa Arduino IDE ohjelmointiympäristö
  2.     Kytke Arduino kiinni koneeseen USB A to B kaapelilla.
  3.     Määrittele ensin muuttuja jota käytetään valovastuksen lukemiseen

int ldr=0;

4. Määrittele tämän jälkeen void-funktiolla Serial Communication yhteys. Tämä on yhteys Arduinosta tietokoneeseen, jolloin voit seurata valovastuksesta saatavia arvoja Arduino IDE:llä. Seurataksesi arvoja, avaa Serial monitot Arduino IDE:n oikeasta yläkulmasta (suurennuslasi-kuvake). Vielä ei mitään arvoja näy.

void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);  //led kiinnitetään pinniin 9
}

5. Määrittele ensin ldr-muuttuja lähettämään saatu arvo serial monitoriin. Voit kokeilla saatko arvon muuttumaan peittämällä ldr:n kädelläsi.

void loop() {
Serial.println(analogRead(ldr));

}

6. Lisää koodiin loop-funktion sisään (kirjoitettu edellä: void loop()) osio, joka luo muuttujan sensorista luettavalle arvolle. Nimeä muuttuja selväsi. Esimerkissä se on nimetty ”rajaarvo”. Muista kirjoittaa koodia vain sulun ”}” sisäpuolelle.

int rajaarvo = analogRead(ldr);

7. Liitä lopuksi ehtolause, jossa määritellään millä rajaarvolla led syttyy tai sammuu. Voit halutessasi muuttaa raja-arvoa sopivaksi hyödyntämällä Serial monitorista saatavaa lukemaa. Muista tarkistaa että ”}” sulku on koodin loppussa eikä väärässä välissä.

if (rajaarvo < 250) { digitalWrite(9, HIGH);  //led päälle } else { digitalWrite(9,LOW);  //led pois päältä } }


8. Lopuksi vielä koko koodi

int ldr=0; void setup() { Serial.begin(9600); pinMode(9, OUTPUT); //led kiinnitetään pinniin 9 } void loop() { Serial.println(analogRead(ldr)); int rajaarvo = analogRead(ldr); if (rajaarvo < 250) //raja-arvo, jonka mukaan led joko on päällä tai ei ole päällä { digitalWrite(9, HIGH); //led päälle } else { digitalWrite(9,LOW); //led pois päältä } }

 

Mitä seuraavaksi?

  • Kokeile rohkeasti muuttaa delay(1000)-komennon aikoja. Kokeile esimerkiksi kolmen sekunnin vilkutusta laittamalla delayn arvoksi 3000. Muistathan että muokattu koodi tulee aina ladata uudelleen Arduinoon!
  • Kokeile yhdistää valovastusta muihin tekemiisi harjoituksiin, esimerkiksi moottoriin!