Infrared laser range finder. Ang SHARP GP2Y0A02Y at GP2Y0A21Y ay kumonekta sa Arduino Infrared rangefinder sharp

Ang Sharp GP2Y0A Infrared Distance Sensor ay isang popular na pagpipilian para sa iba't ibang mga proyektong nakabatay sa Arduino na nangangailangan ng tumpak na pagsukat ng distansya.

Gumagamit ang mga sharp sensor ng infrared (IR) light-emitting diode (LED) na may lens na naglalabas ng makitid na sinag ng liwanag. Ang sinag na sinasalamin mula sa bagay ay nakadirekta sa pamamagitan ng isa pang lens sa isang photocell na sensitibo sa posisyon (Position-Sensitive Detector, PSD). Ang conductivity nito ay depende sa lokasyon ng insidente ng beam sa PSD. Ang kondaktibiti ay na-convert sa boltahe at, halimbawa, sa pamamagitan ng pag-digitize nito gamit ang isang analog-to-digital converter sa isang microcontroller, maaaring kalkulahin ang distansya.

Ang output ng Sharp infrared distance sensor ay inversely proportional - habang tumataas ang distansya, dahan-dahang bumababa ang halaga nito. Tingnan ang graph ng relasyon sa pagitan ng distansya at boltahe.

Ang mga sensor, depende sa kanilang uri, ay may mga limitasyon sa pagsukat kung saan ang kanilang output ay maaaring ituring na maaasahan. Ang maximum na tunay na pagsukat ng distansya ay nililimitahan ng dalawang salik: ang pagbawas sa nasasalamin na intensity ng liwanag at ang kawalan ng kakayahan ng PSD na makakita ng mga banayad na pagbabago sa lokasyon ng nakunan ng larawan. Sa pangkalahatan, ang graph sa pagitan ng distansya at boltahe ay hindi linear, ngunit sa loob ng katanggap-tanggap na mga distansya, ang graph ng kabaligtaran ng output boltahe at distansya ay lumalapit nang sapat sa linearity na ito ay medyo madaling gamitin upang makakuha ng isang formula para sa pag-convert ng boltahe sa distansya . Upang makahanap ng gayong formula, kailangan mong ipasok ang mga punto ng graph na ito sa ilang programa para sa pagproseso ng tabular data at lumikha ng bagong graph mula sa kanila. Sa isang tabular data processing program, posibleng awtomatikong kalkulahin ang isang trend line batay sa mga graph point. Halimbawa, para sa sensor GP2Y0A021YK0F:


Mga detalye ng Sharp infrared rangefinder

Operating boltahe: 4.5 - 5.5 V; Pinakamataas na kasalukuyang pagkonsumo: 40 mA (karaniwang - 30 mA); Uri ng signal ng output: analog; Differential boltahe na mas malaki kaysa sa hanay ng pagkilala sa distansya: 2.0 V; Oras ng pagtugon: 38 ± 10 ms Saklaw ng pagpapatakbo: GP2Y0A41SK0F sensor: 4 - 30 cm; Sensor GP2Y0A021YK0F: 10 cm - 80 cm; Sensor GP2Y0A02YK0F: 20 cm - 150 cm;

Halimbawa ng paggamit

Gumawa tayo ng halimbawa ng pagbibilang ng mga bisita sa tindahan. Pasimplehin natin ang problema sa pamamagitan ng pag-aakalang ang pasukan ay sa pamamagitan ng makipot na pinto, at may iba't ibang pinto para sa pagpasok at paglabas. Sa pasukan ay naglalagay kami ng infrared rangefinder na Sharp GP2Y0A21YK0F (20-150 cm) upang kapag ang isang tao ay pumasa, ang mga pagbabasa ay may halaga na 10 - 50 cm, sa kawalan ng mga tao na 80 cm. Kapag may nakitang bisita, tumataas kami ang bisita counter. Ipinapakita namin ang data sa graphic display ng Nokia 5110. Upang magpakita ng impormasyon mula sa mga sensor, gagamitin namin ang LCD display ng Nokia 5110. Ito ay isang graphic na monochrome display na may resolution na 84x48 pixels. Ang Nokia 5110 display ay nasa isang board na ipinares sa isang PCD8544 controller at isang pin connector. Ang pagkonsumo ng kuryente ng display ay nagbibigay-daan sa ito na mapatakbo mula sa +3.3 V na output ng Arduino board.

Para sa proyekto kakailanganin namin ang mga sumusunod na bahagi:
Arduino Uno board
Kalahati ng Breadboard
infrared distance sensor sharp GP2Y0A21YK0F
Display ng Nokia 5110
pagkonekta ng mga wire
I-assemble natin ang circuit na ipinapakita sa figure.

Ilunsad natin ang Arduino IDE. Gumawa tayo ng bagong sketch at idagdag ang sumusunod na nilalaman dito: // Infrared distance sensor // website // pagkonekta ng mga library para sa pagtatrabaho sa Nokia display #include #include // Nokia 5110 // pin 3 - Serial clock out (SCLK) // pin 4 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 6 - LCD chip select (CS) // pin 7 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544 (3, 4, 5, 6, 7); // analog pin para sa pagkonekta sa Vo sensor output const int IRpin = A0; // variables int value1; // para sa pag-iimbak ng analog value na hindi napirmahan ng mahabang oras na mga bisita; // oras ng paglalakbay int count_visitors=0; // visitor counting variable void setup() ( // simulan ang serial port Serial.begin(9600); Serial.println("start"); // simulan ang display display.begin(); // itakda ang background contrast ng ang screen display.setContrast (60); display.clearDisplay(); // i-clear ang screen display.setTextSize(1); // laki ng font display.setTextColor(BLACK); // color // splash screen display.setCursor(5 ,15); display.print ("Mga Bisita: 0"); display.display(); delay(2000); ) void loop() ( // kunin ang smoothed value at i-convert ito sa voltage value1=irRead(); kung (value1>50) // ayusin ang daanan ( timevisitors=millis(); while(irRead()>50) ; if(millis()-timevisitors>300) // > minimum na oras ng paglalakbay ( Serial.println("passage! !!"); count_visitors=count_visitors+1 ; // taasan ang counter // output sa serial port monitor Serial.print("count_visitors="); Serial.println(count_visitors); // output sa display display.clearDisplay (); display.setCursor(5,15); display .print("Mga Bisita: "); display.print(count_visitors); display.display(); ) ) pagkaantala(200); ) // Pag-a-average ng maraming halaga para sa pagpapakinis ng int irRead() ( int averaging = 0; // variable para sa summing data // Pagtanggap ng 5 value para sa (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.

FAQ ng mga madalas itanong

1. Walang impormasyong ipinapakita sa display
  • Suriin na ang lahat ng mga wire ay konektado nang tama, ayon sa diagram sa Figure 5.
2. Ang sensor ng distansya ay hindi gumagana
  • Suriin ang koneksyon ng matalim na module;
  • Suriin ang sensor detection sa serial port monitor.

Mga Rangefinder

Sa tutorial na ito, susuriin natin ang mga rangefinder.

Ultrasonic range finderHC-SR04

Ngayon (2016) ito ay nagkakahalaga ng hindi hihigit sa $1 sa AliExpress.

Ang sensor ay may 4 na output:

  • Vcc - Ang pin na ito ay nagbibigay ng 5V na kapangyarihan.
  • Trig - Ang isang lohikal na isa ay dapat ilapat sa pin na ito para sa 10 μs upang ang rangefinder ay naglalabas ng isang ultrasonic wave.
  • Echo - Matapos bumalik ang ultrasonic wave, isang lohikal na isa ang ilalapat sa contact na ito para sa isang oras na proporsyonal sa distansya sa bagay.
  • Gnd - Ang pin na ito ay kumokonekta sa lupa.

Ultrasonic rangefinder - gumagana sa prinsipyo ng "bat". Nagpapadala ito ng ultrasonic wave at binibilang ang oras na kailangan para bumalik ang wave. Ang pag-alam sa bilis ng tunog at ang tagal ng pagbabalik ng alon, maaari mong kalkulahin ang distansya sa bagay.

Gamit ang rangefinder na ito, bubuo kami ng isang maliit na sensor ng paradahan, na maaaring palakihin at i-assemble sa isang handa na aparato para sa pagparada ng kotse. Ipapakita ko rin sa iyo kung paano mo magagamit ang rangefinder para kontrolin ang iyong mga device.

Rangefinder

Magsama-sama tayo ng isang simpleng diagram upang maunawaan kung paano gumagana ang rangefinder.

Code

