INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Het u al ooit 'n outomatiese manier gehad om die kleur van 'n voorwerp op te spoor? Deur die lig van 'n sekere kleur op die voorwerp te laat skyn en te kyk hoeveel lig daardeur weerkaats word, kan u sien watter kleur die voorwerp is. As u byvoorbeeld 'n rooi lig op 'n rooi voorwerp skyn, word die lig weerkaats. As u 'n blou lig op 'n rooi voorwerp skyn, absorbeer die voorwerp 'n deel van die lig en minder daarvan word weerkaats.
Stap 1: Onderdele benodig
Ek het 'n PIC 16F887-mikrokontroleerder gebruik, maar byna almal met 'n polswydte-modulasie-vermoë sal werk. 1 RGB LED1 Mikrokontroller 1 Standaard rooi LED 1 1 k ohm weerstand 1 Fotoresistor (verander weerstand afhangende van die hoeveelheid lig wat daarop skyn) Sommige drade Ek benodig slegs die mikrokontroleerder en RGB LED om 'n wye reeks kleurdetektore te hê, maar as u net 'n stroombaan wil hê ontdek een kleur, u het nie 'n mikrobeheerder nodig nie - u benodig slegs 'n helder LED van die kleur wat u wil opspoor. Die standaard rooi LED is die "aanwyser -LED" - dit brand wanneer die regte kleur opgespoor word.
Stap 2: Bou die stroombaan
Die skema is redelik eenvoudig en word in die algemene vorm hieronder getoon. Die RGB -LED word ekstern aangedryf deur 'n PWM -sein. Ek sit elektriese band om die fotoresistor sodat omringende lig nie binnedring nie - slegs die lig direk daarbo sal opgespoor word.
Stap 3: Die kode
Hierdie kode is geskryf vir 'n Microchip PIC 16F887, maar hopelik kan u die algemene idee kry. Ek het die ingeboude potensiometer op my ontwikkelbord gebruik om die kleurspektrum van die RGB LED te verander (en dit gaan nie deur die hele spektrum nie, want ek het nie 3 PWM-modules nie, maar dit is goed genoeg) Opmerkings ingesluit. #include #include #include "delay.c" #include #include #use delay (clock = 4000000) #FUSES INTRC, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP #byte CCP1CON = 0x17 # byte CCP2CON = 0x1D#byte PWM1CON = 0x9Bint waarde = 128; int p1 = 0; int p2 = 0; void my_setup_ccp1 (int8 waarde) {output_low (PIN_C2); CCP1CON = waarde; PWM1CON = 0;} ongeldig my_setup_cc2 {output_low (PIN_C1); CCP2CON = waarde;} // ============================================ leeg hoof () {// A4 = kragbron vir fotodiodeoutput_high (PIN_A4); output_high (PIN_B1); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (0); setup_adc_ports (sAN0); // Timer/Interrupt setupenable_interrupts (INT_TIMER ()) my_setup_ccp2 (CCP_PWM); setup_timer_2 (T2_DIV_BY_1, 128, 1); // setup_compare (2, COMPARE_PWM | COMPARE_TIMER2); terwyl (1) {// Voorkom dat PIC gaan slaap.//SET PWM DUTY CYCLE output_high (PIN_); // Pin A3 is die fotodiodeverbinding as (input (PIN_A3) == 1) output_high (PIN_A4); anders output_low (PIN_A4); // Lees die waarde van die potensiometer om die kleur van die LED -waarde te verander = read_adc (); skakelaar (waarde) {geval 0: p1 = waarde; output_low (PIN_C0); p2 = waarde; breek; saak 50: p1 = waarde; output_high (PIN_C0); p2 = waarde; breek; geval 100: p1 = waarde; output_high (PIN_C0); p2 = waarde; breek; saak 150: output_high (PIN_C0); p1 = 50; p2 = waarde; breek; saak 200: output_low (PIN_C0); p1 = 0; p2 = waarde; breek; saak 250: p1 = 0; p2 = waarde; output_low (PIN_C0); breek; } p1 = waarde; p2 = 128 - p1; stel_pwm1_plig (p1); stel_pwm2_plig (p2);}}
Stap 4: Aansoeke
'N Eenvoudige kleurdetektor soos hierdie kan in robotika gebruik word, of vir cool projekte, soos die skeiding van lego's volgens kleur, sortering van M & M's, of as hulpmiddel vir kleurblindheid. Hopelik was hierdie instruksies nuttig om 'n projek wat u in gedagte gehad het, te verbeter!:) LED's is goed vir soveel dinge …