Z

Güneş izleyen robot

Başlatan zengar, 20 Kasım 2012, 15:37:59

zengar

Ekte güneş izleyen robotun programı, hex dosyası,isis dosyası, baskı devresi ve resimleri var.program çalışıyor güzel proje



'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [Halit hulako...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18.01.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
PORTA=0
TRISA=%00001111
PORTB=0
TRISB=%00000000
PORTC=0
TRISC=%00000000
PORTD=0
TRISD=%00000000
PORTE=0
TRISE=%00000000
ADCON1 = %00000010

Define ADC_BITS 8
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
HAMA var byte 'herbir ldr nin ismi
HAMB VAR BYTE
HAMC VAR BYTE
HAMD VAR BYTE
time con 25
pause 250 
BASLA:



Adcin 0, HAMA  'bunlar 4 ldr nin deðerlerinini alýyo ve aþaðýda bunlarý
Adcin 1, HAMB  ' kýyas edecek hangisi büyükse motor o tarafa harekete
Adcin 2, HAMC  ' baþlýyacak
Adcin 3, HAMD 


if (HAMD-4)> HAMC then '  araya 4 fark verdim ki ldr lerin arasýndaki en
goto batdog               ' küçük deðiþmede motorlar hareket etmesin aksi             
else                        ' taktirde motorlar titreme yapabilir.         
PORTB=%00000000
endif
BASLA1:
if HAMD < (HAMC-4) then
goto dogbat
else
PORTB=%00000000
endif
BASLA2:
if HAMA < (HAMB-4) then
goto KUZGUN
else
PORTB=%00000000
endif
BASLA3:
if (HAMA-4) > HAMB then
goto gunkuz
else
PORTB=%00000000
endif

goto BASLA


'hangi analog giriþ hangi motoru ne tarafa doðru çeviriyor diye 'kaygýlanmayýn bir iki deneme yanýlmayla doðru yerleri bulabilirsiniz

DOGBAT:
' step motoru doðu batý doðrultusunda dönder subroutini
'

PORTB=%00000001
PAUSE time
PORTB=%00000010
PAUSE time
PORTB=%00000100
PAUSE time
PORTB=%00001000
PAUSE time
goto basla2


BATDOG:
' step motoru batý doðu  doðrultusunda dönder yani yukardakinin tersi 'doðu tarafa subroutini

PORTB=%00001000
PAUSE time
PORTB=%00000100
PAUSE time
PORTB=%00000010
PAUSE time
PORTB=%00000001
PAUSE time
goto basla1 

KUZGUN:

PORTB=%10000000
PAUSE time
PORTB=%01000000
PAUSE time
PORTB=%00100000
PAUSE time
PORTB=%00010000
PAUSE time
goto basla3


GUNKUZ:

PORTB=%00010000
PAUSE time
PORTB=%00100000
PAUSE time
PORTB=%01000000
PAUSE time
PORTB=%10000000
PAUSE time
goto basla




zengar


zengar


zengar


yea®

#4
 teşekkürler. güzel bir proje olduğu belli. iyi çalışmalar. en kısa sürede ben de yapmak istiyorum. mekanik kısmı ile ilgili biraz daha bilgi verebilir misiniz? resimdeki ve çizimdeki çarklar birbirinden farklı görünüyor.

zengar

Kullandığınız çarkların önemi yok. Ne kullanırsanız kullanın sistem güneşe odaklanır. Tabi sonsuz tipi dişli kullanırsanız hassasiyeti artar.

yea®

peki anladım teşekkür ederim...

mustafa

Aslında pot komutuylada yapılabilir bu program. Sonuç itibari ile ldrlerde meydana gelen direnç değişimi ölçülecek. Bu şekilde program daha kısa olurdu zannımca.

ete

Pot komutuna bu kadar güvenmeyin. Çok sağlıklı çalışmaz.
Programda o kadar uzun değil sonuçta. Dikkat ederseniz ADC okumaları yalnızca birer komut.
Pot okumasıda aynı şekilde bir komut olacak idi. Uzun olan okunan değerlerin değerlendirilmesidir. Böyle olunca pot da kullansan ADC de kullansan fark etmeyecektir.
Bu işte iki eksen hareketi vardır. Birincisi yatay da sağa sol dönüş bu güneşin doğudan doğup batıdan batması esnasında izlediği yolu takip ettirecektir.
Diğeri ise dikey hareket ki buda güneşin sabah ufuk noktasından doğup öğlen saatlerinde en yüksek konuma ulaşması ve sonra yine yavaş yavaş alçalarak akşam batması esnasında izlediği yolu takip edecektir.
2 adet ldr yatay hareketi (Doğu-Batı) ve 2 adet LDR ise dikey hareketi (Kuzey - Güney) algılayacaktır.
Sonuçta bir yöndeki hareketi izleyecek iki algılayıcı var. Bunlardan en çok ışık alanın ADC değeri en küçük olacaktır.
Sistem daima he riki LDR yede eşit ışık gelmesi için motora hareket verecektir. Arkadaşımızda öyle yapmış sanırım.
Programdaki eksikliklerden birisi limitlerin tanımlanmamış olmasıdır. Akşam güneş battığında ne olacaktır. Gerçi bu konumda okunan ADC ler eşit olacağı için hareket de duracaktır. Ancak sabah güneşin yeniden doğması ile sistemin hangi yöne döneceğine nasıl karar verilecektir?. Zira tamamen aksi bir yöne bakan sistemin aldığı ışık miktarı çok az olacak ve LDR farklılıkları çok etkin rol oynamayacaktır diye düşünüyorum. Gerçekte bu nasıul olmaktadır acaba?.