#define ECHO 13 #define TRIG 12 void setup() ( pinMode(ECHO, INPUT); // Kailangang itakda ang ECHO sa logical one pinMode(TRIG, OUTPUT); // Mula sa TRIG babasahin natin ang halaga ng distansya na Serial.begin (9600) ; //Magtatag ng koneksyon sa Serial port ) void loop() ( //Ipadala ito sa TRIG HIGH at agad na LOW digitalWrite(TRIG, HIGH); digitalWrite(TRIG, LOW); //Basahin ang haba ng papasok na signal sa microseconds int dist = pulseIn( ECHO, HIGH) / 54; // Hatiin sa 54 para i-convert ang mga reading sa cm Serial.println(dist); // I-output ang mga reading ng rangefinder sa Serial delay(300); // We maghintay ng kaunti upang ang mata ay magkaroon ng oras upang makilala ang mga pagbasa)

Mga paliwanag

pulseIn(ECHO,MATAAS);- Gamit ang function na ito, binibilang namin ang oras kung kailan nakatakda ang ECHO pin sa HIGH. Ang oras na ito ay binibilang sa microseconds.

Sa pangkalahatan, pulseIn(); maaaring isulat ng ganito:

pulseIn(pin, halaga, timeout);

Pin– I-pin kung aling oras ang kakalkulahin.

Ibig sabihin– Antas ng inaasahang signal kung saan isasagawa ang pagbibilang. MATAAS o MABABANG.

Time-out– oras sa microsecond kung saan inaasahang darating ang signal. Kapag nag-expire ang timeout, ang halaga na ibinalik ng function ay itatakda sa zero.

Kaya, nalaman namin ang prinsipyo ng pagpapatakbo ng rangefinder. Oras na para gumawa ng mga parking sensor para sa mga laruang sasakyan.

Parktronic

Ganito ang hitsura ng diagram ng parking sensor:

#define ECHO 3 // Pagtanggap ng signal mula sa rangefinder #define TRIG 2 // Pagbibigay ng signal sa rangefinder #define COUNT 5 // Bilang ng mga LED #define BUZZ 6 // Pin para sa buzzer #define FIRST 9 // Una pin ng mga LED #define dist_setup 1 //Tuning factor #define frequency 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); }

Mga paliwanag

Ang Parktronic ay nilagyan ng LED at sound indication. Kapag lumalapit ang isang bagay sa loob ng mga tinukoy na distansya, mas madalas na mga beep ang maririnig at mas maraming LED ang umiilaw.

dist_ setup – ito ay isang koepisyent kung saan maaari mong ayusin ang distansya bago i-activate ang mga parking sensor.

Para sa akin ito ay katumbas ng isa. Kung kailangan mong bawasan ang distansya, kailangan mong bawasan ang koepisyent, ngunit pagkatapos ay ito ay nasa anyo ng 0.xxx. Upang gawin ito, ipinakilala ang isang variable ng uri ng float.

Ang dalas ng langitngit ay maaari ding baguhin. Upang gawin ito kailangan mong baguhin ang halaga dalas . Ngunit dapat mong tandaan na ang piezo emitter beeps masyado. sukdulan. At, tila sa akin na ito ay mabilis na hihinto sa iyo mula sa paggamit nito nang higit pa o mas mahaba kaysa sa 5 minuto.

Ang isang alternatibo ay ang babaan ang frequency sa 20 Hz o ikonekta ang isang regular na 8 ohm speaker, halimbawa.

Password

Ngayon subukan nating gumawa ng isang lihim na code na nagpapailaw sa mga LED. At kung isasama mo ang isang servomotor na may trangka sa circuit, maaari kang gumawa ng lock para sa isang pinto o isang drawer na may password.

Bigyang-pansin ang diagram.

Code

//Pin ng unang rangefinder #define TRIG1 12 #define ECHO1 13 //Pins of the second rangefinder #define TRIG2 10 #define ECHO2 11 //LEDs #define FIRST 3 #define COUNT 5 //Reset button #define RESET 2 / /Mga variable ng password int key1; int key2; int key3; void setup() ( // Pagtatalaga ng mga LED bilang output para sa(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 at& dist1< 25) { digitalWrite(6, HIGH); delay(100); } //Код пароля + индикация "ввода" символов if(dist2 >10 at& dist2<15) { key1 = 1; digitalWrite(3, HIGH); delay(100); } if(dist1 >10 at& dist1< 15) { digitalWrite(7, HIGH); delay(100); key1 = 0; } if(dist1 >20 at& 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; } }

Mga paliwanag

Upang masindi ang lahat ng limang LED, kailangan mong malaman ang pagkakasunud-sunod ng mga aksyon na kailangang isagawa. Narito ang isang gawain para sa iyo - "Sa kabila ng mga paliwanag sa ibaba, tukuyin kung anong pagkakasunud-sunod ng mga aksyon ang kailangang gawin upang lumiwanag ang lahat ng limang LED"

