Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Robotik Sistem Tasarımı => Konuyu başlatan: LukeSkywalker - 13 Ocak 2011, 16:24:31

Başlık: PID Çizgi izleyen
Gönderen: LukeSkywalker - 13 Ocak 2011, 16:24:31
Edit.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 15 Ocak 2011, 14:12:02
Edit.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: bymrz - 16 Ocak 2011, 22:51:39
Ellerinize sağlık hocam, gayet başarılı bi çalışma olmuş.

Algoritmayı nasıl yaptınız. Biraz bilgi vermeniz mümkün mü?
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 17 Ocak 2011, 14:03:41
Sensörler analog olarak okundu. Orta noktada alınan değer referans alındı. Gerisi bildiğimiz PID algoritması;
http://en.wikipedia.org/wiki/PID_controller
en altta kod şeklinde  var.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 20 Ocak 2011, 20:04:15
hocam ellerinize sağlık güzel olmuş kod konusunda biraz yardımcı olurmusunuz? nasıl bi yöntem lazım.PId kontrolü bayağı karışık gibi gözüküyor yol gösterirseniz sevinirim
İi çalışmalar
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 22 Ocak 2011, 19:49:30
hocam acaba devre şemasını verebilrmisiniz kodları ben yazmaya çalışacağım teşekkür ederim ii çalışmalar
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 23 Ocak 2011, 15:11:55
@shark27
Devre şemasını sana kısaca şöyle özetleyeyim. 8 kanal ADC kullanılarak sensörler okunuyor, l293D ile motorlar sürülüyor. Bu kadar basit.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: vsalma - 24 Ocak 2011, 11:24:37
Alıntı yapılan: maytere - 17 Ocak 2011, 14:03:41
Orta noktada alınan değer referans alındı.

derken sadece ortadaki sensörün referans alındığınımı belirttiniz. Yoksa sensörlerden gelen bilgilerin ortadaki değeri mi(median)?
Kaç adet sensör kullanıldı ?

Teşekkürler. Elinize sağlık.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 24 Ocak 2011, 11:32:43
maytere hocam teşşekürler l293 yerinde 298 kullansam olur değilmi?

Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 24 Ocak 2011, 11:34:54
hocam bişey daha soracağım elinizdeki sensör kitinin bende dijital çıkışlısı qtr-8rc var

katolguna baktğımıda

1. Turn on IR LEDs (optional)
2. Set the I/O line to an output and drive it high
3. Allow at least 10 us for the 10 nF capacitor to charge
4. Make the I/O line an input (high impedance)
5. Measure the time for the capacitor to discharge by waiting for the I/O line to go low
6. Turn off IR LEDs (optional)

şeklinde ölme yapılacağı söyleniyor.
5.maddede kafam karıştı kondansatörün deşrj zamanını ölç diyor nasıl bi kod yazabilirim oraya?
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 24 Ocak 2011, 12:27:13
Timer kuaracaksın. Fakat o sensör ile yüksek hızlara ulaşman mümkün değil. Çünkü her sensörden gelen veriyi okuman uzun süre alacaktır. Bu yüzden yüksek hızlarda robotu çizgi üzerinde tutman zor olacaktır. QTR-8A kullanmanızı tavsiye ederim. Veya kendiniz qrd1114/CNY70  kullanarak bir sensör kartı tasarlayabilirsiniz. Ben qtr8A öneririm. QRD114 ise QTR-8A da kullanılan sensörlerin DIP versiyonu.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 24 Ocak 2011, 13:01:30
hocam teşekkür ederim

ilk önce şunu belirtmek isterim emeğe karşı sonsuz saygım var....

biliyorum bişeyleri yapmak kolay iş değil....

üniversitedebu proje benim dönem tezim ve son 1  haftam  var...

Teslim etmem lazım yoksa dönem uzayacak

sizin programınızı bir sitede forum sayfasında buldum burdan nerde bulduğumu sölemek istemiyorum emeğinize saygısızlık olmasın diye...

Eğer müsade ederseniz programınızı kullanbilirmiyim??

