Jump to content

Tüm Aktiviteler

Bu akış otomatik güncelleniyor     

  1. Daha eskiler
  2. şenol eker

    Nedir bu PID? Neden gerekli?

    PID'deki bu üç harf, üç hesaplamaya karşılık gelir. Birincisi: P. Proportional'in kısaltması. Proportional kelimesi, "oransal" demek sözlüklere göre. Zaten birçok durumda PID'nin sadece P'sini kullandığımızda işimiz görülür. Odanın "sıcaklığını" sabit tutabiliriz. I ise, kapı açılıp kapandığında içerisi soğuyacak ya, istenen sıcaklığa daha "düzgün" gelmesi içindir. Önceki gönderide "hata"yı hesaplamıştık. Hesap denirse tabii Yani istenen sıcaklıktan ölçtüğümüz sıcaklığı çıkartmıştık. Bu hata ne kadar büyükse, ısıtıcımızı o kadar "güçlü" çalıştıracağız. Mesela ısıtıcıyı PWM ile ya da analog olarak çalıştırıyor olabiliriz. (PWM ve Analog nedir biliyorsunuz umarım. Bilmiyorsanız önce bunları iyice anlayın, aksi halde devamı havada kalacaktır, kafanız karışacaktır, dolayısı ile devam etmeyin, PWM'i öğrenin, Analog kontrolu öğrenin sonra buraya tekrar gelin) Isıtıcımızı her ne şekilde kontrol ediyorsak edelim, bunu bir "sayı" ile yapacağız. Bu sayının bir alt bir üst sınırı vardır. Mesela PWM ile kontrol ediyorsak bir "duty cycle", analog olarak kontrol ediyorsak bir "analog deger" vardır. Örneğin ısıtıcımıza "0" gönderirsek hiç çalışmıyor, "100" gönderirsek son gücüyle çalışıyor olsun. Kimi zaman bu değerler örneğin "0" ile "1" arasında ya da "0" ile "1023" arasında olabilir. Eğer PID'ye bir göz attıysanız, P,I ve D için "katsayılar" verilmesi gerektiğini ve bu katsayıları belirlemenin çok zor olduğunu öğrenmişsinizdir. Şimdi "hata" yı bulduğumuza göre, P değerini de vererek PID'mizin ilk kısmını yapalım. Evet, şimdi iki değer çıktı karşımıza: alt ve üst sınır. Bir de ne vardır? istenen sıcaklıkla ölçülen sıcaklık arasındaki fark, yani "hata". Üç tane değerimiz oldu. Alt ve üst sınırı neden kullanacağız? Eğer hesap sonucu alt sınırdan az ya da üst sınırdan çok çıkarsa sonucu bunlara uyduracağız: Basic kullanıyorsak: hata=istenen_sicaklık-olculen_sıcaklik deger=hata*P_katsayisi IF deger>UstSinir THEN deger= UstSinir END IF IF deger<AltSinir THEN deger= AltSinir END IF Ya da C kullanıyorsak: hata=istenen_sicaklık-olculen_sıcaklik; deger=hata*P_katsayisi; IF (deger>UstSinir) deger= UstSinir; IF (deger<AltSinir) deger=AltSinir; Sonra bu değeri ısıtıcımıza gönderiyoruz. Hepsi bu. Şimdi bu anlattıklarımızı program haline getirelim. Ama hem BASIC hem C yazmak istemiyorum, ben buraya C olarak yazacağım. istenen_sicaklik=25; //Odamızı 25 derece sıcaklıkta sabit tutmak istiyoruz. UstSinir=100; //Isıtıcımızı tam güç çalıştırmak için vermemiz gereken değer AltSinir=0; //Isıtıcımıza verebileceğimiz en düşük değer P_katsayisi=1; while (1) //PID döngüsü, Bu kısımları programınızda başka kolar da varsa, ana döngüye yerleştireceksiniz. { olculen_sicaklik=TermometreOku(); //Termometre okumak konumuz dışında, onu açıklamayacağız hata=istenen_sicaklık-olculen_sıcaklik; deger=hata*P_katsayisi; IF (deger>UstSinir) deger= UstSinir; IF (deger<AltSinir) deger=AltSinir; IsiticiCalistir(deger); //Isıtıcıyı PWM ya da analog ile çalıştırmak da konumuz dışında } Böylece bir P kontrolü yapmış olduk. Bu kadar basit (Devam Edecek)
  3. şenol eker

    Nedir bu PID? Neden gerekli?

    PID birçok yerde kullanılsa da en iyi "bir odayı ısıtma" problemi ile tarif edilebilir. Bir odanın sıcaklığını sabit tutmak istiyorsak, bir ısıtıcı elemana, bir de sıcaklığı ölçen elemana ihtiyacımız var. Sıcaklığı ölçen elemana "termometre", ısıtıcı elemana da "ısıtıcı" diyelim. İlk akla gelen şey, eğer termometre istediğimiz sıcaklıktan az bir değer gösteriyorsa ısıtmaya başlar, istediğimiz sıcaklığa ulaşınca da ısıtmayı keseriz. Bunu hepimiz biliriz, "termostat" bunun adı. Ama şöyle bir sıkıntı var: Eğer termometreyi hemen ısıtıcının yanına koyarsak, ısıtıcı çalışır çalışmaz termometre yüksek bir sıcaklık değeri gösterir. Çünkü ısıtıcı gerçekten sıcaktır. Ama ısıtmamız gereken ortam henüz ısınmamıştır. O halde termometreyi ısıtıcıdan uzağa koymamız gerekir. Termometreyi uzağa koyduğumuzda ortam ısınır, ama tam da istediğimiz sıcaklıkta tutamayız ortamı. Isıtıcıyı çalıştırdığımızda ısıtıcı ortamı ısıtmaya başlar, termometremiz sıcaklığı görür, istenen sıcaklığa geldiğinde ısıtıcıyı kapatırız ama ısıtıcının yüksek sıcaklığı ile ortam bir süre daha ısınmaya devam eder, sıcaklık bizim istediğimizden daha yüksek değere çıkar. Neyse, düşene kadar bekleriz, sıcaklık sınıra geldiğinde ısıtıcıyı açarız ama bu sefer de ısıtıcı kendini ısıtana kadar ortam soğumaya devam edeceğinden bizim istediğimiz sıcaklığın altına düşer. Mesela biz 30 dereceye ayarladıysak bir 25'e düşer, bir 35'e çıkar. Eh, bu da bir şey tabii ki. Ama neden daha iyisi olmasın? Nasıl bir şey yapmalıyız ki sıcaklık tam da o derecede dursun? Aslında şöyle yapabiliriz: Isıtıcımız aç - kapa şeklinde değil de ayarlı olsa, ilk başta sonuna kadar açıp ortamı istenen sıcaklığa getirsem, sonra öyle bir şekilde kıssam ki, istediğim sıcaklıktan ne aşağı ne yukarı gitmese. Ne güzel olur değil mi? Bu mümkün aslında. Yapmamız gereken oda ne kadar ısı kaybediyorsa, ısıtıcıdan aynı miktar ısıyı ortama verirsek odanın sıcaklığı sabit kalır. Peki odanın ne kadar ısı kaybettiğini nereden bileceğiz? Bunu ölçmek zor değil mi? Bunun bir kolayı yok mu? Bunu yapmak aslında çok kolay. Isıtıcıyı öyle sonuna kadar açmayacağız. Oda sıcaklığı ile bizim istediğimiz sıcaklık arasındaki fark ne kadar büyükse o kadar çok açacağız. Tabii tam tersine istenenden daha sıcak ise, ısıtıcıyı daha çok kısacağız. Böylece tam noktasını bulabileceğiz. Termometreden gelen sıcaklık "t" olsun. İstediğimiz sıcaklık "g" olsun. Bu "g-t" değeri, bizim hatamızdır. Yani bizim sistemimiz istenen şeyi yapamamış demektir. Yani bir hatamız var demektir. Bu hata da, istenen ve ölçülen sıcaklık değerleri arasındaki farktır. Biz, bu farkın yani hatanın sıfır olmasını isteriz. Bakın bu "hata" çok mühim. PID'in kalbi bu "hata" (Devam Edecek)
  4. şenol eker

    Hexadecimal - binary "Sayı Sistemleri"

    Bu makale seneler önce ve elektronikle /bilgisayarla ilgisi olmayan bir topluluk için yazdığım bir makaledir. Eğer onaltılı (hexadecimal) veya ikili (binary) sayı sistemleri kafanızda çok net değilse okumanızı öneririm. Sizin ihtiyacınız yoksa da aklınızın bir yerinde dursun; gerektiğinde uzun uzun anlatmak yerine burayı referans verebilirsiniz. Asla başını atlayıp aşağıya geçmeyin. Hiç bir anlamı olmaz. Biliyorum, saçma derecede basit gelecektir ama atlamayın. Konu gerçekten bu kadar basit. Eğer kafanız karışıksa, sebebi olayın karmaşıklığı değil, sizin tahmin etmediğiniz kadar basit olması zaten. Desimal (onlu) sistem, günlük hayatta kullandığımız sayı sistemidir. Onlu sistem denmesinin sebebi, 10 tane rakamının olmasıdır. Bu rakamlar 0,1,2,3,4,5,6,7,8 ve 9 dur. 0=sıfır, 1=bir, 2=iki, 3=üç, 4=dört, 5=beş, 6=altı, 7=yedi, 8=sekiz 9=dokuz sayılarını gösterir. Eğer yazacağımız sayı 10'dan küçükse bunu tek bir rakam ile yazabiliriz. Ama yazacağımız sayı 10 veya daha büyükse, o zaman birden fazla rakam kullanmamız gerekir. O zaman rakamları yanyana yazarız. Önce iki rakamlı bir örnek verelim: 23 Burada başta 2 rakamı, sonra 3 rakamı vardır. Onluk sayı sisteminde her basamak bir öncekinin 10 katı değerdedir. Bütün sayı sistemlerinde en sağdaki basamak birler basamağıdır. Sonraki basamaklar ise daima bir öncesinin on katı olur onlu sistem için. Yani onlar basamağı olur. Eğer bir üçüncü basamak olsaydı, bu da bir öncekinin (yani 10'un) on katı olacak, yüzler basamağı olacaktı. Örnekte verdiğim sayıyı okurken katiyyen "yirmiüç" diye okumayın. iki-üç diye okuyun. Amerikalıların telefon numaralarını söyledikleri gibi. Şimdi bu sayının kaç olduğunu bulalım: Soldaki basamak onlar basamağı demiştik. Burada 2 yazdığına göre, on ile çarparsak, 20 olur. Yani sol taraftaki 2 rakamı, "yirmi" sayısını ifade ediyor. Sağ tarafta ise 3 rakamı var. Burası birler basamağı olduğu için direkt olarak 3 sayısını ifade eder. Bu ikisini toplarsak yirmiüç olur. Üç basamaklı bir örnek verelim: 382 Bu sayıyı nasıl okuyacağız? Üç-sekiz-iki En sağdaki basamak bütün sayı sistemlerinde birler basamağıdır demiştik. Ortadaki bir öncekinin 10 katı olduğuna göre onlar basamağı, soldaki de bir öncekinin yani 10'un on katı, yani yüzler basamağı. Şimdi bu sayının kaç olduğunu bulalım: Yüzler basamağında 3 var. yani üçyüz (3 x 100). koyun kenara. Onlar basamağında ise 8 var. Bu da seksendir (8 x 10) Bunu da kenara koyun. Birler basamağında ise iki var. Şimdi bunları toplayalım: Üçyüz, seksen daha üçyüzseksen, iki daha üçyüzsekseniki. demek ki üç-sekiz-iki şeklinde yazılan sayı "üçyüzsekseniki" oluyormuş. Onlu sayı sistemini iyice anladınız mı Anlamadıysanız bir daha okuyun. Onluyu anlamadan buraya geçerseniz, zor öğrenirsiniz. Eğer yukarıdakini okuduysanız sizi burada bir sürpriz bekliyor. Çünkü şu "anlaşılmaz sır" olan onaltılı sayı sistemi onlu ile neredeyse aynı Heksadesimal - Hexadecimal (onaltılı) sistem, 0x00 şeklinde gösterdiğimiz sayı sistemidir. Onaltılı sistem denmesinin sebebi, 16 tane rakamının olmasıdır. Bu rakamlar 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E ve F dir. 0=sıfır, 1=bir, 2=iki, 3=üç, 4=dört, 5=beş, 6=altı, 7=yedi, 8=sekiz 9=dokuz A=on, B=onbir, C=onkiki, D=onüç, E=Ondört, F=Onbeş sayılarını gösterir. Eğer yazacağımız sayı 16'dan küçükse bunu tek bir rakam ile yazabiliriz. Ama yazacağımız sayı 16 veya daha büyükse, o zaman birden fazla rakam kullanmamız gerekir. O zaman rakamları yanyana yazarız. Önce iki rakamlı bir örnek verelim: 23 Burada başta 2 rakamı, sonra 3 rakamı vardır. Onaltılık sayı sisteminde her basamak bir öncekinin 16 katı değerdedir. Bütün sayı sistemlerinde en sağdaki basamak birler basamağıdır. Sonraki basamaklar ise daima bir öncesinin onaltı katı olur onaltılı sistem için. Yani onaltılar basamağı olur. Eğer bir üçüncü basamak olsaydı, bu da bir öncekinin (yani 16'nın) onaltı katı olacak, ikiyüzellialtılar basamağı olacaktır. Örnekte verdiğim sayıyı okurken katiyyen "yirmiüç" diye okumayın. iki-üç diye okuyun. Amerikalıların telefon numaralarını söyledikleri gibi. Şimdi bu sayının kaç olduğunu bulalım: Soldaki basamak onaltılar basamağı demiştik. Burada 2 yazdığına göre, onaltı ile çarparsak, otuziki olur. Yani sol taraftaki 2 rakamı, "otuziki" sayısını ifade ediyor. Sağ tarafta ise 3 rakamı var. Burası birler basamağı olduğu için direkt olarak 3 sayısını ifade eder. Bu ikisini toplarsak otuzbeş olur. Üç basamaklı bir örnek verelim: 382 Bu sayıyı nasıl okuyacağız? Üç-sekiz-iki En sağdaki basamak bütün sayı sistemlerinde birler basamağıdır demiştik. Ortadaki bir öncekinin 16 katı olduğuna göre onaltılar basamağı, soldaki de bir öncekinin yani 16'nın onaltı katı, yani ikiyüzellialtılar basamağı. Şimdi bu sayının kaç olduğunu bulalım: İkiyüzellialtılar basamağında 3 var. yani yediyüzaltmışsekiz (3 x 256). koyun kenara. Onaltılar basamağında ise 8 var. Bu da yüzyirmisekiz (8 x 16) Bunu da kenara koyun. Birler basamağında ise iki var. Şimdi bunları toplayalım: Yediyüzaltmışsekiz, yüzyirmisekiz daha sekizyüzdoksanaltı, iki daha sekizyüzdoksansekiz. demek ki üç-sekiz-iki şeklinde yazılan sayı "sekizyüzdoksansekiz" oluyormuş. Anlaşılmadıysa baştan okuyun. Gerekirse 10'lu sistemi bir daha okuyun. Binary (İkili) sistem, bilgisayarların asıl kullandığı sayı sistemidir. Biri onluk, diğer onaltılık iki sistem biliyorsunuz. Üçüncüsünü öğrenmek artık zor değil. Ancak 16lık sistemi tam anlamadıysanız buraya geçmeyin. Çünkü bu daha basit olduğu için iyice karıştırabilirsiniz. Espri yapmıyorum, gerçek. Gerçekten daha basit ve ötekini anlamadıysanız gerçekten kafanızı daha fazla karıştırır. İKİLİ sayı sistemi olduğuna göre iki tane rakam var demektir: 0 ve 1. Her basamak değeri onluk sistemde bir öncekinin on katı, onaltılık sistemde bir öncekinin 16 katı oluyordu. Bunda da doğal olarak biröncekinin iki katı olacak. Sayı yazarken sadece 0 ve 1 rakamları var. ne güzel Şimdi bir örnek yapalım: 101 Bir-sıfır-bir en sağdaki basamak birler basamağı. Burada 1 olduğuna görei "bir" i kenara koyun. Ortadaki basamak bir'in iki katı olan "ikiler basmağı". Burada sıfır var. sıfır kere iki sıfır olduğu için kenara koyacak bir şey yok. Soldaki basmak bir öncekinin (ikinin) iki katı olduğuna göre dörtler basamağıdır. Burada da "1" olduğuna göre, 1 x 4 = kenara dört koyalım. Hepsini toplayalım: 4+0+1=5 demek ki ikili sistemde bir-sıfır-bir diye yazılan sayı beş oluyormuş BYTE, BIT, HEX, BIN ve karşınızdaaaa NIBBLE Binary sayı sistemi, onaltılık sistemle çok güzel uyuşur. Onaltılık sistemdeki bir rakam, binary (ikili) sistemdeki 4 basamaklı bir sayı ile ifade edilebilir. Şöyle ki: 0=0000 8=1000 1=0001 9=1001 2=0010 A=1010 3=0011 B=1011 4=0100 C=1100 5=0101 D=1101 6=0110 E=1110 7=0111 F=1111 Belki de (belki değil, kesin) bilgisayarda onaltılı sayı sistemi kullanılmasının sebebi bu... Burada 4 basamaklı bir ikili sistem sayıdan oluşan ve bir onaltılı "rakam" ı (tek basamaklı sayı yani) ifade eden gruba, "nibble" denir. İki rakamlı bir HEX sayıya bir Byte denir. Yani bir Byte, 4+4 = 8 tane ikili rakamdan oluşan bir sayı ile ifade edilir. İkili sistemin rakamlarının özel bir adı daha vardır : BIT yani "en küçük parça" anlamında kullanılır. En basit şekli ile anlatmaya çalıştım. Yine de bir hata veya eksiklik ya da anlaşılmayan bir nokta varsa tartışma bölümüne yazabilirsiniz.
  5. şenol eker

    Tartışma

    Bu bölümdeki makalelerle ilgili tartışmalar bu başlık altında yapılacaktır. Makalelerde gördüğünüz hata veya eksiklikleri burada bildirirseniz, yöneticiler sizin isminizle gerekli düzeltmeyi yapacaktır.
  6. şenol eker

    İstekler

    Bu bölümde yer almasını istediğiniz konuları buradan yazabilirsiniz. Burada yer almayan bir konuda bir makale yazıp burada paylaşırsanız, yöneticiler makalenizi sizin adınızla müstakil bir başlık olarak ayrıcaktır.
  7. 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
  8. 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ı?
  9. nbanuu

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

    Msp430g2553 ile VL53L0X uzaklık sensorunu kullanmak istiyoruz fakat aktif olup olmadığını anlayamıyoruz,nerden anlayabiliriz?
  10. 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.
  11. Oyyzz22

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

    merhabalar,tof(time of flight) sensörünü nasıl aktif edebilirim?
  12. ceyda_20

    iki msp430 arasında bluetooth veri akışı

    tamam ben bunları deneyeyim ilginiz için teşekkürler :)
  13. 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.
  14. 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.
  15. zeynep_35

    ESP8266 ile buluta veri gönderme

    Hayır , serial kütüphanem yok ben kontrol edeceğim . Sadece uart için kütüphane eklemem gerekiyor. 9600 hızında iletişim kuracağım. Uart ile ilgili fazla bilgim yok biraz araştırdım sadece.Gerekli ayarları yaptım . Thingspeak te hesap açıp kanal oluşturdum . 2adet analog veri ölçümü yaptım. (sıcaklık ve mesafe ) Elimde verileri göndermek için kod yok . Bir de IAR da kodlar derlenmiyor uart.h ve uart.c kütüphaneleri sürekli errror veriyor.
  16. ceyda_20

    iki msp430 arasında bluetooth veri akışı

    evet hc 05 i msp ile bilgisayara bağladık tera term programında AT gönderdiğinde OK cevabı gelmiyor bir türlü bide ardiuno ile denedim ama cevap alamıyorum
  17. 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?
  18. ceyda_20

    iki msp430 arasında bluetooth veri akışı

    tera term de AT modunu nası aktif edebilirim deniyorum bütün herşeyi ama bir sonuca varamadım
  19. ceyda_20

    iki msp430 arasında bluetooth veri akışı

    sıcaklık kısmını çalıştırdım teşekkürler iki msp yi haberleştireceğim bluetooth ile uart için kütüphane yüklememe gerek var mı ? teşekkürler
  20. 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?
  21. 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?
  22. zeynep_35

    ESP8266 ile buluta veri gönderme

    esp8266 wifi modülü kullanarak msp430g2553 ile thingspeak e 2 adet analog veri (sıcaklık , mesafe bilgisi ) göndermek istiyorum . Modül uart protokolü ile haberleşiyor. Sıcaklık ölçümü ile ilgili kod elimde mevcut fakat modül uart kullandığı için bilgiyi nasıl aktaracağımı anlamadım. İnternette msp ile kod yok , hep arduino kodları var . Yardımcı olur musunuz ?
  23. ceyda_20

    iki msp430 arasında bluetooth veri akışı

    lm35 ile ölçütüğüm sıcaklığı bluetooth üzerinden diğer diğer msp ye atacağım.HC 05 modülü kullanıyorum iki adet .gönderdiğim veriyi bir ekran veya seven segment üzerinde göstereceğim.internetten araştırdım ama hep ardiuno ile yapılmış birde sıcaklık ölçümü için kodu çalıştıramadım bu konuda bana yardımcı olur musunuz ?
  24. Musa Acar

    arduino ile servo motor sürme.

    yardımlarınız için teşekkür ederim. sg 90 yapacağım iş için biraz güçsüz kaldı, şimdi mg 995 360 ° derece servo ile deneme yapacağım... #include <Servo.h> Servo sg90; int pos=0; int pozisyon=0; void setup() { sg90.attach(9); } void loop() { for(pos = 0; pos <= 180; pos ++) { sg90.write(pos); delay(30); } delay(3000); for(pos = 180; pos >= 0; pos --) { sg90.write(pos); delay(30); } delay(3000); }
  25. şenol eker

    arduino ile servo motor sürme.

    Doğrudan 180 ve sonra da sıfır yapmak yerine birer birer arttırarak araya da bekleme koyarak istediğin hızı ayarlayabilirsin örneğin. Şunun gibi bir şey deneyebilirsin: for(pos = 0; pos <= 180; pos ++){ sg90.write(pos); delay(30); } delay(3000) for(pos = 180; pos >= 0; pos --){ sg90.write(pos); delay(30); } Bunları loop() { içine yazmalısın. } Ben denemedim. Denedikten sonra sonucu bildirirsen sevinirim.
  26. Musa Acar

    arduino ile servo motor sürme.

    merhabalar. Arduino ile servo motor sürerken istediğim açılara servo motoru yönlendirip orada bir süre bekletebiliyorum. Ancak belirlediğim açılara servo motoru döndürürkenki hızını yavaşlatmam gerekiyor . if döngüsü içerisinde iken hızı yavaş oluyor ancak if döngüsü içerisinde de servoyu istediğim açıda bekletemiyorum. Kısacası aşağıda paylaştığım basit kod ile servoyu 0 ile 180 derece arası döndürüyorum ancak dönüşlerdeki hızı nasıl düşürürüm. #include <Servo.h> #include <Servo.h> Servo sg90; int pos = 0; int pozisyon=0; void setup() { sg90.attach(9); } void loop() { sg90.write(180); delay(3000); sg90.write(0); delay(3000); }
  1. Daha fazla aktivite göster
×

Ö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ı