Jump to content

senoleker

Yeni Üye
  • İçerik sayısı

    9
  • Katılım

  • Son ziyaret

Topluluk Puanı

0 Neutral

Güncel Profil Ziyaretleri

Güncel ziyaretçiler bloku aktif değil. Diğer kullanıcılar son ziyaretçilerinizi aktif edene kadar göremezler.

  1. Brainfuck, "ezoterik" diye adlandırılan programlama dillerinden en beğendiğim dil. Diğer ezoterik diller genellikle "işi zorlaştırmak" amacıyla yapılmış ama brainfuck, işi "kısaltmak" için yapılmış. Olabildiğince küçük bir interpretter'a sahip. O kadar basit ki, bu dil için yazılan bir yorumlayıcı 200 byte'ın altında olabiliyor. Dilin sadece sekiz tane komutu var ve öğrenmesi çok kolay. Komutlar da "kısa" olsun diye tek bir karakterden oluşuyor: < > + - . , [ ] Mantık da şu şekilde: 30000 adet hücremiz ve bir işaretçimiz var. İşaretçi, bu hücrelerden birini gösteriyor. Her bir hücre 0-255 arası değer alabiliyor. Başlangıçta işaretçi en baştaki hücrede ve tüm hücrelerin içeriği sıfır. > komutu ile işaretçi, bir sonraki, < komutu ile de bir önceki hücreye geçiyor. + komutu, işaretçinin gösterdiği belleği bir arttırırken, - komutu bir azaltıyor. . komutu, işaretçinin gösterdiği hücreyi YAZIYOR , komutu ise klavyeden (ya da giriş biriminden diyelim) girilen değeri işaretçinin gösterdiği hücreye yazıyor. [ komutuna geldiğimizde, eğer işaretçinin gösterdiği hücre sıfır ise, bundan sonraki ] komutuna gidiliyor. (Burada iç içe parantezlere dikkat edin) ] komutuna geldiğimizde, eğer işaretçinin gösterdiği hücre sıfır DEĞİLSE, bundan ÖNCEKİ [ komutuna gidiyoruz. Dilin tamamı bu. Artık bir program bile yazabiliriz Örneğin 0. ve 1. hücrelerde sayılar olsun, işaretçimiz sıfırıncı hücreyi gösteriyor olsun ve biz 0. ve 1. hücreleri toplamak isteyelim. Sonuç da sıfırıncı hücrede olsun: >[<+>-] hepsi bu. O kadar da zor değil sanırım. Şimdi bu program nasıl çalışıyor onu anlatalım: Yöntemimiz şu olacak: Birinci hücreyi bir azaltıp sıfırıncı hücreyi bir arttıracağız. Ta ki birinci hücre sıfır olana dek bunu tekrar ettiğimizde, toplama işlemi gerçekleşmiş olur. Örnek: 9 3 10 2 11 1 12 0 9+3=12 Şimdi bu "program"i yorumlayıcı tarafından nasıl yorumlanıyor onu inceleyelim: İşaretçimiz sıfırıncı hücrede iken > ile birinci hücreye geçiyoruz. Ardından [ komutu geliyor. Eğer işaretçinin gösterdiği hücre (1. hücre) sıfır ise, ] komutuna, yani programın sonuna gidecek. Çünkü bir sayıyı sıfırla topladığımızda bir şey değişmez. Ama birinci hücre sıfır değilse, parantezin içine girecek. Buraya girdiğimize göre, birinci hücre sıfır değildir. O halde sıfırıncı hücreye bir şeyler eklememiz gerekecek. + ile sıfırıncı hücreye bir ekleyip > ile birinci hücreye geçerek onu da - komutu ile bir azaltıyoruz. Sonra gelen ] komutu ise, işaretçinin gösterdiği (birinci) hücrenin değeri henüz sıfır olmadı ise, [ komutuna geçerek, birinci hücre sıfır olana dek işlemi tekrarlayacaktır. Ekte, kendi yazdığım bir excel dosyası var. Bu excel dosyası, GÖRSEL bir brainfuck yorumlayıcı. Burada istediğiniz bir programı çalıştırıp sonuçlarını görebilir, yazdığınız kodları deneyebilir, debug edebilirsiniz. Burada amaç programları "çalıştırıp kullanmak" değildir. Bunu yapan çok sayıda yazılım var. Ekteki excel dosyası, kodun çalışmasını göstermek içindir, adım adım göstererek çalışır, bu yüzden çok yavaştır. Excel programının kullanımı: Öncelikle Excel size, dosyayı açtığınızda VBA scriplerini çalıştır / engelle sorusunu soracak. Buna doğal olarak "çalıştır" demeniz gerekiyor. Anlayamadığım bir şekilde form üzerindeki butonlar kimi zaman basılı gibi görünüyor, ama bu çalışmasına engel olmadığı için üzerinde durmadım. Sorunu bulursanız buradan bildirin ki düzeltelim. Programda başlangıçta yukarıdaki toplama kodu ve ilk iki hücrede de örnekteki gibi 9 ve 3 değerleri var. Dolayısı ile "step" düğmesine basarak her seferinde bir adım ilerleterek kodun nasıl çalıştığını, işaretçinin ve hücre değerlerinin nasıl değiştiğini izleyebilirsiniz. İsterseniz doğrudan Run ALL düğmesine basarak adım adım değil de tüm kodu baştan sona işletebilirsiniz. CLS düğmesi çıktı ekranını temizler, reset ise programı ve işaretçiyi başa alır ve tüm hücreleri sıfırlar. Save düğmesi ekrandaki programı diske kaydederken Load düğmesi de diskten bir program yükler. Yüklenecek ya da kaydedilecek dosyanın yol+ad bilgisi, sarı renkli "FileName" kutusundadır. En alttaki <, >, +, - düğmeleri ise, işaretçi ve hücreleri manuel olarak değiştirmeye yarar. Hücreler, B stunu boyuncadır. Ayrıca B stunundaki her hücrenin ASCII karşılığı da A stunundadır. Böylece hem sayı hem ASCII olarak izleyebilirsiniz. İsterseniz kodunuzu canlı olarak excel tablosu üzerinde değiştirebilir / geliştirebilirsiniz. En güzeli de, program üzerinde bir hücreye çift tıklarsanız, orada breakpoint koymuş gibi program o hücreye kadar çalışır ve orada durur. Durduktan sonra çift tıkladığınız için hücrenin içine girmiş olacaksınız, oradan esc ile çıkabilirsiniz. Bu sırada hücre içeriğini bozmamaya dikkat edin. Excel tablosu ile ya da brainfuck ile ilgili sorularınız olursa, bunun altına yazabilirsiniz. İyi eğlenceler. bf.xlsm
  2. senoleker

    Çizgi izleyen robot

    "İlk proje" ne olmalı? Tabii ki çizgi izleyen robot. Belki yanıp sönen led de yapabilirdik ilk proje olarak ama, onları proje bölümünde değil de, kendi alt bölümlerinde yapmayı daha uygun gördük. Donanım olarak Arduino UNO'nun daha ucuz olan CH340 arabirimli modelini tercih ettik. Tabii siz elinizde olan bir Arduino kullanabilirsiniz. Çünkü bu proje için çok miktarda I/O ve bellek gerekmiyor. Ayrıca iki tane tekerlekli ve redüktörlü DC motor, motorları sürmek için L298N motor sürücü ile devrenin "gözü" olarak da TCRT5000 üçlü sensor kullandık. Önce piyasada bulunan yazılımlara baktık ve doğrusu bu yazılımı kullanmak içimize sinmedi. Çünkü üç gözlü sensorda, sensorun özelliğini kullanabilmek için kalınlığı iki göz arasındaki mesafeden daha fazla olan bir bant kullanmak gerekli. Aksi halde robotumuzu bant görmediğinde de hareket edecek şekilde programlamak zorunda kalırız ve bu da çok dengesiz sonuçlara yol açar. Yazdığımız bu program aslında gerçek bir "çizgi izleyen robot" için halen uygun değil. Çünkü dört başı mamur bir şey yazdık diyebilmek için, robot çizgiden çıktığında hangi açı ile çıktığını hesabedip ona göre bir rota düzeltme yapmalı. Biz ise diğer public yazılımlardaki gibi sadece gözlerin durumunu motorlara aktaracak bir kod tasarladık. Motorlarımızı LN298'e bağlarken ikisini de aynı yönde bağlamalıyız. Eğer motorları ters bağladıysak tekerler geri doğru dönecektir. Bu durumda ya motorların bağlantılarını değiştirmelisiniz ya da koddaki digitalWrite(L298N_RightB,LOW); digitalWrite(L298N_LeftB,LOW); digitalWrite(L298N_RightA,HIGH); digitalWrite(L298N_LeftA,HIGH); kısmını digitalWrite(L298N_RightB,HIGH); digitalWrite(L298N_LeftB,HIGH); digitalWrite(L298N_RightA,LOW); digitalWrite(L298N_LeftA,LOW); olarak değiştirmelisiniz. Böylece motorlara uygulanacak gerilimin yönünü değiştirmiş olursunuz, kablo söküp takmaya gerek kalmaz. TCRT5000 sensoru, beyaz yüzey için 0, siyah yüzey için 1 değerini verir. Eğer pistimizi siyah (koyu renkli) yaptıysak ve çizgimizi beyaz (açık renk) yaptıysak, okuyacağımız değerler ters gelecektir. Bu yüzden sensor okuma kısmını //TCRT5000 okuma int d1 = 1-digitalRead(TCRT_Left); int d2 = 1-digitalRead(TCRT_center); int d3 = 1-digitalRead(TCRT_right); olarak yazmalıyız. Ama pistimiz açık renk ve çizgimiz koyu renkli ise, o zaman sensor okuma kısmındaki "1-" leri kaldıracağız: //TCRT5000 okuma int d1 = digitalRead(TCRT_Left); int d2 = digitalRead(TCRT_center); int d3 = digitalRead(TCRT_right); Böylece koda fazlaca dokunmadan pist seçimimizi yapmak imkanımız olacak. Sensorlardan hem orta hem de yanlardan biri çizgiyi görüyorsa, robotumuz çizgiden çıkmak üzere sayılır, bu sırada daha düzgün bir hareker için, eğer iki göz birden çizgiyi görüyorsa kenardaki gözün çizgiyi görmediğini varsayacağız. Bunun için koda: //Sensorların iki tanesi birden çizgiyi görüyorsa if ((d1+d2)==2) d1=0; if ((d2+d3)==2) d3=0; ekledik. Bundan sonrası motorlar dönecek mi, dönecekse ikisi de mi dönecek, birisi dönecekse hangisi dönecek buna karar vermekten ibaret. Öncelikle motorların dönmesi için tek bir gözün (yukarıda orta ve bir kenar görürse bire indirgemiştik) çizgi görmesi gerek. Böyle değilse, yani üç göz ya da iki kenar çizgi görüyorsa, ya da hiç biri çizgi görmüyorsa motoru çevirmiyoruz. Bunu da bir if komutu ile sağlıyoruz: if ((d1+d2+d3)==1) Burada d1,d2 ve d3 gözler. Bunların toplamı 1 olmalı. Yani sadece bir göz çizgiyi görüyor olmalı. Aksi halde hiç bir motoru çevirmiyoruz. Böylece kenara koyduğumuzda robot saçma sapan hareket etmeyecek, hareketsiz duracaktır. Eğer bu şart sağlanıyorsa, iki motor birden ya da motorların biri dönmelidir. Bunu da basit bir toplama işlemi ile gerçekleştiriyoruz: analogWrite(L298N_RightS,(d1+d2)*hiz); analogWrite(L298N_LeftS,(d2+d3)*hiz); Programın başında "hiz" değerimizi tanımlamıştık. Örneğin 100-150 gibi bir hız değeri verebilirsiniz. Burada d2 değeri 1 ise her iki teker, d1 veya d3 değeri 1 ise, ilgili teker dönecek, böylece robotumuz çizgiyi izlemiş olacaktır. Bağlantılar: TCRT'nin sol ucunu Arduino'nun 10 numaralı ucuna, orta ucunu 11 numaraya, sağ ucunu ise 12 numaraya bağlıyoruz. Motor sürücünün ENA ve ENB pinlerindeki jumper cap'leri çıkartıyoruz. Sonra sırasıyla ENA-IN1-IN2-IN3-IN4-ENAB uçlarını Arduino'nun sırasıyla , 9-7-6-5-4-3 uçlarına bağlıyoruz. Besleme uçlarını ise besleme planınınıza göre yapabilirsiniz. Robotun deneme videosunu aşağıdaki linkten izleyebilirsiniz. https://youtu.be/2WsJSOnJRbw Arduino kodlarını da aşağıdaki linkten indirebilirsiniz. CizgiRobot.ino
  3. senoleker

    tof sensörü ile mesafe ölçümü

    Aktif derken, çalışıp çalışmadığını anlamayı mı kastediyorsunuz? Eğer öyle ise, mikrokontrolcünün i2c portuna bağlayıp cevap verip vermediğini, veriyorsa cevapların anlamlı olup olmadığını kontrol etmelisiniz. Eğer çalışmıyorsa büyük ihtimalle i2c haberleşmesi kilitlenecektir. Devrenizi kurdunuz mu? Mikrokontrolcüye bir yazılım koydunuz mu? Daha önce i2c protokolünü kullandınız mı?
  4. senoleker

    tof sensörü ile mesafe ölçümü

    Hangi microcontroller ve hangi TOF sensoru kullanıyorsunuz? Bu tür sensorlar genellikle I2C ile çalışır. I2C ile daha önce çalıştınız mı? Kullandığınız sensorun datasheet'i elinizde var değil mi? En işe yarar kaynak genelleikle datasheetlerdir.
  5. senoleker

    iki msp430 arasında bluetooth veri akışı

    Doğrusunu isterseniz devrenizin nasıl bir şey olduğunu kafamda canlandıramadım. Sizdeki HC05 modülü ile de çalıştığıma emin değilim. Ama geçmiş HC05 ve HC06 tecrübelerime dayanarak şunları söyleyebilirim: Bir kere HC05'e teraterm'i Bluetooth üzerinden bağlamıyorsunuz umarım. AT komutları için, HC05'in Bluetooth tarafının bağlı olMaması gerek. AT komutunu verdiğinizde OK gelmesi için AT'den sonra <cr><lf> (enter) göndermelisiniz ve bunlar arasında zaman geçmemeli. Yani klavyeden yazarak yaparsanız modüllerin çoğunda cevap alamazsınız. Sizdeki modül de muhtemelen böyledir. Teraterm'i kullanmadığım için nasıl yapıldığını bilmiyorum ama, bir yerlerinde makro tanımlama olmalı. Bu tür işlerde kendim bir program yazmadıysam şu çok basit programı kullanıyorum: https://hw-server.com/terminal-terminal-emulation-program-rs-232 Burada AT#013#010 olarak (AT<cr><lf>) diye bir makro tanımlayıp onu göndermeyi deneyin isterseniz.
  6. senoleker

    ESP8266 ile buluta veri gönderme

    Belki de seri kütüphanesi kullanmadan yapabilirsiniz. Doğrusunu isterseniz ben msp serisi ile hiç çalışmadım. Ama sonuçta yapılması gereken şeyler belli. Bir kere UART için kesme (interrupt) kullanmanız gerekmez burada. Daha karmaşık uygulamalarda bu fayda sağlasa da görünüşe göre sizin projenizde işleri karıştırmak dışında işe yaramayacak. İlk yapılması gereken, TX pinini çıkış, RX pinini giriş olarak set etmek. Sonra baudrate üreticinin kaydedicilerini ayarlamak. 9600 bps kullanacağınıza göre, bunun için gerekli değerleri hesaplayıp ilgili kaydedicilere koymak gerek. Bundan sonra da göndereceğiniz verileri byte byte UART kaydedicisine koyacaksınız. Her bir byte gönderildikten sonra, bir sonraki byte'ı register'a koyacaksınız. Bunlar, genel hatları ile yapmanız gerekenler ama mikrokontrolcü özelinde bunların ayrıntılarına hakim değilim. http://www.mcu-turkey.com/msp430-launchpad-msp430g2553-donanimsal-uart-kullanimi/ sayfasında UART'ın set edilmesi ayrıntılı olarak anlatılmış gibi görünüyor. İsterseniz burayı bir inceleyin, takıldığınız nokta olursa devam ederiz.
  7. senoleker

    iki msp430 arasında bluetooth veri akışı

    Neyin AT modunu kastediyorsunuz? HC05'in AT modunu mu? HC05'i bilgisayara nasıl bağladınız? TTL ile mi?
  8. senoleker

    ESP8266 ile buluta veri gönderme

    Kullandığınız programlama dilinde serial kütüphanesi var mı? Yoksa tamamen sizin kontrol etmeniz mi gerekiyor? Siz kontrol edecekseniz, UART protokolü nasıl çalışır bilginiz var mı? Örneğin baudrate üretici için ayarları yapmakla ve pinleri seçmekle başlayacaksınız. Hangi hızda iletişim kuracaksınız?
  9. senoleker

    iki msp430 arasında bluetooth veri akışı

    MSP'de yazdığınız ve çalışmayan kodu buraya atar mısınız? Çalışmadı derken ne oldu?
×
×
  • Yeni Oluştur...

Önemli Bilgilendirme

Facebook / Twitter / Google hesabınızla kolayca kaydolup cevap verebilir, soru sorabilir, istekte bulunabilirsiniz.
Devam etmeniz, forum kurallarını kabul ettiğiniz anlamına gelir.            Forum Kuralları