Kod Ara

Ders 74: Arduino ile Keskin Kızılötesi Sensör Modülü Kullanımı

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.
Sharpt IR distance sensor

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:

Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

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.

p>Ardından, sensörlerinizin her biri için analog pinleri tanımlarsınız. Örnek kod #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

Görseller

Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Sharpt IR distance sensor
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602
176-Using a Sharp IR sensor module with Arduino
Dil: C++
++
/*
 * 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
     
}
452-Lesson 74: Using Two Sharp Infrared Sensors with Arduino
Dil: C++
++
/*
  * 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
     
}

Dosyalar📁

Fritzing Dosyası

Diğer dosyalar