Ինֆրակարմիր լազերային հեռաչափ: Robot Senses. Sharp GP2Y0A21YK IR հեռավորության ցուցիչ Sharp IR հեռավորության ցուցիչ Տեխնիկական

Ինֆրակարմիր լազերային հեռաչափը էներգիա է արձակում մարդու աչքի համար անտեսանելի տիրույթում: Դա 1-ին դասի լազերային սարք է, ինչպես պահանջվում է ԱՄՆ Սննդամթերքի և դեղերի վարչության կողմից, 21 CFR 1040.10-11: FDA լազերային համապատասխանության նշանը փակցված է CMS Wireless շասսիի վրա: Այս մակնշումը ցույց է տալիս նաև մոդելը, սերիական համարը և արտադրության ամսաթիվը:

1-ին դասը ներառում է լազերներ, որոնք նորմալ շահագործման պայմաններում չեն կարող վնասել մարդուն: Նորմալ տեղադրման դեպքում մարդը կարող է նայել լազերային ճառագայթին առանց ակնոցի կամ իր սովորական ակնոցով (Մի նայեք լազերային ճառագայթին, երբ համակարգը միացված է. ստանդարտ նախազգուշական միջոց):

Լազերը մնում է հուզված վիճակում այնքան ժամանակ, քանի դեռ ԼԱԶԵՐԱՅԻՆ ԹԵՍՏ կամ START SURVEY հրամանները շարունակվում են ընտրվել կարգավորիչի ծրագրաշարում: Երբ լազերը գտնվում է հուզված վիճակում, հեռավորությունները և այլ տվյալներ ցուցադրվում են կարգավորիչի էկրանին:

Կարմիր լուսադիոդը կառավարման վահանակի վրա, որը գտնվում է կարգավորիչի վանդակում, անընդհատ վառվում է, երբ համակարգը միացված է, անկախ նրանից՝ լազերը միացված է, թե ոչ:

Լազերային սկանավորման գլուխը ներառում է լազերային տիրույթի որոնիչ և գրավման միավոր (Նկար 7.2, Նկար 7.3):

Նկար 7.2 - Սկանավորման գլուխ

Նկար 7.3 - Լազերային սկանավորման գլխի արտաքին տեսք

Նկար 7.4 - VIP տեղադրում ստորգետնյա պայմաններում

Նկար 7.5 - Ձողերի և կայմերի տեղադրում ստորգետնյա պայմաններում

Նկար 7.6 - Սկաների մուտքը խոռոչի մեջ ստորգետնյա պայմաններում

Աղյուսակ 33 - Տեխնիկական պայմաններ

Լազերային սկանավորման գլուխ
Թիրախային չափման միջակայքը 20% արտացոլմամբ 350 մ
Չափման միջակայք մինչև սպիտակ պատ 650 մ
Պտտման անկյունների տիրույթ 0 - 360º
Թեքության միջակայք 0 - 145º
Գծային չափման ճշգրտություն -+2 սմ աշխատանքային ջերմաստիճանի տիրույթում
Բանաձեւ 1 սմ
Անկյունային չափման ճշգրտություն -+ 0,3º
Պտտման առավելագույն արագություն 21º/վրկ
Ալիքի երկարություն 905 նմ (ինֆրակարմիր), 635 նմ (օպտիկական):
Լազերային ճառագայթի շեղում 5 գրադ
Ընթերցումների առավելագույն քանակը 100,000 (մեկ կրակոցի համար)
աջակցության կառուցվածքը
նյութեր CFRP, բարձր խտության պոլիէթիլենային դոկինգ կայաններ, չժանգոտվող պողպատից սեղմիչներ:
Ձողի երկարությունը 2-9 մ, կարգավորելի
Ձողերի հատվածների քանակը 5 կոնաձև 2-ական մ
Կայմի հենարանների երկարությունը (2 հատ) 2-5 մ, կարգավորելի
Կայմի ընդլայնումների քանակը 5 (տարբեր երկարություններ)
Էլեկտրաէներգիա (արտաքին մարտկոցներ)
Լարման Գնահատված 24 Վ
Տարողություն 7.2 Ահ, անվանական 24 Վ
Էլեկտրաէներգիայի սպառում 2,5 Ա, անվանական 24 Վ
Արտաքին պայմաններ
Աշխատանքային ջերմաստիճան Հեռավորության հաշվիչ (-10º-ից +50º), ցուցիչ (0º-ից մինչև 40º)
Պահպանման ջերմաստիճանը -20-ից մինչև +50º
Օդի խոնավությունը 0-ից 95% ոչ խտացում
Չափերը
Էլեկտրաէներգիայի մատակարարում (մմ) 270 * 247 * 175
Քաշը, կգ 8.3
Կամ (մմ) 2290*230*250
Ձողի հատվածը (մմ) 1930*200*250
Քաշը, կգ 44.5
Աչքի անվտանգություն
Ցուցիչ 2-րդ դասարան
Հեռահարաչափ 1 դաս
Ուղղահայաց տեղադրման սարք (VIP)
Բաղադրիչներ 25 ալյումինե ձողեր (մոտ 1,5 մետր յուրաքանչյուրը)
1 սկան գլխի ադապտեր
2 կենտրոնացման զսպանակային համակարգ
1 միացնող մալուխ մոտ 41 մետր

