Arduino және WS2812 негізіндегі ескі шамның түнгі шамы. Өз бетінше шешуге арналған тапсырмалар

Мүмкін, әркім балалық шағында армандаған (және біреуден көп). Сіз тіпті баланың арманы орындалған кезде оның жан дүниесін толтыратын сезімді немесе оның көздеріндегі алыстағы, таныс ұшқынды еске түсіруге тырысуға болады ... Бала кезімде мен түнгі шамымның болуын армандадым.

Қазір мен BSUIR-де 4-курс студентімін, бізге схемаларды жобалау бойынша курстық жобаны қағазда емес, аппараттық құралда орындауға болатынын айтқан кезде, бұл маған таң қалды: түнгі шам, мен қалаймын. Баланы өзім жасауға болады. Оның үстіне, бөлмені қараңғыда жарықтандыратын затты ғана емес, кез келген көңіл-күйге оңай басқарылатын құрылғыны жасаңыз. Неге болмасқа? Мен қолдарымның көмегімен түстерді өзгерту мүмкіндігін қосуды шештім: қолым түнгі жарыққа неғұрлым жақын болса, соғұрлым түстердің біреуі (RGB) жанады. Мен түнгі жарықты қашықтан басқару пульті арқылы басқарғым келеді.

Мен бұл идеяны cxem.net веб-сайтында байқағанымды бірден мойындаймын. Қысқаша айтқанда, бұл мысалда ауысым регистрлері және ультрадыбыстық қашықтық сенсорлары арқылы басқарылатын RGB матрицасы қолданылды. Бірақ мен матрица бір бағытта ғана жарқырайды деп ойладым, бірақ мен түнгі жарықтың бүйірлеріне жарқырағанын қаладым.

Тізбек элементтерін негіздеу


Мен Arduino микроконтроллерлеріне назар аудардым. UNO - бұл менің идеям үшін өте қолайлы нұсқа, біріншіден, бұл ең танымал платформа және түйреуіштер саны Mega сияқты тым үлкен емес, екіншіден, оған сыртқы қуат көзін қосуға болады, менің жағдайда бұл 12 В. , Наноға қарағанда, үшіншіден... жақсы, менің ойымша, біз осы екі нүктеде тоқтай аламыз. Платформа бағдарламалау тілінің ыңғайлылығы мен қарапайымдылығы, сонымен қатар ашық архитектурасы мен бағдарлама коды арқасында бүкіл әлемде өте танымал.

Көбірек егжей-тегжейлі ақпаратСіз бұл тақта туралы ақпаратты Интернеттен оңай таба аласыз, сондықтан мен мақаланы артық жүктемеймін.

Сонымен, жүйеге қойылатын негізгі талаптар. Міндетті:
– жүйені басқару үшін кедергіге дейінгі қашықтықты бақылайтын сенсорлар;
– қашықтан басқару пультінен сигналдарды оқуға арналған сенсор қашықтықтан басқару;
– жарықтандырудың қажетті функционалдығын қамтамасыз ететін жарықдиодты шамдар;
– бүкіл жүйені басқаратын басқару блогы.

Жобаға қашықтық датчиктері ретінде қашықтық өлшегіштер қажет, олардың әрқайсысы белгілі бір түске сәйкес келеді: қызыл, жасыл, көк. Қашықтық сенсорлары қолдың түнгі жарыққа дейінгі қашықтығын бақылайды және қол белгілі бір сенсорға жақындаған сайын, осы қашықтық өлшегішке сәйкес келетін түс соғұрлым күштірек жанады. Керісінше, қол неғұрлым алыс болса, сенсорға сәйкес түске соғұрлым аз кернеу қолданылады.

Ең танымал қашықтық өлшегіштер осы сәтбұл Sharp GP2Y0A21YK және HC-SR04. Sharp GP2Y0A21YK - инфрақызыл диапазон өлшегіш. Ол IR эмитентімен және ИК қабылдағышпен жабдықталған: біріншісі сәуленің көзі ретінде қызмет етеді, оның шағылысуы екіншісімен ұсталады. Бұл ретте сенсордың инфрақызыл сәулелері адам көзіне көрінбейді және мұндай қарқындылықта зиянсыз.

HC-SR04 ультрадыбыстық сенсорымен салыстырғанда бұл сенсордың артықшылықтары мен кемшіліктері бар. Артықшылықтары бейтараптық пен зиянсыздықты қамтиды. Кемшіліктері - қысқа диапазон және сыртқы кедергілерге, соның ішінде жарықтандырудың кейбір түрлеріне тәуелділік.

Жоба үшін қашықтық сенсорлары ретінде пайдаланылады: ультрадыбыстық қашықтық өлшегіштер HC-SR04.
HC-SR04 жұмыс принципі эхолокацияның белгілі құбылысына негізделген. Оны пайдаланған кезде эмиттер дыбыстық сигнал жасайды, ол кедергіден шағылысып, сенсорға оралады және қабылдағышпен тіркеледі. Ультрадыбыстың ауадағы таралу жылдамдығын (шамамен 340 м/с) және шығарылатын және қабылданған сигнал арасындағы кешігу уақытын біле отырып, акустикалық кедергіге дейінгі қашықтықты есептеу оңай.