teşekkür ederim ii çalışmalar


Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 24 Ocak 2011, 16:45:18
Tabiki kullanabilirsin. Fakat şunu söylemeliyim ki her kod her robotta çalışır diye bir şey yok. Ben kendi tasarımıma göre bir kod yazdım. Ama mantığını kullanabilirsiniz tabiki. Yoksa yüklemezdim sağa sola  ;) Onları da bir sileyim bari.. Yarışmalardan sonra paylaşırım burada.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 24 Ocak 2011, 16:54:48
maytere hocam ya şu tasarımını bana bi anlatsana gözünü seveyim kurtar beni şu dertten :D
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 24 Ocak 2011, 16:57:20
Alıntı yapılan: shark27 - 24 Ocak 2011, 16:54:48
maytere hocam ya şu tasarımını bana bi anlatsana gözünü seveyim kurtar beni şu dertten :D
Dostum sen hangi lisedesin?
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 24 Ocak 2011, 16:59:58
hocam zaten rakip olduğumuza inanıyosan boşver bişey demedim

ii çalışmalar
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 24 Ocak 2011, 17:01:52
Yani ;) Gaziantepte  falan filan yazmışın 3. robot yarışmasının konusunda da o yüzden sorayım dedim.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 24 Ocak 2011, 17:03:28
hocam onu mezun olduğum okulda hocam yazmıştı bende onun niki ile girdim ...
Başlık: Ynt: PID Çizgi izleyen
Gönderen: vastar - 24 Ocak 2011, 17:08:17
çizgi takip ettiren arkadaşlar için bir video ekliyeyim gayet güzel bir robot. 3 yıl önce mi ne izlemiştim videoyu. Alışılageldik robot mekaniğinden farklı bir mekanik tasarımı var bence gayet başarılı.

Başlık: Ynt: PID Çizgi izleyen
Gönderen: bbs2006 - 30 Mart 2011, 19:53:37
merhaba
bende pıd kontroluyla cizgi izleyen robot yapmak istiyorum.acaba referans degerle gerçek deger arasında ki abgınıtyı ccs c kullanarak nasıl yazabilirim.ben 8 adet sensör kullanmayı düşünüyorum. yardımcı olursanız sevinirim.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 30 Mart 2011, 20:04:48
Dostum PID kontrol orada devreye giriyor işte..
Hata değerini hesaplayacaksın ilk başta...

http://en.wikipedia.org/wiki/PID_controller

Yukarıdaki sayfanın altkısmındaörnek kod var..
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 12 Nisan 2011, 12:35:17
maytere hocam hata değerini buluyorum lcd de ekranda yazdırıyorum örneğin referans değerine geldiğinde iki motorada 255 255 değerlerini gönderiyor çizgi sola ve saga kayınca değerler değişiyor diyelimki en sol sensör gördü değer 150 oluyor ama çizginin üstüne koyduğumda saçmalıyor
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 12 Nisan 2011, 14:50:52
kodunu gönder bakalım..
Başlık: Ynt: PID Çizgi izleyen
Gönderen: shark27 - 12 Nisan 2011, 18:39:13
yarın göndericem özel iletinize ii akşamlar
Başlık: Ynt: PID Çizgi izleyen
Gönderen: mavikaplan - 15 Nisan 2011, 01:08:37
Çok başarılı olmuş elinize sağlık..
Başlık: Ynt: PID Çizgi izleyen
Gönderen: feyzi - 23 Nisan 2011, 09:01:10
Basic kodlarıyla , PID tekniği kullanılarak yazılmış, çizgi izleyen robot programı.Pic ile yapmak için, bazı değerleri ayarlanabilir...

$regfile = "attiny44.dat"
$crystal = 8000000
$framesize = 32
$hwstack = 64
$swstack = 48



Waitms 100

Dim Diff As Long                                            'Difference between target position and measured position
Dim Difflast As Long                                        'Previous Difference value
Dim Prop As Single                                          'Proportional Value
Dim Integral As Single                                      'Integral Value
Dim Deriv As Single                                         'Derivative Value
Dim Rate As Single                                          'Rate calculation used for Derivative
Dim Control As Single                                       'Calculated value used to control steering
Dim Mpos As Long                                            'Measured Position
Dim Sensors As Byte                                         'Byte used to hold sensor values
Dim I As Long , X As Long , Temp As Single , Mystr As String * 16
Dim Tlong As Long , Myint As Integer

'Aliases
Speed Alias Pwm1a
Motor Alias Porta.7
Steeringfront Alias Servo(2)
Steeringrear Alias Servo(1)


