çizgi izleyen robot ADC

Başlatan emin1, 19 Nisan 2011, 22:32:19

emin1

16f877a ile çizgi izleyen robot yapmayan çalışıyorum.
qtr-8a analog sensör kullandım 8 li. her sensörü bağımsız olarak okuyabiliyorum.  adc okurken hangi sensörün çizgi  üzerinde olduğunu nasıl
hesaplayacağız

XX_CİHAN_XX

Sensörleri ADC olarak okumanıza gerek yok. Sensörünüz "active low"  şeklinde çalışıyorsa ilgili sensör çizgi üzerine geldiğinde çıkışı "0" konumuna geçerken çizgi üzerinde değilken "1" (+5V) konumuna geçer. Eğer sensörünüz "active high" şeklinde çalışıyorsa tam tersi geçerli olacaktır. Göreceğiniz üzere sensörden pice giden bilgi ya 0V yada +5V seviyesindedir. Bu durumda analog ölçüme gerek yoktur.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

z

Adam belki harbi harbi kontrol (digital sinyal isleme) algoritmalari  kosturmak istiyor. Dogrusu da bu.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

XX_CİHAN_XX

Hocam arkadaşın sorusunun gidişatı ve kullanmak istediği pic türü, bahsettiğiniz algoritmalardan uzak gözüksede umarım adc kullanmasındaki amaç bahsettiğiniz şekildedir.  :D
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

emin1

0*value0 + 1000*value1 + 2000*value2 + ...
--------------------------------------------
     value0  +  value1  +  value2 + ...

8 adet analog sensörüm var  yukardaki fotmülde en soldaki sensör gördüğünde 0 değeri  sen sağdaki sensör çizgiyi aldıladıgında 7000 değerini göstermesi gereki diyor ama ben formulü çözemedim.

z

Sensörleri nasıl dizdin, çizgi kalınlığı ve sensör görüş alanı elde edeceğin förmülasyonu yakından ilgilendiriyor.
Çizgi ile hizalanmış tek bir sensör mü var yoksa birden fazla sensörmü?

Bunlar bilinmeden bağıntı yazmak imkansız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

emin1

sensörler hazır bir kartta sıra ile dizilmiş dizilmiş   (çizgi izleyen robot için 8 adet sensör)
http://www.pololu.com/catalog/product/960  linkdeki kart



z

Gene yeterli veri yok ortada.

Aklima soyle bir sey geliyor.

Eger Bir sensor kalinca bir cizginin tam karsisinda iken max voltaj veriyor olsun. Bu durumda komsu sensor minimum voltaj verecektir. (Cizgi kalinligi oyle secilmis olsun)

Sensor cizgi uzerinde saga yada sola kaydirildiginda komsu iki sensor ayni cizgiden etkilenmeye baslayacaktir.

Bu durumda cikis voltaji icin V1-V2 bagintisini kullanabilirsin. Komsu iki sensor cizgiyi ortaladiginda 0v bir tarafa kayarken voltaj da vmax a dogru, diger tarafa kayarken de voltaj da -vmax a kayar.

Cizgi sozkonusu komus iki sensorden tamamen uzak bolgeye kayarsa bu kez ayni formulasyonu bu iki sensor icin uygularsin. Yani sensor bolgeleri olusturursun.

Bu durumda 8 sensorluk dizi 7 bolge olusturur.

Eger cizgi kalinligi fazla kalin ise bu durumda bir sensor atlaip n ve n+2 nolu sensor voltajlarini degerlendirebilirsin.

Tum sensorlerin voltajindan ortak tek bir voltaj ureteyim dersen biraz dusenelim. Fakat bu uygulamada amac pozisyon degisimi ile voltaj olusumu arasinda dogrusal bir baginti elde etmek olmali ve sensorler arasi mesafe, cizgi kalinligi, bir sensorun gorus alani gibi degiskenler bu bagintiyi yazmayi zorlastirabilir.

Bu uygulamalarda cizgi kalinligi standart mi?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

feyzi

Siyah zemin ortasında 2 cm beyaz zemin var.
"insanların hayırlısı ,onlara faydalı olandır."  (H.Ş.)

MrDarK

Bana kalırsa keşke dijital yapsaydınız yada  (alsaydınız) sensörleri :) kontrolu daha kolay olurdu. Ama madem alınmış buna göre bir çözum uretmek lazım (: isterseniz sensörleri 2li 2li birlestirip 4 kanal ADC okuyup öyle bir yönetimle kullanabilirsiniz. bu sayede en azından daha kontrollu olur gibi geldi bana.

Ama keşke kendi sensörunuzu kendiniz yapsaydınız qrdler ile çok daha kolay kurulumu ve çizimi.
Picproje Eğitim Gönüllüleri ~ MrDarK

XX_CİHAN_XX

Alıntı yapılan: MrDarK - 24 Nisan 2011, 12:48:42
Bana kalırsa keşke dijital yapsaydınız yada  (alsaydınız) sensörleri :) kontrolu daha kolay olurdu. Ama madem alınmış buna göre bir çözum uretmek lazım (: isterseniz sensörleri 2li 2li birlestirip 4 kanal ADC okuyup öyle bir yönetimle kullanabilirsiniz. bu sayede en azından daha kontrollu olur gibi geldi bana.

Ama keşke kendi sensörunuzu kendiniz yapsaydınız qrdler ile çok daha kolay kurulumu ve çizimi.

Bir schimitt trigger eklentisi ile zaten dijital çıkış elde edilir. Mesele analog analiz yaparak daha kaliteli algritmalar oluşturmak :)
Yoksa elbette dijital kontrol ile bu iş çok basit olur. Bana görede dijital kullanıp işini bitirmeli eğer analog olarak altından kalkamayacak ise...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

LukeSkywalker

PID çizgi izleyen başlığı var robotik sistemler de... oraya bakın derim...
https://www.picproje.org/index.php/topic,31342.15.html

keops_4

       Bunalmış Hocamın bu konuda yorum yapması çok güzel. Kimse çaktırmıyor ama şu anda milli eğitimin robot yarışması için müthiş bir hazırlık var. Arkadaşımın sorduğu soruya cevap verebilecek bu forumda çok kişi var. Onlar bu işi çoktan bitirdi ve yarışmaları bekliyorlar. Zaten yarışmaya katılacaklardan cevap gelmemiş. Çizgi izleyen konusunda bitmiş bir projem yok ama bildiklerimi aktarmak isterim. Bahsedilen sensör grubu merkezleri arasında 1 cm mesafe bulunan yan yana dizilmiş 8 adet sensörden meydana geliyor. Yarışmalarda genelde elektrik bantı kullanılıyor. O da yaklaşık 19mm. Dolayısıyla aynı anda iki sensör çizgiyi görmüş oluyor. Bunları Bunalmış Hocam inşallah yorumlarına devam eder diye yazıyorum.
    Arkadaşımızın formülü ise dijital bilgilerden konum belirleme. Formül şöyle.

Konum==(($A2*8+$B2*7+$C2*6+$D2*5+$E2*4+$F2*3+$G2*2+$H2*1)/TOPLA($A2:$H2))*10

D7   D6   D5   D4   D3   D2   D1   D0   
0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   1   10
0   0   0   0   0   0   1   1   15
0   0   0   0   0   0   1   0   20
0   0   0   0   0   1   1   0   25
0   0   0   0   0   1   0   0   30
0   0   0   0   1   1   0   0   35
0   0   0   0   1   0   0   0   40
0   0   0   1   1   0   0   0   45
0   0   0   1   0   0   0   0   50
0   0   1   1   0   0   0   0   55
0   0   1   0   0   0   0   0   60
0   1   1   0   0   0   0   0   65
0   1   0   0   0   0   0   0   70
1   1   0   0   0   0   0   0   75
1   0   0   0   0   0   0   0   80