TRIG кірісі микроконтроллердің кез келген істікшесіне қосылады. Бұл түйреуішке импульс беру керек. сандық сигналұзақтығы 10 мкс. TRIG кірісіндегі сигнал негізінде сенсор ультрадыбыстық импульстар пакетін жібереді. Шағылысқан сигналды алғаннан кейін сенсор ECHO істікшесінде импульстік сигнал жасайды, оның ұзақтығы кедергіге дейінгі қашықтыққа пропорционалды.

IR сенсоры. Әрине, қашықтан басқаруға қажетті сигнал осы сенсордан оқылады және декодталады. TSOP18 бір-бірінен тек жиілігімен ерекшеленеді. Жоба үшін VS1838B TSOP1838 сенсоры таңдалды.

Жоба бөлмені кез келген түсте жарықтандыру идеясына негізделген, яғни сізге жарықтандыруды алатын 3 негізгі түс қажет болады: қызыл, жасыл, көк. Сондықтан тапсырманы тамаша орындайтын SMD 5050RGB LED моделі таңдалды.

Әрбір жарықдиодқа берілетін кернеу мөлшеріне байланысты олар осы жарықтандырудың қарқындылығын өзгертеді. Жарық диодты резистор арқылы қосылуы керек, әйтпесе оны ғана емес, сонымен қатар Arduino-ны да бұзу қаупі бар. Резистор жарық диодындағы токты қолайлы мәнге дейін шектеу үшін қажет. Шындығында, жарықдиодты шамның ішкі кедергісі өте төмен және егер сіз резисторды қолданбасаңыз, онда мұндай ток жарық диодты арқылы өтеді, ол жарық диодты да, контроллерді де күйдіреді.

Жобада қолданылатын жарықдиодты жолақтар 12 В кернеуінен қуат алады.

Светодиодтардағы кернеу «өшіру» күйінде 6 В және 5 В-тан асатын қуат көзін реттеу қажет болғандықтан, коммутациялық режимде тізбекке транзисторларды қосу қажет. Менің таңдауым BC547c үлгісіне түсті.

Ұмытып кеткендер үшін жұмыс принципін қысқаша қарастырайық npn транзисторы. Егер сіз кернеуді мүлдем қолданбасаңыз, бірақ базалық және эмитент терминалдарын қысқа тұйықталу арқылы емес, бірнеше Ом резистор арқылы болса да, базалық эмитент кернеуі нөлге тең болады. Демек, базалық ток жоқ. Транзистор жабық, коллекторлық ток елеусіз аз, тек бірдей бастапқы ток. Бұл жағдайда транзистор үзілген күйде деп айтылады. Қарама-қарсы күй қанықтылық деп аталады: транзистор толығымен ашық болғанда, одан әрі ашылатын жер қалмайды. Мұндай ашылу дәрежесімен коллектор-эмиттер секциясының кедергісі соншалықты төмен, транзисторды коллектор тізбегіндегі жүктемесіз қосу мүмкін емес, ол бірден жанып кетеді. Бұл жағдайда коллектордағы қалдық кернеу тек 0,3...0,5В болуы мүмкін.

Бұл екі күй, қанығу және үзу, транзистор тұрақты реле контактісі сияқты коммутациялық режимде жұмыс істегенде қолданылады. Бұл режимнің негізгі мағынасы шағын базалық ток базалық токтан бірнеше ондаған есе үлкен коллекторлық токты басқарады. байланысты үлкен коллекторлық ток алынады сыртқы көзэнергия, бірақ бәрібір қазіргі пайда, олар айтқандай, анық. Біздің жағдайда жұмыс кернеуі 5 В болатын микросхема 12 В-тан жұмыс істейтін светодиодтары бар 3 жолақты қамтиды.

Кілттер каскадының жұмыс режимін есептейік. Жарық диодтары толық қуатта жануы үшін негізгі тізбектегі резистордың мәнін есептеу қажет. Есептеу кезінде қажетті шарт - ток күшеюінің максималды мүмкін болатын коллекторлық токты ең төменгі мүмкін базалық токқа бөлу коэффициентінен үлкен немесе оған тең болуы:

Сондықтан жолақтардың жұмыс кернеуі 220 В болуы мүмкін, ал негізгі тізбекті 5 В кернеуі бар микросұлбадан басқаруға болады. Егер транзистор коллектордағы осындай кернеумен жұмыс істеуге арналған болса, онда жарық диодтары қиындықсыз жанады.
Базалық тогы 5мА, ал коллектор тогы 0,1А болған жағдайда, база-эмиттер өткеліндегі кернеудің төмендеуі 0,77В құрайды.
Негізгі резистордағы кернеу келесідей болады:

Ом заңына сәйкес:

Кедергілердің стандартты диапазонынан біз 8,2 кОм резисторды таңдаймыз. Бұл есептеуді аяқтайды.

Мен сіздердің назарларыңызды мен кездескен бір мәселеге аударғым келеді. IRremote кітапханасын пайдаланған кезде, көк түсті реттеу кезінде Arduino қатып қалды. Интернетте ұзақ және мұқият іздеуден кейін бұл кітапхана Arduino моделі үшін әдепкі бойынша Таймер 2 пайдаланатыны анықталды. Таймерлер PWM шығыстарын басқару үшін пайдаланылады.

