Мазмуну:

RGB LEDди колдонуу менен түстү аныктоо: 4 кадам
RGB LEDди колдонуу менен түстү аныктоо: 4 кадам

Video: RGB LEDди колдонуу менен түстү аныктоо: 4 кадам

Video: RGB LEDди колдонуу менен түстү аныктоо: 4 кадам
Video: Arduino Tutorial 34 - Color gradient with RGB LED and Knob | SunFounder's ESP32 IoT Learnig kit 2024, Ноябрь
Anonim
RGB LEDди колдонуу менен түстү аныктоо
RGB LEDди колдонуу менен түстү аныктоо

Сиз объекттин түсүн аныктоонун автоматташтырылган жолун кааладыңыз беле? Белгилүү бир түстүн нурун объектке чачып, канча жарыктын артка чагылышын карап, бул нерсенин түсү кандай экенин биле аласыз. Мисалы, эгер сиз кызыл нерсеге кызыл жарык чачсаңыз, ал жарык кайра чагылдырылат. Эгерде сиз кызыл нерсеге көк жарык чачсаңыз, анда ал жарыктын бир бөлүгүн өзүнө сиңирип алат, ал эми азыраагы кайра чагылдырылат.

1 -кадам: Тетиктер керек

Тетиктер керек
Тетиктер керек

Мен PIC 16F887 микроконтроллерин колдондум, бирок импульстин туурасы модуляциялоо жөндөмү бар дээрлик бардыгы иштейт. 1 RGB LED1 Микроконтроллер1 Стандарт кызыл LED1k 1k Ом каршылыгы 1 Фоторезистор (каршылыктын жарыгына жараша өзгөрөт) Кээ бир зымдар Микроконтроллерге жана RGB LEDине түстүү детекторлордун кеңири ассортименти керек, бирок эгер сиз чынжырды гана кааласаңыз бир түстү аныктайт, сизге микроконтроллердин кереги жок - сизге аныктай турган түстүн жаркыраган LEDи гана керек. Стандарттык кызыл LED "индикатор LED" болуп саналат - туура түс аныкталганда күйөт.

2 -кадам: Районду куруу

Circuit куруу
Circuit куруу
Circuit куруу
Circuit куруу

Схема өтө жөнөкөй жана жалпы формада төмөндө көрсөтүлгөн. RGB LED сырттан PWM сигналы менен иштейт. Мен электр лентасын фоторезистордун тегерегине орнотуп, айланадагы жарык кирбейт - анын үстүндөгү гана жарык аныкталат.

3 -кадам: Кодекс

Бул код Microchip PIC 16F887 үчүн жазылган, бирок сиз жалпы идеяны ала аласыз деп үмүттөнөбүз. Мен RGB светодиодунун түстүү спектрин өзгөртүү үчүн өнүгүү тактасындагы камтылган потенциометрди колдондум (жана ал бүт спектрден өтпөйт, анткени менде 3 PWM модулу жок, бирок ал жетишерлик жакшы) Комментарийлер камтылган. #include #include #include "delay.c" #include #include #use delay (саат = 4000000) #FUSES INTRC, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP #байт CCT1 байт CCP2CON = 0x1D#байт PWM1CON = 0x9Бинттик маани = 128; int p1 = 0; int p2 = 0; void my_setup_ccp1 (int8 маани) {output_low (PIN_C2); CCP1CON = балл; PWM1CON = 0;} жараксыз my_setup_ccp2 {output_low (PIN_C1); CCP2CON = мааниси;} // ================================ void main () {// A4 = photodiodeoutput_high үчүн кубат булагы (PIN_A4); output_high (PIN_B1); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (0); setup_adc_ports (sAN0); my_setup_ccp2 (CCP_PWM); setup_timer_2 (T2_DIV_BY_1, 128, 1); // setup_compare (2, COMPARE_PWM | COMPARE_TIMER2); while (1) {// PICтин уйкусуна жол бербөө. // Pin A3 - фотодиод байланышы, эгерде (киргизүү (PIN_A3) == 1) output_high (PIN_A4); else output_low (PIN_A4); // LED маанисинин түсүн өзгөртүү үчүн потенциометрдин окуу мааниси = read_adc (); switch (value) {case 0: p1 = value; output_low (PIN_C0); p2 = мааниси; тыныгуу; учурда 50: p1 = мааниси; output_high (PIN_C0); p2 = мааниси; тыныгуу; учурда 100: p1 = мааниси; output_high (PIN_C0); p2 = мааниси; тыныгуу; учурда 150: output_high (PIN_C0); p1 = 50; p2 = мааниси; тыныгуу; учурда 200: output_low (PIN_C0); p1 = 0; p2 = мааниси; тыныгуу; Case 250: p1 = 0; p2 = мааниси; output_low (PIN_C0); тыныгуу; } p1 = мааниси; p2 = 128 - p1; set_pwm1_duty (p1); set_pwm2_duty (p2);}}

4 -кадам: Тиркемелер

Колдонмолор!
Колдонмолор!

Мындай жөнөкөй түстүү детектор робототехникада же леголорду түсү боюнча ажыратуу, M & Ms сорттоо же түстүү сокурдукка жардам катары сонун долбоорлордо колдонулушу мүмкүн. Бул көрсөтмө сиз ойлогон долбоорду өркүндөтүүдө пайдалуу болду деп үмүттөнөбүз!:) Светодиоддор көп нерселер үчүн жакшы….

Сунушталууда: