Arduino
OKUDUĞUNUZ KONU
ARDUINO – TINKERCAD Proje Özelleştirme #1
0

ARDUINO – TINKERCAD Proje Özelleştirme #1

Yazar : Turgut Güneysu28 Ağustos 2018
Buton'la Servo motor kontrolü ve 180 derece pozisyon alarmı.

Merhaba,

Bizi bu dördüncü yazımıza kadar takip edenler şimdi artık emeklerinin meyvelerini tadacaklardır. Evvelden söz verdiğimiz gibi Tinkercad ortamındaki hazır devrelerden başlayarak, yapacağımız eklemeler ve kodlamalarla birinci özelleştirme projemizi yaratacağız.

Bundan evvelki yazılarımızı incelerken umarım ki BLINK, BUTTON, ve SERVO hazır devreleri ile oynamış ve değişik yerlerini kurcalayarak bir şeyler denemişsinizdir.

Burada bu üç devreden başlayarak önce onları bir proje altında birleştireceğiz. Sonra da yarattığımız yeni devremize bir piezzo hoparlör ekleyerek projemizi çalıştırma aşamasına getireceğiz. Önce bu üç temel devreyi ve bağlantılarını çabucak bir gözden geçirelim.

BLINK:

   

Bu devre çok basit olup, D13 pininine bağlı bir LED ve resistanstan oluşur. Siyah kablo LEDin katod ayağını GND (toprak) a bağlayarak devreyi tamamlar.

Kodunu incelediğimizde görürüz ki, LOOP() fonksiyonunda LED bir saniye ara ile yakılıp söndürülüyor. Her UNO anakartı üzerinde katıhal bir LED13 bulunduğundan, bu dışarıdan bağlanan LEDe aslında lüzum yok. Fakat programın çalışmasını daha kolay izlememize yardımcı oluyor.

BUTTON:

   

Button devresi de gayet basit olup, D2 pinine bağlı bir düğme ayağı, toprağa bağlı resistans ve 5V çıkışına bağlı kablodan oluşur. Düğmeye basıldığı sürece LED13 yanar ve düğme bırakılınca da LED13 söner.

Kodunu incelediğimizde görürüz ki, düğmenin durumu buttonState adlı bir değişkene D2 pinini okuyarak atanıyor. Düğmeye basıldığında bu değer HIGH (yüksek) ve bırakıldığında ise LOW (alçak) oluyor. Hemen arkasından bir IF ELSE (eğer ise) komutuyla bu değer kontrol ediliyor. buttonState değeri HIGH ise LED13 pini HIGH değerine ayarlanıyor. buttonState değeri LOW ise LED13 pini de LOW yapılıyor. Böylece LED yakılıp söndürülüyor.

SERVO:

   

Servo devresi D9 pininden sağlanan servo sinyali ile çalışan basit bir devredir. Siyah toprak ve kırmızı 5V bağlantıları devreyi tamamlar.

Kodunu incelediğimizde görürüz ki, servo motoru iki ayrı döngü ile 180 derece hareket sınırında bir ileri bir geri döndürülüyor. Birinci COUNT döndüsü servo POS (pozisyon) değişkenini 0 (sıfır) dan 180 dereceye birer derece aralıkla ayarlıyor ve her döngü işleminde servoyu pozisyon değişkenine döndürüyor.

İkinci COUNT döndüsü bu işin tam tersini yapıp, servoyu 180 derece pozisyonundan başlayıp 0 (sıfır) pozisyonuna kadar birer derece değiştirerek döndürüyor.

Her iki döngü içinde de servoya yeteri kadar dönme vakti sağlamak için ufak bir WAIT 15  (BEKLE) mili saniye komutu kullanılıyor.

Eğer şu ana kadar yapmadıysanız, bu devreleri teker teker yükleyip simülasyonu çalıştırın ve kodların ne yaptığını bir inceleyin.

ÖZELLEŞTİRME:

Burada yapacağımız ilk iş her üç devreyi de kapsayan yeni bir devre yaratmak. Arkasından projemize özel olan PIEZZO hoparlörü devremize ekleyeceğiz.  Bunları bitirdikten sonra gereken kod ayarlarını yaparak orijinal projelerin modül çalışmalarını kendi usulümüze göre ayarlayacağız.

1. Önce devreleri birleştirelim.

