Izstrādājiet krāsu sensoru ar mērījumiem, kas redzami, izmantojot RGB LED moduli

Radoša skola - RVT Dzelzceļnieku centrs - inovatīva skolas pārvalde (Jūnijs 2019).

$config[ads_text] not found
Anonim

Izstrādājiet krāsu sensoru ar mērījumiem, kas redzami, izmantojot RGB LED moduli


Displeja krāsas, precīzi kontrolējot sarkano, zaļo un zilo gaismas diodes intensitāti.

Atbalsta informācija

  • Custom PCB dizains ar EFM8 mikrokontrolleru

Baltās krāsas

Šī projekta mērķis ir izveidot ierīci, kas mēra gaismas "krāsu". Kā jūs droši vien zināt, gaisma, kas parasti izgaismo cilvēku dzīvību, patiesībā ir neskaitāmu dažādu elektromagnētiskā starojuma viļņa garuma maisījums. Katrs viļņa garums redzamā spektrā (kas svārstās no aptuveni 400 nm līdz 700 nm) atbilst noteiktai krāsai, un mūsu acis šo krāsu maisījumu interpretē kā "baltu" gaismu.

Tomēr jūs neapšaubāmi pamanījāt, ka dzīve izskatās nedaudz atšķirīga atkarībā no dominējošā apgaismojuma avota. Fluorescējošās gaismas un intensīvas saules gaismas ir īpaši baltas, savukārt kvēlspuldzes un sveces rada siltu, "dzeltenīgu" atmosfēru. Šīs variācijas rodas tāpēc, ka dažādi "baltas" gaismas avoti rada diezgan atšķirīgus krāsu maisījumus. Šī sakarība starp intensitāti un viļņu tiek minēta kā spektrālais sastāvs, kas ir viens no tiem jēdzieniem, kurus vieglāk izskaidrot ar attēliem, nevis ar vārdiem. Apskatiet šo grafiku no populārās mehānikas.

Es ļoti iesaku pievienoto rakstu ar nosaukumu Ultimate Light Bulb Test: kvēlspuldze vai kompakta fluorescējoša vai LED gaisma. Tas sniedz interesantu un detalizētu informāciju par dažādu spuldžu spektrālajām īpašībām, ieskaitot dažus vārdus, ko cilvēki var izmantot, lai aprakstītu katras spuldzes radītās gaismas kvalitāti.

Sarkans, zaļš un zils

Termins "RGB" mūsdienās ir tik izplatīts, ka tas ir gandrīz vārds pats par sevi. Mēs nevēlamies apgrūtināt šo rakstu ar plašu diskusiju par primārajām krāsām un cilvēciskā redzes trichromatiju; pietiek teikt, ka standarta piedevu displeju sistēmas (piemēram, datoru monitori) izmanto sarkanas, zaļas un zilas gaismas kombināciju, lai radītu plašu dažādu krāsu klāstu. No tā izriet, ka mēs varam izmantot sarkanu, zaļu un zilu fotodetektoru kombināciju, lai "izmērītu" krāsu. Baltas gaismas kontekstā varbūt lietderīgāk padomāt par to šādā veidā: izmantojot atsevišķus (gan blakus esošus) detektorus, kas ir jutīgi pret sarkanu, zaļu un zilu gaismu, mēs varam novērtēt spektrālo sastāvu, ņemot vērā gaismas enerģiju redzamā spektra apakšējā trešdaļa (kas atbilst zilajam detektoram), vidējā trešdaļa (kas atbilst zaļajam) un augšējā trešdaļa (atbilst sarkanai). Tam vajadzētu būt skaidrākam pēc tam, kad esat apdomājis šādu attēlu, kas norāda uz sarkano, zaļo, zilo un skaidru fotodetektoru relatīvo spektrālo jutību šajā projektā izmantotajā RGB sensorā (p / n BH1745NUC no Rohm).

Ir būtiski saprast, ka attiecība starp LED intensitāti un priekšējo strāvu ir daudz vienkāršāka nekā attiecība starp LED intensitāti un spriegumu uz priekšu. Apsveriet sekojošus projektus, kas izmantoti šajā projektā izmantotajā LED moduļa datu lapā.

Programmaparatūras

Šeit ir saite, lai lejupielādētu ZIP failu, kas satur visus avota un projekta failus, lai pārbaudītu RGB LED shēmas. Kad jūs ielādējat projektu Simplicity Studio, jūs varat veiciet dubultklikšķi uz faila "hwconf", lai piekļūtu konfigurācijas datiem ostas adatas un perifērijas ierīcēm. Tāpat ņemiet vērā, ka šie avota faili ietver kādu kodu, kas nav nepieciešams šim demo projektu; jūs varat ignorēt visu šobrīd.

Avota un projekta faili

Šī projekta funkcionalitāte ir šāda: DAC kanāls A kontrolē sarkano gaismas diode, B kanāls kontrolē zaļo gaismas diode, un kanāls C kontrolē zilo gaismas diode. EFM8 vispirms palielina kanālu A no 0 līdz 255, tad kanāls B no 0 līdz 255, tad kanāls C no 0 līdz 255. Rezultāts ir redzams video šā raksta beigās. RGB pieaugošā rutīna tiek īstenota šādi:

 while (1) { /*It is an 8-bit DAC, so the full range is 0 to 255. First channel A * (corresponding to the red LED) is incremented, then channel * B (corresponding to green), then channel C (corresponding to blue).*/ /*The unused colors are set to zero to ensure that * we display pure red, green, and blue.*/ UpdateDAC(DAC_RGB_G, 0); UpdateDAC(DAC_RGB_B, 0); UpdateDAC(DAC_RGB_R, 0); Delay_10ms(100); for(n=1; n>0; n++) { UpdateDAC(DAC_RGB_R, n); Delay_us(10000); } UpdateDAC(DAC_RGB_R, 0); UpdateDAC(DAC_RGB_B, 0); UpdateDAC(DAC_RGB_G, 0); Delay_10ms(100); for(n=1; n>0; n++) { UpdateDAC(DAC_RGB_G, n); Delay_us(10000); } UpdateDAC(DAC_RGB_R, 0); UpdateDAC(DAC_RGB_G, 0); UpdateDAC(DAC_RGB_B, 0); Delay_10ms(100); for(n=1; n>0; n++) { UpdateDAC(DAC_RGB_B, n); Delay_us(10000); } } 

Kods un komentāri funkcijā UpdateDAC () apraksta jaunu datu ielādēšanas procesu DAC mikroshēmā:

 void UpdateDAC(unsigned char ChannelABCorD, unsigned char DACcode) { //ensure that we are not interrupting an ongoing transmission while(SPI_State != IDLE); /*This switch statement sets the two most significant bits of the 16-bit DAC word * according to which channel is being updated. It also sets the two "operation mode" * bits to binary 01, which corresponds to "write to specified register and * update outputs."*/ switch(ChannelABCorD) { case DAC_CH_A: UpdateDAC_FirstByte = 0x10; break; case DAC_CH_B: UpdateDAC_FirstByte = 0x50; break; case DAC_CH_C: UpdateDAC_FirstByte = 0x90; break; case DAC_CH_D: UpdateDAC_FirstByte = 0xD0; break; } /*The upper four bits of the DAC code are the lower four bits * of the first byte, and the lower four bits of the DAC code are * the upper four bits of the second byte.*/ UpdateDAC_FirstByte = UpdateDAC_FirstByte | (DACcode >> 4); UpdateDAC_SecondByte = DACcode << 4; SPI0CFG |= BIT4; //this sets the proper clock polarity for the DAC interface DAC_NSS = LOW; //activate DAC slave select SPI0DAT = UpdateDAC_FirstByte; SPI_State = FIRST_DAC_BYTE_SENT; } 

SPI pārraide sākas ar pēdējiem četriem paziņojumiem UpdateDAC () un turpinās SPI valsts mašīnā, kas ir iekļauta SPI pārtraukšanas pakalpojumu rutīnā.

 SI_INTERRUPT (SPI0_ISR, SPI0_IRQn) { //SPI registers are on all SFR pages, so need need to modify SFRPAGE SPI0CN0 &= ~BIT7; //clear interrupt flag switch(SPI_State) { //SPI communications with DAC===================================== case FIRST_DAC_BYTE_SENT: SPI0DAT = UpdateDAC_SecondByte; SPI_State = SECOND_DAC_BYTE_SENT; break; case SECOND_DAC_BYTE_SENT: DAC_NSS = HIGH; //disable slave select SPI_State = IDLE; break; } } 

Secinājums

Tagad mums ir shēmas un programmaparatūra, kas kopā savukārt RGB LED kļūst par vienu pikseļu krāsu displeju ar 8 bitu dziļumu. Nākamajā rakstā mēs izmantosim šo pikseļu, lai vizuāli nodotu RGB sensora apgaismojošās gaismas krāsu īpašības.

Nākamais raksts sērijā: konstruējiet krāsu sensoru ar mērījumiem, kas redzami, izmantojot RGB LED moduli, 2.daļa

Dodiet šim projektam pašiem sevi! Iegūstiet BOM.