Mündəricat:

RGB LED istifadə edərək rəng algılama: 4 addım
RGB LED istifadə edərək rəng algılama: 4 addım

Video: RGB LED istifadə edərək rəng algılama: 4 addım

Video: RGB LED istifadə edərək rəng algılama: 4 addım
Video: Zigbee LED nəzarətçi C01Z - sönük lampalar, baxış və sınaq üçün 2024, Noyabr
Anonim
RGB LED istifadə edərək rəng algılama
RGB LED istifadə edərək rəng algılama

Heç bir obyektin rəngini aşkar etmək üçün avtomatlaşdırılmış bir yol istəmisinizmi? Müəyyən bir rəngin işığını obyektə yandıraraq və nə qədər işığın geri əks olunduğuna baxaraq, obyektin hansı rəngdə olduğunu anlaya bilərsiniz. Məsələn, qırmızı bir cisimə qırmızı işıq yansanız, o işıq geri əks olunacaq. Qırmızı bir cisimə mavi işıq yatsanız, cisim həmin işığın bir hissəsini udar və daha az hissəsi əksinə əks olunacaq.

Addım 1: Lazım olan hissələr

Ehtiyac duyulan hissələr
Ehtiyac duyulan hissələr

Bir PIC 16F887 Mikrokontrolördən istifadə etdim, amma nəbz genişliyi modulyasiya qabiliyyətinə malik demək olar ki, hər kəs işləyəcək. 1 RGB LED1 Mikrokontrolör1 Standart qırmızı LED 1k ohm müqavimət1 Fotoresistor (üzərinə düşən işıq miqdarından asılı olaraq müqaviməti dəyişir) Bəzi tellər Mənə geniş rəngli detektorların olması üçün yalnız mikrokontrolör və RGB LED lazımdır, ancaq yalnız bir rəng algılar, mikro nəzarətçiyə ehtiyacınız yoxdur - yalnız aşkar etmək istədiyiniz rəngin parlaq bir LEDinə ehtiyacınız var. Standart qırmızı LED "göstərici LED" dir - doğru rəng aşkar edildikdə yanır.

Addım 2: Dövrə qurun

Dövrə qurun
Dövrə qurun
Dövrə qurun
Dövrə qurun

Sxem olduqca sadədir və ümumilikdə aşağıda göstərilmişdir. RGB LED -i xaricdən PWM siqnalı ilə təchiz olunmuşdur. Fotorezistorun ətrafına elektrik lenti qoydum ki, ətrafdakı işıq daxil olmasın - yalnız birbaşa yuxarıdakı işıq algılanacaq.

Addım 3: Kod

Bu kod bir Microchip PIC 16F887 üçün yazılmışdır, amma ümid edirəm ümumi fikir əldə edə bilərsiniz. RGB LED-in rəng spektrini dəyişmək üçün inkişaf etdirmə lövhəmdə quraşdırılmış potensiometrdən istifadə etdim (və 3 PWM modulum olmadığı üçün bütün spektrdən keçmir, amma kifayət qədər yaxşıdır) Şərhlər daxildir. #include #include #include "delay.c" #include #include #use delay (clock = 4000000) #FUSES INTRC, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP #byte CCP1 byte CCP1 bayt CCP2CON = 0x1D#bayt PWM1CON = 0x9Bint dəyəri = 128; int p1 = 0; int p2 = 0; void my_setup_ccp1 (int8 dəyər) {output_low (PIN_C2); CCP1CON = dəyər; PWM1CON = 0;} my_setup_ccp2 etibarsızdır (int_setup_ccp2) {output_low (PIN_C1); CCP2CON = dəyər;} // ================================ void main () {// A4 = photodiodeoutput_high (PIN_A4) üçün güc mənbəyi (PIN_A4); output_high (PIN_B1); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (0); setup_adc_ports (sAN0); // Timer/Interrupt setupenable_interERts_PP1 my_setup_ccp2 (CCP_PWM); setup_timer_2 (T2_DIV_BY_1, 128, 1); // setup_compare (2, COMPARE_PWM | COMPARE_TIMER2); while (1) {// PIC -in yuxuya getməsini maneə törədir.// SET PWM DUTY CYCLE_5) // Pin A3, əgər (giriş (PIN_A3) == 1) çıxış_yüksək (PIN_A4); else output_low (PIN_A4); // LED dəyərinin rəngini dəyişdirmək üçün potansiometr oxu dəyəri = read_adc (); keçid (dəyər) {hal 0: p1 = dəyər; output_low (PIN_C0); p2 = dəyər; fasilə; hal 50: p1 = dəyər; çıxış_yüksək (PIN_C0); p2 = dəyər; fasilə; hal 100: p1 = dəyər; çıxış_yüksək (PIN_C0); p2 = dəyər; fasilə; hal 150: output_high (PIN_C0); p1 = 50; p2 = dəyər; fasilə; hal 200: output_low (PIN_C0); p1 = 0; p2 = dəyər; fasilə; hal 250: p1 = 0; p2 = dəyər; output_low (PIN_C0); fasilə; } p1 = dəyər; p2 = 128 - p1; set_pwm1_duty (p1); set_pwm2_duty (p2);}}

Addım 4: Tətbiqlər

Tətbiqlər!
Tətbiqlər!

Bunun kimi sadə bir rəng detektoru robototexnikada və ya legoları rəngə görə ayırmaq, M & M -ləri sıralamaq və ya rəng korluğuna kömək etmək kimi sərin layihələrdə istifadə edilə bilər. İnşallah bu təlimat, düşündüyünüz bir layihəni inkişaf etdirməkdə faydalı oldu!:) LEDlər bir çox şey üçün yaxşıdır …

Tövsiyə: