Arduino ile L298N ve HC-SR04 kullanarak engelden kaçan araba yapıyoruz.
L298N motor sürücü modülü hem iki adet motoru hem de 4 adet motoru çalıştırabilmektedir. Projemizde dört adet motoru bu modül ile süreceğiz. OUT1 ve OUT2 bağlantılarını sağ tarafta bulunan motorlar için, OUT3 ve OUT4 bağlantıları sol tarafta bulunan motorlara bağlayacağız.
Sol motorların kırmızı renkli kablolarını OUT1'e, siyah renkli kablolarını OUT2'ye takmamızın sebebi tekerleklerin aynı yönde hareket edebilmeleri içindir. Kırmızı kablo (+), siyah kablolar (-)'dir. Sağ motorlar içinde aynı bağlantı yapılmıştır.
#include <Servo.h> #include <NewPing.h> //L298N kontrolleri const int SolMotorileri = 5; const int SolMotorgeri = 4; const int SagMotorileri = 7; const int SagMotorgeri = 6; //mesafe sensörü #define trig_pin A1 //analog input 1 #define echo_pin A2 //analog input 2 #define maksimum_mesafe 200 boolean ileriGit = false; int mesafe = 100; NewPing sonar(trig_pin, echo_pin, maksimum_mesafe); Servo servo_motor; void setup(){ pinMode(SagMotorileri, OUTPUT); pinMode(SolMotorileri, OUTPUT); pinMode(SolMotorgeri, OUTPUT); pinMode(SagMotorgeri, OUTPUT); servo_motor.attach(10); servo_motor.write(115); delay(2000); mesafe = readPing(); delay(100); mesafe = readPing(); delay(100); mesafe = readPing(); delay(100); mesafe = readPing(); delay(100); } void loop(){ int mesafeSag = 0; int mesafeSol = 0; delay(50); if (mesafe <= 20){ moveStop(); delay(300); moveBackward(); delay(400); moveStop(); delay(300); mesafeSag = lookRight(); delay(300); mesafeSol = lookLeft(); delay(300); if (mesafe >= mesafeSol){ turnRight(); moveStop(); } else { turnLeft(); moveStop(); } } else { moveForward(); } mesafe = readPing(); } int lookRight() { servo_motor.write(50); delay(500); int mesafe = readPing(); delay(100); servo_motor.write(115); return mesafe; } int lookLeft() { servo_motor.write(170); delay(500); int mesafe = readPing(); delay(100); servo_motor.write(115); return mesafe; } int readPing() { delay(70); int cm = sonar.ping_cm(); if (cm==0) { cm = 250; } return cm; } void moveStop(){ digitalWrite(SagMotorileri, LOW); digitalWrite(SolMotorileri, LOW); digitalWrite(SagMotorgeri, LOW); digitalWrite(SolMotorgeri, LOW); } void moveForward(){ if(!ileriGit) { ileriGit = true; digitalWrite(SolMotorileri, HIGH); digitalWrite(SagMotorileri, HIGH); digitalWrite(SolMotorgeri, LOW); digitalWrite(SagMotorgeri, LOW); } } void moveBackward(){ ileriGit = false; digitalWrite(SolMotorgeri, HIGH); digitalWrite(SagMotorgeri, HIGH); digitalWrite(SolMotorileri, LOW); digitalWrite(SagMotorileri, LOW); } void turnRight(){ digitalWrite(SolMotorileri, HIGH); digitalWrite(SagMotorgeri, HIGH); digitalWrite(SolMotorgeri, LOW); digitalWrite(SagMotorileri, LOW); delay(700); digitalWrite(SolMotorileri, HIGH); digitalWrite(SagMotorileri, HIGH); digitalWrite(SolMotorgeri, LOW); digitalWrite(SagMotorgeri, LOW); } void turnLeft(){ digitalWrite(SolMotorgeri, HIGH); digitalWrite(SagMotorileri, HIGH); digitalWrite(SolMotorileri, LOW); digitalWrite(SagMotorgeri, LOW); delay(700); digitalWrite(SolMotorileri, HIGH); digitalWrite(SagMotorileri, HIGH); digitalWrite(SolMotorgeri, LOW); digitalWrite(SagMotorgeri, LOW); }