Ito ay isang magagawang gawain kung nabasa mo ang unang bahagi ng kurso at nauunawaan kung paano gumagana ang function kung().

Nakuha ko? Kung oo, magaling, at kung hindi, halos magaling.

May tatlong "input character" sa kabuuan - mula 0 hanggang 10, mula 10 hanggang 15 at mula 20 hanggang 25.

Ang estado mula 0 hanggang 10 ay isinaaktibo kung dadalhin mo ang parehong mga kamay sa layo mula 0 hanggang 10 cm sa parehong mga rangefinder. Kung gagawin mo ito, sisindi ang dilaw na LED.

Ang estado 10 hanggang 15 ay mag-o-on kapag dinala mo ang iyong kamay sa kanan o kaliwang rangefinder sa layong 10 hanggang 15 cm. Ang pinakakaliwang LED para sa kaliwang kamay at ang pinakakanang LED para sa kanang kamay ay magsasabi sa iyo na ang pagkilos na ito ay ginawa. nakumpleto.

Ang estado mula 20 hanggang 25 ay naka-on sa sandaling ang distansya mula sa kamay patungo sa isa sa mga rangefinder ay mula 20 hanggang 25 cm. Ipapaalam sa iyo ang tungkol dito sa pamamagitan ng pangalawa mula sa kaliwa at pangalawa mula sa kanang mga LED para sa kaliwa at kanang kamay, ayon sa pagkakabanggit.

Ito ay nagkakahalaga na tandaan na ang pagkakasunud-sunod ay dapat na mahigpit na sundin.

  • Dalhin ang iyong KANAN na kamay sa layo na 10 hanggang 15.
  • Pagkatapos umilaw ang pinakakanang LED, dalhin ang iyong KALIWANG kamay sa layong 20 hanggang 25. Ginagawa ang lahat ng ito nang hindi binabago ang posisyon ng iyong kanang kamay.
  • Pagkatapos ipakita ang pangalawang LED mula sa kaliwa, ilipat ang iyong KALIWA na kamay sa kaliwa para hindi umilaw ang pinakakaliwang LED, kung hindi, kakailanganing ilagay muna ang code. Ilapit ang iyong KANAN na kamay sa layo mula 0 hanggang 10, at dalhin ang KALIWA mong kamay sa parehong distansya, nang hindi hinahawakan ang distansya mula 10 hanggang 15
  • Ang mga LED ay dapat na naiilawan at hindi tumugon sa iyong mga aksyon.
  • Pindutin ang RESET button para i-reset ang password. Dapat lumabas ang mga LED.

Ang bawat maling galaw ay nire-reset ang password at dapat na ipasok muli. Maaaring hindi ito gumana sa unang pagkakataon, ngunit pagkatapos ng ilang minuto ng pagsasanay, sigurado akong gagana ang lahat at sisindi ang mga LED.

Pagkatapos mong masindi ang lahat ng mga LED, maaari mong subukan ang iyong sarili at baguhin ang code upang ang pagkakasunud-sunod ay iba - sa iyong paghuhusga. Maaari kang gumawa ng higit pang "mga simbolo", o maaari kang mag-iwan ng parehong mga simbolo, ngunit gawin ang bawat simbolo gamit ang dalawang rangefinder. Ito ay isang gawain para sa iyo na magpasya sa iyong sarili.

Tagahanap ng hanay ng infraredMatalas

Sa mga rangefinder na ito, mas simple ang lahat. Kailangang konektado ang mga ito tulad ng lahat ng mga analog sensor. At posible kahit na walang 10 kOhm risistor. Kung sa ilang kadahilanan ay hindi mo alam kung paano ito gagawin, kung gayon ito ay inilarawan sa aking artikulo tungkol sa.

Theremin

Mayroong isang instrumentong pangmusika gaya ng theremin. At ngayon ay magtitipon kami ng isang pagkakatulad ng tool na ito.

Code

// Italaga ang rangefinder, button at buzzer #define RFIND A5 #define BUT 9 #define BUZ 8 // Boolean variables para sa button bool sound_on = false; bool but_up = totoo; void setup() ( pinMode(RFIND, INPUT); pinMode(BUZ, OUTPUT); pinMode(BUT,INPUT_PULLUP); ) void loop() ( //Code para sa pag-on at off ng 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; //Code for theremin if(sound_on == 1) ( int val, freq; val = analogRead(RFIND); //Maaari mong laruin ang mga halaga ng constrain at mapa ayon sa gusto mo val = constrain(val, 100, 400); freq = map(val, 100, 400 , 1000, 2500); tono(BUZ, freq, 20); ) )