CMS հարցումն օգտագործվում է այն դեպքերում, երբ մարդու մուտքը վտանգավոր է, իսկ տեսողական հսկողությունը հնարավոր չէ: Հետազոտությունը տալիս է կոորդինատային համակարգի հետ կապված դատարկությունների բացարձակ ճշգրիտ դիրքը, որն իր հերթին հնարավորություն է տալիս ռացիոնալ, ճշգրիտ և ճիշտ ձևակերպել այդ բացերի հետագա օգտագործումը կամ մարումը:

Ինֆրակարմիր հեռաչափը թույլ է տալիս որոշել օբյեկտների հեռավորությունը: Սա Sharp-ի GP2Y0A021 մոդելն է։ Սենսորը որոշում է հեռավորությունը ինֆրակարմիր սպեկտրում արտացոլված լույսի ճառագայթով: Հեռաչափը կարող է օգտագործվել խոչընդոտներից խուսափելու և տեղանքով նավարկելու համար:

Ելքը անալոգային ազդանշան է, որի լարման մակարդակը կախված է սահմանված ուղղությամբ թիրախի հեռավորությունից:

Սենսորը միացված է կառավարման էլեկտրոնիկային 3 լարերի միջոցով: Երբ միացված է Arduino-ին, չափազանց հարմար կլինի օգտագործել Troyka Shield-ը: Միացման մալուխը ներառված է փաթեթում։

Ուշադրություն.Այս սենսորի հոսանքի աղբյուրը կարող է տարբեր լինել: Նախքան մոդուլը միացնելը, ծանոթացեք DFRobot մոդուլների միացման առանձնահատկություններին:

Հեռաչափը ցանկացած վայրում ապահով տեղադրելու համար կա հատուկ ամրակ:

Բնութագրերը

  • Մատակարարման լարումը` 4,5-5,5 Վ
  • Ընթացիկ սպառումը` 30-40 մԱ
  • Հեռավորությունների միջակայքը՝ 10սմ - 80սմ

Սահմանափակումներ

Քանի որ սարքը հիմնված է լույսի վրա, սենսորը հարմար չէ լույս կլանող օբյեկտների հեռավորությունը որոշելու համար: Հեռաչափը նույնիսկ չի զգա թափանցիկ մակերես, ինչպիսին է պլաստիկը կամ plexiglass-ը: Նման միջավայրում հեռավորությունները որոշելու համար հարմար է URM37 կամ HC-SR04 ուլտրաձայնային հեռաչափը:

Այս ինֆրակարմիր հեռաչափը իր առջև ունի փոքր մեռած գոտի՝ 10 սմ։ Եթե Ձեզ անհրաժեշտ է հաշվի առնել ավելի կարճ հեռավորությունների վրա գտնվող խոչընդոտները, իսկ սահմանային հեռավորությունն այնքան էլ կարևոր չէ, ապա հաշվի առեք նույն գծի 4-30 սմ հեռավորությունների հեռավորությունը։ Եթե ​​ձեր սարքը պետք է ավելի հեռուն տեսնի, փնտրեք հեռաչափ 20-150 սմ հեռավորությունների համար: Դուք կարող եք հասնել ավելի մեծ ճկունության՝ միավորելով սենսորները տարբեր միջակայքերով:

Sharp GP2Y0A ինֆրակարմիր հեռավորության ցուցիչը հանրաճանաչ ընտրություն է Arduino-ի վրա հիմնված տարբեր նախագծերի համար, որոնք պահանջում են հեռավորության ճշգրիտ չափում:

Sharp սենսորներն ունեն ինֆրակարմիր (IR) լուսարձակող դիոդ (LED)՝ ոսպնյակով, որը արձակում է լույսի նեղ ճառագայթ: Օբյեկտից արտացոլված ճառագայթը մեկ այլ ոսպնյակի միջոցով ուղղվում է դիրքի նկատմամբ զգայուն ֆոտոբջիջ (Position-Sensitive Detector, PSD): PSD-ի վրա ճառագայթի անկման վայրը որոշում է դրա հաղորդունակությունը: Հաղորդունակությունը վերածվում է լարման և, օրինակ, այն թվայնացնելով միկրոկոնտրոլերի անալոգային թվային փոխարկիչով, կարող եք հաշվարկել հեռավորությունը:

Sharp ինֆրակարմիր հեռավորության սենսորի ելքը հակադարձ համեմատական ​​է. քանի որ հեռավորությունը մեծանում է, դրա արժեքը դանդաղորեն նվազում է: Հեռավորության և լարման փոխհարաբերությունների գրաֆիկի տեսք:

