Sisukord:

Värvide tuvastamine RGB LED -i abil: 4 sammu
Värvide tuvastamine RGB LED -i abil: 4 sammu

Video: Värvide tuvastamine RGB LED -i abil: 4 sammu

Video: Värvide tuvastamine RGB LED -i abil: 4 sammu
Video: Luponds Bubble Tube 1.5m Tall 2024, Juuli
Anonim
Värvide tuvastamine RGB LED -i abil
Värvide tuvastamine RGB LED -i abil

Kas olete kunagi soovinud automatiseeritud viisi objekti värvi tuvastamiseks? Valgustades objektile teatud värvi valgust ja vaadates, kui palju valgust tagasi peegeldub, saate öelda, mis värvi objekt on. Näiteks kui süttib punasele objektile punane tuli, peegeldub see valgus tagasi. Kui süttib punasele objektile sinine tuli, neelab see osa valgust ja vähem seda peegeldub tagasi.

Samm: vajalikud osad

Vajalikud osad
Vajalikud osad

Ma kasutasin PIC 16F887 mikrokontrollerit, kuid peaaegu kõik, millel on impulsi laiuse moduleerimise võimalus, töötavad. 1 RGB LED1 Mikrokontroller1 Standardne punane LED1 1k oomi takisti1 Fotoresistor (muudab takistust sõltuvalt sellele valgustatud valguse hulgast) Mõned juhtmed Mul on vaja ainult mikrokontrollerit ja RGB LED -i, et neil oleks lai valik värviandureid, kuid kui soovite ainult vooluringi tuvastab ühe värvi, pole teil vaja mikrokontrollerit - vajate ainult heledat LED -i, mille värvi soovite tuvastada. Tavaline punane LED on "indikaatortuli" - süttib õige värvi tuvastamisel.

Samm: ehitage vooluring

Ehita vooluring
Ehita vooluring
Ehita vooluring
Ehita vooluring

Skeem on üsna lihtne ja üldisel kujul on näidatud allpool. RGB LED -i toidab väliselt PWM -signaal. Panin fototakisti ümber elektrilindi, nii et ümbritsev valgus ei pääse sisse - tuvastatakse ainult otse selle kohal olev valgus.

3. samm: kood

See kood on kirjutatud Microchip PIC 16F887 jaoks, kuid loodetavasti saate üldise idee. Kasutasin oma arendusplaadil olevat sisseehitatud potentsiomeetrit RGB LED-i värvispektri varieerimiseks (ja see ei läbi kogu spektrit, kuna mul pole 3 PWM-moodulit, kuid see on piisavalt hea). #include #include #include "delay.c" #include #include #use delay (clock = 4000000) #FUSES INTRC, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP #bait CCP1CON = 0x17 bait CCP2CON = 0x1D#bait PWM1CON = 0x9Bint väärtus = 128; int p1 = 0; int p2 = 0; void my_setup_ccp1 (int8 väärtus) {output_low (PIN_C2); CCP1CON = väärtus; PWM1CON = 0;} tühine my_setup_cc2) {output_low (PIN_C1); CCP2CON = väärtus;} // =================================== void main () {// A4 = toiteallikas fotodioodväljundi_kõrgele (PIN_A4); output_high (PIN_B1); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (0); setup_adc_ports (sAN0); // Taimer/Katkestus setupenable_interrupts_ INPMTIMP my_setup_ccp2 (CCP_PWM); setup_timer_2 (T2_DIV_BY_1, 128, 1); // setup_compare (2, COMPARE_PWM | COMPARE_TIMER2); samas (1) {// Vältige PIC -i uinumist.//SET PWM DUTY CYCLE output_5] // Pin A3 on fotodioodi ühendus, kui (sisend (PIN_A3) == 1) output_high (PIN_A4); else output_low (PIN_A4); // Potentsiomeetri väärtuse lugemine LED -i värvi muutmiseks = read_adc (); lüliti (väärtus) {juhtum 0: p1 = väärtus; output_low (PIN_C0); p2 = väärtus; murda; juhtum 50: p1 = väärtus; väljund_kõrge (PIN_C0); p2 = väärtus; murda; juhtum 100: p1 = väärtus; väljund_kõrge (PIN_C0); p2 = väärtus; murda; juhtum 150: output_high (PIN_C0); p1 = 50; p2 = väärtus; murda; juhtum 200: output_low (PIN_C0); p1 = 0; p2 = väärtus; murda; juhtum 250: p1 = 0; p2 = väärtus; output_low (PIN_C0); murda; } p1 = väärtus; p2 = 128 - p1; set_pwm1_duty (p1); set_pwm2_duty (p2);}}

Samm: rakendused

Rakendused!
Rakendused!

Sellist lihtsat värvidetektorit saab kasutada robootikas või lahedates projektides, nagu legode eraldamine värvi järgi, M & M -ide sortimine või värvipimeduse abivahend. Loodetavasti oli sellest juhendist abi teie kavandatud projekti täiustamisel!:) LED -id sobivad hästi paljude asjade jaoks….

Soovitan: