Ders 27/31: SunFounder Akıllı Araba Elinizi Takip Ediyor Arduino kullanarak | Robojax
Giriş
Hiç varlığınıza sezgisel olarak tepki veren bir robot yapmak istediniz mi? Bu proje, standart bir SunFounder Akıllı Arabayı, elinizi takip eden jest kontrollü bir araca dönüştürür. Uzaktan kumanda veya akıllı telefon uygulaması kullanmak yerine, bu araba elinizin konumunu ve mesafesini algılamak için ultrasonik ve kızılötesi sensörlerin bir kombinasyonunu kullanır ve basit doğal hareketlerle onu sola, sağa veya ileri yönlendirmenize olanak tanır.
Bu proje, Robojax Arduino Kursu'nun (Ders 27/31) bir parçasıdır ve SunFounder 3'ü 1 arada Arduino kiti kullanılarak yapılmıştır. Birden fazla sensörün daha karmaşık ve duyarlı bir davranış oluşturmak için birlikte çalıştığı sensör füzyonu hakkında bilgi edinmek için mükemmel bir yoldur. Buradaki gerçek dünya değeri, robotik ve otomasyonda temel bir kavram olan kararlar almak için farklı girdi türlerini nasıl birleştireceğinizi anlamaktır.
Bu mantıkla üzerine inşa edebileceğiniz birkaç pratik fikir:
- Etkileşimli Sergiler: Ziyaretçilerin dikkatini çekmek için onları takip eden küçük bir robotik ekran oluşturun.
- Otonom Engelden Kaçınan Platform: Arabayı bir eli takip etmek yerine engellerden kaçınarak bir odada gezinmesi için kodu değiştirin.
- Eğitim Robotik Kiti: Öğrencilere sensör entegrasyonu, mantık ve motor kontrolü öğretmek için temel bir proje olarak kullanın.
- Akıllı Teslimat Arabası: Kontrollü bir ortamda, bu mantık bir depoda veya fabrika ortamında bir kişiyi takip eden küçük bir araba için uyarlanabilir.
Donanım ve Bileşenler
Bu proje, SunFounder 3'ü 1 arada Arduino kitinde bulunan bileşenleri kullanır. Kullanacağınız temel bileşenler şunlardır:
- SunFounder Akıllı Araba şasisi: Tekerlekleri ve motorları olan fiziksel platform.
- Arduino kartı: Kodu çalıştıran arabanın "beyni".
- Ultrasonik Sensör (HC-SR04): Arabanın önündeki bir nesneye (elinize) olan mesafeyi ölçmek için kullanılır.
- İki IR (Kızılötesi) Engelden Kaçınma Sensörü: Elinizin bu taraflardaki varlığını algılamak için sol ve sağ taraflara monte edilmiştir.
- Motor Sürücüsü: Arduino'dan gelen sinyallere dayalı olarak arabanın motorlarının hızını ve yönünü kontrol etmek için kullanılan bir modül (genellikle L298N veya benzeri).
- Güç Kaynağı: Arduino'ya ve motorlara güç sağlamak için piller.
Bağlantı Kılavuzu
Videoda belirtildiği gibi, bu projenin bağlantısı önceki derslerde engelden kaçınan araba için açıklananla aynıdır. Sensörler ve motorların tümü Arduino'nun dijital ve analog pinlerine bağlıdır. Görsel bir referans için lütfen SunFounder Akıllı Araba bağlantı şemasına bakın.
Kod, her bileşen için kullanılan belirli pinleri tanımlar; bunlar bir sonraki bölümde ayrıntılı olarak açıklanmıştır.
Kod Açıklaması
Bu bölüm, kendi arabanız için ayarlamak isteyebileceğiniz kodun kullanıcı tarafından yapılandırılabilir kısımlarına odaklanır. Tam program, Robojax kaynak sayfasından indirilebilir.
Taslağın en üstünde pin tanımlarını bulacaksınız. Arabanızı eğitmenden farklı bağladıysanız anlamanız gereken en kritik satırlar bunlardır.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
Her pin grubunun ne yaptığı aşağıda açıklanmıştır:
- Motor Pinleri (A_1A, A_1B, B_1A, B_1B): Bunlar, iki motoru kontrol etmek için motor sürücüsüne bağlanan pinlerdir. "A" ve "B" etiketleri genellikle sırasıyla sol ve sağ motorları ifade eder. Motor sürücünüz farklı Arduino pinlerine bağlıysa bunları değiştirmelisiniz.
- IR Sensör Pinleri (rightIR, leftIR): Bu dijital giriş pinleri, sol ve sağ kızılötesi engel sensörlerinden gelen sinyali okur.
0değeri bir engelin (elinizin) algılandığı anlamına gelirken,1yolun açık olduğu anlamına gelir. - Ultrasonik Sensör Pinleri (trigPin, echoPin):
trigPin, kısa bir ultrasonik darbe gönderen bir çıkıştır veechoPin, mesafeyi hesaplamak için yansıyan darbenin süresini okuyan bir giriştir.
loop() fonksiyonunun içinde ana davranış mantığını bulacaksınız. Ayarlamak isteyebileceğiniz tek bir değişken vardır:
int speed = 150;
Bu speed değişkeni, hareket sırasında motorlara gönderilen gücü kontrol eder. 0 (durmuş) ile 255 (maksimum hız) arasında değişebilir. Daha hızlı bir araba için bu değeri artırabilir (örneğin, 200'e) veya daha kontrollü, daha yavaş hareketler için azaltabilirsiniz (örneğin, 100'e).
Kod ayrıca moveForward(), turnLeft() ve turnRight() gibi fonksiyonlar içerir. Bu fonksiyonlar arabanın hareketini kontrol etmek için kullanılır ve sensör okumalarına dayalı olarak çağrılır. Bunları değiştirmeniz gerekmez, ancak kendi özel davranışlarınızı oluşturmak için yapı taşları olarak kullanabilirsiniz.
"Elinizi Takip Etme" Mantığı Nasıl Çalışır?
Bu projenin büyüsü, Arduino'nun üç sensörden gelen verileri nasıl yorumladığında yatıyor. Mantık basittir ve loop() fonksiyonunda sürekli olarak çalıştırılır.
İlk olarak, araba ultrasonik sensörü kullanarak doğrudan önündeki bir nesneye olan mesafeyi ölçer. Ardından, solunda veya sağında bir nesne olup olmadığını görmek için iki kızılötesi sensörü kontrol eder. Karar verme süreci şu şekildedir:
- İleri Hareket: Ultrasonik sensör tarafından ölçülen mesafe 5 cm'den büyük ancak 10 cm'den küçükse, araba ileri hareket eder. Bu, arabanın elinizi takip edeceği bir "tatlı nokta" bölgesi oluşturur.
- Sola Dönüş: Mesafe bu bölgede değilse, araba IR sensörlerini kontrol eder. Sol sensör engellenmişse (eliniz solda) ve sağ sensör açıksa, araba sola döner.
- Sağa Dönüş: Tersine, sağ sensör engellenmiş ve sol sensör açıksa, araba sağa döner.
- Durma: Bu koşullardan hiçbiri karşılanmazsa—örneğin, eliniz çok uzaktaysa veya çok yakınsa—araba durur.
Bu basit kural seti, arabanın elinizin konumuna dinamik olarak tepki vermesini sağlayarak pürüzsüz ve sezgisel bir takip davranışı oluşturur.
Canlı Proje Gösterimi
Video gösteriminde, eğitmen arabanın davranışını gerçek zamanlı olarak sergiliyor. Seri monitör, ultrasonik sensör tarafından okunan mesafeyi görüntülemek için kullanılır. Araba boştayken ve eliniz uzaktayken (örneğin, 36 cm), durmuş halde kalır. Elinizi arabanın önündeki 5-10 cm bölgesine koyar koymaz, ileri hareket etmeye başlar.
Gösterim ayrıca dönüş mantığını da vurgular. Elinizi arabanın sol tarafına koyduğunuzda, sol IR sensörü tetiklenir ve araba sola döner. Benzer şekilde, elinizi sağ tarafa koymak arabanın sağa dönmesini sağlar. Araba, elinizi hareket ettirdikçe takip etmeye devam eder ve yalnızca eliniz sensör menzilinden çıkarıldığında veya çok yaklaştığında durur. Bu, sensör füzyonunun ve mantığın beklendiği gibi çalıştığını doğrular ve duyarlı ve eğlenceli bir proje oluşturur.
Bölümler
- [00:00] El Takip Eden Akıllı Araba Tanıtımı
- [00:35] Robojax Arduino Kursu ve Kiti Hakkında
- [01:41] Proje Genel Bakışı ve Kod Kurulumu
- [02:19] Pin Tanımları ve Kurulum Açıklaması
- [03:19] Elinizi Takip Etmek İçin Kod Mantığı
- [05:48] Arabanın Canlı Gösterimi
- [07:28] Final Gösterimi ve Performans Değerlendirmesi
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR obstacle
pinMode(leftIR,INPUT);
pinMode(rightIR,INPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (distance>5 && distance<10){
moveForward(speed);
}else if(!left&&right){
turnLeft(speed);
}else if(left&&!right){
turnRight(speed);
}else{
stopMove();
}
}
float readSensorData() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
return distance;
}
void moveForward(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void moveBackward(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void turnRight(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void turnLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void stopMove() {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
Common Course Links
Common Course Files
İhtiyacın olabileceğini düşünüyor
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Kaynaklar ve referanslar
-
BelgelendirmeDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
DışPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Dosyalar📁
Arduino Kütüphaneleri (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB