Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:sensor:photoresistor [2014/09/30 09:05] raivo.sellet:examples:sensor:photoresistor [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Fototakisti ====== ====== Fototakisti ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:sensor]], [HW] [[et:hardware:homelab:digi]], [ELC] [[et:electronics:voltage_divider]], \\ [AVR] [[et:avr:adc]], [LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]], \\ [PRT] [[et:examples:setup:eclipse]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:digi]], 
 +[ELC] [[et:electronics:voltage_divider]],  
 +[AVR] [[et:avr:adc]],  
 +[LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]],  
 +[LIB] [[et:software:homelab:library:module:sensor]]//
  
 ===== Teooria ===== ===== Teooria =====
  
-[{{  :examples:sensor:photoresistor:sensor_photoresistor.jpg?150|Fototakisti}}] 
 [{{  :examples:sensor:photoresistor:sensor_photoresistor_designator.png?150|Fototakisti elektriline tähis}}] [{{  :examples:sensor:photoresistor:sensor_photoresistor_designator.png?150|Fototakisti elektriline tähis}}]
 +[{{  :examples:sensor:photoresistor:sensor_photoresistor.jpg?150|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. 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.
Line 27: Line 32:
 | Hämarus             | 1            |  | Hämarus             | 1            | 
 | Auditoorium             | 10            | Auditoorium             | 10           
-| Klassiruum             | 30            
 | Päikesetõus või -loojang  | 400          |  | Päikesetõus või -loojang  | 400          | 
-| Haigla operatsioonisaal   | 500 - 1000    
 | Otsene päikesevalgus     | 10000        |  | Otsene päikesevalgus     | 10000        | 
  
Line 38: Line 41:
 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. 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 valgeva 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.+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.
  
 [{{  :examples:sensor:photoresistor:sensor_photoresistor_vt935g_slope.png?260|VT935G valgustustiheduse (E) ja elektritakistuse (R) vaheline seos}}] [{{  :examples:sensor:photoresistor:sensor_photoresistor_vt935g_slope.png?260|VT935G valgustustiheduse (E) ja elektritakistuse (R) vaheline seos}}]
Line 76: Line 79:
 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. 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. //sprintf// abil ujukoma arvu tekstiks teisendades tuleb kasutada "%f" formaati, mida võib täiendada täis- ja komakohtade arvuga, näiteks "%3.2", mis kuvab alati 3 täis- ja 2 komakohta.+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. 
  
 <code c> <code c>
-// +// Kodulabori fototakisti näidisprogramm
-// Kodulabori fototakisti näidisprogramm.+
 // LCD ekraanil kuvatakse ligikaudne valgustustihedus luksides // LCD ekraanil kuvatakse ligikaudne valgustustihedus luksides
-// 
 #include <stdio.h>  #include <stdio.h> 
 #include <math.h> #include <math.h>
Line 89: Line 90:
 #include <homelab/delay.h> #include <homelab/delay.h>
  
-// 
 // Põhiprogramm // Põhiprogramm
-// 
 int main(void) int main(void)
  
Line 101: Line 100:
  lcd_gfx_init();   lcd_gfx_init(); 
  
-        //LCD taustavalguse tööle seadmine+        // LCD taustavalguse tööle seadmine
         lcd_gfx_backlight(true);         lcd_gfx_backlight(true);
      
Line 117: Line 116:
  
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
- // Fototakisti keskmistatud väärtuse lugemine+ // Fototakisti keskmise väärtuse lugemine
  adc_value = adc_get_average_value(13, 10);  adc_value = adc_get_average_value(13, 10);
- // Kodulabor 2 puhul:  + // Kodulabor II 
- // adc_value = adc_get_average_value(1, 10);+ //adc_value = adc_get_average_value(1, 10);
  
  // Pinge arvutamine ADC sisendis  // Pinge arvutamine ADC sisendis
 + // Kodulabor II
 + //voltage = 5.0 * ((double)adc_value / 1024.0);
 + // Kodulabor III
  voltage = 2.0625 * ((double)adc_value / 2048.0);  voltage = 2.0625 * ((double)adc_value / 2048.0);
- // Kodulabor 2 puhul:  
- // voltage = 5.0 * ((double)adc_value / 1024.0); 
  
  // Fototakisti takistuse arvutamine pingejaguris  // Fototakisti takistuse arvutamine pingejaguris
 + // Kodulabor II
 + //resistance = (10.0 * 5.0) / voltage - 10.0;
 + // Kodulabor III
  resistance = (33.0) / voltage - 10.0;  resistance = (33.0) / voltage - 10.0;
- // Kodulabor 2 puhul:  
- // resistance = (10.0 * 5.0) / voltage - 10.0; 
   
- // Valgustustiheduse luksides arvutamine + // Valgustustiheduse luksideks arvutamine
  illuminance = 255.84 * pow(resistance, -10/9);  illuminance = 255.84 * pow(resistance, -10/9);
- // Lööme illuminance muutuja kaheks integer tüüpi muutujaks ekraanile kuvamiseks+ // Muutuja ekraanile kuvamiseks selle kaheks 
 + // eraldi täisarvuliseks muutujaks jagamine
  int8_t illu = illuminance;  int8_t illu = illuminance;
     int16_t illudp = trunc((illuminance - illu) * 1000);     int16_t illudp = trunc((illuminance - illu) * 1000);
et/examples/sensor/photoresistor.1412067924.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0