'PID Constants
Const Kp = 4.5                                              'Gain factor for proportional
Const Kd = .4                                               'Gain factor for derivitive
Const Ki = .1                                               'Gain Factor for Integral

Const Interval = .01                                        'Not used
Const Tpos = 0                                              'Target position of sensors
Const Upperlimit = 30                                       'Maximum control value
Const Lowerlimit = -30                                      'Minimum control value


'Other Constants                                           '
Const Scenterf = 101
Const Scenterr = 105

Const Fast = 650
Const Medium = 640
Const Slow = 600
Const Nogo = 512

'Configuration Statements
Config Timer1 = Pwm , Prescale = 1 , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect
Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 8

'Config Ports
Config Porta = Input
Config Porta.6 = Output
Config Porta.7 = Output
Config Portb = Output

'Turn on Internal Pullups
Porta = &B00011111

'Turn off Motor
Set Motor
Speed = Nogo


'Enable everything
Enable Timer1
Enable Interrupts

Steeringfront = Scenterf
Steeringrear = Scenterr

Wait 2

Difflast = 0
Reset Motor
Speed = Medium

Do
      Sensors = Not Pina
      Sensors = Sensors And &B00011111

      Select Case Sensors

         Case &B00001                                       'Right most sensor
         Mpos = 4
         'Speed = Slow

         Case &B00011                                       'Right Sensors
         Mpos = 3

         Case &B00010                                       'Right Mid sensor
         Mpos = 2

         Case &B00111                                       'Center Right
         Mpos = 1

         Case &B00110                                       'Center Right
         Mpos = 1

         Case &B00100                                       'Centered on the line
         Mpos = 0

         Case &B01100                                       'Center Left
         Mpos = -1

         Case &B11100                                       'Center Left
         Mpos = -1

         Case &B01000                                       ' Left Mid Sensor
         Mpos = -2

         Case &B11000                                       ' Left sensors
         Mpos = -3

         Case &B10000                                       'Left most sensor
         Mpos = -4

         Case &B00000                                       'lost line
         If Mpos < 0 Then Mpos = -5 Else Mpos = 5

      End Select

   Diff = Tpos - Mpos
   Prop = Diff * Kp                                         'Calculate Proportional

   Integral = Integral + Diff                               'Calculate Integral
   Integral = Integral * Ki

   Rate = Diff - Difflast                                   'Calculate Differential
   Deriv = Rate * Kd

   Difflast = Diff

   Control = Prop + Deriv                                   'New control value
   Control = Control + Integral


   If Control > Upperlimit Then Control = Upperlimit        'Keep within safe range
   If Control < Lowerlimit Then Control = Lowerlimit

   Temp = Scenterf - Control
   Myint = Temp                                             'Convert Single to Integer
   Steeringfront = Myint
   Temp = Scenterr + Control
   Myint = Temp
   Steeringrear = Myint                                     'Convert Single to Integer

   Waitms 5                                                 'wait 5ms between loops (200 times a second)

Loop

End
Başlık: Ynt: PID Çizgi izleyen
Gönderen: cntrller - 12 Eylül 2011, 00:37:04
previous_error = setpoint - actual_position
integral = 0
start:
  error = setpoint - actual_position
  integral = integral + (error*dt)
  derivative = (error - previous_error)/dt
  output = (Kp*error) + (Ki*integral) + (Kd*derivative)
  previous_error = error
  wait(dt)
  goto start


buradaki integraldeki ve türevdeki dt'ler ne işe yarıyor açıklayabilecek varmı arkadaşlar
yani onlar olmasa ne gibi bi sıkıntı olur

