Table of Contents

 

Fototakisti

Vajalikud teadmised: [HW] Kasutajaliidese moodul, [ELC] Pingejagur, [AVR] Analoog-digitaalmuundur, [LIB] Analoog-digitaalmuundur, [LIB] Graafiline LCD, [LIB] Andurid

Teooria

Fototakisti elektriline tähis
Fototakisti

Fototakisti on andur, mille elektriline takistus muutub sõltuvalt temale pealelangeva valguse intensiivsusest. Mida intensiivsem on valgus, seda rohkem tekib vabu laengukandjaid ning seda väiksemaks jääb elemendi takistus. Fototakisti kaks välist metallkontakti ulatuvad läbi keraamilise alusmaterjali valgustundliku kileni, mis oma geomeetria ja materjali omaduse poolest määravad elektrilised takistuslikud omadused. Kuna fototundlik materjal on iseloomult suure takistusega, siis peenikese käänulise rajaga elektroodide vahel saavutatakse madal elemendi kogutakistus keskmise valguse intensiivsuse juures. Nii nagu inimese silm, on ka fototakisti tundlik kindlale valguse lainepikkuse vahemikule. Fotoelemendi valikul tuleb sellega kindlasti arvestada, kuna vastasel juhul ei pruugi see rakenduses kasutatavale valgusallikale üldse reageeridagi. Siinkohal olgu ära toodud nähtava valguse lainepikkused jaotatuna lihtsustatult värvide järgi.

Värv Lainepikkuse vahemik (nm)
Lilla 400 – 450
Sinine 450 – 500
Roheline 500 – 570
Kollane 570 – 590
Oranž 590 – 610
Punane 610 – 700

Fototakistil on kindlasti määratud ka töötemperatuuri vahemik. Kui tahta lasta anduril töötada erinevatel temperatuuridel, siis tuleb kindlasti sisse viia täpsustavad teisendused, kuna anduri takistuslik omadus sõltub välistemperatuurist.

Valguse intensiivsuse iseloomustamiseks kasutatakse füüsikalist suurust valgustustihedus (tähis E), mis näitab mingile pinnale jõudva valgusvoo hulka. Mõõdetavaks ühikuks on luks (lx), kus 1 luks tähendab, et 1 m2 suurusele pinnale langeb ühtlaselt valgusvoog 1 luumen. Reaalses elus praktiliselt kunagi aga ei lange valgus (elamis)pinnale ühtlaselt ning seetõttu valgustustihedus saadakse rohkem keskmise väärtusena. Võrdluseks olgu ära toodud ka mõningad valgustustiheduse näited:

Keskkond Valgustustihedus (lx)
Täiskuu 0,1
Hämarus 1
Auditoorium 10
Päikesetõus või -loojang 400
Otsene päikesevalgus 10000

Praktika

Kodulabori moodul on varustatud VT935G fototakistiga. Selle üks viik on ühendatud toitega ja teine mikrokontrolleri analoog-digitaalmuunduri analoog kanaliga (Kodulabor II puhul kanal 1, Kodulabor III puhul kanal 13). Sama mikrokontrolleri viigu ja maaga on ühendatud ka takisti, mis koos fototakistiga moodustab pingejaguri. Kuna fototakisti elektriline takistus väheneb temale langeva valguse intensiivsuse kasvades, siis mõõdetav pinge mikrokontrolleri viigu peal kasvab valguse intensiivsuse kasvades. Tasuks arvestada, et Kodulaboris kasutatav fototakisti reageerib kõige intensiivsemalt kollasele ja oranžile valgusele.

VT935G andur ei olegi tegelikult mõeldud konkreetseks mõõteseadmeks, pigem üldiste valgustingimuste määramiseks - näiteks kas ruumis põleb lamp või mitte. Sel juhul tuleb lihtsalt mõõta anduri takistus poolpimedas ruumis, see programmi kirja panna ja selle abil võrrelda mõõdetavat - kas on heledam või pimedam.

Käesolev harjutus on aga natukese keerulisem, kuna leitakse andurile langeva valguse valgustustihedust luksides. Selle tegemiseks on kasutusel ligikaudne arvutusvalem ja ujukoma arvud. Ujukoma arvud on C-keeles float ja double tüüpi, millega saab esitada murdarve. Nende puuduseks on suhteliselt suur ressursinõudlikkus. Arvutites on nende arvutamiseks spetsiaalne riistvara, 8-bitisel AVR mikrokontrolleril tehakse arvutused tarkvaras, mis võtab suhteliselt palju programmimälu ja aega. Kui puudused pole olulised, on ujukoma arvud väärt kasutamist.

VT935G valgustustiheduse (E) ja elektritakistuse (R) vaheline seos

Fototakisti valgustustiheduse ja elektritakistuse vahelise seose kohta annab anduri andmeleht ligikaudse valemi. Nagu kõrvalolevalt graafikult näha, on logaritmskaalas valgustustihedus ja takistus ligikaudu lineaarses seoses ning moodustavad sirge võrrandi, sest kehtib teisendus:

log(a/b) = log(a) - log(b)