Mga paliwanag

Kung pinindot mo ang button, maririnig ang isang signal mula sa beeper o speaker, depende sa kung ano ang iyong ikinonekta, na mag-iiba ayon sa distansya mula sa rangefinder hanggang sa iyong kamay.

Ang pindutan ay kailangan upang ihinto o simulan ang aming "Theremin"

kinalabasan

Ngayon ay tiningnan namin ang mga rangefinder at nagsagawa ng ilang maliliit na eksperimento, dalawa sa mga ito ay magagamit sa totoong buhay. Ang mga sensor ng paradahan ay makakatulong sa iyo na iparada, at ang Code Lock ay maaaring mapabuti sa paraang kapag inilagay mo ang tamang password, ang servomotor ay magbubukas ng trangka sa pinto sa iyong silid, halimbawa.

Listahan ng mga elemento ng radyo

Pagtatalaga Uri Denominasyon Dami TandaanMamiliNotepad ko
Scheme 1
Arduino board

Arduino Uno

1 Sa notepad
Bread boardBreadboard-kalahati1 Sa notepad
Pagkonekta ng mga wire"Papa-Papa"4 Sa notepad
RangefinderHC-SR042 Sa notepad
Scheme 2
Arduino board

Arduino Uno

1 Sa notepad
RangefinderHC-SR041 Sa notepad
Pagkonekta ng mga wire"Papa-Papa"15 Sa notepad
Bread boardBreadboard-kalahati1 Sa notepad
Piezo emitter 1 Sa notepad
Resistor

220 Ohm

1 Sa notepad
Light-emitting diode

AL102B

2 Sa notepad
Light-emitting diode

AL307V

1 Sa notepad
Light-emitting diode

AL307D

2 Sa notepad
Scheme 3
Arduino board

Arduino Uno

1 Sa notepad
RangefinderHC-SR042 Sa notepad
Resistor

220 Ohm

5

Sa artikulong ito titingnan natin ang pagkonekta at pagtatrabaho sa SHARP GP2Y0A02YK0F IR distance sensor.
Hindi tulad ng pareho, ang sensor na ito ay may mas katamtamang saklaw ng pagsukat, ngunit mayroon pa ring ilang kapaki-pakinabang na natatanging katangian. Halimbawa, pinapayagan ka ng sensor na ito na sukatin ang distansya kahit na sa pamamagitan ng mga transparent na ibabaw (bagaman nawawala ang katumpakan ng mga pagbabasa, ngunit pa rin).

Koneksyon ng sensor:

GND sa alinman sa mga GND pin --- Arduino

LABAS sa alinman sa mga analog input ng Arduino (sa mga halimbawa ito ay konektado sa A0)

VCC sa +5 volts sa arduino

Pangunahing teknikal na katangian:

Saklaw ng pagsukat ng distansya: 20 hanggang 150 cm

Analog na output

Mga Dimensyon: 29.5x13x21.6 mm

Kasalukuyang pagkonsumo: 33 mA

Supply boltahe: 4.5 hanggang 5.5 V

Dapat itong i-unpack at idagdag sa folder na "mga aklatan" sa folder ng Arduino IDE. Huwag kalimutang i-reboot ang kapaligiran kung nakabukas ang IDE noong idinagdag mo ito.

Ano ang espesyal sa library na ito at bakit ito inirerekomenda para gamitin? Ang sagot ay simple at nakasalalay sa prinsipyo ng pagpapatakbo nito. Upang sukatin ang distansya, maraming mga sukat ang ginagamit, kung saan ang mga mali ay itinapon, na ibang-iba sa mga kalapit. Ayon sa mga may-akda, 12% ng lahat ng pagbabasa ay nag-aambag ng 42% ng error sa huling halaga ng distansya, kung hindi itatapon ang mga maling sukat.

Lumipat tayo sa code ng programa - isang halimbawa ng pagtatrabaho sa isang sensor (ang halimbawa ay angkop din para sa GP2Y0A21Y sensor; sa code kakailanganin mong baguhin ang halaga ng modelo sa 1080):

Halimbawang code

#isama #define ir A0 //pin kung saan nakakonekta ang sensor. Talagang analog!#define model 20150 //modelo ng sensor. 1080 para sa GP2Y0A21Y, 20150 para sa GP2Y0A02Y SharpIR SharpIR (ir, modelo); walang bisa setup () { Serial.begin(9600); ) walang bisa loop() ( delay (2000); unsigned long pepe1=millis (); // markahan ang oras bago magsimula ang mga sukat int dis=SharpIR .distance(); // kumuha ng distansya mula sa sensor Serial.print("Mean distance: "); // output ang distansya sa port monitor Serial.println(dis); unsigned long pepe2=millis()-pepe1; // bilangin ang oras na ginugol sa pagsukat Serial.print("Oras na kinuha (ms): "); // at ipakita ito Serial.println(pepe2); )

Ang isang infrared laser rangefinder ay naglalabas ng enerhiya sa isang hanay na hindi nakikita ng mata ng tao. Ito ay isang Class 1 laser device na kinokontrol ng US Food and Drug Administration, 21 CFR 1040.10-11. Ang laser FDA compliance mark ay nakakabit sa CMS Wireless system housing. Ang pagmamarka na ito ay nagpapahiwatig din ng modelo, serial number at petsa ng paggawa.

Kasama sa Class 1 ang mga laser na, sa ilalim ng normal na mga kondisyon ng pagpapatakbo, ay hindi maaaring magdulot ng pinsala sa mga tao. Sa isang normal na pag-install, maaaring tingnan ng isang tao ang laser beam nang walang salamin o gamit ang kanilang regular na salamin (Huwag tumingin sa laser beam habang naka-on ang system - isang karaniwang pag-iingat).

Ang laser ay nananatiling nasa excited na estado hangga't ang LASER TEST o START SURVEY command ay patuloy na pinipili sa controller software. Kapag ang laser ay nasa excited na estado, ang mga distansya at iba pang data ay ipinapakita sa screen ng controller.

Ang pulang LED sa control panel, na matatagpuan sa controller box, ay patuloy na naiilawan kapag ang system ay naka-on, hindi alintana kung ang laser ay energized o hindi.

Ang laser scanning head ay may kasamang laser rangefinder at isang capture unit (Figure 7.2, Figure 7.3).

Figure 7.2 - Pag-scan sa ulo

Figure 7.3 - Hitsura ng laser scanning head

Figure 7.4 - Pag-install ng VIP sa mga kondisyon sa ilalim ng lupa

Figure 7.5 - Pag-install ng mga rod at palo sa mga kondisyon sa ilalim ng lupa

Figure 7.6 - Ang pagpasok ng scanner sa isang lukab sa mga kondisyon sa ilalim ng lupa

Talahanayan 33 - Mga Detalye