Սենսորները, կախված իրենց տեսակից, ունեն չափման սահմաններ, որոնց շրջանակներում դրանց արդյունքը կարելի է հուսալի համարել: Առավելագույն իրական հեռավորության չափումը սահմանափակվում է երկու գործոնով՝ արտացոլված լույսի ինտենսիվության նվազմամբ և պատկերված ճառագայթի տեղակայման փոքր փոփոխություններ գրանցելու PSD-ի անկարողությամբ։ Ընդհանուր առմամբ, հեռավորության և լարման միջև գծապատկերը գծային չէ, բայց թույլատրելի հեռավորությունների սահմաններում, ելքային լարման և հեռավորության փոխադարձ գծապատկերը բավական մոտ է գծայինությանը, որ բավականին հեշտ է ստանալ լարումը հեռավորության փոխակերպման բանաձևը: Նման բանաձև գտնելու համար անհրաժեշտ է տվյալ գրաֆիկի կետերը մուտքագրել աղյուսակային տվյալների մշակման ցանկացած ծրագիր և դրանցից ստեղծել նոր գրաֆիկ։ Աղյուսակային տվյալների մշակման ծրագրում հնարավոր է ավտոմատ կերպով հաշվարկել միտումի գիծը՝ հիմնվելով գրաֆիկի կետերի վրա: Օրինակ, GP2Y0A021YK0F սենսորի համար.


Սուր ինֆրակարմիր հեռաչափի բնութագրերը

Աշխատանքային լարումը `4,5 - 5,5 Վ; Առավելագույն ընթացիկ սպառումը `40 մԱ (բնորոշ` 30 մԱ); Ելքային ազդանշանի տեսակը՝ անալոգային; Հեռավորության ճանաչման միջակայքից ավելի դիֆերենցիալ լարում՝ 2.0 Վ; Արձագանքման ժամանակը՝ 38 ± 10 ms Գործառնական տիրույթը՝ սենսոր GP2Y0A41SK0F՝ 4 - 30 սմ; Սենսոր GP2Y0A021YK0F՝ 10 սմ - 80 սմ; Սենսոր GP2Y0A02YK0F՝ 20 սմ - 150 սմ;

Օգտագործման օրինակ

Եկեք խանութի այցելուների հաշվման օրինակ ստեղծենք։ Պարզեցնենք խնդիրը՝ ենթադրելով, որ մուտքը նեղ դռնով է, իսկ մուտքի ու ելքի համար կան տարբեր դռներ։ Մուտքի մոտ դնում ենք Sharp GP2Y0A21YK0F ինֆրակարմիր տիրույթի որոնիչը (20-150 սմ), որպեսզի մարդ անցնելիս ցուցումները լինեն 10 - 50 սմ, մարդկանց բացակայության դեպքում՝ 80 սմ։ Երբ այցելու է հայտնաբերվում, մեծացնում ենք հաշվիչ այցելուներին հաշվելու համար: Մենք տվյալները ցուցադրում ենք Nokia 5110 գրաֆիկական էկրանին: Սենսորներից տեղեկատվություն ցուցադրելու համար մենք կօգտագործենք Nokia 5110 LCD-ը: Սա մոնոխրոմ գրաֆիկական էկրան է 84 × 48 պիքսել թույլատրությամբ: Nokia 5110 էկրանը գալիս է PCD8544 կարգավորիչի և փին գլխի հետ զուգակցված տախտակի վրա: Ցուցադրման էներգիայի սպառումը թույլ է տալիս այն սնուցվել Arduino տախտակի +3,3 Վ ելքից:

Նախագծի համար մեզ անհրաժեշտ են հետևյալ մանրամասները.
arduino uno տախտակ
breadboard (Breadboard Half)
ինֆրակարմիր հեռավորության ցուցիչ սուր GP2Y0A21YK0F
Nokia 5110 էկրան
միացնող լարեր
Եկեք հավաքենք նկարում ցուցադրված շղթան:

Եկեք սկսենք Arduino IDE-ն: Եկեք ստեղծենք նոր ուրվագիծ և դրան ավելացնենք հետևյալ բովանդակությունը. // Pin 4 - Սերիական տվյալների դուրսբերում (DIN) // PIN 5 - Տվյալների/Հրամանների ընտրություն (D/C) // Pin 6 - LCD չիպի ընտրություն (CS) // pin 7 - LCD վերակայում (RST) Adafruit_PCD8544 էկրան = Adafruit_PCD8544 (3, 4, 5, 6, 7); // անալոգային փին սենսորի Vo ելքը միացնելու համար const int IRpin = A0; // փոփոխականներ int value1; // պահել անալոգային արժեքը unsigned long timevisitors; // տարանցման ժամանակ int count_visitors=0; // այցելուների քանակի փոփոխական void setup() ( // սկսել սերիական պորտը Serial.begin(9600); Serial.println(«սկիզբ»); // ցուցադրել սկզբնավորումը display.begin(); // սահմանել էկրանի ֆոնի կոնտրաստը.setContrast (60); display.clearDisplay(); //մաքրել էկրանի ցուցադրումը.setTextSize(1); //տառաչափի ցուցադրում.setTextColor(BLACK); //color //splash screen display.setCursor(5,15); ցուցադրում .print («Այցելուներ. 0»); display.display(); delay(2000); ) void loop() (// ստացեք հարթեցված արժեքը և փոխարկեք լարման արժեք1=irRead(); if(value1>50) / / շտկել հատվածը ( timevisitors=millis(); while(irRead()>50) ; if(millis()-timevisitors>300) // > տարանցման նվազագույն ժամանակը ( Serial.println("passage!!!"); count_visitors =count_visitors+1; // մեծացնել հաշվիչը // տպել սերիական պորտի մոնիտորի վրա Serial.print("count_visitors="); Serial.println(count_visitors); // տպել էկրանի վրա display.clearDisplay(); display.setCursor (5,15);ցուցադրել .print("Այցելուներ:"); display.print(count_visitors); display.display(); ) ) ուշացում (200); ) // Մի քանի արժեքների միջինացում int irRead() հարթեցման համար ( int averaging = 0; // փոփոխական տվյալների գումարման համար // Ստանալով 5 արժեքներ (int i=0; i<5; i++) { value1 = analogRead(IRpin); // значение сенсора переводим в напряжение float volts = analogRead(IRpin)*0.0048828125; // и в расстояние в см int distance=32*pow(volts,-1.10); averaging = averaging + distance; delay(55); // Ожидание 55 ms перед каждым чтением } value1 = averaging / 5; // усреднить значения return(value1); } Работать с сенсорами SHARP очень просто - достаточно подключить к нему питание и завести вывод Vo на аналоговый вход Arduino. Значение получаемой функции analogRead представляет собой целое число от 0 до 1023. Таким образом, чтобы узнать напряжение на выходе сенсора, необходимо значение на аналоговом входе Arduino умножить на 0,0048828125 (5 В / 1024). Расстояние вычисляем по формуле distance=volts*0.0001831-0.003097. При чтении данных, при каждой итерации цикла, иногда приходят разные значения сигнала при одном и том же расстоянии. Датчик передает сигнал на аналоговый порт с некоторой амплитудой и иногда в момент считывания данных значение оказывалось отличным от нормального, потому что итерация приходится на провал. Для сглаживания значений, получаемых с дальномера используем функцию irRead(). Датчик обнаруживает попадание объекта в дверной проем. Далее ожидаем окончания прохода. Если это время больше минимального времени прохода (отсечение взмаха руки, пролет предмета и пр.) инкрементируем счетчик посетителей и выводим данные в последовательный порт и на дисплей. Для работы с дисплеем Nokia 5110 нам понадобятся Arduino библиотеки Adafruit_GFX и Adafruit_PCD8544.

Հաճախակի տրվող հարցեր ՀՏՀ

1. Էկրանի վրա ոչ մի տեղեկություն չի ցուցադրվում
  • Ստուգեք բոլոր լարերի ճիշտ միացումը՝ համաձայն Նկար 5-ի գծապատկերի:
2. Հեռավորության սենսորը չի աշխատում
  • Ստուգեք սուր մոդուլի միացումը;
  • Ստուգեք, արդյոք սենսորի հայտնաբերումը գործարկված է սերիական միացքի մոնիտորում:

Այս հոդվածում մենք կքննարկենք SHARP GP2Y0A02YK0F IR հեռավորության չափման սենսորի միացման և աշխատանքի հետ:
Ի տարբերություն նույնի, այս սենսորն ունի շատ ավելի համեստ չափման տիրույթ, բայց դեռևս ունի մի շարք օգտակար տարբերակիչ հատկություններ: Օրինակ, այս սենսորը թույլ է տալիս չափել հեռավորությունը նույնիսկ թափանցիկ մակերեսների միջոցով (չնայած կորցնելով ընթերցումների ճշգրտությունը, բայց այնուամենայնիվ):

Սենսորային միացում.

GNDցանկացած GND կապում --- arduino

ԴՈՒՐՍ arduino-ի անալոգային մուտքերից որևէ մեկին (օրինակներում միացված է A0-ին)

VCC+ 5 վոլտ arduino-ում

Հիմնական տեխնիկական բնութագրերը.

Հեռավորության չափման միջակայքը՝ 20-ից 150 սմ

անալոգային ելք

Չափերը՝ 29.5x13x21.6 մմ

Ընթացիկ սպառումը` 33 մԱ

Մատակարարման լարումը` 4,5-ից 5,5 Վ

Այն պետք է ապափաթեթավորվի և ավելացվի Arduino IDE թղթապանակի «գրադարաններ» թղթապանակում: Մի մոռացեք վերագործարկել միջավայրը, եթե IDE-ն բաց էր այն ավելացնելիս:

Ո՞րն է այս գրադարանի առանձնահատկությունը և ինչո՞ւ է այն խորհուրդ տրվում օգտագործել։ Պատասխանը պարզ է և կայանում է նրա աշխատանքի սկզբունքի մեջ։ Հեռավորությունը չափելու համար օգտագործվում են բազմաթիվ չափումներ, որոնցից դեն են նետվում սխալները, որոնք շատ են տարբերվում հարեւաններից։ Ըստ հեղինակների, բոլոր ընթերցումների 12%-ը նպաստում է սխալի 42%-ին վերջնական հեռավորության արժեքին, եթե սխալ չափումները չվերացվեն:

Եկեք անցնենք ծրագրի կոդը՝ սենսորի հետ աշխատելու օրինակ (օրինակը հարմար է նաև GP2Y0A21Y սենսորի համար, կոդում ձեզ հարկավոր է մոդելի արժեքը փոխել 1080-ի).

Ծրագրի կոդի օրինակ

#ներառում #սահմանել ir A0 //փին, որին միացված է սենսորը: Անպայման անալոգային!#սահմանել մոդել 20150 թ // սենսորային մոդել: 1080 GP2Y0A21Y-ի համար, 20150 GP2Y0A02Y-ի համար SharpIR SharpIR (ir, մոդել); անվավեր կարգավորում () { Սերիալ.սկիզբ (9600); ) անվավեր հանգույց() (ուշացում (2000); անստորագիր երկար pepe1=millis (); // նշեք չափումների մեկնարկից առաջ ժամանակը int dis=SharpIR .distance(); // ստանալ հեռավորությունը սենսորից Սերիալ.print ("Միջին հեռավորությունը: "); // տպել հեռավորությունը դեպի նավահանգիստ մոնիտոր Սերիալ.println(dis); անստորագիր երկար pepe2=millis()-pepe1; // հաշվել չափման վրա ծախսված ժամանակը Սերիալ.print ("Ժամանակը (մս): "); // և թողարկեք այն Սերիալ.println (pepe2); )

հեռաչափեր

Այս դասում մենք ավելին կիմանանք հեռաչափերի մասին:

ուլտրաձայնային միջակայքի որոնիչHC-SR04

Այսօր (2016) AliExpress-ում այն ​​արժե 1 դոլարից ոչ ավելի:

Սենսորն ունի 4 ելք.

  • Vcc - Այս փին սնուցվում է 5 Վ-ով:
  • Կտրուկ - Այս պտուտակը պետք է 10 մվրկ-ով շարժվի տրամաբանական, որպեսզի հեռաչափը արձակի ուլտրաձայնային ալիք:
  • Էխո - Ուլտրաձայնային ալիքի վերադարձից հետո այս կոնտակտին տրվելու է տրամաբանական միավոր՝ օբյեկտի հեռավորությանը համաչափ ժամանակի համար:
  • Gnd - Այս քորոցը միանում է գետնին:

Ուլտրաձայնային հեռաչափ - աշխատում է «չղջիկի» սկզբունքով: Այն ուղարկում է ուլտրաձայնային ալիք և հաշվում է ալիքի վերադարձի ժամանակը: Իմանալով ձայնի արագությունը և ալիքի վերադարձի ժամանակը, կարող եք հաշվարկել հեռավորությունը մինչև օբյեկտ:

Այս հեռաչափի օգնությամբ մենք կհավաքենք փոքրիկ կայանման սենսոր, որը կարելի է մեծացնել և հավաքել որպես մեքենա կայանելու պատրաստի սարք։ Ես նաև ձեզ ցույց կտամ, թե ինչպես կարող եք օգտագործել հեռաչափը՝ ձեր սարքերը կառավարելու համար:

Հեռահարաչափ

Եկեք մի պարզ շղթա հավաքենք, որպեսզի հասկանանք, թե ինչպես է աշխատում հեռաչափը:

Կոդ

#define ECHO 13 #define TRIG 12 void setup() ( pinMode (ECHO, INPUT); // ECHO-ն պետք է սահմանվի տրամաբանական միավորի pinMode (TRIG, OUTPUT); // TRIG-ից մենք կկարդանք Serial.begin հեռավորության արժեքը (9600) ; //Կապ հաստատեք սերիական պորտին ) void loop() ( // Feed TRIG HIGH and անմիջապես LOW digitalWrite (TRIG, HIGH); digitalWrite (TRIG, LOW); //Կարդացեք մուտքային ազդանշանի երկարությունը միկրովայրկյաններով int dist = pulseIn( ECHO, HIGH) / 54; // Բաժանեք 54-ի` ընթերցումները սմ-ի փոխարկելու համար:

Բացատրություններ

զարկերակային (արձագանք,ԲԱՐՁՐ);- Այս ֆունկցիայի միջոցով մենք հաշվեցինք այն ժամանակը, որի համար ECHO փին դրված է HIGH: Այս ժամանակը համարվում է միկրովայրկյաններով:

Ընդհանուր առմամբ, pulseIn(); կարելի է գրել այսպես.

pulseIn (pin, արժեքը, timeout);

Փին- Այն քորոցը, որի վրա կհաշվարկվի ժամանակը:

Իմաստը– Ակնկալվող ազդանշանի մակարդակը, որով կկատարվի հաշվարկը: ԲԱՐՁՐ կամ ՑԱԾՐ:

Ընդմիջում– ժամանակը միկրովայրկյաններով, որի ընթացքում ակնկալվում է ազդանշանի ժամանումը: Ժամկետի ավարտից հետո ֆունկցիայի վերադարձած արժեքը կսահմանվի զրոյի:

Այսպիսով, մենք պարզեցինք հեռաչափի աշխատանքի սկզբունքը: Խաղալիք մեքենաների համար կայանման սենսորներ պատրաստելու ժամանակը:

Պարկտրոնիկ

Շղթայի դիագրամը հետևյալն է.

#սահմանել ECHO 3 // Ստանալ ազդանշան միջակայքից #define TRIG 2 // Ազդանշան ուղարկել հեռաչափին #սահմանել COUNT 5 // LED-ների քանակը #սահմանել BUZZ 6 // Buzzer pin #define FIRST 9 // LED-ների առաջին պինդ #define dist_setup 1 //Տյունինգ գործոն #սահմանել հաճախականությունը 5000 void setup() ( for(int i = 0; i< COUNT; ++i) //Обозначаем светодиоды как выход... { pinMode(i+FIRST, OUTPUT); } pinMode(ECHO, INPUT); //...ECHO как вход... pinMode(TRIG, OUTPUT); //...TRIG как выход... pinMode(BUZZ, OUTPUT); //...пищалку как выход Serial.begin(9600); //Установим соединение с Serial } void loop() { digitalWrite(TRIG, HIGH); //Подаем команду на дальномер digitalWrite(TRIG, LOW); int dist = pulseIn(ECHO, HIGH) / 54; //Измеряем расстояние до объекта dist = constrain(dist, 2, 60); //Полученные значения загоняем в диапазон от 2 до 60 //Сравниваем полученные показания и включаем нужный режим if (dist < 10) { all_led_on(); } else if (dist < 20 * dist_setup) { four_led_on(); } else if (dist < 30 * dist_setup) { three_led_on(); } else if(dist < 40 * dist_setup) { two_led_on(); } else if(dist < 50 * dist_setup) { one_led_on(); } else { for(int i = 0; i < COUNT; ++i) { digitalWrite(i+FIRST, LOW); } noTone(BUZZ); } } // Описание режимов void one_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, HIGH); tone (BUZZ, frequency, 1000); delay(1000); } void two_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 700); delay(700); } void three_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 400); delay(400); } void four_led_on() { digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 200); delay(200); } void all_led_on() { for(int i = 0; i < COUNT; ++i) { digitalWrite(i+FIRST, HIGH); } tone(BUZZ, frequency, 5000); delay(5000); }

Բացատրություններ

Կայանման սենսորները հագեցած են լուսադիոդային և ձայնային ցուցիչներով։ Երբ օբյեկտը մոտենում է որոշակի հեռավորության վրա, ավելի հաճախակի ազդանշաններ են լսվում և ավելի շատ լուսադիոդներ են վառվում:

հեռավոր_ կարգավորում - սա այն գործակիցն է, որով դուք կարող եք հարմարեցնել հեռավորությունը կայանման սենսորների աշխատանքին:

Ինձ համար դա հավասար է մեկի։ Եթե ​​պետք է կրճատել հեռավորությունը, ապա պետք է նվազեցնել գործակիցը, բայց հետո այն կլինի 0.xxx-ի տեսքով: Դա անելու համար ներկայացվում է float տիպի փոփոխական:

Ձայնային ազդանշանի հաճախականությունը նույնպես կարող է փոխվել: Դա անելու համար դուք պետք է փոխեք արժեքը հաճախականությունը . Բայց պետք է հիշել, որ պիեզո արտանետիչը սարսափելի ճռռում է։ Չափազանց. Եվ, ինձ թվում է, դա ձեզ արագ կհուսահատեցնի այն օգտագործելուց ավելի կամ ավելի քան 5 րոպե:

Որպես տարբերակ, իջեցրեք հաճախականությունը մինչև 20 Հց կամ միացրեք սովորական 8 օմ բարձրախոս, օրինակ:

Գաղտնաբառ

Այժմ եկեք փորձենք ստեղծել գաղտնի ծածկագիր, որը լուսավորում է LED- ները: Իսկ եթե շղթայի մեջ ներառեք փականով սերվոշարժիչ, ապա կարող եք կողպեք դռան վրա կամ գաղտնաբառով տուփ սարքել։

Ուշադրություն դարձրեք դիագրամին.

Կոդ

//Առաջին հեռաչափի մատնահետքերը #սահմանել TRIG1 12 #սահմանել ECHO1 13 //Երկրորդ հեռաչափի կապիչներ #սահմանել TRIG2 10 #սահմանել ECHO2 11 //LEDs #սահմանել ԱՌԱՋԻՆ 3 #սահմանել COUNT 5 //Վերականգնել կոճակը RESET #define/ սահմանել ; intkey2; intkey3; void setup() ( // LED-ների նախագծում որպես ելք (int i = 0; i)< COUNT; i++) { pinMode(i+FIRST, OUTPUT); } //Обозначение пинов на дальномерах pinMode(TRIG1, OUTPUT); pinMode(ECHO1, INPUT); pinMode(TRIG2, OUTPUT); pinMode(ECHO2, INPUT); pinMode(RESET, INPUT_PULLUP); } void loop() { //Подача сигнала на дальномеры digitalWrite(TRIG2, HIGH); digitalWrite(TRIG2, LOW); int dist2 = pulseIn(ECHO2, HIGH,3000) / 54; digitalWrite(TRIG1, HIGH); digitalWrite(TRIG1, LOW); int dist1 = pulseIn(ECHO1, HIGH) / 54; //Дополнительная индикация "ввода" символов if(dist1 < 10 && dist2 < 10) { digitalWrite(5, HIGH); delay(100); } if(dist2 >20 && dist2< 25) { digitalWrite(4, HIGH); delay(100); } if(dist1 >20 && dist1< 25) { digitalWrite(6, HIGH); delay(100); } //Код пароля + индикация "ввода" символов if(dist2 >10 && dist2<15) { key1 = 1; digitalWrite(3, HIGH); delay(100); } if(dist1 >10 && dist1< 15) { digitalWrite(7, HIGH); delay(100); key1 = 0; } if(dist1 >20 && dist1< 25 && key1 == 1) { key2 = 1; } else if(dist2 >20 && dist2<25 || key1 == 0) { key1 = 0; key2 = 0; } if(dist1 < 10 && dist2 < 10 && key2 == 1) { key3 = 1; } if(key3 == 1) { for(int i = 0; i < COUNT; i++) { digitalWrite(i + FIRST, HIGH); } } if(key3 == 0) { for(int i = 0; i < COUNT; i++) { digitalWrite(i + FIRST, LOW); } } //Сброс пароля boolean res = digitalRead(RESET); if(res == 0) { key1 = 0; key2 = 0; key3 = 0; } }

Բացատրություններ

Բոլոր հինգ LED-ները լուսավորելու համար դուք պետք է իմանաք գործողությունների հաջորդականությունը, որոնք դուք պետք է կատարեք: Ահա ձեզ համար առաջադրանք. «Չնայած ստորև ներկայացված բացատրություններին, որոշեք, թե ինչ գործողությունների հաջորդականություն է պետք կատարել, որպեսզի բոլոր հինգ LED-ները լուսավորվեն»:

Սա հնարավոր խնդիր է, եթե դուք կարդացել եք դասընթացի առաջին մասը և հասկանում եք, թե ինչպես է գործում գործառույթը: եթե ().

Հասկացա? Եթե ​​այո, լավ է արված, իսկ եթե ոչ, ապա գրեթե լավ է արված:

Ընդհանուր առմամբ կա երեք «մուտքագրված նիշ»՝ 0-ից 10, 10-ից 15-ը և 20-ից 25-ը:

0-ից 10 վիճակը միացված է՝ երկու ձեռքերը երկու հեռաչափից 0-ից 10 սմ հեռավորության վրա բերելով: Եթե ​​դա արվի, դեղին լուսադիոդը կվառվի:

Կարգավիճակը 10-ից 15-ը կմիանա, երբ ձեր ձեռքը տեղափոխեք աջ կամ ձախ հեռաչափը 10-ից 15 սմ հեռավորության վրա: Ձեզ կառաջարկվի դա անել ձախ ձեռքի ամենաձախ LED-ով և աջ ձեռքի ամենաաջ LED-ով: .

20-ից 25-ի վիճակը միանում է այն պահին, երբ ձեռքից մինչև հեռաչափերից մեկը հեռավորությունը 20-ից 25 սմ է: Այս մասին ձեզ կտեղեկացնեն երկրորդը ձախից, իսկ երկրորդը աջ LED-ներով: ձախ և աջ ձեռքերը, համապատասխանաբար:

Հարկ է նշել, որ հաջորդականությունը պետք է խստորեն պահպանվի:

  • Բարձրացրեք ձեր աջ ձեռքը 10-ից 15 հեռավորության վրա:
  • Աջ լուսադիոդը վառվելուց հետո ՁԱԽ ձեռքը հասցրեք 20-ից 25 հեռավորության վրա: Այս ամենն արվում է առանց աջ ձեռքի դիրքը փոխելու:
  • Ձախից երկրորդ լուսադիոդը նշելուց հետո ՁԱԽ ձեռքը տեղափոխեք ձախ, որպեսզի ձախ լուսադիոդը չվառվի, հակառակ դեպքում պետք է նորից հավաքեք կոդը: Աջ ձեռքը մոտեցրեք 0-ից 10 հեռավորությանը, իսկ Ձախ ձեռքը հասցրեք նույն հեռավորությանը, առանց դիպչելու 10-ից 15 հեռավորությանը:
  • LED-ները պետք է միացված լինեն և չպատասխանեն ձեր գործողություններին:
  • Գաղտնաբառը վերականգնելու համար սեղմեք RESET կոճակը: LED- ները պետք է անջատվեն:

Յուրաքանչյուր սխալ քայլ վերականգնում է գաղտնաբառը, և այն պետք է նորից մուտքագրվի: Կարող է առաջին անգամ չաշխատի, բայց մի քանի րոպե մարզվելուց հետո վստահ եմ, որ ամեն ինչ կստացվի, լուսադիոդները կվառվեն։

Այն բանից հետո, երբ ձեզ հաջողվի վառել բոլոր LED-ները, կարող եք ինքներդ փորձարկել և փոխել կոդը, որպեսզի հաջորդականությունը տարբեր լինի՝ ձեր հայեցողությամբ: Դուք կարող եք ավելի շատ «խորհրդանիշներ» ստեղծել, կամ կարող եք թողնել նույնը, բայց յուրաքանչյուր խորհրդանիշ պատրաստեք՝ օգտագործելով երկու հեռաչափ: Սա անկախ լուծման խնդիր է լինելու։

ինֆրակարմիր հեռաչափՍուր

Այս հեռաչափերով ամեն ինչ ավելի հեշտ է: Դուք պետք է միացնեք դրանք, ինչպես բոլոր անալոգային սենսորները: Եվ նույնիսկ հնարավոր է առանց 10 կՕմ ռեզիստորի: Եթե ​​ինչ-ինչ պատճառներով չգիտեք, թե ինչպես դա անել, ապա սա նկարագրված է իմ հոդվածում:

Տերմին

Կա այնպիսի երաժշտական ​​գործիք, ինչպիսին է տերեմինը։ Եվ հիմա մենք կհավաքենք այս գործիքի տեսքը:

Կոդ

( bool but_up = ճշմարիտ; void setup() (pinMode(RFIND, INPUT); pinMode(BUZ, OUTPUT); pinMode(BUT,INPUT_PULLUP); ) void loop() (//Code to turn theremin-ը և անջատել bool but_now = digitalRead(BUT); if( but_up && !but_now) ( delay(10); bool but_now = digitalRead(BUT); if(!but_now) ( sound_on = !sound_on; ) ) but_up = but_now; //Theremin-ի կոդը if(sound_on == 1) ( int val, freq; val = analogRead (RFIND); //Դուք կարող եք խաղալ սահմանափակումներով և քարտեզագրել ձեր սրտի բովանդակության համաձայն val = սահմանափակում (val, 100, 400); հաճախականություն = քարտեզ (val, 100, 400, 1000, 2500); տոն (BUZ, հաճախականություն, 20); ) )

Բացատրություններ

Եթե ​​սեղմում եք կոճակը, ապա թվիթերից կամ բարձրախոսից, կախված նրանից, թե ինչ եք միացրել, ազդանշան կհնչի, որը կտարբերվի՝ կախված հեռաչափից մինչև ձեր ձեռքի հեռավորությունից:

Կոճակն անհրաժեշտ է մեր «Theremin»-ը դադարեցնելու կամ գործարկելու համար

Արդյունք

Այսօր մենք ավելի ուշադիր նայեցինք հեռաչափերին և կատարեցինք մի քանի փոքր փորձեր, որոնցից երկուսը կարող են օգտագործվել իրական կյանքում: Parktronic - կօգնի կայանել, իսկ Combination կողպեքը կարող է բարելավվել այնպես, որ երբ մուտքագրեք ճիշտ գաղտնաբառը, սերվոմոտորը բացում է, օրինակ, ձեր սենյակի դռան սողնակը:

Ռադիոյի տարրերի ցանկ

Նշանակում Տիպ Դոնոմինացիա Քանակ ՆշումԽանութԻմ նոթատետրը
Սխեման 1
Arduino տախտակ

Arduino Uno

1 Նոթատետրում
Հացի տախտակՀաց տախտակ-կես1 Նոթատետրում
Միացնող լարեր«Պապ պապա»4 Նոթատետրում
ՀեռահարաչափHC-SR042 Նոթատետրում
Սխեման 2
Arduino տախտակ

Arduino Uno

1 Նոթատետրում
ՀեռահարաչափHC-SR041 Նոթատետրում
Միացնող լարեր«Պապ պապա»15 Նոթատետրում
Հացի տախտակՀաց տախտակ-կես1 Նոթատետրում
Պիեզո ազդանշան 1 Նոթատետրում
Ռեզիստոր

220 օմ

1 Նոթատետրում
Լույս արտանետող դիոդ

AL102B

2 Նոթատետրում
Լույս արտանետող դիոդ

AL307V

1 Նոթատետրում
Լույս արտանետող դիոդ

AL307D

2 Նոթատետրում
Սխեման 3
Arduino տախտակ

Arduino Uno

1 Նոթատետրում
ՀեռահարաչափHC-SR042 Նոթատետրում
Ռեզիստոր

220 օմ

5
Բեռնվում է...Բեռնվում է...