Luxmeter: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 47: | Riadok 47: | ||
[[Súbor:tcs230Table.png]] | [[Súbor:tcs230Table.png]] | ||
Maximálne rozlíšenie a presnosť je možné dosiahnuť meraním frekvencie. Meranie frekvencie oproti meraniu periódu má výhodu v tom, že sa obmedzení vplyv náhodných a vysokých frekvencií. Rozlíšenie je hlavne obmedzené veľkosťou čítača a prípustného meracieho času. Maximálna výstupná frekvencia senzoru je 600kHz a mikrokontrolér so zvolenou knižnicou na meranie frekvencie dokáže zmerať merať frekvencie do 8MHz. Meranie frekvencii je vhodné pre pomaly sa meniace alebo konštantú hodnoty osvetlenia. | |||
Riadok 59: | Riadok 53: | ||
Vzhľadom na to, že senzor obsahuje aj fotodiódy s farebnými filtrami, medzi ktorými sa vyberá pomocou vstupov, budú sa používať len diódy bez filtra. | Vzhľadom na to, že senzor obsahuje aj fotodiódy s farebnými filtrami, medzi ktorými sa vyberá pomocou vstupov, budú sa používať len diódy bez filtra. | ||
Na meranie výstupnej frekvencie som požil Timer1, ten má na starosti počítanie vonkajších impulzov a Timer2, ten má na starosti časovanie. O ich ovládanie sa stara kničnica FreqCounter.h | Na meranie výstupnej frekvencie som požil Timer1, ten má na starosti počítanie vonkajších impulzov a Timer2, ten má na starosti časovanie. O ich ovládanie sa stara kničnica FreqCounter.h | ||
Riadok 66: | Riadok 59: | ||
=== Algoritmus a program === | |||
Kód pre mikrokntrolér bol napísaný vo vývojovom prostredí Arduino. Program je jednoduchý najprv sa nastavia potrebné výstupy(fotodiódy bez filtra, škálovanie), potom sa periodicky meria frekvencia a po prepočte sa odosiela do PC. | |||
Kód pre mikrokontrolér: | |||
= | <source lang="c"> | ||
#include <FreqCounter.h> | |||
#define S2 0 | |||
#define S3 1 | |||
#define S1 2 | |||
#define S0 3 | |||
#define enable 4 | |||
void setup() { | |||
pinMode(S2,OUTPUT); //nastavenie vystupných pinov | |||
pinMode(S3,OUTPUT); | |||
pinMode(S1,OUTPUT); | |||
pinMode(S0,OUTPUT); | |||
pinMode(enable,OUTPUT); | |||
digitalWrite(enable,LOW); // povelenie vystupu | |||
digitalWrite(S1,HIGH); | |||
digitalWrite(S0,HIGH); // nastavenie skalovania na 100% | |||
digitalWrite(S2,HIGH); | |||
digitalWrite(S3,LOW); // zapnutie diod bez filtra | |||
Serial.begin(9600); // pripojenie sa k seriovemu portu | |||
} | |||
unsigned long int frq; | |||
unsigned long int ill; | |||
void loop() { | |||
FreqCounter::f_comp= 8; // nastavenie kompenzacie | |||
FreqCounter::start(100); // Start counting with gatetime of 100ms | |||
while (FreqCounter::f_ready == 0) //cakaj kym nie je citac pripraveny | |||
frq=FreqCounter::f_freq; | |||
ill = (frq*98)/800; //prevod z frekvencie | |||
if(ill<= 2500 && ill>=0) // obmedzenie vystupu | |||
{ | |||
Serial.println(ill); // odoslanie namerenej hodnoty | |||
} | |||
delay(250); //oneskorenie | |||
} | } | ||
</source> | </source> | ||
Verzia z 23:17, 23. máj 2016
Autori: | Marek Petráš | |
Študijný odbor: | Aplikovaná mechatronika | 2. Ing. (2013) |
Zadanie
- Vytvorte luxmeter za pomoci senzoru TCS230
- Preštudujte dokumentáciu k senzoru.
- Senzor pripojte k mikrokontroléru
- Napíšte program pre mikrokontrolár, ktorý načíta dáta zo senzoru, spracuje ich a odošle do PC
- Vytvorte GUI aplikáciu pre meranie
Literatúra:
- Zoznam použitej literatúry, vrátane katalógových údajov (datasheet), internetových odkazov a pod.
Datasheet Tutorial pre kniznicu FreqCounter pre arduino
Analýza
TCS 230je programovateľný prevodník zo svetla na frekvenciu(light-to-frequency converter), kombinuje fotodiódy s prevodníkom prúdu na frekvenciu v jednom integrovanom obvode.Výstup je obdĺžnikový signál so striedou 50% a frekvenciou priamo úmernou intenzite svetla. Výstupná frekvencia môže byť škálovaná jednou z troch prednastavených hodnôt. Digitálne vstupy a výstupy umožňujú priame pripojenie k mikrokontroléru.
Technické parametre senzora:
- - napájacie napätie 2,7 V - 5,5 V
- - úsporný mód
- - nelinerita 0,2% pri 50kHz
- - stabilný teplotný koeficient 200ppm/°C
- - spotreba 2 mA
- GND 4 Zem
- OE 3 Vstup - povolovací vstup
- OUT 6 Výstup - výstupná frekvencia
- S0, S1 1, 2 Vstup - výber škálovanie výstupnej frekvencie
- S2, S3 7, 8 Vstup - výber typu fotodiód
- VDD 5 Napájacie napätie
Maximálne rozlíšenie a presnosť je možné dosiahnuť meraním frekvencie. Meranie frekvencie oproti meraniu periódu má výhodu v tom, že sa obmedzení vplyv náhodných a vysokých frekvencií. Rozlíšenie je hlavne obmedzené veľkosťou čítača a prípustného meracieho času. Maximálna výstupná frekvencia senzoru je 600kHz a mikrokontrolér so zvolenou knižnicou na meranie frekvencie dokáže zmerať merať frekvencie do 8MHz. Meranie frekvencii je vhodné pre pomaly sa meniace alebo konštantú hodnoty osvetlenia.
Popis riešenia
Vzhľadom na to, že senzor obsahuje aj fotodiódy s farebnými filtrami, medzi ktorými sa vyberá pomocou vstupov, budú sa používať len diódy bez filtra. Na meranie výstupnej frekvencie som požil Timer1, ten má na starosti počítanie vonkajších impulzov a Timer2, ten má na starosti časovanie. O ich ovládanie sa stara kničnica FreqCounter.h
Algoritmus a program
Kód pre mikrokntrolér bol napísaný vo vývojovom prostredí Arduino. Program je jednoduchý najprv sa nastavia potrebné výstupy(fotodiódy bez filtra, škálovanie), potom sa periodicky meria frekvencia a po prepočte sa odosiela do PC.
Kód pre mikrokontrolér:
#include <FreqCounter.h>
#define S2 0
#define S3 1
#define S1 2
#define S0 3
#define enable 4
void setup() {
pinMode(S2,OUTPUT); //nastavenie vystupných pinov
pinMode(S3,OUTPUT);
pinMode(S1,OUTPUT);
pinMode(S0,OUTPUT);
pinMode(enable,OUTPUT);
digitalWrite(enable,LOW); // povelenie vystupu
digitalWrite(S1,HIGH);
digitalWrite(S0,HIGH); // nastavenie skalovania na 100%
digitalWrite(S2,HIGH);
digitalWrite(S3,LOW); // zapnutie diod bez filtra
Serial.begin(9600); // pripojenie sa k seriovemu portu
}
unsigned long int frq;
unsigned long int ill;
void loop() {
FreqCounter::f_comp= 8; // nastavenie kompenzacie
FreqCounter::start(100); // Start counting with gatetime of 100ms
while (FreqCounter::f_ready == 0) //cakaj kym nie je citac pripraveny
frq=FreqCounter::f_freq;
ill = (frq*98)/800; //prevod z frekvencie
if(ill<= 2500 && ill>=0) // obmedzenie vystupu
{
Serial.println(ill); // odoslanie namerenej hodnoty
}
delay(250); //oneskorenie
}
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
Zdrojový kód: serial.h a main.c
Overenie
Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí, ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje). Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, odfotografujte ho.
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.