Çizgi izleyende sensörlerden gelen veriyi işlemek için yaklaşım biçimi...

Başlatan makinahmet, 21 Ocak 2013, 13:44:25

erhanmete

Alıntı yapılan: LukeSkywalker - 31 Ocak 2013, 20:22:33
Cahillik sizde kusura bakmayinda. Agzinizla soyledinoz robot yapmadim diye. Bu is tecrube isi. Verdiginiz ornekte cok sacma. O halde oturdugun yerden mercedes tasarimi da yap. Sonucta muhendis olmak icin once amele olmaya da gerek yok. Ama insaat muhendisligi ogrencilerine amelelik yaptiriyorlar değil mi? Veya elektronik muhendisi olmak icin lehim atmaya da gerek yok bu mantikla. O cizgi encoder ile değil ir sensor ile takip edilir. Encoderli motorlar hem pahali hem agir. 3 tane yanyana kullanilan plastik kelepce L metalden de diger aparatlardan da hem hafif hem de stabil olacaktir. Ayrica ir reflektor sensorlere ek olarak geri besleme gyro+accelerometreden alinir. Ha amacin hiz değilse istedigini koy robota, istersen 20kg yap. Ama o olmaz bu olmaz demek sacma. İnsanin sevkini kirar bu tur yaklasimlar.

mesaj birleştirme:: 31 Ocak 2013, 20:24:14
Ben sert cikmadim kimseye...mesajlari dikkatli okuyun.

:)
akşam akşam iyi oldu bu
tabiki oturduğum yerden mercedes tasarımı da yapabilirim. kim karışır. belkide daha iyisini yaparım. benim mantık bu. yoksa hep konuşulduğu gibi olduğumuz yerde sayarız.
bak ne güzelde kendin söylemişssin mühendis olmak için amele olmaya gerek yok tabi.

neyse tekrar soruyorum dediğim neye bozuldun da böyle coştun, en nihayetinde klavyenin başından bağırsan da çağırsan da pek bişi değişmeyecek ben gene aynısını söyleyeceğim.
ama yapacak arkadaşlar bakacak belki de ne L si falan çak cırtı bitsin diyecekler.

bu hırsı neden yaptın hiç anlamadım.
hıı bilgisizim biraz belkide ondan anlamamışımdır :)

ayrıca ne kadar yavaş yazıyorum bi cevap yazıcam kırk tane mesaj yazmışsınız :) yerinede gitmiyecek :)






ibrsel

Alıntı YapMotorlarin altta olmasi agirlik merkezini yukseltir. Virajlarda savrulursunuz.
Bu önerinizi değerlendireceğim.. Teşekkürler..

LukeSkywalker

Tabiki yaparsiniz tasarim ama binen olmaz. Sinirlendigim costugum yok. Size gore dogru olmayan sey dogru degil midir?   L profil kullanmak bir yontemdir cirtta bir yontemdir. Dogrulugu veya yanlisligi diye birsey yok. Kimisi de tutar japonla yapistirir. Sen yanlis yapiyorsun mu diyecegiz? Her sey vida ile tutturulsaydi yapiatiriciya gerek olmazdi degil mi? Herkesin tasarimi kendisine goredir. O yuzden size gore yanlis olan seyleri bu bastan yanlistir diyerek elestirmenizi garipsedim acikcasi. Ayrica bu tur tasarimlarin onaylandigi yer yarisma alanlaridir. 1000 robot icerisinden 1.lik aliyorsaniz dogru seyler yapmissiniz demektir. Ayrica juri ozel odulunu de biz aldikki bu da tasarima veriliyor. Bu seneki meb yarismasi İstanbulda. Gelin gorun ortami bence madem ilgilisiniz.

mesaj birleştirme:: 31 Ocak 2013, 21:04:53

Ayrica size 40 tane mesaj yazmadim. 1 tane cevap yazdim okumussunuz ki ona binayen cevap yazmissiniz.
Saygilar.

