Useless Machine (Yararsız Makine)
Giriş
Bu projede, klasik "useless machine" (yararsız makine) konseptini Arduino ile hayata geçireceğiz. Kullanıcı bir potansiyometreyi hareket ettirdiğinde, makine servo motor kullanarak potansiyometreyi geri iterek kendi haline dönmesini sağlıyor. Tabi bunu her seferinde cok mekanik olarak yapsa çok da eğlenceli olmaz. Bu yüzden bu basit konsepti biraz daha ileri götürüp, makineye LCD ekrana çizdiği bir yüz ve mesajlar olan bir "ruh hali sistemi" ve biraz da rastlantısallık ekledik. Böylece makine her seferinde aynı hızda ve aynı şekilde cevap vermediği için biraz daha kişilik sahibi gibi gözüküyor.
Bu projede öğrenecekleriniz:
- Hassas servo motor kalibrasyonu - Servo'nun tam doğru açıya gelmesi için
- Çoklu sensör füzyonu - Birden fazla sensörün birlikte karar vermesi
- 3D baskı entegrasyonu - Mekanik tasarımla elektronik birleştirme
Önceki Bilgiler
Bu projede daha önce öğrendiğimiz birçok kavramı kullanacağız:
- Servo motorlar: Proje 07 - Araba Simülasyonu'nda öğrenmiştik
- Potansiyometre: Proje 04 - Potansiyometre'de öğrenmiştik
- LCD ekran: Proje 08 - LCD Demo'da öğrenmiştik
- PIR sensörü: Proje 12 - Alarm Sistemi'nde öğrenmiştik
- Ultrasonik sensör: Proje 06 - Teremin'de öğrenmiştik
- Hysteresis: Proje 09 - Termostat'ta öğrenmiştik
- Durum makineleri: Proje 08 - LCD Demo'da öğrenmiştik
Gelişmiş Proje
Bu proje, 3D yazıcıyla basılması gereken bir parça içerdiği için "Gelişmiş Projeler" kategorisindedir. Servo motor adaptörünü (servo horn adapter) 3D yazıcıyla üretmeniz gerekiyor. Bunun dışında tüm elektronik parçalar kitin içinde bulunmaktadır.
Gerekli Malzemeler
Bu projede Arduino01 kiti dışında şunlara ihtiyacın olacak:
- 3D basılmış servo kol adaptörü (STL dosyasını indir)
- Yıldız tornavida (küçük uçlu - servo vidaları için)
Montaj ve Kalibrasyon
Video Anlatım
Servo Adaptör Montajı
Bu projenin en önemli kısmı kitte bulunan servo motorun, potansiyometreyi itebilmesini sağlamak. Bunun için özel bir servo kol adaptörü kullanıyoruz.
1. 3D Baskı:
servo_horn_adapter.STL dosyasını indirip 3D yazıcıyla basın:
- Baskı süresi: ~5-10 dakika
- Malzeme kullanımı: ~1 gram
- Herhangi bir standart 3D yazıcıda basılabilir
2. Servo Kolunu Hazırlama:
Kitin içinde gelen servo kol paketinde iki farklı kol vardır. Biz ikili kolu (iki tarafı olan) kullanacağız.

- 2 adet küçük vida bulun (pakette gelir)
- 3D basılmış adaptörü servo kolunun üzerine yerleştirin
- Servo kolunun yuvarlak kısmı dışarı bakacak şekilde konumlandırın
- Vidaları yıldız tornavida ile sıkın (çok küçük uçlu bir yıldız tornavida veya saatçi tornavidası kullanın)
3. Servo Motor Kalibrasyonu:
Servo motorun limitini doğru ayarlamak çok önemli. Eğer potansiyometrenin limitinden fazla itmeye çalışırsa servo motorun dişlileri zorlanır ve zarar görebilir.
Önemli Uyarı
Servo motor kolunu asla elinizle zorla çevirmeyin! İçindeki plastik dişliler zarar görebilir. Özellikle güç varken servoya kesinlikle dokunmayın.
Kalibrasyon Adımları:
- Orijinal kolu çıkarın:
- Arduino'ya USB ile güç vermeyin (güç kesik olmalı)
- Vidayı çıkarırken servo kolunu tutun (servoya zarar vermemek için)
- Servo motorun üzerindeki vidayı yıldız tornavida ile çıkarın
-
Kolu yukarı doğru hafifçe çekerek çıkarın
-
Servo Reset kodunu yükleyin:
- Arduino'yu USB ile bağlayın
- Aşağıdaki
servo_reset.inokodunu Arduino IDE'de açın - Kodu Arduino'ya yükleyin
-
Yükleme tamamlandığında servodan küçük bir hareket sesi gelecek ve LED yanıp sönmeye başlayacak
-
Potansiyometreyi ayarlayın:
-
Potansiyometreyi en sağ pozisyona getirins
-
Servo kolunu takın:
- USB'den gücü kesin (kabloyu çekin)
- Hazırladığınız servo adaptörlü kolu servonun üzerine getirin
- Potansiyometreye temas ETMEYEN ama en yakın pozisyonu bulun
- Servo kolunun üzerindeki tırtıklar sayesinde birkaç derecelik hassasiyetle ayar yapabilirsiniz
-
Kol ile potansiyometre arasında ~1mm boşluk olmalı
-
Açıyı ince ayar yapın:
- Kolu taktığınız pozisyonda servo kolunu vidayla sabitleyin
servo_reset.inodosyasını tekrar açınservoMaxdeğerini 1'er 1'er artırın (örnek: 160 → 161 → 162...)- Her değişiklikten sonra kodu tekrar yükleyin
- Servo kol her yüklemede biraz daha potansiyometreye yaklaşacak
- Tam değdiği anı bulana kadar devam edin (genellikle 165-166 derece civarı)
| servo_reset.ino - Örnek kalibrasyon | |
|---|---|
1 2 3 4 5 6 7 | |
- Değeri kaydedin:
- Bulduğunuz
servoMaksdeğerini bir yere not edin (örnek: 166) - Bu değeri ana kodda kullanacağız
Devre Bağlantısı
Bu projede kitin hemen hemen tüm sensörlerini kullanıyoruz! Pin bağlantıları şöyle:
| Komponent | Arduino Pini | Nereden Öğrendik |
|---|---|---|
| Servo motor | Pin 9 | Proje 07 |
| Potansiyometre | A0 | Proje 04 |
| PIR sensörü | A2 | Proje 12 |
| Ultrasonik Echo | Pin 5 | Proje 06 |
| Ultrasonik Trigger | Pin 6 | Proje 06 |
| LCD ekran | I2C (SDA/SCL) | Proje 08 |
| LED | Pin 10 | Kalibrasyon için |
Kodun Açıklaması
Bu projede iki ayrı kod kullanıyoruz:
- servo_reset.ino: Servo kalibrasyonu için yardımcı kod
- useless_machine.ino: Ana proje kodu
Servo Reset Kodu
Bu kod servo kalibrasyonu için kullanılır. Servo motorların nasıl çalıştığını Proje 07'de öğrenmiştik. Burada servonun hassas kalibrasyonu için özel bir yardımcı kod kullanıyoruz.
| servo_reset.ino | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Kod çok basit: servoMaks değişkenini 1'er 1'er artırarak servo kolunun potansiyometreye tam değdiği açıyı bulacağız.
Ana Proje Kodu
Ana kodumuz servo kontrolü, sensör okumları ve ruh hali sistemi gibi birçok fonksiyonu içeriyor.
| useless_machine.ino | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | |
Kod Detayları:
Ruh Hali Sistemi (State Machine)
Proje 08'de öğrendiğimiz durum makinesi konseptini kullanarak makineye bir "ruh hali" ekledik. Makine üç farklı durumda olabilir:
- -1 (Reset): İlk başlangıç durumu
- 0 (Mutlu): Potansiyometre yukarıda, servo geri çekilmiş, LCD'de
:)var - 1 (Sinirli): Potansiyometre aşağıda, servo potansiyometreye doğru ilerliyor, LCD'de
>:(var
Her durum değişiminde LCD'deki emoji ve mesajlar da güncelleniyor.
Hysteresis ile Kararlı Okuma
Proje 09 - Termostat'ta öğrendiğimiz hysteresis kavramını burada da kullanıyoruz. Potansiyometre değerinin tam eşik noktasında (950) dalgalanması durumunda makine sürekli mod değiştirmesin diye:
< 930olunca → Sinirli> 970olunca → Mutlu930-970arası → Değişiklik yok (ölü bölge)
Bu sayede küçük dalgalanmalar durum değişimine sebep olmaz. Detaylı açıklama için Proje 09'a bakabilirsin.
Çoklu Sensör Füzyonu
Bu projenin en ilginç kısmı: Servo hareket kararını tek bir sensör değil, üç farklı sensör birlikte veriyor:
- PIR Sensörü (Proje 12): Kullanıcı hareket ediyorsa servo geri kaçsın
- Mesafe Sensörü (Proje 06): 25cm'den yakın engel varsa çarpma olmasın
- Zaman Kontrolü: Mod değişiminden en az 1 saniye sonra hareket et (daha doğal davranış)
Üç koşul birden sağlanırsa servo ilerler, yoksa geri çekilir. Buna "sensör füzyonu" deniyor - birden fazla sensörün verilerini birleştirerek daha akıllı kararlar vermek.
Programı Yükleme
Yükleme Sırası:
- İlk önce
servo_reset.inoile kalibrasyonu yapın - Bulduğunuz açı değerini
useless_machine.inodosyasının 23. satırına yazın useless_machine.inodosyasını yükleyin- LCD ekranda
:)görmelisiniz - makine mutlu!
Çalışma Mantığı
Proje çalışmaya başladığında:
- Başlangıç: Servo geri çekilmiş durumda (servoMin açısında), LCD'de gülen yüz var
- Potansiyometreyi çevirin: Kullanıcı potansiyometreyi aşağı iterse (analog okuma < 930)
- Makine sinirlenir: LCD'de kızgın yüz ve rastgele bir mesaj belirir
- Servo ilerler: Eğer sensörler hareket algılamazsa, servo potansiyometreye doğru ilerler
- Kullanıcı hareket ederse: PIR sensörü hareketi algılar, servo geri çekilir
- Potansiyometre geri döner: Servo potansiyometreyi iterek geri döndürür
- Makine mutlu olur: Potansiyometre eşiğin üstüne çıkınca (> 970), makine tekrar mutlu olur
Sorun Giderme
Geliştirme Fikirleri
Projeyi daha da ileri götürmek isterseniz:
- Daha fazla ruh hali ekleyin (örnek: "uykulu", "şaşkın")
- Servo hareketine easing (yavaşlama/hızlanma) ekleyin
- Piezo buzzer ile sesli geri bildirim ekleyin
- Farklı servo hız kalıpları oluşturun (hızlı-yavaş-hızlı gibi)
Özet
Bu proje, hem yazılım hem donanım hem de mekanik tasarımın bir araya geldiği eğlenceli (ve yararsız) bir örnek. Elinize sağlık!