Ders 74: Arduino ile Keskin Kızılötesi Sensör Modülü Kullanımı
Giriş
Bu kılavuz, bir Arduino ile iki veya daha fazla Sharp kızılötesi (IR) mesafe sensörünün nasıl kullanılacağını ve sonuçların Seri Monitörde nasıl görüntüleneceğini gösterir. Tek bir sensör kullanışlı olsa da, akıllı bir araba, robotik bir kol veya hareket eden herhangi bir makine gibi birçok gerçek dünya uygulaması, mesafelerin aynı anda birden fazla yönden ölçülmesini gerektirir. Örneğin, öne olan mesafeyi ölçmek için bir sensörü öne, çarpışmaları önlemek için başka bir sensörü sağ veya sol tarafa yerleştirebilirsiniz. Bu eğitim, ayrı ve ayrıntılı bir videoya dayanarak, Arduino'nuzu birden fazla sensörü verimli bir şekilde işleyecek şekilde nasıl yapılandıracağınızı gösterir; bu video, bireysel sensörün özelliklerini ve çalışmasını açıklar.
İşte size ilham verecek birkaç pratik proje fikri:
- Sol, sağ ve ön taraflarındaki mesafeleri ölçerek engellerden kaçınan bir robot inşa etmek.
- Bir aracı dar bir alana yönlendirmek için birden fazla sensör kullanan akıllı bir park asistanı oluşturmak.
- Farklı açılara yerleştirilmiş sensörlerle bir kapıyı veya koridoru izleyen bir güvenlik sistemi geliştirmek.
- İzleyicinin elinin mesafesinin görüntülenen şeyi değiştirdiği etkileşimli bir sanat enstalasyonu yapmak.

Bu videoda odak noktası, birden fazla Sharp IR sensörünü çalıştırmak için gereken bağlantı ve koddur. Gösterimde, 10 ila 80 cm arasındaki mesafeleri ölçen iki GP2Y0A21YK0F sensörü kullanılmaktadır. Kod, kolayca genişletilebilecek şekilde yapılandırılmıştır; böylece yalnızca birkaç satır kodla üçüncü, dördüncü veya daha fazla sensör ekleyebilirsiniz.
Donanım ve Bileşenler
Bu projeyi takip etmek için aşağıdaki bileşenlere ihtiyacınız olacak:
- Bir Arduino kartı (ör. Uno, Mega).
- İki veya daha fazla Sharp IR mesafe sensörü (ör. GP2Y0A21YK0F).
- Jumper kablolar.
- Bir breadboard (isteğe bağlı, daha kolay bağlantılar için).
Bağlantı Kılavuzu
Sharp IR sensörünün üç kablosu vardır: kırmızı (güç), siyah (toprak) ve sarı (sinyal çıkışı). Bağlantı basittir. İlk sensör için kırmızı kabloyu Arduino'nun 5V pinine, siyah kabloyu bir toprak (GND) pinine ve sarı sinyal kablosunu örneğin A1 gibi bir analog pine bağlayın. İkinci sensör için kırmızı kabloyu aynı veya başka bir 5V pinine, siyah kabloyu GND'ye ve sarı kabloyu A2 gibi farklı bir analog pine bağlayın.
5V pinleriniz tükenirse, video akıllıca bir çözüm sunar. Herhangi bir dijital pini güç kaynağı olarak kullanabilirsiniz. Kodda, dijital pin 2 çıkış olarak yapılandırılır ve HIGH olarak ayarlanır; bu da sabit 5V sağlar. Sensörlerinizin kırmızı kablolarını özel 5V pinine değil, bu dijital pine bağlarsınız. Toprak kabloları Arduino'daki herhangi bir GND pinine bağlanabilir. Video, bu kurulumun bir gösterimini [00:06:10]'da göstermektedir.
p>Bağlantıların görsel bir referansı için lütfen aşağıdaki bağlantı şemasına bakın:


Kod Açıklaması
Bu bölüm, kodun kullanıcı tarafından yapılandırılabilir kısımlarına odaklanır; bunların tümü taslağın en üstünde bulunur. Pinlerinizi ve sensör modellerinizi burada tanımlarsınız.
İlk olarak, kod Sharp IR sensörleri için gerekli kütüphaneyi içerir: #include <SharpIR.h>. Bu kütüphane, sensörden gelen analog voltajı bir mesafe okumasına dönüştürmek için gereken karmaşık matematiği işler.
#define IR1 A1 ve #define IR2 A2 kullanır. İkiden fazla sensör kullanıyorsanız, buraya #define IR3 A3 gibi daha fazla tanım eklersiniz.
Yapılandırmanın önemli bir kısmı, sensörünüz için doğru modeli ayarlamaktır. Kod #define model1 1080 ve #define model2 1080 kullanır. Bu sayı keyfi değildir; her modelin farklı bir voltaj-mesafe eğrisi olduğundan, kütüphaneye hangi sensöre sahip olduğunuzu söyler. Kod yorumları yararlı bir liste sağlar:
- 2 ila 15 cm GP2Y0A51SK0F için 215 kullanın
- 4 ila 30 cm GP2Y0A41SK0F / GP2Y0AF30 serisi için 430 kullanın
- 10 ila 80 cm GP2Y0A21YK0F için 1080 kullanın
- 10 ila 150 cm GP2Y0A60SZLF için 10150 kullanın
- 20 ila 150 cm GP2Y0A02YK0F için 20150 kullanın
- 100 ila 550 cm GP2Y0A710K0F için 100550 kullanın
Bu değeri kendi sensörünüze uyacak şekilde değiştirmelisiniz. Örneğin, bir GP2Y0A02YK0F kullanıyorsanız, tanımı #define model1 20150 olarak değiştirirsiniz. Kod daha sonra her sensör için SharpIR SharpIR1(IR1, model1); gibi bir nesne oluşturur. Bu satır, ilk sensör için pini ve modeli birbirine bağlar. Daha fazla sensör eklerseniz, bu satırı kopyalar ve nesne adını, pini ve modeli buna göre değiştirirsiniz.
setup() fonksiyonunda, Seri Monitör 9600 baud'da başlatılır. Bu, Arduino'nun bilgisayarınızla iletişim kurduğu hızdır. Kod ayrıca, bağlantı bölümünde açıklandığı gibi gerekirse bir dijital pini 5V kaynağı olarak kullanmak için bir bölüm içerir. Bu, pinMode(2,OUTPUT); ve digitalWrite(2, HIGH); ile yapılır.
Son olarak, loop() fonksiyonu ana mantığı içerir. Başlangıçta bir delay(500); vardır; bu, her okuma seti arasındaki süreyi 500 milisaniyeye ayarlar. Okumaları daha sık veya daha seyrek yapmak için bunu ayarlayabilirsiniz. Döngünün çekirdeği, kütüphanenin distance() fonksiyonunu kullanarak her sensörden mesafeyi okuduğunuz yerdir, örneğin int dis1=SharpIR1.distance();. Sonuçlar daha sonra açıklayıcı metinle Seri Monitöre yazdırılır, örneğin Serial.print("Distance (1): ");, ardından değer ve "cm" birimi gelir.
Canlı Proje Gösterimi
Videoda, sunum yapan kişi iki sensörle kurulumu gösteriyor. [00:07:44]'teki gösterimde görülebileceği gibi, Seri Monitör her iki sensörden gelen mesafe okumalarını görüntüler. İlk sensörün önüne bir nesne yerleştirildiğinde, "Mesafe (1)" okuması değişir. Benzer şekilde, ikinci sensörün önüne bir nesne yerleştirildiğinde, "Mesafe (2)" okuması güncellenir. Video, bir kağıt yaprağını belirli bir mesafede tutarak sensörlerin yaklaşık 23 ve 24 cm okuduğunu gösteriyor. Bir sensör engellendiğinde, okuması yaklaşık 17 cm'ye düşer ve her sensörün bağımsız olarak çalıştığını ve kendi yönü için gerçek zamanlı mesafe verisi sağladığını doğrular. Bu, kodun birden fazla sensörü aynı anda işleme yeteneğini doğrular.
Bölümler
- [00:00] Birden Fazla Sharp IR Sensörü Kullanmaya Giriş
- [00:28] Birden Fazla Mesafe Sensörü için Uygulamalar
- [01:34] Kod Açıklaması: Kütüphane ve Pin Tanımları
- [02:24] Sensör Modellerini Yapılandırma ve Nesneler Oluşturma
- [04:15] Kurulum ve Döngü Fonksiyonlarının Açıklaması
- [06:10] Birden Fazla Sensör için Bağlantı Kılavuzu
- [07:44] İki Sensörle Canlı Gösterim
++
/*
* Using two or more Sharp IR distance sensors with Arduino
* Measure distance
* Download and resource page for this video https://robojax.com/RJT143
* Watch video instructions for this video: https://youtu.be/WQ3oFyF5qeY
*
* Watch main video explaining the Sharp IR distance sensor:
* https://robojax.com?vid=robojax-sharp_IR
*
* Written by Ahmad Shamshiri for Robojax.com on Saturday, December 1, 2018
* at 20:56 in Ajax, Ontario, Canada
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <SharpIR.h>
#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin
#define model1 1080 // for GP2Y0A21YK0F used 1080
#define model2 1080 // for GP2Y0A21YK0F used 1080
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series use 430
10 to 80 cm GP2Y0A21YK0F use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);
void setup() {
// Multiple Sharp IR Distance meter code for Robojax.com
Serial.begin(9600);
Serial.println("Robojax Sharp IR ");
// extra pin for 5V if needed
pinMode(2,OUTPUT);// define pin 2 as output
digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
// Robojax.com 20181201
}
void loop() {
// Sharp IR code for Robojax.com 20181201
delay(500);
unsigned long startTime=millis(); // takes the time before the loop on the library begins
int dis1=SharpIR1.distance(); // this returns the distance for sensor 1
int dis2=SharpIR2.distance(); // this returns the distance for sensor 2
// Sharp IR code for Robojax.com 20181201
Serial.print("Distance (1): ");
Serial.print(dis1);
Serial.println("cm");
Serial.print("Distance (2): ");
Serial.print(dis2);
Serial.println("cm");
// Sharp IR code for Robojax.com
}
++
/*
* Lesson 74: Using two or more Sharp IR distance sensors
* Sharp IR (infrared) distance measurement module for Arduino
* Measures the distance in cm.
* Written by Ahmad Shamshiri for Robojax.com
* on February 25, 2019 at 21:38 in Ajax, Ontario, Canada
* Original library: https://github.com/guillaume-rico/SharpIR
* Watch video instructions for this code: https://youtu.be/WQ3oFyF5qeY
*
* Full explanation of this code and wiring diagram is available at
* my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62
* Written by Ahmad Shamshiri on February 3, 2018 at 07:34
* in Ajax, Ontario, Canada. www.robojax.com
*
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
*/
// Sharp IR code for Robojax.com
#include
#define IR A0 // define signal pin
#define model 1080 // used 1080 because model GP2Y0A21YK0F is used
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor: 1080 for GP2Y0A21Y
// 20150 for GP2Y0A02Y
// 430 for GP2Y0A41SK
/*
2 to 15 cm GP2Y0A51SK0F use 1080
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series use 430
10 to 80 cm GP2Y0A21YK0F use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F use 100550
*/
#include <SharpIR.h>
#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin
#define model1 1080 // for GP2Y0A21YK0F used 1080
#define model2 1080 // for GP2Y0A21YK0F used 1080
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series use 430
10 to 80 cm GP2Y0A21YK0F use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);
void setup() {
// Multiple Sharp IR Distance meter code for Robojax.com
Serial.begin(9600);
Serial.println("Robojax Sharp IR ");
// extra pin for 5V if needed
pinMode(2,OUTPUT);// define pin 2 as output
digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
// Robojax.com 20181201
}
void loop() {
// Sharp IR code for Robojax.com 20181201
delay(500);
unsigned long startTime=millis(); // takes the time before the loop on the library begins
int dis1=SharpIR1.distance(); // this returns the distance for sensor 1
int dis2=SharpIR2.distance(); // this returns the distance for sensor 2
// Sharp IR code for Robojax.com 20181201
Serial.print("Distance (1): ");
Serial.print(dis1);
Serial.println("cm");
Serial.print("Distance (2): ");
Serial.print(dis2);
Serial.println("cm");
// Sharp IR code for Robojax.com
}
Kaynaklar ve referanslar
-
DışDistance-measuring sensors (website)sharp-world.com
-
DışSharp IR Library (from GitHub)github.com
-
DışSharp Library from RoboJob.comrobojax.com
Dosyalar📁
Fritzing Dosyası
-
sharp ir sensor GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz
Diğer dosyalar
-
Sharp GP2Y0A41SK0F Kızılötesi mesafe sensörü veri sayfası
robojax_sharp_IR_GP2Y0A41SK0F_datasheet.pdf0.84 MB -
Sharp GP2Y0A710K0F Kızılötesi mesafe sensörü veri sayfası
robojax_sharp_IR_GP2Y0A710K0F_datasheet.pdf0.33 MB -
Sharp Kızılötesi mesafe sensörü için Arduino kütüphanesi
robojax-sharp_IR-master.zip