Tartalom:
- Fénytani alapismeretek, lux és lumen mértékegységek megismerése, megvilágítás intenzitása gyakorlati példákkal
- A TEPT4400 fotótranzisztor működése, karakterisztikái, bekötése egy áramkörbe
- Soros ellenállás méretezése a gyakorlati felhasználás igénye alapján
- Mérési eredmények, mintapéldák
- Fényerő szabályozási tapasztalatok természetes (napsütötte) körülmények között
————————————————————————————-
Egy kis elmélet! Mi a megvilágítás azaz a lux? (Wikipédia-ban található infót másoltam ide)
A megvilágítás az adott területre eső fényáram mértékegysége. A fényáram (mértékegysége a lumen) elképzelhető úgy, mint a jelen lévő látható fény összege, a megvilágítás pedig, mint az adott területre eső fényáram intenzitása. Egy lux az a megvilágítás, amelyet 1 lumen fényáram 1 négyzetméteren létrehoz!
Egy adott mennyiségű fény nagyobb területen elosztva halványabban fogja azt megvilágítani, azaz a megvilágítás mértéke fordítottan arányos a terület nagyságával. Ezért van az, hogy a zseblámpa fényét mérve a lux mérő közelről többet mutat, mint távolabbról. Példák a lux értékekre, hogy el tudjuk képzelni.
A célom az volt, hogy egy 7 szegmens-es led kijelző fényereje alkalmazkodjon a környezeti megvilágításhoz. A kijelző működött teljes sötétségben éjszaka, és nappal is, amikor közvetlenül rásütött a nap. Nyilván éjjel kellett a minimum, teljes napsütésben pedig a maximum fényerő. Mivel a kijelző MAX7219 IC-vel épített led mátrix kijelzőket is tartalmazott, 16 fényerő fokozatot lehetett beállítani. Vettem tehát egy TEPT 4400 fototranzisztort, mint legolcsóbb megoldás. Mondjuk ezt itt Magyarországon vettem 200Ft-ért, a modulok között található BH1750 szenzor pedig 284Ft volt szállítással együtt. Azonban egy fototranzisztort bekötni és használni időnként mégis könnyebb. Hosszabb lehet a vezeték mint I2C busz esetén stb.
Elsőként azt kellett megállapítani, hogy használható-e a fototranzisztor fényerő beállításra, és ha igen milyen áramkörben. Nézzük először a fototranzisztor adatlapját. Itt egy ábra a megvilágítás és az átfolyó áram kapcsolatáról:
Már itt látszik, hogy lesznek nehézségek! Az adatlap 200 lux-ig ad értékeket, miközben nekem 0-100.000 lux közötti tartományban kellene mérnem. Láthatóan kísérletezgetni kell, hogy mi van 200 lux fölött.
Ezt a kapcsolás használtam a kisérletezéshez:
Ha gyakorlatban is meg akarjuk építeni a kapcsolást, az első akadály a kivezetések azonosítása. A fototranzisztor így néz ki:
Az adatlapon, ami összesen 6 oldalas, percekig kerestem, hogy hol írták le, melyik a hosszabb, és melyik a rövidebb kivezetés. Íme a részlet ahol magtaláltam (jó szórakozást):
Megállapíthatjuk tehát, hogy a hosszabb kivezetés az emitter, ezt kell az ellenálláshoz kötni, míg a rövidebb a collector, amit a tápfesz pozitív pólusához kell kapcsolni.
A kísérletem úgy nézett ki, hogy letöltöttem egy lux mérő programot a telefonomra. A fototranzisztort és a telefon érzékelőjét egymás mellé raktam az asztalon, miközben hadonásztam egy zseblámpával és mértem a kimenő feszültséget. Láthatóan csak erős becslésre lehet számítani. Mennyire pontos a telefon fénymérője? Mennyire azonos a telefon és a fototranzisztor megvilágítása ha egymás mellett vannak? Durva hibákra lehet számítani, de ez is több mint a semmi! Különböző ellenállás értékekkel próbálkoztam, és néhány lux értéket próbáltam rögzíteni.
1 Kohm soros ellenállás
LUX | V |
20 | 0.013 |
50 | 0.032 |
100 | 0.07 |
500 | 0.33 |
5000 | 4.3 |
Ez a mérés elég biztató! 5000 lux-ig fel tudtam menni. Azonban a 0-500 lux tartományban alig változik a feszültség. Pedig itt kell a 15 fényerőszintből legalább 10-et beállítani. Várhatóan 10.000 lux felett (napsütés), már maximális fényerőre lesz szükség. Meg kell jegyeznem, hogy ez lett a nyerő ellenállás érték!
10 Kohm soros ellenállás
LUX | V |
20 | 0.10 |
50 | 0.4 |
100 | 0.7 |
500 | 3 |
5000 | 5 |
Még ez is jó lehet, azonban 5000 luxnál gyakorlatilag teljesen kinyitott a tranzisztor, és az áramkör kimenő feszültsége elérte a maximumot. A wikipédiás táblázat alapján valahol a borult idő és a nem közvetlen napsütés között vége a mérésnek.
47 Kohm soros ellenállás
LUX | V |
25 | 0.7 |
50 | 1.5 |
100 | 3.1 |
500 | 4.9 |
Ez már a digitális tartomány. 500 lux-nál (szobai megvilágítás) már teljesen kinyitott a tranzisztor. Nekem ez várhatóan nem lesz jó, de ha alkonyat kapcsolóra lenne szükségem, akkor valószínűleg így használnám. A sötétedés kapcsolási pontját elég széles tartományból lehetne kiválasztani, és beállítani.
Programpéldát nincs értelme írni, annyira egyszerű a feladat. Az analóg bemeneten lehet mérni a kimenő feszültséget, és felhasználni a mért értéket. A kijelző készítésekor azonban több probléma is kiderült. Pl. a minimum fényerő elég nagy ugrás a 0-hoz képest. Vagyis a led fénye nem csak úgy fokozatosan beúszik a sötétbe, hanem egyszer csak egy határozott fényerő szinten megjelenik. Ez nem baj, csak megemlítem. Teljes sötétségben lehetett volna a minimum fényerő még kisebb is. PWM szabályozást alkalmaztam, s nem a várt módon működött, de ez nyilván a szemünk működésével van összefüggésben. Másik gond a fényerő határok környékén volt. Ha a fényerő kismértékben változik (pl. a szomszéd udvarában fújta a szél az almafa lombját, és az átszűrődő fény gyors ütemben változott), hajlamos a kijelző villogásra, azaz a két szomszédos fényerőszint között kapcsolgat idegbeteg módon. Ezt átlagolással oldottam meg, azaz csináltam egy tömbből egy fifo tárolót, és folyamatosan másodpercenként léptettem be a mérési eredményeket. Viszont a kijelzők fényerejét mindig a mért értékek átlaga alapján állítottam be. A bekapcsolás elég látványos, mert kezdetben a fifo minden értéke 0, és ahogy belépnek a mért értékek, az átlag emelkedik, azaz nő a fényerőszint a minimumról az aktuálisra. Találós kérdés: kikapcsoláskor fokozatosan csökken nullára a fényerő? (válasz: nem, mert ha kikapcsolod a kütyüt azonnal elalszik minden led)
Ennek a programnak egy részlete:
void fenyero_beallitas() { for (byte j=9;j>0;j--) {mert_fenyero[j]=mert_fenyero[j-1];} mert_fenyero[0]=analogRead(A6); fenyertek=(mert_fenyero[0]+mert_fenyero[1]+mert_fenyero[2]+ mert_fenyero[3]+mert_fenyero[4]+mert_fenyero[5]+mert_fenyero[6]+ mert_fenyero[7]+mert_fenyero[8]+mert_fenyero[9])/10; }
A példa programrész függvényét másodpercenként hívtam meg, és a „fenyertek” változóban kaptam meg az aktuális átlagos fényerő értéket, amit felhasználtam a fényerő beállításban. A “mert_fenyero” és “fenyertek” változók globális változók! Biztosan nem egy szép megoldás, de működik!