Arkadaşlar merhaba Aracım için kör nokta sensörü yapıyorum. Malzeme olarak Arduino uno kartı ve Aracın sağ ve sol kör noktaları için iki farklı jsn sr04t su geçirmez mesafe sensörünü kullandım. Amacım şöyleydi: Sağ ve sol kör noktayı sürekli tarayacak ; sağda araç varsa sağ dikiz aynama bağladığım 5v lik led yanacak, solumda araç varsa sol dikiz aynama bağladığım 5v lik led yanacak, her iki tarafımda da araç varsa her iki led de yanacak. Arduino kodunu her iki sensör ve her iki led için yazıp kartıma yükledim fakat sağ led yanarken soldaki ledi engelliyor sol yanarken de sağdakini engelliyor yani her iki tarafımda da kör noktada araç varsa sensörler beni aldatabilir. Bu ledlerin birbirinden bağımsız uyarı verebilmesi için bayağı uğraştım beceremedim yardımcı olabilecek varsa çok mutlu olurum kod ve sistem fotoğraflarını da ekliyorum. Şimdiden teşekkürler |
Arduino hakkında kod bölümünde yardımcı olabilir misiniz
-
-
5. bölüm sonundaki iki koşul da, içeriği de aynı ama yine de çözüm o olmayacaktır.
ayrıca o son bölümü =60 yerine >=51 yapsan olmaz mı ?
< Bu mesaj bu kişi tarafından değiştirildi hllkntrc -- 9 Haziran 2021; 17:0:21 > -
Merhaba. Kodları mesaja metin biçiminde ekleyebilirseniz ilgilenecek arkadaşların kendi derleyicileriyle kodu denemeleri daha kolay olacaktır. Ayrıca devre şemanızı paylaşmanız da iyi olur.
Sorunuza gelirsek, sağ_mesafe ve sol_mesafe değişkenlerini farklı if blokları içinde kontrol edip tekrar dener misiniz? Tek bir if-else bloğu içinde oldukları için bir çok durum dikkate alınmıyor olabilir şu hâliyle.
@hllkntrc'nin bahsettiği konuya da ekleme yapmak istiyorum. 50-60 değerleri arasındaki bölge için program tepki vermeyecektir. Son bölümde "> 50" yazmanızı öneririm. Eğer tam olarak 60 değerini ve sadece 60 değerini yakalamak istiyorsanız parantez içine "mesafe = 60" yerine "mesafe == 60" yazmanız gerekiyor. "=" sembolü C'de atama operatörüdür.
İyi çalışmalar.
-
Çok teşekkürler @hllkntrc ve @F3SV mağduru
-
int sag_trigger = 2;
int sag_echo = 3;
int sol_trigger = 4;
int sol_echo = 5;
int sag_led = 6;
int sol_led = 7;
int buzzer = 8;
void setup()
{
Serial.begin(9600);
pinMode(sag_trigger, OUTPUT);
pinMode(sag_echo, INPUT_PULLUP);
pinMode(sol_trigger, OUTPUT);
pinMode(sol_echo, INPUT_PULLUP);
pinMode(sag_led, OUTPUT);
pinMode(sol_led, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop()
{
digitalWrite(sag_trigger, LOW);
delayMicroseconds(2);
digitalWrite(sag_trigger, HIGH);
delayMicroseconds(20);
digitalWrite(sag_trigger, LOW);
int sag_mesafe = pulseIn(sag_echo, HIGH,26000);
sag_mesafe = sag_mesafe/58;
Serial.print("Sağ mesafe");
Serial.print(sag_mesafe);
Serial.println("cm");
digitalWrite(sol_trigger, LOW);
delayMicroseconds(2);
digitalWrite(sol_trigger, HIGH);
delayMicroseconds(20);
digitalWrite(sol_trigger, LOW);
int sol_mesafe = pulseIn(sol_echo, HIGH,26000);
sol_mesafe = sol_mesafe/58;
Serial.print("Sol mesafe");
Serial.print(sol_mesafe);
Serial.println("cm");
if (sag_mesafe <= 0)
{
digitalWrite (sag_led, LOW);
}
else if (sol_mesafe <= 0)
{
digitalWrite (sol_led, LOW);
}
else if (sag_mesafe <= 22)
{
digitalWrite (sag_led, HIGH);
delay(50);
digitalWrite (sag_led, LOW);
delay(50);
}
else if (sol_mesafe <= 22)
{
digitalWrite (sol_led, HIGH);
delay(50);
digitalWrite (sol_led, LOW);
delay(50);
}
else if (sag_mesafe <= 50)
{
digitalWrite (sag_led, HIGH);
delay(200);
digitalWrite (sag_led, LOW);
delay(0);
}
else if (sol_mesafe <= 50)
{
digitalWrite (sol_led, HIGH);
delay(200);
digitalWrite (sol_led, LOW);
delay(0);
}
else if (sag_mesafe = 60)
{
digitalWrite (sag_led, LOW);
}
else if (sag_mesafe = 60)
{
digitalWrite (sag_led, LOW);
}
}
-
bu hatalı olan kod bunun üzerinde biraz daha çalışacağım
-
Sorun yanlış else if kullanmandan kaynaklı. Önce tek taraflı olarak kodu düzgün olarak çalıştır.
Ayrıca kodda açığın bulunmakta, ölçümün 50dan küçükseye göre çalışıyor. Ya gelen değer 50dan büyük olursa? buna önlem alman gerekli.
İkinci olarak değer 0 yada 0dan küçükse ledi low yapıyorsun, burası tamam.
if (sag_mesafe <= 0)
{
digitalWrite (sag_led, LOW);
}
Sonra demişsin ki değer 22 yada daha küçükse ledi high yap, bekle, low yap. Buradaki bekleme süreleri çok kısa, yine de senin tercihin bu. Gözle yanıp söndüğünü göremezsin bu halde.
else if (sag_mesafe <= 22)
{
digitalWrite (sag_led, HIGH);
delay(50);
digitalWrite (sag_led, LOW);
delay(50);
}
Ancak burada şöyle bir hatan var. değer 22 yada daha küçükse, önce "if (sag_mesafe <= 0)" yazıldığı için bu fonksiyon çalısacak, diğeri çalışmayacak. Doğrusu şu şekilde olmalı.
if (sag_mesafe <= 0)
{
digitalWrite (sag_led, LOW);
}
else if (sag_mesafe > 0 && sag_mesafe <= 22)
{
digitalWrite (sag_led, HIGH);
delay(50);
digitalWrite (sag_led, LOW);
delay(50);
}
else if (sag_mesafe > 22 && sag_mesafe <= 50)
{
digitalWrite (sag_led, HIGH);
delay(200);
digitalWrite (sag_led, LOW);
delay(0);
}
else
{
//buraya da değer 50den büyükse ne yapılacağını yazmalısın.
}
-
Çok Teşekkürler @TuRkiShCowboy
-
Projenin sonucu nedir? Olumlu olduysa projenizi paylaşabilirmisiniz?
< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X