Seost iseloomustab γ faktor (sirge tõus), mis VT935G anduril on 0,9. Teada on ka joone ühe punkti andmed: 18,5 kΩ takistus (RA) 10 lx valgustustiheduse (EA) juures. Seega on olemas 1 punkti koordinaadid ja sirge tõus ning iga muu punkti arvutamiseks piisab vaid ühest koordinaadist. Ehk kui mõõta anduri takistus (RB), saab joone võrrandist arvutada andurile langeva valgustustiheduse (EB). Avaldame joone võrrandist EB:

log(EB) = log(RA/RB) / γ + log(EA)

EB = 10log(RA/RB) / γ + log(EA)

Sellega on takistusest valgustustiheduse arvutamise valem olemas. Takistust otse aga mikrokontrolleriga mõõta ei saa - selleks on fototakisti pingejaguris, mille väljundpinge teisendab analoog-digitaalmuundur konkreetseks arvuks (ADC). Takistuse leidmiseks tuleb kõigepealt arvutada ADC väärtusest pingejaguri väljundpinge (U2), arvestades ka muunduri võrdluspinget (Uref). Valem on selline:

U2 = Uref ⋅ (ADC / 1024)

Pingejaguri valemist (vaata pingejaguri peatükki) saab leida skeemis ülemise fototakisti takistuse (R1):

R1 = (R2 ⋅ U1) / U2 - R2

Järgnevalt on pinge ja takistuse arvutamisel teadaolevad tegurid asendatud väärtustega ja alaindeksid ära jäetud:

U = 5 ⋅ (ADC / 1024)

R = (10 ⋅ 5) / U - 10

Valgustustiheduse leidmisel saab teha lihtsustavaid teisendusi:

E = 10log(18,5/R) / 0.9 + 1 = 10log(18,5/R) ⋅ 10/9 ⋅ 101 =

= 10log18,5 ⋅ 10/9 - logR ⋅ 10/9 ⋅ 10 = (10log18,5 ⋅ 10/9 / 10logR ⋅ 10/9) ⋅ 10 =

= (18,510/9 / R10/9) ⋅ 10 = 18,510/9 ⋅ 10 ⋅ R-10/9

Arvutades välja muutuja R ees oleva konstandi, jääb avaldis kujule:

E = 255,84 ⋅ R-10/9

Nende valemite abil saab kasutada vaid Kodulabori moodulil olevat fototakistit. Teiste komponentidega skeemi kasutades tuleks valemites muuta vastavaid arvväärtusi. Järgnevalt on toodud näidisprogrammi lähtekood, mis teostab ADC-ga mõõtmist, arvutamist ja valgustustiheduse kuvamist LCD ekraanile.

Näidisprogrammis defineeritakse pinge, takistuse ja valgustustiheduse muutujad ujukoma tüüpi arvuna double. Arvud, mida soovitakse kindlasti ujukoma tehetes kasutada, peavad alati sisaldama komakohta (C-keeles punkti), olgu kas või nulli, sest siis ei tõlgenda kompilaator neid valesti.

// Kodulabori fototakisti näidisprogramm
// LCD ekraanil kuvatakse ligikaudne valgustustihedus luksides
#include <stdio.h> 
#include <math.h>
#include <homelab/module/lcd_gfx.h>
#include <homelab/adc.h>
#include <homelab/delay.h>
 
// Põhiprogramm
int main(void)
{ 
	char text[16];  
	unsigned short adc_value;
	double voltage, resistance, illuminance;
 
	// LCD ekraani seadistamine
	lcd_gfx_init(); 
 
        // LCD taustavalguse tööle seadmine
        lcd_gfx_backlight(true);
 
	// LCD ekraani puhastamine
	lcd_gfx_clear();
 
        //LCD-l kirjutamise koha valik
        lcd_gfx_goto_char_xy(3, 2);
 
	// Programmi nimi
	lcd_gfx_write_string("Luksmeeter");
 
	// ADC muunduri seadistamine
	adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); 
 
	// Lõputu tsükkel
	while (1)
	{
		// Fototakisti keskmise väärtuse lugemine
		adc_value = adc_get_average_value(13, 10);
		// Kodulabor II
		//adc_value = adc_get_average_value(1, 10);
 
		// Pinge arvutamine ADC sisendis
		// Kodulabor II 		
		//voltage = 5.0 * ((double)adc_value / 1024.0);
		// Kodulabor III
		voltage = 2.0625 * ((double)adc_value / 2048.0);
 
		// Fototakisti takistuse arvutamine pingejaguris
		// Kodulabor II
		//resistance = (10.0 * 5.0) / voltage - 10.0;
		// Kodulabor III
		resistance = (33.0) / voltage - 10.0;
 
		// Valgustustiheduse luksideks arvutamine		
		illuminance = 255.84 * pow(resistance, -10/9);
		// Muutuja ekraanile kuvamiseks selle kaheks
		// eraldi täisarvuliseks muutujaks jagamine
		int8_t illu = illuminance;
    		int16_t illudp = trunc((illuminance - illu) * 1000);
 
		// Valgustustiheduse tekstiks teisendamine		
		sprintf(text, "%3u.%3u lux   ", illu,illudp); 
 
		// Näidu LCD-l kuvamine
		lcd_gfx_goto_char_xy(3, 3);
		lcd_gfx_write_string(text);
 
		// Viide 500 ms
		sw_delay_ms(500);
	}
}