Таймер 0 (Жүйе уақыты, PWM 5 және 6);
Таймер 1 (PWM 9 және 10);
Таймер 2 (PWM 3 және 11).

Бастапқыда мен көк түсті реттеу үшін PWM 11 қолдандым. Сондықтан PWM, таймерлер және оларды пайдаланатын үшінші тарап кітапханаларымен жұмыс істегенде абай болыңыз. Бұл біртүрлі басты бет Github-та бұл нюанс туралы ештеңе айтылмады. Қаласаңыз, 1-таймер арқылы жолды алып тастап, 2-түсініктеме қалдыра аласыз.

Нан тақтасындағы элементтерді қосу келесідей болады:

Нан тақтасында сынақтан өткеннен кейін «Тақтаға элементтерді орналастыру» және «Дәнекермен жұмыс істеу» кезеңдері басталды. Дайын тақтаны бірінші сынақтан өткізгеннен кейін менің басыма бір ой келді: бірдеңе дұрыс болмады. Міне, көпшілікке таныс «Тестілеушімен тынымсыз жұмыс» кезеңі басталады. Дегенмен, проблемалар (бірнеше іргелес контактілер кездейсоқ дәнекерленген) тез жойылды және міне, көптен күткен жарықдиодты шамдар.

Содан кейін бұл тек дененің мәселесі болды. Осы себепті біздің сенсорларға арналған тесіктері бар фанера кесілді. Артқы қақпақол арнайы алынбалы етіп жасалды, осылайша сіз ішкі көріністі тамашалай аласыз және қажет болса, бір нәрсені аяқтай аласыз немесе қайта жасай аласыз. Сондай-ақ, тақтаны және қуат көзін қайта бағдарламалауға арналған 2 тесік бар.

Дене екі компонентті эпоксидті желіммен желімделген. Бұрын кездеспегендер үшін бұл желімнің ерекшелігін атап өткен жөн. Бұл өнім екі бөлек контейнерде келеді және мазмұны араласқан кезде бірден химиялық реакция пайда болады. Араластырудан кейін 3-4 минут ішінде жылдам әрекет ету керек. Әрі қарай пайдалану үшін жаңа бөлікті араластыру керек. Сондықтан, егер сіз мұны қайталауға тырыссаңыз, менің сізге кеңесім - кішкене бөліктерде араластырыңыз және өте жылдам әрекет етіңіз, ойлануға көп уақыт болмайды. Сондықтан денені қалай және қайда желімдеу керектігі туралы алдын ала ойластырған жөн. Оның үстіне мұны бір отырыста орындау мүмкін емес.

Жарық диодтары бар жолақтарды орнатуға арналған жоғарғы қақпақтүтік салынды, ол арқылы барлық сымдар тамаша өтті.

Шамға қатысты мәселе туындағанда, мен бала кезімде қарапайым жіптен, желімнен және негіз болған шардан қолөнер жасағаным есіме түсті. Шамға арналған принцип бірдей, бірақ көпбұрышты орау допқа қарағанда қиынырақ болды. Құрылымға жіптер түсіретін қысымның әсерінен ол жоғары қарай тарыла бастады және жіптер түсе бастады. Шұғыл түрде, қолдарым желіммен жабылғандықтан, құрылымды жоғарыдан нығайту туралы шешім қабылданды. Содан кейін CD көмекке келді. Түпкі нәтиже - бұл түнгі жарық:

Соңында не айтқыңыз келеді?

Жобада нені өзгертуім керек? Қашықтық сенсорларына TRIG сигналын беру үшін үш емес, бір Arduino шығысын пайдалануға болады. Мен сондай-ақ IR сенсоры үшін тесік берер едім (мен бұл туралы ұмытып кеттім), ол, өкінішке орай, қашықтан басқару пультінен сигналдарды оқи алмайтын жағдайда әлі де жасырылады. Дегенмен, сіз ештеңені дәнекерлеуге немесе бұрғылауға болмайды деп кім айтты?

Бұл қызықты семестр болғанын және қағазда емес нәрсені жасауға тырысудың тамаша мүмкіндігі екенін атап өткім келеді, соның арқасында мен «балалық арман» тармағының жанына тағы бір белгі қоюға болады. Егер сіз жаңа нәрсені байқап көру қиын деп ойласаңыз және алдымен не істеу керектігін білмесеңіз, уайымдамаңыз. Көптеген адамдардың басын ойлайды: неден бастау керек және мұны қалай жасауға болады? Өмірде шатастыруға болатын көптеген міндеттер бар, бірақ сіз тырысып көргенде, сіз бұл үшін аздап тырысуыңыз керек болса да, көзіңіздің жыпылықтауымен тауларды жылжытуға болатынын байқайсыз.

Қосымша тапсырма үшін

    Тағы 1 жарық диоды

    Номиналды мәні 220 Ом болатын тағы 1 резистор

    тағы 2 сым

Схематикалық диаграмма

Нан тақтасындағы схема