erhanmete

yok yok gelemem dostum.
o kadar çok iş varki oyuncaklarla pek uğraşacak vaktim yok :) (espri tabiki)

işte bende senin dediğin gibi yazdım ben olsam dedim daha sağlam yapardım dedim. yanlıştır falan demedim.
öneri dedim dimi. sonra kuş falan yakaladık orda koptuk zaten :) birde bilgi fikir olayı varki deme gitsin çok kırdı beni.

mesaj birleştirme:: 31 Ocak 2013, 21:09:54

bak gene aynısı oldu ben yazarken eklemişsin.
yok kırkınıda sen yazdın demedim yazılmış dedim.

mesaj birleştirme:: 31 Ocak 2013, 21:15:11

bu bilgi fikir olayında cem yılmazın bir esprisi var o geliyor aklıma o yüzden çok takılmıyorum.
izlersen sen de çok gülersin, belkide izlemişsindir o yüzden yazmışsındır bak o zaman çok ince olurdu.
"beyni yok fikri var" diyor gösterisinde ama bunu neye diyor :)

LukeSkywalker

Ben de cem yilmaz izleyecek vakit bulamiyorum uzun zamandir oyuncak yapmaktan.
İyi geceler.

makinahmet


Evet. Bugün yaptığımız ufak çalışma.Amacımız 7805 regülatörü ile voltajı CNY sensöre uygun hale getirip, inceleme amaçlı ilk defa bağlantısını yaptığımız 74hc14 ün sensörden gelen veriyi 0-5 volt yapmasını gözleyerek,L293D entegresi ile sensör kontrollü motor on-off yaparak hareket elde etmekti. BÖylece bir kontrast sensörü ile ilk motor uygulamamızı yapmış olduk.En temel devremiz.

İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

makinahmet

Tekrar merhabalar. projede ilerlemeler kaydediyoruz. İlk çalışmada pcb devre oluşturmak istemedik ve bu yüzden bread boardı gövde üzerine yerleştirdik :D Böylece daha kolay ve çabuk işlem yapabildik. Amaç sadece çizgi izletmekti. :)




Şu şekilde basit bi kodla işimizi hallettik.
//çizgi izleyen robotta sensör işlemleri
//sağ sensör b3 pinine giriş yapıp a7 pininden çıkış yapıyor
//orta sensör b2 pinine giriş yapıp a0 pininden çıkış yapmakta
//sol sensör ise b1 pinine giriş yapıp a1 pininden çıkış yapmakta



void main()
{


set_tris_a(0b00000000);  //a portu tamamen çıkış
set_tris_b(0b11111111);  //b portu tamamen giriş

while(1)
{
//koşullar bölümü
 if(input(pin_b3))       //eğerki b3 pininde 5v varsa
 {
 output_high(pin_a7);
 }else                   //değilse
 {
 output_low(pin_a7);
 }
  
 if(input(pin_b2))           //eğerki b2 pininde 5v varsa
 {
 output_high(pin_a0);
 }else                             //değilse
 {
 output_low(pin_a0);
 }
 
 if(input(pin_b1))         //eğerki b1 pininde 5v varsa
 {
 output_high(pin_a1);
 }else                          //değilse
 {
 output_low(pin_a1);
 }

}//while parantezi
} //main fonksiyonun parantezi


ancak sensörlerimizden ortadaki bozulundu -yada bağlantıları özenli yapmadık :) - Ancak önemli olan proğramın bazı sensörlerin işlevini yitirmesinde dahi çalışması olmalıydı (Örneğin örtadaki sensör için ) Başından proğramı bu duruma göre yazmış olduk.Bu çalışmada sensörlerden gelen veri trigger ile düzeltildi. Amaç şimdilik çizgi izletmekti. İlerleyen zamanlarda sensör sayısı çoğalarak yazılacak proğram da karmaşıklaşacak büyük ihtimal.Analoğ veri alınıp işlenmesi ise şimdilik rafa kaldırıldı.

İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

makinahmet

Bir hafta sonra tekrar merhaba. Sensörlerden gelen verileri işlemeye devam ediyoruz. arabamızın mekanik aksamında bir değişiklik yapmadık sayılır. Yukardaki resimlerde ki gibi. Ancak pillerde problem yaşadık ve biz de deneme amaçlı Nİ-CD 700mah 4.8V luk pillerden aldık. Şarj edip edip deneme yapıyoruz :D Amacımız sensörlerden gelen verileri işlemek.

Bilindiği üzere üç sensörle hareket etmekteyiz hala. Önceki yazılan sensör işleme kodunun mantığı olasıklıklara dayanmakta idi.Araç hafif hızlandığında veya viraja girdiğinde yoldan kolaylıkla çıkıyordu.Kodun açıklaması şöyleydi (araca yukardan bakıldığında x-y eksen takımında aracın ön kısmı +y yönünde konumlu olmak üzere ve yol beyaz çizgi ise siyah);
1)sol sensör siyahta ise (sola viraj var demektir) sag motoru ileri çalıştır sol motora güç verme.
2)sag sensör siyahta ise (saga viraj var demektir) sol motoru ileri çalıştır sol motora güç verme.
3)orta sensör siyahta ise iki motora da güç ver.

Yeni yazdığımız kodunda temeli yine olasılıga dayanmakta.Ancak bu defasında koşul sayımızda artış olmakta.
//çizgi izleyen robotta sensör işlemleri
//sağ sensör  b3 pinine giriş yapıyor 
//orta sensör b2 pinine giriş yapıyor
//sol sensör  b1 pinine giriş yapıyor
//sol motor ileri dönüş a1 pininden yapılmakta
//sol motor geri  dönüş a0 pininden yapılmakta
//sag motor ileri dönüş a7 pininden yapılmakta
//sag motor geri  dönüş a6 pininden yapilmakta

#define solsen  input(pin_b1)  //Sol sensör beyazda
#define ortasen input(pin_b2)  //Orta sensör beyazda 
#define sagsen  input(pin_b3)  //Sag sensör beyazda


#define sagmoileri output_high(pin_a7);  //Sag motor ileri
#define sagmogeri  output_high(pin_a2);  //sag motor geri
#define solmoileri output_high(pin_a1);  //sol motor ileri
#define solmogeri  output_high(pin_a0);  //sol motor geri

#define sagmoileridur  output_low(pin_a7);  //sag motor ileri deaktif 
#define sagmogeridur   output_low(pin_a2);  //sag motor geri deaktif
#define solmoileridur  output_low(pin_a1);  //sol motor ileri deaktif
#define solmogeridur   output_low(pin_a0);  //sol motor geri deaktif

void main(){

set_tris_a(0b00000000);  //a portu tamamen çıkış
set_tris_b(0b11111111);  //b portu tamamen giriş
output_b(0x00);

while(1){
//koşullar bölümü

//üc sensör de beyazda ise motorlar dursun
if(solsen && ortasen && sagsen)
{
sagmoileridur;
sagmogeridur;
solmoileridur;
solmogeridur;
}

//uc sensörde siyahta ise motorlar dursun
if(! solsen && ! ortasen && ! sagsen)
{
sagmoileridur;
sagmogeridur;
solmoileridur;
solmogeridur;
}

//orta sensör siyahta,sol sensör beyazda,sag sensör beyazda
if(! ortasen && solsen && sagsen)
{
sagmoileri;
sagmogeridur;
solmoileri;
solmogeridur;
}

//sol sensör siyahta,orta sensör siyahta,sag sensör beyazda
if(! solsen && ! ortasen && sagsen)
{
sagmoileri;
sagmogeridur;
solmoileridur;
solmogeridur;
}

//sag sensör siyahta,orta sensör siyahta,sol sensör beyazda
if(! sagsen && ! ortasen && solsen)
{
solmoileri;
solmogeridur;
sagmoileridur;
sagmogeridur;
}

//sag sensör siyahta,orta sensör beyazda,sol sensör beyazda
if(! sagsen && ortasen && solsen)
{
sagmogeri;
sagmoileridur;
solmoileri;
solmogeridur;
}

//sol sensör siyahta,orta sensör beyazda,sag sensör beyazda
if(! solsen && ortasen && sagsen)
{
solmogeri;
solmoileridur;
sagmoileri;
sagmogeridur;
}


}//while parantezi
} //main fonksiyonun parantezi


Daha çok koşul daha iyi adaptasyon sağladı.Görüldüğü gibi kodda tekerin bazı yerlerde geri dönüşü hesaba katıldı. Keskin virajlara daha iyi adapte oldu. Bu şekilde hızımız da biraz artmış oldu.Bir daha ki sefere yazılan kodda yapılacak işlem ise üç sensörde beyaz veya üç sensörde siyah gördüğünde kesme yaparak en son hangi sensörün beyaz yada siyah gördüğüne göre motorlara çizgiye doğru yön vermek olacak.

İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

makinahmet

Herkese tekrar merhabalar. Sönsördeb gelen verileri işlemek için çalışmlarımız sürüyor.
En son yapılan çalışmada kodlarımız sensörlerin siyah yada beyaz konumuna göre motorları
olasılıklar çerçevesinde yönlendiriyordu. Adaptasyonu önceki haftalara nazaran bu hafta yine
olasılık koşullarını kullanarak arttırdık. Önceki haftaki amacımız=yazılan kodda yapılacak işlem ise üç sensörde beyaz veya üç sensörde siyah gördüğünde kesme yaparak en son hangi sensörün beyaz yada siyah gördüğüne göre motorlara çizgiye doğru yön vermekti. Ancak biz kesme
kullanmayı tercih etmedik. Onun yerine sensörerin siyah ve beyaza göre olası durumlarını numaralandırdık.Artık 3 sensörde beyazda ise
En son hangi koşulun geçerli olduğunu hatırlayıp ona göre çizgiden çıktığında çizgiye geri dönüyor. Yani U dönüşlerini çok rahat yapıyor :D

//çizgi izleyen robotta sensör işlemleri
//sağ sensör  b3 pinine giriş yapıyor 
//orta sensör b2 pinine giriş yapıyor
//sol sensör  b1 pinine giriş yapıyor
//sol motor ileri dönüş a1 pininden yapılmakta
//sol motor geri  dönüş a0 pininden yapılmakta
//sag motor ileri dönüş a7 pininden yapılmakta
//sag motor geri  dönüş a6 pininden yapilmakta

#define solsen  input(pin_b1)  //Sol sensör beyazda
#define ortasen input(pin_b2)  //Orta sensör beyazda 
#define sagsen  input(pin_b3)  //Sag sensör beyazda


#define sagmoileri output_high(pin_a7);  //Sag motor ileri
#define sagmogeri  output_high(pin_a2);  //sag motor geri
#define solmoileri output_high(pin_a1);  //sol motor ileri
#define solmogeri  output_high(pin_a0);  //sol motor geri

#define sagmoileridur  output_low(pin_a7);  //sag motor ileri deaktif 
#define sagmogeridur   output_low(pin_a2);  //sag motor geri deaktif
#define solmoileridur  output_low(pin_a1);  //sol motor ileri deaktif
#define solmogeridur   output_low(pin_a0);  //sol motor geri deaktif

int kosul;

