Ardunio ile sensörlü motor kontrolü

alishanli

Üye
Katılım
10 Şub 2011
Mesajlar
24
Puanları
1
Yaş
35
Herkese merhabalar arduino ile söyle bir devre tasarlamak istiyorum. Ardunio 293 ile 2 adet motoru kontrol edecek. Fakat motorlar sensore bağlı olacak. Sensör ölçüm yapacak. Eğer yapılan ölçüm 50 cm den büyükse 1. motor 2sn ileri 2 sn geri, 2 sn ileri 2 sn geri,... Şeklinde çalışacak. Fakat sensör önüne engel gelirse yani mesafe 50 in altına düşerse birinci motor anında duracak ve ikinci motor devreye girecek. Engel kalktığı zaman tekrar ikinci motor duracak birinci motor çalışacak.
const int trig=10; //ilk olarak kullanılan pinleri arduinoya tanıtıyoruz.
const int echo=8;
const int hareket_ileri=4; //robotu ileri götürecek olan pin
const int hareket_geri=5; //robotu geri götürecek olan pin
const int hazne_ileri=2; //topu hazneye sürecek olan pin
const int hazne_geri=3;
long duration;

int distance;

void setup() {
pinMode(trig,OUTPUT); //Sensörün trigger pini çıkış olarak tanımlandı.
pinMode(echo,INPUT); //Sensörün echo pini giriş olarak tanımlandı.
pinMode(hareket_ileri,OUTPUT); //motor sürücü pinleri çıkış olarak tanımlandı.
pinMode(hareket_geri,OUTPUT);
pinMode(hazne_ileri,OUTPUT);
pinMode(hazne_geri,OUTPUT);



Serial.begin(9600); // Starts the serial communication

}
void loop() {

// Clears the trigPin

digitalWrite(trig, LOW);

delayMicroseconds(10);

// Sets the trigPin on HIGH state for 10 micro seconds

digitalWrite(trig, HIGH);

delayMicroseconds(10);

digitalWrite(trig, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds

duration = pulseIn(echo, HIGH);

// Calculating the distance

distance= duration*0.034/2;

// Prints the distance on the Serial Monitor

Serial.print("Distance: ");

Serial.println(distance);


if(distance < 10){

digitalWrite(hareket_ileri,LOW);
digitalWrite(hareket_geri,LOW);
digitalWrite(hazne_ileri,HIGH);
digitalWrite(hazne_geri,LOW);

}
else if(distance >10){
digitalWrite(hareket_ileri,HIGH);
digitalWrite(hareket_geri,LOW);
digitalWrite(hazne_ileri,LOW);
digitalWrite(hazne_geri,LOW);
delay(2000); //motor iki saniye ileri gitsin.
digitalWrite(hareket_ileri,LOW);
digitalWrite(hareket_geri,HIGH);
digitalWrite(hazne_ileri,LOW);
digitalWrite(hazne_geri,LOW);
delay(2000);


}

}
Yazdığım kod bu şeklide ama şöyle bir hata veriyor. Birinci motor 2 saniyelik aralıklarla çalışıyor fakat sensör hedef gördüğü zaman anında durmuyor iki saniyelik hareketin bitmesini bekliyor. Ben anında durmasını istiyorum birinci motorun. Nasıl bir düzeltme yapabilirim.
 
delay kullanmadan millis kullanarak yapmalısınız yoksa delay süresi dolana kadar başka işlem yapmaz arduino.
 
Cevap için çok teşekkür ederim. Ama arduino bilgim az ınternette araştırdım ama Millis nasıl kullanılır bilgi sahibi olamadım. Nasıl bir kod yazmalıyım.
 
Herkese merhabalar arduino ile söyle bir devre tasarlamak istiyorum. Ardunio 293 ile 2 adet motoru kontrol edecek. Fakat motorlar sensore bağlı olacak. Sensör ölçüm yapacak. Eğer yapılan ölçüm 50 cm den büyükse 1. motor 2sn ileri 2 sn geri, 2 sn ileri 2 sn geri,... Şeklinde çalışacak. Fakat sensör önüne engel gelirse yani mesafe 50 in altına düşerse birinci motor anında duracak ve ikinci motor devreye girecek. Engel kalktığı zaman tekrar ikinci motor duracak birinci motor çalışacak.
const int trig=10; //ilk olarak kullanılan pinleri arduinoya tanıtıyoruz.
const int echo=8;
const int hareket_ileri=4; //robotu ileri götürecek olan pin
const int hareket_geri=5; //robotu geri götürecek olan pin
const int hazne_ileri=2; //topu hazneye sürecek olan pin
const int hazne_geri=3;
long duration;

int distance;

void setup() {
pinMode(trig,OUTPUT); //Sensörün trigger pini çıkış olarak tanımlandı.
pinMode(echo,INPUT); //Sensörün echo pini giriş olarak tanımlandı.
pinMode(hareket_ileri,OUTPUT); //motor sürücü pinleri çıkış olarak tanımlandı.
pinMode(hareket_geri,OUTPUT);
pinMode(hazne_ileri,OUTPUT);
pinMode(hazne_geri,OUTPUT);



Serial.begin(9600); // Starts the serial communication

}
void loop() {

// Clears the trigPin

digitalWrite(trig, LOW);

delayMicroseconds(10);

// Sets the trigPin on HIGH state for 10 micro seconds

digitalWrite(trig, HIGH);

delayMicroseconds(10);

digitalWrite(trig, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds

duration = pulseIn(echo, HIGH);

// Calculating the distance

distance= duration*0.034/2;

// Prints the distance on the Serial Monitor

Serial.print("Distance: ");

Serial.println(distance);


if(distance < 10){

digitalWrite(hareket_ileri,LOW);
digitalWrite(hareket_geri,LOW);
digitalWrite(hazne_ileri,HIGH);
digitalWrite(hazne_geri,LOW);

}
else if(distance >10){
digitalWrite(hareket_ileri,HIGH);
digitalWrite(hareket_geri,LOW);
digitalWrite(hazne_ileri,LOW);
digitalWrite(hazne_geri,LOW);
delay(2000); //motor iki saniye ileri gitsin.
digitalWrite(hareket_ileri,LOW);
digitalWrite(hareket_geri,HIGH);
digitalWrite(hazne_ileri,LOW);
digitalWrite(hazne_geri,LOW);
delay(2000);


}

}
Yazdığım kod bu şeklide ama şöyle bir hata veriyor. Birinci motor 2 saniyelik aralıklarla çalışıyor fakat sensör hedef gördüğü zaman anında durmuyor iki saniyelik hareketin bitmesini bekliyor. Ben anında durmasını istiyorum birinci motorun. Nasıl bir düzeltme yapabilirim.
Teşekkür ederim. Sonunda bir arkadaşın yardımıyla for döngüsü kullanarak yaptım.
 

Forum istatistikleri

Konular
127,956
Mesajlar
913,899
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst