Кодты іздеу

|||Сабақ 98-4: Arduino көмегімен жарықдиодты бәсеңдету: Жарықтықты басқару|||

|||Сабақ 98-4: Arduino көмегімен жарықдиодты бәсеңдету: Жарықтықты басқару|||

Жарықдиодтар барлық жерде — индикаторлар, дисплейлер, сәндік жарықтандыру — бірақ көптеген жаңадан бастаушылар оны жай ғана қосу және өшірумен тоқтайды. Бұл жоба келесі қадамды жасайды: Arduino-ның кірістірілген PWM (Pulse Width Modulation) мүмкіндігін пайдаланып, жарықдиодты біркелкі өшіріп, қайта жағады. Күрт жыпылықтаудың орнына, сіз табиғи күңгірттенуге, тыныс алу әсерлеріне және таза цифрлық пиннен аналогтық басқаруға ұқсайтын жарықтықтың біртіндеп көтерілуі мен төмендеуін аласыз. Бұл ең қанағаттандырарлық алғашқы жобалардың бірі, өйткені нәтижені бірден көре аласыз, және дәл осы техника нақты өнімдердегі қозғалтқыш жылдамдығын басқарудың, аудио дыбыс деңгейінің және артқы жарықтың күңгірттенуінің негізінде жатыр.

LED-5mm-green

Өшіруді түсінгеннен кейін, оны кең ауқымды практикалық құрылымдарға қолдана аласыз:

  • Алаңдатқыш жыпылықтаудың орнына жұмсақ импульс беретін құрылғыдағы "тыныс алатын" күй индикаторын жасау
  • Жарықдиодты түнгі шамды қоршаған жарыққа немесе тәулік уақытына байланысты автоматты түрде күңгірттендіру
  • LCD немесе OLED дисплейіндегі артқы жарықтың жарықтығын басқару
  • Жарықтық деңгейлері арасында біркелкі ауысатын көңіл-күй жарықтандыруын немесе сәндік шамдарды жасау
  • Сізді табиғи түрде оятатын біртіндеп жарықтанатын баяу күн шығуы оятқышын имитациялау
  • Кішкентай тұрақты ток қозғалтқыштарына немесе желдеткіштерге жылдамдықты басқаруды қосу (сол PWM принципі қолданылады)

Бұл оқулық Robojax Arduino қадамдық курсының бөлігі болып табылады және нақты 10 жобаның 4-шісін қамтиды: Arduino көмегімен жарықдиодты жарықты өшіру. Толық бағдарлама мақаланың астында жүктеу үшін қолжетімді.

Аппараттық құралдар және компоненттер

330_ohm_resistor
330 ohm 0.25 watt resistor

Бұл жобаның бөлшектер тізімі ең аз — егер сіз бұрын Arduino жұмысын жасаған болсаңыз, сізге қажет нәрсенің бәрі сізде бар шығар:

  • 1× Arduino тақтасы (Uno, Nano, Mega немесе кез келген үйлесімді тақта)
  • 1× Жарықдиод (5mm немесе 3mm, кез келген түс)
  • 1× Резистор (200Ω бастап 1000Ω дейін — 300Ω бастап 1kΩ диапазоны жақсы жұмыс істейді)
  • Breadboard және DuPont қосқыш сымдары
  • Бағдарламалау және қуат беру үшін USB кабелі

Жарықдиод туралы бір маңызды ескерту: ұзынырақ аяқ анод (оң), ал қысқарақ аяқ — немесе пластик корпустағы тегіс жиегі бар жағы — катод (теріс). Мұны керісінше жасау жарықдиодтың жай ғана жанбауына әкеледі, сондықтан қуатты қосу алдында екі рет тексеріңіз.

Резистор мәні үшін транскрипт математиканы (бейнеде 03:49-да) түсіндіреді: типтік жарықдиод шамамен 2V төмендетеді және шамамен 10mA ток қажет етеді. 5V қуат көзімен қалған 3V резистор арқылы төмендеуі керек, бұл R = V/I = 3V / 0.01A = 300Ω береді. Іс жүзінде 300Ω бастап 1000Ω дейінгі кез келген нәрсе жұмыс істейді — жоғары мәндер жай ғана күңгірт жарықдиод береді. Өшіру үшін бұл шын мәнінде жақсы, өйткені сіз кез келген жағдайда жарықтықты өзгертесіз.

Сымдарды жалғау нұсқаулығы

Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw

Сымдарды жалғау мүмкіндігінше қарапайым. Жарықдиодтың аноды резистор арқылы Arduino-дағы PWM қабілеті бар пинге қосылады — бұл жобада 3-пин. Катод жерге қосылады.

Неге дәл 3-пин? Өйткені барлық Arduino пиндері PWM-ді қолдамайды. Көптеген Arduino тақталарында PWM қабілеті бар пиндер тильда символымен (~) белгіленген — әдетте Uno-да 3, 5, 6, 9, 10 және 11-пиндер. Егер PWM емес пинді пайдалансаңыз, analogWrite() айнымалы шығыс шығармайды; жарықдиод жай ғана қосулы немесе өшірулі болады.

Схеманы келесідей қосыңыз:

  1. Жарықдиодты breadboard-қа салыңыз, қай аяқтың анод (ұзынырақ) және қайсысының катод (қысқарақ/тегіс жағы) екенін ескеріңіз.
  2. Жарықдиодтың анодын резистор арқылы Arduino-ның 3-пиніне қосыңыз.
  3. Жарықдиодтың катодын Arduino-ның GND пиніне қосыңыз.
  4. Arduino-ны USB арқылы компьютерге қосыңыз.

Кодты түсіндіру

Бұл жобаның скетчі классикалық Arduino "Fade" мысалына негізделген, бірнеше өзгертулермен. Әр жолды түсіндірудің орнына, өз тәжірибелеріңіз үшін реттейтін бөліктерге назар аударайық.

Пайдаланушы конфигурациялайтын айнымалылар

Кодтың жоғарғы жағында үш айнымалы бүкіл мінез-құлықты басқарады:

int led = 3;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 3;    // how many points to fade the LED by
  • led — Бұл LED қай пинге қосылғанын анықтайды. Әдепкі мәні 3-пин, бірақ оны кез келген PWM қабілетті пинге өзгертуге болады (платаңызда ~ белгісімен белгіленген). Егер LED-ті басқа пинге ауыстырсаңыз, осы мәнді сәйкесінше жаңартыңыз.
  • brightness — Бұл ағымдағы жарықтық деңгейі, 0 (өшірулі) мен 255 (толық жарықтық) аралығында. Код оны 0-ден бастайды, бірақ сіз оны осы диапазонның кез келген жерінен бастай аласыз.
  • fadeAmount — Бұл — тәжірибе жасау үшін ең қызықтысы. Ол әр циклде қанша жарықтық "қадамы" жасалатынын басқарады. 3 сияқты кішкентай мән баяу, біртіндеп өшуді тудырады. 20 сияқты үлкенірек мән LED-тің өте жылдам жанып, өшуін қамтамасыз етеді. Транскрипт мұны (бейнеде 22:37-де) көрсетеді — 5-тен 20-ға өзгерту әсерді айтарлықтай жылдамдатады.

Өшу қалай жұмыс істейді

Өшудің негізі loop() ішіндегі екі жолда орын алады:

analogWrite(led, brightness);
brightness = brightness + fadeAmount;

Циклден әр өткен сайын ағымдағы жарықтық мәні analogWrite() арқылы LED-ке жазылады, содан кейін жарықтық fadeAmount-қа арттырылады. analogWrite() функциясы аналогтық кернеуді имитациялау үшін PWM пайдаланады — ол пинді жылдам қосып, өшіреді, ал қосу уақытының өшу уақытына қатынасы қабылданатын жарықтықты анықтайды.

Жарықтық 0-ге немесе 255-ке жеткенде, код fadeAmount таңбасын ауыстыру арқылы бағытты өзгертеді:

if (brightness <= 0 || brightness >= 255) {
  fadeAmount = -fadeAmount;
}