назар аударыңыз

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

    Компоненттерді жарық диоды фоторезисторды жарықтандырмайтындай етіп орналастыруға тырысыңыз.

Эскиз

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) void loop() () ( // жарық деңгейін оқу. Айтпақшы, хабарлаңыз // айнымалы мен оған мәнді бірден тағайындауға болады int жеңілдігі = analogRead(LDR_PIN) ; // біз реттейтін потенциометрден мәнді оқыңыз // шартты қараңғылық пен жарық арасындағы шекті мән int шегі = analogRead(POT_PIN) ; // логикалық айнымалыны жариялаңыз және оған мән беріңіз // «Қазір қараңғы ма». Логикалық айнымалылар, керісінше // бүтін сандар екі мәннің біреуін ғана қамтуы мүмкін: // шын немесе жалған. Мұндай құндылықтар // логикалық деп те аталады.логикалық таҚараңғы = (жеңілдік< threshold) ; // бағдарламаның тармақталуын пайдаланыңыз: процессор біреуін орындайды // шарттың орындалуына байланысты кодтың екі блогы. // Егер (ағылшынша «if») тым қараңғы болса...егер (тым қараңғы) ( // ...жарықтандыруды қосыңыз digitalWrite(LED_PIN, HIGH) ; ) басқа ( // ...әйтпесе жарық қажет емес - оны өшіріңіз digitalWrite(LED_PIN, ТӨМЕН) ; ))

Кодқа түсініктемелер

    Біз айнымалының жаңа түрін қолданамыз - логикалық, ол тек ақиқат (true, 1) немесе false (false, 0) мәндерін сақтайды. Бұл мәндер логикалық өрнектерді бағалаудың нәтижесі болып табылады. Бұл мысалда буль өрнегі жеңілдік болып табылады< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

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

    Біздің экспериментімізде логикалық өрнек жеңілдік мәні шекті мәннен аз болғанда ақиқат болады, өйткені біз операторды пайдаландық.< . Мы можем использовать операторы > , <= , >= , == , != , сәйкесінше “үлкен”, “кіші немесе тең”, “үлкен немесе тең”, “тең”, “тең емес” дегенді білдіреді.

    Әсіресе == логикалық операторымен абай болыңыз және оны = тағайындау операторымен шатастырмаңыз. Бірінші жағдайда өрнектердің мәндерін салыстырып, логикалық мәнді (ақиқат немесе жалған) аламыз, ал екінші жағдайда оң операндтың мәнін сол жақ операндқа береміз. Компилятор біздің ниетімізді білмейді және қате жібермейді, бірақ біз кейбір айнымалының мәнін кездейсоқ өзгертіп, қатені іздеуге көп уақыт жұмсай аламыз.

    Шартты if операторы көптеген бағдарламалау тілдеріндегі негізгілердің бірі болып табылады. Оның көмегімен біз әрекеттердің қатаң белгіленген тізбегін орындап қана қоймай, белгілі бір шарттарға байланысты алгоритмнің қай тармағын ұстанатындығы туралы шешім қабылдай аламыз.

    Логикалық өрнек жеңілдігі< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    Дәл осындай жетістікпен біз «егер жарық шекті деңгейден аз болса, жарық диодты шамды қосыңыз» деп айта аламыз, яғни. бүкіл логикалық өрнекті келесіге беріңіз:

егер (жеңілдік< threshold) { // ... }

    Артында шартты операторегер логикалық өрнек ақиқат болса, орындалатын код блогы міндетті түрде орындалса. Екі бұйра жақшаны да ұмытпаңыз ()!

    Егер өрнек шын болса, бізге тек орындау керек бірнұсқау болса, егер (...) болмаса, бірден жазылуы мүмкін бұйра жақшалар:

егер (жеңілдік< threshold) digitalWrite(LED_PIN, HIGH) ;

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

Фоторезисторлар негізінде салынған жарық сенсорлары (жарықтандыру) нақты Arduino жобаларында жиі қолданылады. Олар салыстырмалы түрде қарапайым, қымбат емес және кез келген интернет-дүкенде оңай табуға және сатып алуға болады. Arduino фоторезисторы жарық деңгейін басқаруға және оның өзгерістеріне жауап беруге мүмкіндік береді. Бұл мақалада біз фоторезистордың не екенін, оған негізделген жарық сенсорының қалай жұмыс істейтінін және сенсорды Arduino тақталарына қалай дұрыс қосу керектігін қарастырамыз.

Фоторезистор, аты айтып тұрғандай, кез келген дерлік электронды тізбекте жиі кездесетін резисторлармен тікелей байланысты. Кәдімгі резистордың негізгі сипаттамасы оның кедергісінің мәні болып табылады. Кернеу мен ток соған байланысты, резистордың көмегімен біз басқа компоненттердің қажетті жұмыс режимдерін орнатамыз. Әдетте, резистордың қарсылық мәні бірдей жұмыс жағдайында іс жүзінде өзгермейді.

Кәдімгі резистордан айырмашылығы, фоторезисторсыртқы жарық деңгейіне байланысты кедергісін өзгерте алады. Бұл дегеніміз, в электрондық схемаПараметрлер үнемі өзгеріп отырады, ең алдымен бізді фоторезистордағы кернеудің төмендеуі қызықтырады. Бұл кернеу өзгерістерін Arduino аналогтық түйреуіштерінде жазу арқылы біз тізбектің логикасын өзгерте аламыз, осылайша сыртқы жағдайларға бейімделетін құрылғылар жасай аламыз.

Фоторезисторлар әртүрлі жүйелерде белсенді түрде қолданылады. Ең көп таралған қолданба - көшелерді жарықтандыру. Қалада түн болса немесе бұлтты болса, шамдар автоматты түрде қосылады. Үйге үнемді шамды фоторезистордан жасауға болады, ол кесте бойынша емес, жарықтандыруға байланысты қосылады. Сіз тіпті жабық шкаф немесе сейф ашылып, жарықтандырылғаннан кейін бірден іске қосылатын жарық сенсорының негізінде қауіпсіздік жүйесін жасай аласыз. Әдеттегідей, кез келген Arduino сенсорларының қолдану аясы тек біздің қиялымызбен шектеледі.

Интернет-дүкендерде қандай фоторезисторларды сатып алуға болады

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

Жаңадан Arduino пайдаланушысына келесідей дайын фотомодульді сатып алуға кеңес беруге болады:


Бұл модульде барлық қажетті элементтер бар оңай қосылу Arduino тақтасына фоторезистор. Кейбір модульдер компаратор тізбегін жүзеге асырады және басқару үшін сандық шығыс пен кесу резисторын қамтамасыз етеді.

Ресейлік радио әуесқойына ресейлік PA сенсорына жүгінуге кеңес беруге болады. Сатылымға FR1-3, FR1-4 және т.б. - Кеңес заманында шығарылған. Бірақ, соған қарамастан, FR1-3 дәлірек бөлшек болып табылады. Осыдан бағаның айырмашылығы туындайды.FR үшін олар 400 рубльден артық емес сұрайды. FR1-3 бір мың рубльден асады.

Фоторезисторды белгілеу

Ресейде өндірілген модельдерді заманауи таңбалау өте қарапайым. Алғашқы екі әріп - PhotoResistor, сызықшадан кейінгі сандар әзірлеу нөмірін көрсетеді. FR -765 - фоторезистор, әзірлеу 765. Әдетте бөліктің денесінде тікелей белгіленеді.

VT сенсорында таңбалау диаграммасында көрсетілген қарсылық диапазоны бар. Мысалы:

  • VT83N1 - 12-100 кОм (12К – жарықтандырылған, 100К – қараңғыда)
  • VT93N2 - 48-500кОм (48К – жарықтандырылған, 100К – қараңғыда).

Кейде модельдер туралы ақпаратты нақтылау үшін сатушы өндірушіден арнайы құжатты ұсынады. Жұмыс параметрлерінен басқа, бөліктің дәлдігі де сонда көрсетіледі. Барлық үлгілерде спектрдің көрінетін бөлігінде сезімталдық диапазоны бар. Жинау жарық сенсорыОперацияның дәлдігі салыстырмалы түсінік екенін түсінуіңіз керек. Тіпті бір өндірушінің, бір топтаманың немесе бір сатып алудың үлгілері үшін ол 50% немесе одан да көп ерекшеленуі мүмкін.

Зауытта бөлшектер қызылдан жасыл жарыққа дейінгі толқын ұзындығына реттеледі. Көптеген адамдар инфрақызыл сәулеленуді де «көреді». Әсіресе дәл бөлшектер ультракүлгін сәулелерді де анықтай алады.

Сенсордың артықшылықтары мен кемшіліктері

Фоторезисторлардың негізгі кемшілігі - спектр сезімталдығы. Түскен жарықтың түріне байланысты қарсылық шамасының бірнеше ретімен өзгеруі мүмкін. Кемшіліктерге де жатады төмен жылдамдықжарықтың өзгеруіне реакциялар. Егер шам жыпылықтаса, сенсордың әрекет ету уақыты болмайды. Егер өзгеру жиілігі айтарлықтай жоғары болса, резистор әдетте жарықтандырудың өзгеріп жатқанын «көруді» тоқтатады.

Артықшылықтары қарапайымдылық пен қол жетімділікті қамтиды. Оған түсетін жарыққа байланысты қарсылықты тікелей өзгерту оңайлатуға мүмкіндік береді электрлік диаграммабайланыстар. Фоторезистордың өзі өте арзан, ол көптеген Arduino жинақтары мен конструкторларына кіреді, сондықтан кез келген жаңа Arduino жасаушысына қол жетімді.

Фоторезисторды Arduino-ға қосу

Жобаларда arduinoФоторезистор жарық сенсоры ретінде пайдаланылады. Одан ақпаратты ала отырып, тақта релені қосуға немесе өшіруге, қозғалтқыштарды іске қосуға және хабарламалар жіберуге болады. Әрине, сенсорды дұрыс қосу керек.

Жарық сенсорының Arduino-ға қосылу схемасы өте қарапайым. Егер фоторезисторды қолданатын болсақ, онда қосылым диаграммасында сенсор кернеу бөлгіш ретінде жүзеге асырылады. Бір тұтқа жарықтандыру деңгейіне байланысты өзгереді, екіншісі аналогтық кіріске кернеу береді. Контроллер чипінде бұл кернеу ADC арқылы цифрлық деректерге түрлендіріледі. Өйткені Жарық түскен кезде сенсордың кедергісі азайса, оған түсетін кернеудің мәні де төмендейді.

Фоторезисторды бөлгіштің қай иығына қойғанымызға байланысты аналогтық кіріске жоғары немесе төмендеген кернеу беріледі. Егер фоторезистордың бір аяғы жерге қосылған болса, онда максималды кернеу мәні қараңғылыққа сәйкес келеді (фоторезистордың кедергісі максималды, ондағы кернеудің барлығы дерлік төмендейді), ал ең төменгі мән жақсы жарықтандыруға сәйкес келеді (қарсылық нөлге жақын, кернеу минималды). Егер фоторезистордың тұтқасын қуат көзіне қоссақ, мінез-құлық керісінше болады.

Тақтаны орнатудың өзі ешқандай қиындық тудырмауы керек. Фоторезистордың полярлығы болмағандықтан, оны екі жағынан қосуға болады, оны тақтаға дәнекерлеуге, схеманы пайдаланып сымдармен қосуға немесе қосу үшін қарапайым қыстырғыштармен (крокодил қыстырғыштары) пайдалануға болады. Тізбектегі қуат көзі Arduino өзі болып табылады. Фоторезисторбір аяғы жерге қосылған, екіншісі ADC тақтасына қосылған (біздің мысалда - AO). Біз бір аяққа 10 кОм резисторды қосамыз. Әрине, сіз фоторезисторды аналогтық A0 түйреуішіне ғана емес, сонымен қатар кез келген басқа да қосуға болады.

Қосымша 10 К резисторға қатысты бірнеше сөз.Оның біздің тізбекте екі функциясы бар: тізбектегі токты шектеу және қалыптастыру қажетті кернеубөлгіші бар тізбекте. Толық жарықтандырылған фоторезистор оның кедергісін күрт төмендететін жағдайда ағымдағы шектеу қажет. Ал кернеуді генерациялау аналогтық порттағы болжамды мәндерге арналған. Шын мәнінде үшін қалыпты жұмысБіздің фоторезисторлармен 1К кедергі жеткілікті.

Резистордың мәнін өзгерту арқылы біз сезімталдық деңгейін «қараңғы» және «жарық» жақтарға ауыстыра аламыз. Сонымен, 10 К береді жылдам ауысужарықтың басталуы. 1K жағдайында жарық сенсоры жоғары жарық деңгейлерін дәлірек анықтайды.

Егер сіз пайдаланып жатсаңыз дайын модульжарық сенсоры, содан кейін байланыс одан да қарапайым болады. Біз VCC модулінің шығысын тақтадағы 5 В қосқышына, GND жерге қосамыз. Біз қалған түйреуіштерді Arduino қосқыштарына қосамыз.

Егер тақтада сандық шығыс болса, біз оны цифрлық түйреуіштерге жібереміз. Егер аналог болса, аналогқа өтіңіз. Бірінші жағдайда біз триггер сигналын аламыз - жарықтандыру деңгейі асып кетті (триггер шегін реттеу резисторы арқылы реттеуге болады). Аналогтық түйреуіштерден біз нақты жарықтандыру деңгейіне пропорционалды кернеу мәнін ала аламыз.

Фоторезистордағы жарық сенсорының мысал эскизі

Біз схеманы фоторезистормен Arduino-ға қостық және бәрі дұрыс жасалғанына көз жеткіздік. Енді контроллерді бағдарламалау ғана қалады.

Жарық сенсорының эскизін жазу өте қарапайым. Бізге тек сенсор қосылған аналогтық түйреуіштен ток кернеуінің мәнін алып тастау керек. Бұл бәрімізге белгілі analogRead() функциясы арқылы жасалады. Содан кейін жарық деңгейіне байланысты кейбір әрекеттерді орындай аламыз.

Келесі схемаға сәйкес жалғанған жарық диодты шамды қосатын немесе өшіретін жарық сенсорының эскизін жазайық.

Жұмыс алгоритмі келесідей:

  • Аналогтық істіктен сигнал деңгейін анықтаңыз.
  • Біз деңгейді шекті мәнмен салыстырамыз. Максималды мән қараңғылыққа, ең төменгі мән максималды жарықтандыруға сәйкес болады. 300-ге тең шекті мәнді таңдайық.
  • Егер деңгей табалдырықтан төмен болса, қараңғы, жарық диодты қосу керек.
  • Әйтпесе, жарық диодты өшіріңіз.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println вал< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

Фоторезисторды жабу арқылы (қолыңызбен немесе жарық өткізбейтін затпен) біз жарық диодты шамның қосылып, өшетінін бақылай аламыз. Кодтағы шекті параметрді өзгерту арқылы біз шамды әртүрлі жарықтандыру деңгейлерінде қосуға/өшіруге мәжбүрлей аламыз.

Орнату кезінде жарық диодты шамның жарық сенсорына азырақ түсуі үшін фоторезистор мен жарық диодты бір-бірінен мүмкіндігінше алыс орналастыруға тырысыңыз.

Жарық сенсоры және артқы жарықтың біркелкі өзгеруі

Жарық диодының жарықтығы жарықтандыру деңгейіне байланысты өзгеретін етіп жобаны өзгертуге болады. Алгоритмге келесі өзгерістерді қосамыз:

  • Біз шамның жарықтығын PWM арқылы өзгертеміз, analogWrite() көмегімен жарық диоды бар түйреуішке 0-ден 255-ке дейінгі мәндерді жібереміз.
  • Жарық сенсорынан жарық деңгейінің сандық мәнін (0-ден 1023-ке дейін) жарық диодты жарық диоды PWM диапазонына (0-ден 255-ке дейін) түрлендіру үшін map() функциясын қолданамыз.

Эскиз үлгісі:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(Serial.println); = map(val, 0, 1023, 0, 255); // Алынған мәнді PWM сигналының деңгейіне түрлендіру. Жарықтандыру мәні неғұрлым төмен болса, біз жарық диодты PWM арқылы аз қуат беруіміз керек. analogWrite(PIN_LED, ledPower) ; // Жарықтықты өзгерту)

Аналогтық порттың сигналы жарықтандыру дәрежесіне пропорционал болатын басқа қосылу әдісі жағдайында, оны максимумнан шегеру арқылы мәнді қосымша «кері» ету керек:

Int val = 1023 – analogRead(PIN_PHOTO_RESISTOR);

Фоторезистор мен релені қолданатын жарық сенсорының тізбегі

Релемен жұмыс істеуге арналған эскиздердің мысалдары Arduino-да релелерді бағдарламалау туралы мақалада келтірілген. Бұл жағдайда күрделі қозғалыстар жасаудың қажеті жоқ: «қараңғылықты» анықтағаннан кейін біз жай ғана реле қосып, оның түйреуішіне сәйкес мәнді қолданамыз.

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 void setup() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR);< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

Қорытынды

Фоторезистор негізіндегі жарық сенсорын қолданатын жобалар өте қарапайым және тиімді. Сіз көптеген қызықты жобаларды жүзеге асыра аласыз, ал жабдықтың құны жоғары болмайды. Фоторезистор қосымша кедергісі бар кернеу бөлгіш тізбегі арқылы қосылады. Сенсор әртүрлі жарық деңгейлерін өлшеу үшін аналогтық портқа немесе егер біз тек қараңғылық фактісі болса, цифрлық портқа қосылған. Эскизде біз аналогтық (немесе цифрлық) порттан деректерді оқып, өзгерістерге қалай әрекет ету керектігін шешеміз. Енді сіздің жобаларыңызда осындай қарапайым «көздер» пайда болады деп үміттенейік.

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

ТӘЖІРИБЕ ҮШІН БӨЛІМДЕР ТІЗІМІ

- 1 Arduino Uno тақтасы;

- 1 дәнекерлеу тақтасы;

- 1 жарық диоды;

- 1 фоторезистор;

- номиналды мәні 220 Ом 1 резистор, номиналды мәні 10 кОм 1 резистор;

- 1 айнымалы резистор (потенциометр);

- 10 еркек-ер сым.

ҚОСЫМША ТАПСЫРМА ҮШІН МӘЛІМЕТТЕР

тағы 1 жарық диоды;

220 Ом номиналды мәні бар тағы 1 резистор;

Тағы 2 сым.

ТҰХТАМА ДИАГРАММАСЫ

БРАДБОРДАҒЫ ДИАГРАММА

Эскиз

Arduino IDE үшін эскизді жүктеп алыңыз
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // жарық деңгейін оқыңыз. Айтпақшы, // айнымалыны жариялауға және тағайындауға болады. оған бірден мән int lightness = analogRead(LDR_PIN); // біз реттеу үшін пайдаланатын потенциометрден мәнді оқыңыз // шартты қараңғылық пен жарық арасындағы шекті мән int шегі = analogRead(POT_PIN); // жариялау логикалық айнымалы және оған // «енді қараңғы ма» мәнін тағайындаңыз.Логикалық айнымалылар // бүтін айнымалылардан айырмашылығы, екі мәннің біреуін ғана қамтуы мүмкін: // ақиқат немесе жалған. Мұндай мәндер // логикалық деп те аталады. логикалық таҚараңғы = (жеңілдік< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

КОДЕКТЕГІ ТҮСІНДІКТЕР

  • Біз айнымалылардың жаңа түрін қолданамыз − логикалық, ол тек мәндерді сақтайды рас (шын, 1) немесе жалған (жалған, 0). Бұл мәндер логикалық өрнектерді бағалаудың нәтижесі болып табылады. Бұл мысалда логикалық өрнек болып табылады жеңілдік< threshold . Адам тілінде бұл: «шекті деңгейден төмен жарықтандыру» сияқты естіледі. Мұндай мәлімдеме жарықтандыру шекті деңгейден төмен болғанда дұрыс болады. Микроконтроллер айнымалы мәндерді салыстыра алады жеңілдікЖәне табалдырық, олар өз кезегінде өлшеу нәтижелері болып табылады және логикалық өрнектің ақиқаттығын есептеңіз.
  • Бұл логикалық өрнекті тек түсінікті болу үшін жақшаға аламыз. Әрқашан оқылатын кодты жазған дұрыс. Басқа жағдайларда жақшалар қарапайым арифметикадағы сияқты амалдардың ретіне әсер етуі мүмкін.
  • Біздің тәжірибемізде логикалық өрнек мән болған кезде ақиқат болады жеңілдікмәнінен төмен табалдырықөйткені біз операторды қолдандық < . Біз операторларды пайдалана аламыз > , <= , >= , = = , != , сәйкесінше «үлкен», «кіші немесе тең», «үлкен немесе тең», «тең», «тең емес» дегенді білдіреді.
  • Логикалық оператормен әсіресе сақ болыңыз = = және оны тағайындау операторымен шатастырмаңыз = . Бірінші жағдайда өрнектердің мәндерін салыстырып, логикалық мәнді (ақиқат немесе жалған) аламыз, ал екінші жағдайда оң операндтың мәнін сол жақ операндқа береміз. Компилятор біздің ниетімізді білмейді және қате жібермейді, бірақ біз кейбір айнымалының мәнін кездейсоқ өзгертіп, қатені іздеуге көп уақыт жұмсай аламыз.
  • Шартты оператор егерЕгер") көптеген бағдарламалау тілдеріндегі негізгілердің бірі болып табылады. Оның көмегімен біз әрекеттердің қатаң белгіленген тізбегін орындап қана қоймай, белгілі бір шарттарға байланысты алгоритмнің қай тармағын ұстанатындығы туралы шешім қабылдай аламыз.
  • Логикалық өрнек үшін жеңілдік< threshold мағынасы бар: раснемесе жалған. Біз оны есептеп, логикалық айнымалыға қойдық тым қараңғы(«тым қараңғы») Осылайша, біз «егер тым қараңғы болса, жарық диодты шамды қосыңыз» деп айтатын сияқтымыз.
  • Дәл осындай жетістікпен біз «егер жарық шекті деңгейден аз болса, жарық диодты шамды қосыңыз» деп айта аламыз, яғни. аудару егербарлық логикалық өрнек:
егер (жеңілдік< threshold) { // ... }
  • Шартты мәлімдеменің артында егерЛогикалық өрнек ақиқат болса, орындалатын код блогы болуы керек. Екі бұйра жақша туралы ұмытпаңыз {} !
  • Егер өрнек шын болса, бізге тек орындау керек бір нұсқауларды кейін бірден жазуға болады егер (...)бұйра жақшаларсыз:
егер (жеңілдік< threshold) digitalWrite(LED_PIN, HIGH);
  • Оператор егердизайн арқылы ұзартылуы мүмкін басқа(«әйтпесе»). Код блогы немесе одан кейінгі жалғыз мәлімдеме тек логикалық өрнек ішінде орындалады егермағынасы бар жалған , « өтірік" Бұйра жақшаға қатысты ережелер бірдей. Біздің тәжірибемізде «егер ол тым қараңғы болса, жарық диодты шамды қосыңыз, әйтпесе жарықдиодты өшіріңіз» деп жаздык.

ӨЗІҢДІ СЫНАУҒА АРНАЛҒАН СҰРАҚТАР

  1. Аналогтық кіріс пен жердің арасына фоторезистор орнатсақ, біздің құрылғы керісінше жұмыс істейді: жарық мөлшері артқан кезде жарық диоды жанады. Неліктен?
  2. Жарық диодты жарық фоторезисторға түссе, құрылғы жұмысының қандай нәтижесін аламыз?
  3. Алдыңғы сұрақта айтылғандай фоторезисторды орнататын болсақ, құрылғы дұрыс жұмыс істеуі үшін бағдарламаны қалай өзгерту керек?
  4. Бізде код бар делік егер (шарт) (әрекет;). Ол қандай жағдайларда орындалады? әрекет ?
  5. Қандай құндылықтарда жөрнек x + y > 0рас болады, егер x > 0 ?
  6. Шарт операторда болса, қандай командаларды орындау керектігін көрсету керек пе егержалған?
  7. Оператордың айырмашылығы неде = = оператордан = ?
  8. Егер біз құрылысты қолдансақ егер (шарт) әрекет1; басқа әрекет 2;, әрекеттердің ешқайсысы орындалмайтын жағдай болуы мүмкін бе? Неліктен?

ТӘУЕЛСІЗ ШЕШУ ҮШІН МІНДЕТТЕР

  1. Айнымалыны қолданбай, бағдарламаны қайта жазыңыз тым қараңғықұрылғының функционалдығын сақтай отырып.
  2. Тізбекке басқа жарық диодты қосыңыз. Жарықтандыру шекті мәннен төмен түссе, бір жарық диоды жанады, ал жарық шекті мәннің жартысынан төмен түссе, екі жарық диоды да қосылатындай бағдарламаны аяқтаңыз.
  3. Схеманы және бағдарламаны светодиодтар бірдей принцип бойынша қосылатындай етіп өзгертіңіз, бірақ неғұрлым қарқынды жанса, фоторезисторға соғұрлым аз жарық түседі.




Жоғарғы