İşin bu kısmında bana kalırsa akşam saatlerinde belirli bir ışık seviyesinin altına düşülmesini takiben sistem motorlara hareket vererek aleti güneşin doğduğu yöne baktırması uygun olurdu gibime geliyor.

Ete

zengar

Haklısınız Ete hocam! Güneşin doğuşu ve batışı için limit switch leri kullanmam gerekiyordu. Sonraki güneş hareketi için kendini o pozisyona götürmesi gerekiyor. Bu şekilde  uygun bir program yazılabilir . O anlık Hocaya sunmam yeterli idi bende fazla kafa yormadım. 

ete

Önce bir sıfır noktası yani referans noktası belirlemek gerekir. Bu her sabah işe başlarken hareket noktası olabilir. Bu noktadan itibaren akşama kadar ileri adımları sayarsan akşam LDR lerin okuma seviyeleri belirli bir değerin altına düşmesi ile birlikte ileri adım kadar motora geri adım verirsin olur biter. Bu adımları sayarken önceden sayıp ta limit noktasını belirlediğin adım sayısını geçmemesinide sağlayabilirsin.

Böylece limit sw kullanmadan işi çözmüş olursun.

Ete

zengar

Ete hocam, gün içinde güneşin takip ettiği gökyüzü koordinatlarını ve sıcaklık değerlerini alıp kaydetmek  istiyorum( her 5 dakika). Enkoder kullanmam gerekiyor herhalde, peki bunun algoritması ve değerleri kaydetme işlemi  nasıl olur. Bana bir yol haritası çıkarırsanız çok memnun olurum.

ete

ANlamadım gökyüzü koordinatı nedemek oluyor. Güneşin konumunu kayıt edecek isen onun standart yol haritası vardır ve mevsime göre değişir sanırım. Yok senin takip sistemin her 5 dakikada bir aldığı pozisyonu kayıt edecek isen step motor kullandığına göre bence encoder gerekmez. Ama encoderle de olabilir. Step motorun adım palsleri ile çalışıyor her verdiğin puls bir adım ilerletir. Bu adımları sayarsan her 5 dakikada bir kayıt edersen işin görülür.
Encoder dediğin şeyde sana hareket oldukça puls verecek ve seninde bu pulsleri sayman gerekecektir.

Ete

zengar

hocam dünyanın koordinatları olduğu gibi gökyüzüne de koordinatlar vermişler. Altta resim ekledim detaylı anlamak için.
Güneşin sıcaklığı ve geçtiği koordinatları  hassas bir şekilde kaydetmek istiyordum(belki virgülden sonra 4 hane).Haklısınız Bunu yapan programlar var zaten ama bide  ben bunu sistemini yapıyim istiyorum. Şimdi; Stepin atımlarını sayarsam kaçırma ihtimali olur diye düşünmüştüm, ayrıca verileri kaydetmek için eprom mu kullanacam Hocam?

ete

Bu verdiğin resim gökyüzü değil dünya yüzeyinin koordinat sistemidir. GPS denilen alet yardımı ile bulunduğun yerin koordinatlarını Enlem ve boylam olarak alabilirsin. Şimdi hemen bütün akıllı telefonlarda bu sistem mevcut.
Gök yüzü koordinat sistemini bilemiyorum.
Hala neyi kayıt edeceğini anlamış değilim. Gökyüüz deyip yer yüzü resmi veriyorsun. Sağ gösterip sol vurmak gibi bir şey.
Programın tek tek puls vererek step motoru ilerletiyor. Zaten puls kaçırırsan aletini odaklamamış olacaksın. Bu nedenle puls kaçırmaman gerekiyor. Elbette encoder daha stabil bilgi verebilir. Motor miline bir encoder bağlaman gerekecek. Ama bu sana yalnızca senin aletin ne kadar ileri ne kadar geri ilerlediğini gösterecektir.
Bunun yerine bir pot bağlarsan belkide daha uygun olurdu. Böylece gerçek konumu ADC değeir olarak okuyup kayıt edebilirsin.

Ete

Powered by EzPortal