Бұл LED-тің жанып, содан кейін өшіп, қайтадан жанып тұруын қамтамасыз етеді — үздіксіз тыныс алу циклі. Циклдің соңындағы delay(30) анимацияның жалпы жылдамдығын басқарады. Қысқарақ кідіріс өшуді жылдамдатады; ұзағырақ кідіріс оны баяулатады.

Мәндермен тәжірибе жасау

Екі айнымалы визуалды әсерге ең көп бақылау береді:

  • fadeAmount-ты арттырыңыз — жылдамырақ, әсерлі өшу үшін. 10 немесе 20-ны көріңіз.
  • fadeAmount-ты азайтыңыз — баяу, жұмсақ тыныс алу әсері үшін. 1 немесе 2-ні көріңіз.
  • delay() мәнін реттеңіз — қарқынды өзгерту үшін. Кішірек кідірістер бүкіл циклді жылдамдатады; үлкенірек кідірістер оны созады.

Кішкентай fadeAmount-ты қысқа кідіріспен біріктіру өте тегіс, дерлік органикалық өшуді тудырады — амбиенттік жарықтандыру үшін тамаша. Үлкен fadeAmount қысқа кідіріспен жылдам пульстік әсер жасайды.

Жобаның тікелей демонстрациясы

Код жүктелгеннен кейін LED-тің өшірулі күйден толық жарықтыққа дейін баяу жарықтанып, содан кейін қайтадан өшетінін көресіз, бұл шексіз қайталанады. Транскрипт әдепкі мінез-құлықты (бейнеде 22:25-те) көрсетеді — тегіс, орташа жылдамдықтағы өшу.

fadeAmount 20-ға өзгертілгенде, LED өте жылдам жанып, өшеді — дерлік жыпылықтағандай. 3-ке орнатылғанда, өшу айтарлықтай ұзағырақ уақыт алады, босаңсыған, біртіндеп ауысуды жасайды. Бұл бейнеде (бейнеде 23:02-де) анық көрсетілген.

Бұл жобаның сұлулығы — код өзгерістеріңіздің әсерін бірден көре аласыз — сымдарды өзгерту қажет емес, тек айнымалыларды өңдеп, қайта жүктеңіз. Бұл тығыз кері байланыс циклі PWM мен уақыттың өзара әрекеттесуі туралы интуицияны дамытудың тамаша жолы болып табылады.

Егер сіз мұны одан әрі жалғастырып, өшуді үздіксіз жұмыс істеуге қалдырмай, батырма арқылы іске қосқыңыз келсе, бұл жеке оқулықта қарастырылған — төмендегі байланысты жобалар бөлімін қараңыз.

Осы бейнедегі байланысты жобалар

Тараулар

  • [00:00] 10 Arduino LED жобасына шолу
  • [01:22] Курсқа кіріспе және қажетті компоненттер
  • [02:29] LED-терді түсіну: таңбалар, полярлық және түрлері
  • [03:49] Ом заңы арқылы LED резистор мәнін есептеу
  • [05:53] 1-жоба: LED-ті қосу және өшіру
  • [12:43] 2-жоба: Батырма арқылы LED басқару
  • [17:13] 3-жоба: Батырма арқылы LED ауыстыру
  • [20:12] 4-жоба: LED-ті өшіру — кодты талдау
  • [22:25] Өшу демонстрациясы және өшу жылдамдығын реттеу
  • [23:20] 5-жоба: Батырма триггерімен LED-ті өшіру
  • [27:32] 6-жоба: Теңселме LED әсері
  • [30:47] 7-жоба: 5 LED-пен жүретін жарық
  • [36:41] 8-жоба: Батырмамен басқарылатын жүретін жарық
  • [42:25] 9-жоба: Потенциометрмен LED кернеу деңгейінің өлшегіші
  • [49:25] 10-жоба: Arduino бағдаршамы

Суреттер

Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
936-Lessson 98-LED-4: Arduino code to fade the LED light
Тіл: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Arduino кітапханалары (zip)

Пайдаланушының нұсқаулығы