Vklop razsvetljave v odvisnosti od svetlobe
Izdelali bomo program, ki bo krmilil razsvetljavo v odvisnosti od svetlobe. Razsvetljava bo vklopljena, še senzor svetlobe zazna temo in izklopljena pri dnevni svetlobi. Za razsvetljavo bomo uporabili 5 visoko svetlečih LED diod modre barve.
Senzor svetlobe, fotoupor LDR (Light Dependent Resistor) ima to lastnost, da se mu s spreminjanjem stvetlobe spreminja upornost. Bolj je osvetljen, manjša je njegova upornost.
Slika 1: Fotoupor (vir: http://labduino.blogspot.com/p/x.html, 18. okt. 2014).
Takšni fotoupori, kot jih bomo uporabili pri vaji, imajo pri dnevni svetlobi upornost okoli 5 kΩ, zatemnjeni pa okoli 100 kΩ. Zaporedno s fotouporom moramo povezati ustrezen upor (10 kΩ), da se lahko na fotouporu spreminja napetost pri različni svetlobi.
Slika 2: Spreminjanje napetosti na fotouporu v odvisnosti od svetlobe.
Za razsvetljavo bomo uporabili 5 visoko svetlečih LED diod. Te porabijo za svoje delovanje večji tok, kot je dopusten za obremenitev izhoda razvojne plošče Intel Galileo. Zato krmilimo razsvetljavo preko optosklopnika, ki galvansko loči krmilni del od razsvetljave. S tem smo zaščitili razvojno ploščo Intel Galileo pred uničenjem. Optosklopnik vsebuje svetlečo LED diodo in fototranzistor. Ko svetleča LED dioda zasveti, začne fototranzistor prevajati. Skozi tuljavico releja steče el. tok in rele pritegne (vklopi delovni kontakt). Preko delovnega kontakta releja se sklene tokokrog za razsvetljavo, ki vklopi in ostane vklopljena tako dolgo, dokler je rele vklopljen. Rele pa je vklopljen tako dolgo, dokler je na pinu 10 razvojne plošče Intel Galileo napetost 5 V (logična 1). Optosklopnik in rele krmilimo s tranzistorjema BC337.
Napetost ki se spreminja na fotouporu, je tudi napetost na analognem vhodu A1 razvojne plošče Intel Galileo. Analogni vhod uporabimo zato, ker se ta napetost spreminja v odvisnosti od svetlobe. Katera pa je tista napetost, pri kateri se naj vklopi razsvetljava? V zatemnjenem prostoru, pri takšni svetlobi, pri kateri želimo da je razsvetljava vklopljena, napetost na fotouporu izmerimo z voltmetrom. Predpostavimo, da smo izmerili napetost 2 V. Razvojna plošča Intel Galileo vsebuje digitalno-analogni pretvornik (D/A), ki napetost na analognem vhodu pretvarja v bitni podatek. Če je A/D pretvornik 10-bitni, je pri 5-ih voltih ta vrednost 1024. Sedaj enostavno izračunamo, kolikšna je ta vrednost pri 2 V:
5 V => 1024
2 V => x
-----------------------------
x = 1024*2/5 = 410
Če torej želimo, da se vklopi razsvetljava pri napetosti na fotouporu (in tudi na analognem vnodu A1) 2 V, moramo v programu vpisati pogojni podatek z upoštevano vrednostjo 410. Če bo ta podatek večji, pomeni da je tudi napetost na fotouporu večja (bolj temno), če pa bo manjši, bo tudi napetost na fotouporu manjša (bolj svetlo).
V program bomo vključili še serijski monitor, kjer naj se izpisuje vrednost napetosti na analognem vhodu ter ali je razsvetljava vklopljena ali izklopljena.
Slika 3: Sestava elementov na eksperimentalno ploščico in priključitev na razvojno ploščo Intel Galileo.
Slika 4: Električna shema vezja in priključitev na razvojno ploščo Intel Galileo.
Spisek potrebnega materiala:
Upor 10 kΩ
Upor 4,7 kΩ
Upor 1 kΩ
Upor 330 Ω, 5 kos
Tranzistor BC337, 2 kos
Optosklopnik H11AA1
Rele TRK22, 5 V
Led diode, visoko svetleče modre, 5 mm, 5 kos
Fotoupor LDR
razvojna plošča Intel Galileo
Program za krmiljenje razsvetljave v odvisnosti od svetlobe
/*
Krmiljenje razsvetljave v odvisnosti od svetlobe.
Avtor: Milan Ivič, oktober 2014
*/
int LED_pin = 10; //Razsvetljavo krmilimo iz pina 10
int Fotoupor_pin = A1; //Analogni vhod A1, napetost na fotouporu
int Fotoupor_vrednost; //Spremenljivka za shranjevanje vrednsti na fotouporu (bitni podatek)
void setup()
{
pinMode(LED_pin, OUTPUT); //Pin 10 je izhodni pin
Serial.begin(9600); //Komunikacija za serijski monitor
}
void loop()
{
Fotoupor_vrednost = analogRead(Fotoupor_pin); //Branje napetosti na fotouporu (0 - 1023)
int Vrednost = analogRead(A1);
float Napetost = Vrednost*5.0/1024.0; //Izračun napetosti, realno število, zato tip float
Serial.print("Napetost na analognem vhodu A1: "); //Izpis na serijski monitor
Serial.print(Napetost); //Izpis vrednosti napetosti
Serial.print(" V");
if(Fotoupor_vrednost > 410) //Ali je napetost večja od 2,5 V?
{
digitalWrite(LED_pin, HIGH); //Ja, vklopi razsvetljavo
Serial.println(" Razsvetljava je vklopljena");
}
else
{
digitalWrite(LED_pin, LOW); //Napetost ni večja od 2,5 V, razsvetljava izklopljena
Serial.println(" Razsvetljava je izklopljena");
}
delay(1000);
}
Prikaz na serijskem monitorju pri različnih napetostih na analognem vhodu A1 (različnih osvetlitvah fotoupora):
Slika 5: Izpis ustreznih podatkov na serijski monitor.
Prikaz sestavljenega vezja na eksperimentalni ploščici in povezava z razvojno ploščo Intel Galileo. Senzor svetlobe je zaznal temo, razsvetljava je vklopljena:
Slika 7: Prikaz sestavljenega vezja, razsvetljava je vklopljena.