Engelden Kaçan Robot Yapımında HC-SR04 Ultrasonic Sensör Kullanımı

Merhabalar, Bu çalışmada sizlere Hc-SR04 ultrasonic sensörün çalışma mantığını, nasıl kullanıldığını açıklamaya çalıştım. Örnek olması açısından bu sensörü kullanarak Engelden Kaçan Robot projesi gerçekleştirdim. Umarım sizler için faydalı olmuştur. Videomu beğendiyseniz lütfen beğene tıklamayı ve kanalıma abone olmayı unutmayın :) Teşekkürler...




Gerekli Malzemeler:
1 adet arduino kontrol kartı (UNO-NANO),
1 adet L298N motor sürücü kartı
1 adet HC-SR04 Ultrasonic Sensör,
1 adet SG90 9gr servo,
4 adet N20 12mm 60-300ROM arası motor
4 adet tekerlek,
4 adet 3cm distans,
1 adet 110x70x6mm dakota levha
1 adet 80x70x6mm dakota levha
Pil ve jumper kablo


Devre Şeması:



Motor Mount Thingverse:


Arduino Kodu:
//Mucit Pilot 2020 Engelden Kaçan Robot Projesi //servo kütüphanesini çağıralım #include <Servo.h> //motor pinlerini tanımladık #define MotorL1 6 #define MotorL2 9 #define MotorLE 5 #define MotorR1 2 #define MotorR2 4 #define MotorRE 3 //ultrasonic sensör pinleri #define trigPin 8 #define echoPin 7 //myservo adında bir servo nesnesi oluşturduk Servo myservo; //değişkenler boolean ileriGit=false; int mesafe = 100; int solspeed=200; int sagspeed=240; long gecenSure; void setup() { pinMode(MotorR1, OUTPUT); pinMode(MotorR2, OUTPUT); pinMode(MotorL1, OUTPUT); pinMode(MotorL2, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); myservo.attach(10); //servoyu 10.pine bağladım myservo.write(100); //servonun ortada durması için deneyerek değer verdim delay(2000); //ultrasonic sensör çalışması digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); gecenSure= pulseIn(echoPin, HIGH); mesafe= (gecenSure/2) / 29.1; //29.1 e bölmemizin sebebi cm'ye dönüşüm için delay(100); //Serial.begin(9600); } void loop() { int mesafeR = 0; int mesafeL = 0; delay(40); // Serial.println(distance); // Serial.println(); if(mesafe <= 20) //mesafe 20cmden küçük eşitse { dur(); delay(200); geriGit(); delay(700); dur(); delay(200); mesafeR = sagaBak(); delay(300); mesafeL = solaBak(); delay(300); if(mesafeR>=mesafeL) { sagaDon(); dur(); } else { solaDon(); dur(); } } else { ilerle(); } //tekrar yeni mesafe ölçümü alıyoruz digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); gecenSure= pulseIn(echoPin, HIGH); mesafe= (gecenSure/2) / 29.1; } int sagaBak() { myservo.write(0); //servoyu tam sağa çevir delay(500); digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); gecenSure= pulseIn(echoPin, HIGH); mesafe=(gecenSure/2) / 29.1; delay(100); myservo.write(100); //servoyu ortala return mesafe; delay(100); } int solaBak() { myservo.write(180); //servo tam sola delay(500); digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); gecenSure= pulseIn(echoPin, HIGH); mesafe=(gecenSure/2) / 29.1; delay(100); myservo.write(100); //servoyu ortala return mesafe; delay(100); } void dur() { // Robotun durma hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, LOW); digitalWrite(MotorR2, LOW); digitalWrite(MotorL1, LOW); digitalWrite(MotorL2, LOW); } void ilerle() { if(!ileriGit) { ileriGit=true; digitalWrite(MotorR1, HIGH); digitalWrite(MotorR2, LOW); analogWrite(MotorRE, sagspeed); digitalWrite(MotorL1, HIGH); digitalWrite(MotorL2, LOW); analogWrite(MotorLE, solspeed); } } void geriGit() { ileriGit=false; digitalWrite(MotorR1, LOW); digitalWrite(MotorR2, HIGH); analogWrite(MotorRE, sagspeed); digitalWrite(MotorL1, LOW); digitalWrite(MotorL2, HIGH); analogWrite(MotorLE, solspeed); } void sagaDon() { digitalWrite(MotorR1, LOW); digitalWrite(MotorR2, HIGH); analogWrite(MotorRE, sagspeed); digitalWrite(MotorL1, HIGH); digitalWrite(MotorL2, LOW); analogWrite(MotorLE, solspeed); delay(600); //motorlarınızın hızına göre kaç derece dönüş yapacağınızı ayarlayabilirsiniz. digitalWrite(MotorR1, HIGH); digitalWrite(MotorR2, LOW); analogWrite(MotorRE, sagspeed); digitalWrite(MotorL1, HIGH); digitalWrite(MotorL2, LOW); analogWrite(MotorLE, solspeed); } void solaDon() { digitalWrite(MotorR1, HIGH); digitalWrite(MotorR2, LOW); analogWrite(MotorRE, sagspeed); digitalWrite(MotorL1, LOW); digitalWrite(MotorL2, HIGH); analogWrite(MotorLE, solspeed); delay(600); digitalWrite(MotorR1, HIGH); digitalWrite(MotorR2, LOW); analogWrite(MotorRE, sagspeed); digitalWrite(MotorL1, HIGH); digitalWrite(MotorL2, LOW); analogWrite(MotorLE, solspeed); }  




Yorumlar

Bu blogdaki popüler yayınlar

QTR-8A Kızılötesi Çizgi Sensörü Kullanımı ve Basit PID Çizgi İzleyen Robot Yapımı

A4988 Step Motor Sürücü Kartı ile NEMA Step Motor Kullanımı

Arduino ile ESP8266 Kullanımı ve İnternet Erişimi Serisi -1 (İnternet Üzerinden Veri Çekme)