void main(){

set_tris_a(0b00000000);  //a portu tamamen çıkış
set_tris_b(0b11111111);  //b portu tamamen giriş
output_b(0x00);

while(1){
//koşullar bölümü

//uc sensörde beyazda ise
if(solsen && ortasen && sagsen)
{
 //90 derecelik sola dönüş
 if(kosul == 2){
 solmogeri;
 solmoileridur;
 sagmoileri;
 sagmogeridur;
 }
 
 //90 derecelik saga dönüş
 if(kosul == 3){
 solmoileri;
 solmogeridur;
 sagmogeri;
 sagmoileridur;
 }
 //saga virajdan çıktı ise 
 if(kosul == 4){
 solmoileri;
 solmogeridur;
 sagmogeri;
 sagmoileridur;
 }
 
 //sola dönüşlü virajdan çıkarsa
 if(kosul == 5){
 solmogeri;
 solmoileridur;
 sagmoileri;
 sagmogeridur;
 }
}

//uc sensörde siyahta ise motorlar dursun
if(! solsen && ! ortasen && ! sagsen)
{
sagmoileridur;
sagmogeridur;
solmoileridur;
solmogeridur;
}

//orta sensör siyahta,sol sensör beyazda,sag sensör beyazda
if(! ortasen && solsen && sagsen)
{
sagmoileri;
sagmogeridur;
solmoileri;
solmogeridur;
kosul = 1;  //tam gaz ileri
}

//sol sensör siyahta,orta sensör siyahta,sag sensör beyazda
if(! solsen && ! ortasen && sagsen)
{
sagmoileri;
sagmogeridur;
solmoileridur;
solmogeridur;
kosul = 2;     //90 derece sola dönüş
}

//sag sensör siyahta,orta sensör siyahta,sol sensör beyazda
if(! sagsen && ! ortasen && solsen)
{
solmoileri;
solmogeridur;
sagmoileridur;
sagmogeridur;
kosul = 3;   //90 derece saga dönüş
}

//sag sensör siyahta,orta sensör beyazda,sol sensör beyazda
if(! sagsen && ortasen && solsen)
{
sagmogeri;
sagmoileridur;
solmoileri;
solmogeridur;
kosul = 4;   //saga tam dönüş
}

//sol sensör siyahta,orta sensör beyazda,sag sensör beyazda
if(! solsen && ortasen && sagsen)
{
solmogeri;
solmoileridur;
sagmoileri;
sagmogeridur;
kosul = 5;   //sola tam dönüş
}


}//while parantezi
} //main fonksiyonun parantezi

Bi sonraki hedefte çok daha dar açılı ve sinüsoidal olmayan virajları almak.
İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

datasheet

Alıntı yapılan: makinahmet - 24 Şubat 2013, 23:49:49
Herkese tekrar merhabalar. Sönsördeb gelen verileri işlemek için çalışmlarımız sürüyor.
En son yapılan çalışmada kodlarımız sensörlerin siyah yada beyaz konumuna göre motorları
olasılıklar çerçevesinde yönlendiriyordu. Adaptasyonu önceki haftalara nazaran bu hafta yine
olasılık koşullarını kullanarak arttırdık. Önceki haftaki amacımız=yazılan kodda yapılacak işlem ise üç sensörde beyaz veya üç sensörde siyah gördüğünde kesme yaparak en son hangi sensörün beyaz yada siyah gördüğüne göre motorlara çizgiye doğru yön vermekti. Ancak biz kesme
kullanmayı tercih etmedik. Onun yerine sensörerin siyah ve beyaza göre olası durumlarını numaralandırdık.Artık 3 sensörde beyazda ise
En son hangi koşulun geçerli olduğunu hatırlayıp ona göre çizgiden çıktığında çizgiye geri dönüyor. Yani U dönüşlerini çok rahat yapıyor :D

//çizgi izleyen robotta sensör işlemleri
//sağ sensör  b3 pinine giriş yapıyor 
//orta sensör b2 pinine giriş yapıyor
//sol sensör  b1 pinine giriş yapıyor
//sol motor ileri dönüş a1 pininden yapılmakta
//sol motor geri  dönüş a0 pininden yapılmakta
//sag motor ileri dönüş a7 pininden yapılmakta
//sag motor geri  dönüş a6 pininden yapilmakta

#define solsen  input(pin_b1)  //Sol sensör beyazda
#define ortasen input(pin_b2)  //Orta sensör beyazda 
#define sagsen  input(pin_b3)  //Sag sensör beyazda


#define sagmoileri output_high(pin_a7);  //Sag motor ileri
#define sagmogeri  output_high(pin_a2);  //sag motor geri
#define solmoileri output_high(pin_a1);  //sol motor ileri
#define solmogeri  output_high(pin_a0);  //sol motor geri

#define sagmoileridur  output_low(pin_a7);  //sag motor ileri deaktif 
#define sagmogeridur   output_low(pin_a2);  //sag motor geri deaktif
#define solmoileridur  output_low(pin_a1);  //sol motor ileri deaktif
#define solmogeridur   output_low(pin_a0);  //sol motor geri deaktif

int kosul;

void main(){

set_tris_a(0b00000000);  //a portu tamamen çıkış
set_tris_b(0b11111111);  //b portu tamamen giriş
output_b(0x00);

while(1){
//koşullar bölümü

//uc sensörde beyazda ise
if(solsen && ortasen && sagsen)
{
 //90 derecelik sola dönüş
 if(kosul == 2){
 solmogeri;
 solmoileridur;
 sagmoileri;
 sagmogeridur;
 }
 
 //90 derecelik saga dönüş
 if(kosul == 3){
 solmoileri;
 solmogeridur;
 sagmogeri;
 sagmoileridur;
 }
 //saga virajdan çıktı ise 
 if(kosul == 4){
 solmoileri;
 solmogeridur;
 sagmogeri;
 sagmoileridur;
 }
 
 //sola dönüşlü virajdan çıkarsa
 if(kosul == 5){
 solmogeri;
 solmoileridur;
 sagmoileri;
 sagmogeridur;
 }
}

//uc sensörde siyahta ise motorlar dursun
if(! solsen && ! ortasen && ! sagsen)
{
sagmoileridur;
sagmogeridur;
solmoileridur;
solmogeridur;
}

//orta sensör siyahta,sol sensör beyazda,sag sensör beyazda
if(! ortasen && solsen && sagsen)
{
sagmoileri;
sagmogeridur;
solmoileri;
solmogeridur;
kosul = 1;  //tam gaz ileri
}

//sol sensör siyahta,orta sensör siyahta,sag sensör beyazda
if(! solsen && ! ortasen && sagsen)
{
sagmoileri;
sagmogeridur;
solmoileridur;
solmogeridur;
kosul = 2;     //90 derece sola dönüş
}

//sag sensör siyahta,orta sensör siyahta,sol sensör beyazda
if(! sagsen && ! ortasen && solsen)
{
solmoileri;
solmogeridur;
sagmoileridur;
sagmogeridur;
kosul = 3;   //90 derece saga dönüş
}

//sag sensör siyahta,orta sensör beyazda,sol sensör beyazda
if(! sagsen && ortasen && solsen)
{
sagmogeri;
sagmoileridur;
solmoileri;
solmogeridur;
kosul = 4;   //saga tam dönüş
}

//sol sensör siyahta,orta sensör beyazda,sag sensör beyazda
if(! solsen && ortasen && sagsen)
{
solmogeri;
solmoileridur;
sagmoileri;
sagmogeridur;
kosul = 5;   //sola tam dönüş
}


}//while parantezi
} //main fonksiyonun parantezi

Bi sonraki hedefte çok daha dar açılı ve sinüsoidal olmayan virajları almak.
İyi çalışmalar.

video paylaşırmısınız ?

makinahmet

DC, STEP, SERVO MOTOR -> www.sinematronik.com

makinahmet

Merhabalar. Çalışmalara sınavlar dolayısı ile ara vermek zorunda kaldık. Ancak çalışmanın son hali videodaki gibidir.

https://www.youtube.com/watch?v=BAJylZqqgqw
DC, STEP, SERVO MOTOR -> www.sinematronik.com