ulo ng pag-scan ng laser
Target na hanay ng pagsukat na may 20 porsiyentong pagmuni-muni 350 m.
Saklaw ng pagsukat sa puting pader 650 m
Saklaw ng anggulo ng pag-ikot 0 - 360º
Saklaw ng Anggulo ng Ikiling 0 – 145º
Katumpakan ng linear na pagsukat -+2 cm sa hanay ng temperatura ng pagpapatakbo
Resolusyon 1 cm
Angular na katumpakan ng pagsukat -+ 0.3º
Pinakamataas na bilis ng pag-ikot 21º/s
Haba ng daluyong 905 nm (sa infrared range), 635 nm (sa optical range).
Pagpalihis ng laser beam 5 mrad
Max na bilang ng mga bilang 100,000 (bawat shoot)
Istraktura ng suporta
Mga materyales Carbon fiber, high-density polyethylene joints, stainless steel clamp.
Haba ng baras 2-9 m, adjustable
Bilang ng mga seksyon ng boom 5 korteng kono 2 m bawat isa
Haba ng mast support (2 pcs) 2-5 m, adjustable
Bilang ng mga mast extension 5 (iba't ibang haba)
Power (mga panlabas na baterya)
Boltahe Nominally 24 V
Kapasidad 7.2 Ah, nominal na 24 V
Konsumo sa enerhiya 2.5 A, nominal na 24 V
Panlabas na kondisyon
Temperatura ng pagtatrabaho Tagahanap ng hanay (- 10º hanggang +50º), pointer (0º hanggang 40º)
Temperatura ng imbakan Mula -20 hanggang +50º
Halumigmig ng hangin 0 hanggang 95%, walang condensation
Mga sukat
Power supply(mm) 270 * 247 * 175
Timbang (kg 8.3
palo (mm) 2290*230*250
Seksyon ng boom (mm) 1930*200*250
Timbang (kg 44.5
Kaligtasan sa mata
Pointer Baitang 2
Rangefinder 1 klase
Vertical Insertion Device (VIP)
Mga bahagi 25 aluminum rods (mga 1.5 metro bawat isa)
1 scan head adapter
2 nakasentro na mga sistema ng tagsibol
1 connecting cable, humigit-kumulang 41 metro

Ginagamit ang CMS surveying sa mga kaso kung saan mapanganib ang pag-access ng tao at imposible ang visual na kontrol. Ang pag-survey ay nagbibigay ng ganap na tumpak na posisyon ng mga void na nakatali sa isang coordinate system, na ginagawang posible na makatwiran, tumpak at tama na idisenyo ang karagdagang paggamit o pagpuksa ng mga void na ito.

Ang mga robot, tulad ng kamatayan, lahat ng tao ay talagang nangangailangan ng mga organo ng pandama upang mag-navigate sa kalawakan. Ang Sharp GP2Y0A21YK infrared rangefinder ay napakaangkop para sa tungkuling ito kung kailangan mong maiwasan ang mga banggaan sa mga hadlang o alamin kung saan matatagpuan ang balakid na ito.

Oo nga pala, maaaring mayroon ka nang isa sa mga robot sa bahay na gumagamit ng mga katulad na sensor. Ito ay halos lahat ng matino na Chinese robot vacuum cleaner at, naniniwala ako, maraming mga modelo ng Roomba. At marahil marami pang iba.

At kung ang mga sensor na ito ay may lugar sa mas marami o hindi gaanong seryosong teknolohiya, hahanap tayo ng gamit para sa kanila, tama ba?

Upang hindi mag-prevaricate, sasabihin ko kaagad: Inutusan ko ang mga sensor na ito hindi lamang upang paglaruan. Sa kabaligtaran, mula pa sa simula ay alam ko na magiging kapaki-pakinabang sila sa akin na gumawa ng isang interactive na lampara na nagbabago sa intensity ng glow depende sa posisyon ng palad sa itaas nito.

Siyempre, ang katotohanan ay gumawa ng sarili nitong mga pagsasaayos sa huli. Sa madaling salita, mayroon na itong limang mode: night light, dimmable light, thermometer, manually adjustable northern lights, at automatic northern lights.

At bilang karagdagan - isang pares ng mga function ng serbisyo: pag-on at off sa background at overhead na pag-iilaw sa silid.

Narito kung paano ito gumagana:

Kaya, ngayon ang oras upang pag-usapan ang mas detalyado tungkol sa sensor, salamat sa kung saan nangyari ang lahat.

Gaya ng sinabi ko sa umpisa pa lang, ang Sharp GP2Y0A21YK ay isang infrared rangefinder. Nangangahulugan ito na nilagyan ito ng isang IR emitter at isang IR receiver: ang una ay nagsisilbing mapagkukunan ng sinag, ang pagmuni-muni nito ay nahuli ng pangalawa. Kasabay nito, ang IR rays ng sensor ay hindi nakikita ng mata ng tao (bagaman maaari mong makilala ang isang pulang flicker kung titingnan mo ang sensor) at sa intensity na ito ay hindi nakakapinsala.

Wala rin silang epekto sa mga alagang hayop.

Ayon sa mga katangian:

  • Supply boltahe: 5V
  • Pinakamataas na kasalukuyang pagkonsumo: 40 mA (karaniwang - 30 mA)
  • Saklaw ng pagpapatakbo: 10 cm - 80 cm
Tulad ng para sa mga kakumpitensya, kumpara sa mga ultrasonic sensor, halimbawa, ang sobrang sikat na HC-SR04, ang sensor na ito ay may parehong mga pakinabang at disadvantages. Kasama sa mga pakinabang ang lahat ng sinabi sa itaas, i.e. neutralidad at hindi nakakapinsala.

Ang mga disadvantages ay isang mas maikling hanay (ang HC-SR04 ay may mga 4 m) at pag-asa sa panlabas na interference, kabilang ang ilang mga uri ng pag-iilaw. Halimbawa, nakakita ako ng mga pagbanggit na ang sikat ng araw ay maaaring makaapekto sa mga pagbabasa ng sensor.

Ang sensor ay ibinibigay sa isang spartan kit, i.e. ang sensor mismo at isang cable na may connector para sa pagkonekta sa sensor. Sa kabilang panig ay may simpleng mga de-latang wire, na hindi masyadong maginhawa para sa Arduino Uno, ngunit medyo angkop para sa mga controller na walang soldered connectors. Dahil pinlano kong gamitin ang sensor sa Arduino Pro Mini, ito ay isang ganap na angkop na opsyon - Ibinenta ko lang ang mga wire sa breadboard.

Ang mga wire ay naiiba sa kulay: dilaw - signal, itim - lupa, pula - power plus (+5V).

Ang output ng sensor ay analog (bagaman sa ilang kadahilanan ang datasheet ay nagsasabing digital). Iyon ay, ang boltahe dito ay proporsyonal sa distansya sa balakid. Gayunpaman, tulad ng sa kaso ng ultrasound, may mga pagkakaiba sa pagitan ng iba't ibang uri ng mga hadlang para sa sensor.

Kaugnay nito, sa datasheet, ang Sharp ay nagbibigay ng data gamit ang Kodak reference card na may reflectivity na 90% bilang mga reflector. Sa paghusga nito, sa 20 cm ang sensor ay gumagawa ng 1.3V.

Ihambing natin sa aking pang-eksperimentong data:

Ipaalala ko sa iyo na ang Arduino analog input ay gumagana sa hanay na 0V - 5V at mayroong 1024 na hakbang, kaya ang pagkalkula: (5/1024)*(mga pagbabasa ng sensor). Kaya kung isasaalang-alang mo ang katotohanan na ang lahat ay ginagawa sa iyong sariling (nanginginig) na mga kamay, kung gayon ang mga pagbabasa ay magkasya nang maayos sa mga katangian ng sensor. At sa parehong oras makikita mo na ang itim na ibabaw ay gumagawa ng sarili nitong mga pagsasaayos.

Kaya ito ay kumikinang

Kasabay nito, tulad ng napansin ng matulungin na mambabasa, may mga detalye. Ang punto ay kapag ang balakid ay mas malapit sa mas mababang limitasyon ng saklaw (10 cm), ang sensor ay nagsisimulang isaalang-alang na ang balakid, sa kabaligtaran, ay lumalayo (nang tinakpan ko ito ng aking kamay, ang mga pagbabasa ay naayos. sa 345).

Mukhang ganito:

Kaya't ang konklusyon: kahit na ang datasheet ay sapat na para sa maraming layunin, kung minsan ay makatuwirang magsagawa ng mga eksperimento upang sa paglaon ay hindi ito maging lubhang masakit. At ito ay totoo lalo na kung ang sensor ay medyo recessed (o sakop ng IR-transparent na materyal), na nangangahulugang maaari itong makatanggap ng mga pagmuni-muni mula sa mga dingding o iba pang mga elemento ng pabahay.

Halimbawa, nahaharap ako sa katotohanan na ang Evlampia, na na-install sa regular na lugar nito pagkatapos ng matagumpay na mga pagsubok sa "desktop", ay nagsimulang mabaliw. Sa una ay naisip ko na ang pagkagambala sa suplay ng kuryente ay dapat sisihin at kahit na nag-install ng isang pares ng mga capacitor (10 µF at 0.1 µF) na kahanay ng power supply ng sensor, hinila ang Arduino analog input sa zero sa pamamagitan ng isang 10 kOhm resistor at bumili pa ng surge socket ng tagapagtanggol.

Ngunit nang hindi ito tumulong, bumalik siya sa mesa, kung saan inikot niya ang sensor sa iba't ibang direksyon at nakita na sa katunayan, kahit na ang distansya sa pinakamalapit na balakid ay higit sa 80 cm, ang mga pagbabasa ng sensor ay kapansin-pansing nagbabago. Kaya't kung ang iyong mga singil ay hindi sapat, suriin ang aktwal na mga pagbabasa sa totoong mga kondisyon.

Narito, halimbawa, ay isang elementary sketch na, una, ay nagpapakita ng mga pagbabasa ng sensor sa kalahating segundong pagitan, at, pangalawa, nagpapailaw sa Arduino LED kung ang mga pagbabasa ay bumaba sa hanay mula 100 hanggang 200:

// Yellow - A0, Black - ground, Red - +5V unsigned int l; void setup() ( Serial.begin(9600); pinMode(A0, INPUT);pinMode(13, OUTPUT);l = 0; ) void loop() ( l = analogRead(A0); Serial.println(l); pagkaantala(1000); kung (l > 100 && l< 200) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } }

Sa kabuuan, ang sensor, kahit na medyo maselan, ay napakadaling gamitin at medyo mura.

Maaari itong magamit sa mga robot, gayundin para makontrol ang intersection ng mga doorway, sa ilang interactive na device na kinokontrol ng mga kilos, at sa anumang bagay na iminumungkahi ng iyong imahinasyon.

Balak kong bumili ng +32 Idagdag sa mga Paborito Nagustuhan ko ang pagsusuri +38 +67