Arkadaş 1000 ile çarpmış ben 10 ile çarptım. Formül yerine direk case veya if ile döngü grup
D7   D6   D5   D4   D3   D2   D1   D0
-7   -5   -3   -1   1   3   5   7
değerlerini atama durumu da var. Buradan elde edilen katsayılar PID denklemlerinde kullanılıyor. PID hesaplamaları da genelde 10ms de bir interrupt içinden alt programlar (P, I, D) çağırılarak hesaplanıyor. Benden bu kadar. Çok bilsem yarışmaya katılacak robotum olurdu. ;D  Sorulara cevap verip bizleri aydınlatan tüm arkadaşlara saygılar... 

VFR

Aynı şekil de ben de bir robot tasarımı yapmaya çalışıyorum ama beceremedim hala.
Yöntem şu. Öncelikle sensörlerimizi zemine kalibre ediyoruz çünkü sensörleri 10bit ADC ile okuduğumuz için sensörden sensöre farklı değerler gelicek. Mesela bir sensörden 100 bilgisi diğer sensörden 200 bilgisi geldi böyle olunca doğru bilgi alamayacağız.
Kalibre ettikten sonra 0-1000 arasında bilgi gelecek her sensörden. Daha sonra
0*value0 + 1000*value1 + 2000*value2 + ...
--------------------------------------------
     value0  +  value1  +  value2 + ...
Bu formülü kullanarak 0 ile 7000 arasında bir sayı elde ediyoruz. Referansımız 4. ve 5. sensörlerin aynı anda gördüğü an. Bunu işlemde yerine koyarsak 3500 elde ediyoruz. Daha sonra hata=referans-konum ile hatamızı elde ediyoruz. -3500 ile 3500 arasında. Eğer - çıkarsa çizgi sol tarafta, + çıkarsa sağ tarafta. Daha sonra da integral ve türev formüllerini kullanıp PID sonucunda bir çıkış alarak bunu da motorlarımıza pwm olarak veriyoruz.
Benim takıldığım yer ise şu an PID katsayıları. Katsayıları iyi veremediğim için çok kararsız gidiyor robot.

datasheet

Alıntı yapılan: VFR - 25 Nisan 2011, 01:18:25
Aynı şekil de ben de bir robot tasarımı yapmaya çalışıyorum ama beceremedim hala.
Yöntem şu. Öncelikle sensörlerimizi zemine kalibre ediyoruz çünkü sensörleri 10bit ADC ile okuduğumuz için sensörden sensöre farklı değerler gelicek. Mesela bir sensörden 100 bilgisi diğer sensörden 200 bilgisi geldi böyle olunca doğru bilgi alamayacağız.
Kalibre ettikten sonra 0-1000 arasında bilgi gelecek her sensörden. Daha sonra
0*value0 + 1000*value1 + 2000*value2 + ...
--------------------------------------------
     value0  +  value1  +  value2 + ...
Bu formülü kullanarak 0 ile 7000 arasında bir sayı elde ediyoruz. Referansımız 4. ve 5. sensörlerin aynı anda gördüğü an. Bunu işlemde yerine koyarsak 3500 elde ediyoruz. Daha sonra hata=referans-konum ile hatamızı elde ediyoruz. -3500 ile 3500 arasında. Eğer - çıkarsa çizgi sol tarafta, + çıkarsa sağ tarafta. Daha sonra da integral ve türev formüllerini kullanıp PID sonucunda bir çıkış alarak bunu da motorlarımıza pwm olarak veriyoruz.
Benim takıldığım yer ise şu an PID katsayıları. Katsayıları iyi veremediğim için çok kararsız gidiyor robot.

PID örnek kodlarını paylaşırmısınız?