Tinkercad proje sayfasının sağ üstündeki Components menüsünden ALL (hepsi) seçerseniz bütün elemanların listesini görürsünüz. Bunları teker teker sayfanıza atın ve sonra aşağıda gösterildiği gibi bütün elemanları yerleştirin ve bağlantılarını tamamlayın. Kabloları bağladıktan sonra renklerini gösterildiği gibi ayarlayın. Resistans değerini 2kOHM olarak ayarlayın.

2. Bağlantılarımızı tamamlayalım.

  • Kablo bağlantıları yapılırken başlangıç noktasına tıklayın. Farenizi oynattığınızda kablonun fareyi takip ederek uzandığını göreceksiniz.
  • Bundan sonra her tıkladığınızda yön değiştirebilirsiniz. Kabloyu yaratırken bir yanlış yaptıysanız klavyeden ESC butonuna basarak iptal edip yeniden deneyebilirsiniz.
  • Son bağlantı noktasına ulaştığınızda fare imleçinin altındaki portun numarası gözükür olacaktır. Doğru numarayı seçin ve son tıklamayı yaparak bağlantınızı tamamlayın.
  • Her şey doğruysa kablo bağlantınızın seçilmiş olarak belirtildiğini göreceksiniz. Artık rengini istediğiniz gibi ayarlayabilirsiniz.
  • Kablo bağlantısı bittikten sonra bir yanlış olmuşsa, kabloya tıklayıp seçin ve hemen ya DEL (sil) klavye tuşuyla ya da sol üstteki ÇÖP KUTUSU ikonu kullanarak silin ve yeniden yapın.

Bitirince okumaya devam – kod yazmaya başlayacağız.

3. YAZILIM planlaması.

Kod yazmaya başlamadan önce projemizi nasıl özelleştirmek istediğimizi kısaca kayıtlayıp, ufak bir planlama yapalım:

  1. BLİNK devresinde LED13 bir döngü içinde birer saniye arayla yanıp sönüyordu.
    Projemizde biz LED13’ün yalnız SERVO motor dönerken yanmasını istiyoruz.
  2. BUTTON devresinde LED13 butona basıldığı sürece yanıyordu. Bırakınca sönüyordu.
    Projemizde biz BUTON’a basılınca SERVO motorun dönmesini, bırakınca motorun durmasını istiyoruz.
  3. SERVO motor 180 dereceye ulaştığında otomatikman 0 (sıfır) derece noktasına dönmesini istiyoruz.
  4. SERVO motorun çalışma alanı 180 derece olduğu için, 180 dereceye geldiğinde sesli bir alarm yapıp uyarı sağlamak istiyoruz. Bunu kodumuza PIEZZO hoparlör entegre ederek yapacağız.

4. KOD’lamaya başlıyoruz.

Değişkenlerimizi tanımlayalım:

BUTON’u kontrol için bir buton değişkeni lazım.

SERVO’nun pozisyonunu kontrol için bir servoPoz değişkeni lazım.

Bunları Variables (Değişkenler) blok menüsünden ‘Create variable…’ kullanarak tanımlayın.

TinkerCad’de bir değişken tanımladığımızda değeri otomatikman 0 (sıfır) olarak atanır.

 

 

 

 

 

SERVO’yu 0 (sıfır) derece pozisyonuna getirelim.
servoPoz değişkeni yukarıda tanımlandığında 0 değeri otomatikman atanmıştı. Simdi bunu kullanarak servomuzu başlangıç noktasına getiriyoruz. Hareketin tamamlanması için de ufak bir WAİT (Bekle) kullanıyoruz.

 

LED13’ü LOW (Alçak) değer kullanarak sönmüş duruma ayarlayalım.

Unutmayın ki LED13’ün bir başka adı ‘built-in LED’ yani anakarta entegre LEDdir.

 

Şimdi butonumuzun basılıp basılmadığını anlamak için bağlı olduğu D2 dijital pinini okuyup değerini buton değişkenimize atayalım.
Burada kodumuzun ne yaptığını belirtmek için bir COMMENT (Açıklama) bloku kullandık.
‘Read digital pin’ sistemin içinde olan bir pin okuma fonksiyonu. Bu kullanıldığı zaman ya HIGH (yüksek) ya da LOW (alçak) değerlerini döndürüyor. Bu bloku SET blokunun içindeki beyaz alana koyduğumuzda, döndürülen değer buton değişkenine atanmış oluyor.

 

Burada bu değeri inceleyip eğer HIGH (yüksek) ise, yani düğmeye basılmışsa, ne yapacağımızı tanımlayacağız.

Baya uzun bir kodama bloku. Resmini koyup satırlarını tr teker inceleyelim:

Önceki blokta olduğu gibi bir COMMENT (Açıklama) kullanarak ne yapmak istediğimizi belirtiyoruz.

Arkasından buton değişkenimizin değerini bir IF (eğer) blokunda kontrol ediyoruz.Bu karşılaştırmayı yapabilmek için MATH (Matematik) bloklarından bir karşılaştırma bloku kullanarak buton = HIGH deyimini yaratıp IF’in karşılaştırma alanına koyuyoruz. Eğer değer HIGH ise IF blokunun içindeki bütün komutlar / bloklar işlenecektir.

IF içinde, SERVOmuzun pozisyonunu değiştirmek için servoPoz değişkenine 1 ekliyoruz. Bunu CHANGE (Değiştir) bloku ile yapıyoruz.

SERVO 180 derece pozisyonuna ulaştığında PIEZZO’dan alarm vermek istediğimiz için, servoPoz değerini arttırdıktan sonra hemen 180 oldu mu diye kontrol etmemiz gerekiyor. Bunun için gene matematik bloklarından bir karşılaştırma deyimi yaratıp ikinci bir İF blokuna uygulamamız lazım.

servoPoz > 180 deyimi işi görüyor. Eğer değer 180 veya daha fazlaysa ikinci IF blokunun içindeki bütün komutlar / bloklar işlenecektir.

Bu IF içinde ilk yapmamız gereken servoPoz değişkenini sıfırlamaktır. Bunu SET bloku ile yapıyoruz.

Arkasından servomuzu bu değişkeni kullanarak ‘Rotate servo on pin’ (Servoyu döndür) bloku ile sıfır pozisyonuna getiriyoruz. Bu blokta yapmamız gereken ayarlar:

* servomuzun bağlı olduğu pini blok mini menüsünden seçmek
* değişkenimizi blokun boş beyaz alanına koymak.

Servomuz 180 dereceye eriştiğinde PIEZZO hoparlörümüzden bir alarm çaldırmak istediğimiz için bu uygulamayı da hemen burada yapmak doğrudur.

‘Play speaker on pin’ bloku ile piezzo’nun bağlı olduğu D7 pinini seçiyoruz. Ve 440Hz frekansta sesi 0.2 saniye çaldırıyoruz. Frekans değeri ve zaman ayarı tamamen isteğe bağlı.

Bu blok 180 derece IF blokunun içinde olan son komut. Bundan sonra IF blokunun dışına çıkılıyor ve önceki IF blokun dahilinde son olarak LED13 yakılıyor. Böylece düğmeye bastığımız zaman hem servo dönüyor hem de de LED13 yanmış oluyor.

 

5. Projenin Testi

Buraya kadar takip edip uyguladıysanız kodunuz hazır demektir. Denemek için ‘Start Simulation’ e basıp çalıştırmayı deneyin.

Her şey doğru ise, düğmeye bastığınızda servo dönmeye başlayacak, bırakınca duracaktır. Servo 180 derece döndüğünde de piezzo’dan bir alarm sesi çıkacaktır.

Eğer ilgilenirseniz, kodlama tipini ‘BLOCKS + Text’ seçerek ortamın otomatik olarak yazdığı Arduino C++ kodunu da inceleyebilirsiniz.

Aşağıdaki videodan projenin çalışmasını izleyebilirsiniz:

 

İyi çalışmalar.

 

 

SİZCE NASIL OLMUŞ?
Beğendim
100%
İlginç
0%
Eh İşte
0%
Anlamadım
0%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Turgut Güneysu
Turgut Güneysu
Anadolu'nun tam ortasında ufak bir köyden memleketimizin çocuklarına STEM programlarına uygun bilgisayar, robotik, yazılım, donanım, mikro işlemciler hakkında yardımcı olmaya çalışıp, emekli hayatımın zevkini çıkarıyorum. Gençlerimizin kabiliyetlerinin sonsuz olduğuna ve onları doğru yönlendirirsek değerli katkılarla ortamımızı dünya çapına ulaştıracaklarına inanıyorum.
YORUMLAR

YORUM YAP