ve bir de çıkan sonucu iki tekerleğe pwm olarak nasıl dağıtabiliriz kafam artık çalışmaz oldu bu pid de
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 12 Eylül 2011, 07:42:28
Ben dt'yi kullanmamıştım. Zaten Kp, Ki, ve Kd ile gerekli çarpım işlemleri gerçekleştirildiği için ayrıyeten başka bir işleme gerek kalmamıştı. Sabitlerin içerisine katmıştım o değerleri de. sondaki beklemeyi (wait(dt)) yapmanız da robotunuza vakit kaybettirecektir.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: ozgurelkt - 19 Eylül 2011, 00:02:17
anladığıma göre    sensör olarak qtr-8a kullanmışsınız analog bilgileri bir çevirme işlemine tabi tutuyor muyuz.. örnekleme yani sensörden okunan bilgileri alma zamanı için timer mi kuracağız.ben işin başındayım da :))
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 19 Eylül 2011, 08:22:33
Alıntı yapılan: ozgurelkt - 19 Eylül 2011, 00:02:17
anladığıma göre    sensör olarak qtr-8a kullanmışsınız analog bilgileri bir çevirme işlemine tabi tutuyor muyuz.. örnekleme yani sensörden okunan bilgileri alma zamanı için timer mi kuracağız.ben işin başındayım da :))
Analog dijital konvertreri direk kurup 8 kanaldan okuyorum. Ne kadar hızlı bir çevrim kurarsanız o kadar iyi.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: ozgurelkt - 21 Eylül 2011, 00:38:26
cevap verdiğiniz için teşekkürler. Analog çıkışı neden dijatele çeviriyoruz.  QTR-8RC kullansak  hız mı yeterli olmuyor. analog dijatele çeviriken ne kullanacağız. 7414 mü.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 21 Eylül 2011, 07:22:34
Sensörlerin çizgiye sağdan veya soldan yaklaşımına bağlı olarak çıkışlarındaki analog bilgi değişiyor. Çizgiye yaklaştıkça voltaj düşüyor mesela. Bu şekilde konumu daha hassas algılayabiliyoruz. Dijital sensörü denemedim fakat kondansatörün deşarj süresine bağlı olarak ondanda hassas konum bilgisi alınabiliyor yanlış hatırlamıyorsam. Fakat daha yavaş olacağı kanaatindeyim. analog dijital çevirici için ise mikrodenetleyicinin dahili ADC modülünü kullanabilirsiniz.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: ozgurelkt - 14 Ocak 2012, 19:00:30
qtr-8a ile yaptığım  devrede   sensörlerden gelen bilgilerin ortalaması olan 3500 değerini referans olarak aldım.
yer=3500-sensor;
Şimdi  bir tarafta değerler (-)eksi olarak diğer tarafta (+) artı olarak çıkıyor.örneğin -2000 yada +3000 gibi. Bu elde ettiğim yer bilgisini önceki yer bilgisinden çıkarıpta mı pwm olarak kullanacağım . elde ettiğim bu değeri nasıl pwm olarak kullanacağım kafam karıştı birazda :) yardımcı olursanız sevinirim.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: LukeSkywalker - 14 Ocak 2012, 21:17:50
pwm değerinin maximum 255 olduğunu düşünelim.

o halde
yer=3500-0;
yer=3500 olur.

255/3500=0.07 gibi bir değer çıkar.

yer1=(yer)*0.07; bu bizim P değerimiz.
yer2=önceki yer - yer*Kd; bu da bizim D değerimiz;

yer1+yer2==bu da bizim PD değerimiz.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: ozgurelkt - 14 Mart 2012, 23:07:51
yardımlarınızla yapmış olduğum çizgi izleyen stabil değil bir türlü istediğim gibi olmuyor. bir çok araştırma yaptım. kodlarda da farklılıklar var. örneğin sizin verdiğiniz  PD kısmında  önceki_yer-yer*KD kısmı başka kaynaklarda farklı verilmiş. bazı kaynaklarda örnekleme zamanına bölünmüş.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: CyberX-TR - 15 Mart 2012, 21:34:43
Kendini Uyurken Cekip Youtubeyemi Atıyor :))
Başlık: Ynt: PID Çizgi izleyen
Gönderen: ozgurelkt - 19 Mart 2012, 21:13:40
kendini komik mi sanıyorsun.
Başlık: Ynt: PID Çizgi izleyen
Gönderen: yusuf.ozyer - 01 Şubat 2015, 11:51:53
hocam çizgi izleyen robot yapıyorum fakat pid kısmını yapamadım değerlerimi yanlış giriyorum kodlardamı bi sıkıntı var anlayamadım
Pic basicde yazdım kodları
sensörleri anolog okutup dijitale çevirdim
sensörleri okuduğunu anlamak için birer led bağladım (pic e led bağladım picde işlemleri yapıp ledi yakıyor )
yani sensörlerden bilgi geliyor benim sorunum motor kontrol kısmı o kısmı halledemedim yardımcı olurmusunuz