Yön değiştiren araba
Merhaba,
Bu yazımda engel ile karşılaştığında yöünün değiştiren arabadan bahsedeceğim.
Arabayı arduino ile yaptım.
Malzeme Listesi ve Kodlar aşağıda
Malzeme Listesi
Arduino Uno
Breadboard
4 adet Motor
2 adet Motor sürücü
1 adet Ultranic Mesafe sensörü
1 adet pil yuvası
Arduino kodları aşağıdaki gibi
#include <Stepper.h>
#define echoPin 7 // Echo Pin
#define trigPin A0 // Trigger Pin
int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance
const int in1 = 10;
const int in2 = 11;
const int in3 = 12;
const int in4 = 13;
//const int e1 = A1;
//const int e2 = A2;
const int in5 = 2;
const int in6 = 3;
const int in7 = 4;
const int in8 = 5;
long mesafe=0,mesafe_sag=0,mesafe_sol=0;
const int stepsPerRevolution = 250; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(400, 1, 8, 2, 9);
void setup()
{
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(in5,OUTPUT);
pinMode(in6,OUTPUT);
pinMode(in7,OUTPUT);
pinMode(in8,OUTPUT);
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
//000000Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
delay(1000);
//motor_ayarla();
}
void loop()
{
mesafe = mesafe_oku();
if (mesafe>20)
ileri();
if (mesafe<20)
{
dur();
delay(1000);
geri();
delay(500);
dur();
delay(500);
sag_don();
delay(500);
dur();
delay(500);
mesafe_sag=mesafe_oku();
delay(100);
sol_don();
delay(1100);
dur();
delay(500);
mesafe_sol=mesafe_oku();
delay(100);
if (mesafe_sag<mesafe_sol)
{
ileri();
}
else
{
sag_don();
delay(1200);
dur();
delay(500);
ileri();
}
}
delay(100);
}
void ileri()
{
sag_on_teker(1);
sol_on_teker(1);
sag_arka_teker(1);
sol_arka_teker(1);
}
void geri()
{
sag_on_teker(2);
sol_on_teker(2);
sag_arka_teker(2);
sol_arka_teker(2);
}
void dur()
{
sag_on_teker(0);
sol_on_teker(0);
sag_arka_teker(0);
sol_arka_teker(0);
}
void sag_don()
{
sag_on_teker(2);
sol_on_teker(1);
sag_arka_teker(1);
sol_arka_teker(2);
}
void sol_don()
{
sag_on_teker(1);
sol_on_teker(2);
sag_arka_teker(2);
sol_arka_teker(1);
}
void sag_on_teker(int y)
{
if (y==1)
{
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
}
if (y==2)
{
digitalWrite(in4,HIGH);
digitalWrite(in3,LOW);
}
if (y==0)
{
digitalWrite(in4,LOW);
digitalWrite(in3,LOW);
}
}
void sag_arka_teker(int y)
{
if (y==1)
{
digitalWrite(in5,HIGH);
digitalWrite(in6,LOW);
}
if (y==2)
{
digitalWrite(in6,HIGH);
digitalWrite(in5,LOW);
}
if (y==0)
{
digitalWrite(in5,LOW);
digitalWrite(in6,LOW);
}
}
void sol_on_teker(int y)
{
if (y==1)
{
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
}
if (y==2)
{
digitalWrite(in2,HIGH);
digitalWrite(in1,LOW);
}
if (y==0)
{
digitalWrite(in2,LOW);
digitalWrite(in1,LOW);
}
}
void sol_arka_teker(int y)
{
if (y==1)
{
digitalWrite(in7,HIGH);
digitalWrite(in8,LOW);
}
if (y==2)
{
digitalWrite(in8,HIGH);
digitalWrite(in7,LOW);
}
if (y==0)
{
digitalWrite(in7,LOW);
digitalWrite(in8,LOW);
}
}
void yon_bul()
{
int a=stepsPerRevolution;
myStepper.step(a);
Serial.println(mesafe_oku());
delay(500);
myStepper.step(-a);
Serial.println(mesafe_oku());
delay(500);
myStepper.step(-a);
//Serial.println(mesafe_oku());
delay(200);
myStepper.step(a);
Serial.println(mesafe_oku());
delay(500);
//delay(5000);
}
void motor_ayarla()
{
int a=stepsPerRevolution;
//Serial.println(mesafe_oku());
Serial.println("motor ayarla");
long m=mesafe_oku();
Serial.println("m : "+m);
while (m>5)
{
myStepper.step(a);
delay(100);
m=mesafe_oku();
Serial.println("m : "+m);
}
Serial.println("motor ayarlan cikildi");
}
long mesafe_oku()
{
analogWrite(trigPin, 0);
delayMicroseconds(2);
analogWrite(trigPin, 255);
delayMicroseconds(10);
analogWrite(trigPin, 0);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;
return distance;
}
3 Yorum