İçindekiler:

Photoshop (Arduino) için Mini Kontrol Pedi: 6 Adım
Photoshop (Arduino) için Mini Kontrol Pedi: 6 Adım

Video: Photoshop (Arduino) için Mini Kontrol Pedi: 6 Adım

Video: Photoshop (Arduino) için Mini Kontrol Pedi: 6 Adım
Video: ASKERDE DÖVME NASIL YAPILIR? 2024, Temmuz
Anonim
Photoshop için Mini Kontrol Pedi (Arduino)
Photoshop için Mini Kontrol Pedi (Arduino)

İşte size Photoshop'ta daha hızlı çalışmanıza yardımcı olacak küçük bir araç yapmayı göstereceğim!

PS için özel olarak yapılmış klavyeler yeni değil, ancak tam olarak ihtiyacım olanı sunmuyorlar. Bir ressam olarak Photoshop'taki zamanımın çoğu fırça ayarını yapmakla geçiyor ve basit kısayol düğmelerinin bana iş akışıma uyacak kontrolü vermediğini düşünüyorum. Bu yüzden küçük, göze batmayan ve bana her zaman istediğim analog etkileşimi sağlayacak kadranlara sahip kendi klavyemi yapmaya karar verdim.

Çalışma şekli basittir: mikrodenetleyicinin Photoshop ile etkileşimini sağlamak için varsayılan kısayollardan yararlanırız. Bilgisayarın klavye/fare olarak okuyabildiği bir tahta ile tek yapmamız gereken, bilgisayara her girişi bir tuşa basma kombinasyonu olarak okumasını söylemek için bazı basit kod satırları kullanmaktır. Şimdi geri alma düğmesi sadece bir düğmeye basmak uzağınızda!

Başlayalım! Bu proje için ihtiyacınız olacak:

  • 1 Sparkfun ProMicro (veya Arduino Leonardo, önerilmez)
  • 1 mikro USB adaptörü
  • 6 buton (veya istediğiniz herhangi bir sayı)
  • 10k Ohm dirençler (her düğme için 1 adet)
  • 1 potansiyometre
  • 1 döner kodlayıcı
  • teller, breadboard, perfboard, lehim, başlık pimleri vb.

Bu proje için bir Arduino Leonardo kullanabilirsiniz, ancak ProMicro, aynı atmega32u4 yongasını kullanan, daha fazla pime sahip olan ve çok daha küçük bir biçimde gelen çok daha ucuz bir alternatiftir, bu da onu bir klavye için mükemmel kılar.

ProMicro'yu Arduino IDE'de programlamak için önce bazı şeyleri ayarlamanız gerekebilir. Bununla ilgili daha fazla bilgiyi SparkFun'un kılavuzunda okuyabilirsiniz:

Bilgisayarınız aygıtı bulmakta sorun yaşıyorsa, kullandığınız mikro USB'nin yalnızca güç kaynağı olmadığından ve veri aktarımını desteklediğinden emin olun.

Bu benim ilk Arduino projem ve yeni başlayanlar için uygun.

1. Adım: Kontrol Panelini Prototipleme

Kontrol Panelini Prototipleme
Kontrol Panelini Prototipleme

Lehimlemeye başlamadan önce programınızı bir breadboard üzerinde test etmenizi öneririm.

Burada şemamı görebilirsiniz.

Düğme 1 ve 2 Geri Al ve Yinele olacak, 3 ila 5 Fırça, Silgi ve Kement araçları içindir, düğme 6 hızlı bir Kaydet düğmesidir. Kodlayıcı ve potmetre sırasıyla Boyut ve Opaklığı kontrol eder.

Solak olduğumu ve düzeni benim için en rahat olacak şekilde tasarladığımı unutmayın. Breadboard'unuzu kullandığınız anı, denetleyicinizin hangi işlevlere sahip olmasını istediğinizi, sizin için en iyi olanı ve sonunda bunu yapmak için ek parçalara ihtiyacınız olup olmayacağını düşünmek için bir fırsat olarak görün.

2. Adım: Düğmeler

Düğmeler
Düğmeler

Düğmeler, uygulanması en basit olanlardır. Şimdi koda bir göz atalım:

#Dahil etmek

const int düğmeler = {2, 3, 4, 5, 6, 7, 8, 9}; // tüm düğme pinlerinin dizisi char ctrlKey = KEY_LEFT_GUI; // Windows ve Linux için bu seçeneği kullanın: //char ctrlKey = KEY_LEFT_CTRL; karakter shiftKey = KEY_LEFT_SHIFT; karakter altKey = KEY_LEFT_ALT; void setup() { // bir kez çalıştırmak için kurulum kodunuzu buraya koyun: Serial.begin(9600); klavye.başla(); //Buttons -- dizide dolaşın ve presleri kontrol edin for(int i = button[0]; i < (sizeof(buttons)/sizeof(buttons[0]))+buttons[0]; ++i) { pinMode(i, GİRİŞ); } } boolean readButton(int pin) { // (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == YÜKSEK) { return true; } } false döndür; } void doAction(int pin) { // görevleri gerçekleştir geçiş (pin) { // ----Kısayollar---- // Durum 4'ü geri al: Keyboard.press(ctrlKey); klavye.print('z'); Seri.print ("giriş"); Seri.println(pin); gecikme(200); Keyboard.releaseAll(); kırmak; // Durum 5'i yeniden yap: Keyboard.press(ctrlKey); klavye.print('y'); Seri.print ("giriş"); Seri.println(pin); gecikme(200); Keyboard.releaseAll(); kırmak; //Fırça durumu 6: Keyboard.press('b'); Seri.print ("giriş"); Seri.println(pin); gecikme(200); Keyboard.releaseAll(); kırmak; // Silgi durumu 7: Keyboard.press('e'); Seri.print ("giriş"); Seri.println(pin); gecikme(200); Keyboard.releaseAll(); kırmak; //Kement durumu 8: Keyboard.press('l'); Seri.print ("giriş"); Seri.println(pin); gecikme(200); Keyboard.releaseAll(); kırmak; // Örnek 9'u kaydet: Keyboard.press(ctrlKey); klavye.print('s'); Seri.print ("giriş"); Seri.println(pin); gecikme(200); Keyboard.releaseAll(); kırmak; varsayılan: Keyboard.releaseAll(); kırmak; } }

boşluk döngüsü () {

// tekrar tekrar çalıştırmak için ana kodunuzu buraya koyun:

for(int i = düğmeler[0]; i < sizeof(düğmeler)/sizeof(düğmeler[0])+düğmeler[0]; ++i) { if (readButton(i)) { doAction(i); } } //Değiştiricileri sıfırla Keyboard.releaseAll();

}

Oldukça basitler. Bilgisayarın bir düğmeye basıldığını tuş basımı olarak tanımasını sağlamak için Keyboard.press() işlevini kullanmamız yeterlidir. Bu nedenle, Geri Al kısayolunu (ctrl+z) etkinleştirmek için, sadece Keyboard.press(ctrlKey) ve ardından Keyboard.press('z') kullanıyoruz. Bu işlevlere erişmek için Keyboard.h'yi eklemeniz ve klavyeyi başlatmanız gerekeceğini unutmayın.

Giriş pinleri bir dizide saklanır, böylece loop() işlevinde bunların tümü arasında kolayca dolaşabilirsiniz. Tüm dizinin boyutunu dizi öğesi artı bir öğe ile bölerek, c++ dilinde dizinin uzunluğuna erişmenin kolay bir yolu. Birine basılıp basılmadığını kontrol etmek için tüm düğmeler arasında dolaşıyoruz.

İşleri düzenli tutmak için, pin numarasını argüman olarak alan bir fonksiyonun switch deyiminde düğmemin tüm eylemlerini kaydettim.

Düğmelerinizin farklı şeyler yapmasını istiyorsanız veya daha fazla düğme eklemek istiyorsanız, doAction işlevinin içeriğini düzenlemeniz yeterlidir!

Fiziksel düğmelerin çalışma şekli nedeniyle, onları geri döndürmemiz gerekecek. Bu, programın butonların yaylılığından kaynaklanan istenmeyen baskıları okumasını önlemek içindir. Bunu yapmanın birçok yolu var, ancak bununla ilgilenen basit bir readButton() işlevi ekledim.

Sadece düğmelerinizi 10k dirençle bağlayın ve altın olmalısınız!

Adım 3: Potansiyometre

Potansiyometre
Potansiyometre

Şimdi potmetreye geçelim:

#Dahil etmek

int arama0 = 0; void setup() { // bir kez çalıştırmak için kurulum kodunuzu buraya koyun: Serial.begin(9600); klavye.başla(); //Arayanlar dial0= analogRead(0); çevir0= harita(çevir0, 0, 1023, 1, 20); } void dialAction(int arama, int yeniDeğer, int sonDeğer) { geçiş (arama) { //Opaklık durumu 0: gecikme(200); if (newVal!=lastVal) { int decim = ((newVal*5)/10); int birim = ((yeniDeğer *5)% 10); if (newVal==20) { Keyboard.write(48+0); Klavye.write(48+0); Serial.println("maksimum arama 1"); } başka { ondalık=kısıtlama(ondalık, 0, 9); birim=kısıtlama(birim, 0, 9); Serial.println(yeniVal*2); Keyboard.write(48+decim); Keyboard.write(48+birim); } } dial0=yeniVal; kırmak; varsayılan: ara; } } //------------------ANA DÖNGÜ ------------------------ geçersiz loop() { // tekrar tekrar çalıştırmak için ana kodunuzu buraya koyun: //Opacity //delay(500); int val0 = analogRead(0); değer0 = harita(değer0, 0, 1023, 1, 20); //Serial.print ("dial0: "); //Serial.println(val0); if (val0!=dial0) { //Bir şeyler yap dialAction(0, val0, dial0); } }

Potmetre aynı mantığı takip eder, ancak bu biraz daha aldatıcıdır.

Önce nasıl çalışmasını istediğimize bakalım: Photoshop'ta bir fırçanın opaklığını değiştirmek için bazı kullanışlı kısayollar var. Herhangi bir sayı tuşuna basarsanız, opaklık o sayıya*10 eşit olacaktır. Ancak iki sayıya basarsanız, ikinci sayıyı bir birim olarak okuyarak size daha hassas kontrol sağlar.

Bu yüzden potmetremizin rotasyonunu bir yüzdeyle eşleştirmesini istiyoruz, ancak bunu her zaman yapmak istemiyoruz çünkü bu aptalca olurdu. Opaklığı yalnızca potmetre döndürülürken değiştirmek istiyoruz. Bu yüzden analogRead() değeriyle karşılaştırdığımız ek bir değer depolarız ve yalnızca bir fark olduğunda eylem komut dosyasını çalıştırırız.

Karşılaşacağımız bir diğer konu da analogRead'in dönüş int'sini girdi olarak nasıl çevireceğimizdir. Bir int'yi dizgeye çevirmenin kolay bir yolu olmadığından, int'nin kendisini kullanmamız gerekecek. Ancak, sadece Keyboard.press(int) yazarsanız, girişin istediğiniz gibi olmayacağını ve bunun yerine başka bir tuşa basılacağını fark edeceksiniz.

Bunun nedeni, klavyenizin tuşlarının hepsinin tamsayı olarak kodlanmış olmasıdır, her tuşun kendi indeksi vardır. Num tuşunu doğru kullanmak için ASCII tablosunda dizinlerini aramanız gerekir:

Gördüğünüz gibi sayı tuşları indeks 48'den başlıyor. Yani doğru tuşa basmak için tek yapmamız gereken kadranın değerini 48'e eklemek. Ondalık ve birim değerleri ayrı basışlardır.

Son olarak, değerin ileri geri sıçramasını önleyecek bir yola ihtiyacımız var. Çünkü kadranı map(val0, 0, 1023, 0, 100) ile kullanmayı denerseniz, sonuçların çok gergin olduğunu göreceksiniz. Düğmeleri nasıl etkisiz hale getirdiğimize benzer şekilde, doğruluğun bir kısmından ödün vererek bunu düzelteceğiz. Bunu 1-20 ile eşlemenin ve ardından argümanların değerini 5 ile çarpmanın kabul edilebilir bir uzlaşma olduğunu buldum.

Potansiyometreyi bağlamak için 5V'luk bir kablo, bir topraklama kablosu ve bir analog giriş kablosu bağlamanız yeterlidir; herhangi bir sorun olmamalıdır.

Eğlenceli gerçek: Kement gibi bir araç seçiliyken bu kısayolu kullanırsanız, bunun yerine Katmanın opaklığını değiştirir. Dikkate alınması gereken bir şey.

Adım 4: Döner Kodlayıcı

Döner Kodlayıcı
Döner Kodlayıcı

Döner kodlayıcılar biraz potansiyometre gibidir, ancak ne kadar dönebileceklerinin bir sınırı yoktur. Analog bir değer yerine, enkoderin dönüş yönüne dijital olarak bakacağız. Bunların nasıl çalıştığına dair fazla ayrıntıya girmeyeceğim, ancak bilmeniz gereken şey, hangi yöne döndüğünü söylemek için arduino üzerinde iki giriş pini kullanmasıdır. Döner kodlayıcı ile çalışmak daha zor olabilir, farklı kodlayıcılar farklı kurulumlar gerektirebilir. İşleri kolaylaştırmak için, dişi pimlerle takılmaya hazır olan PCB'li bir tane aldım. Şimdi, kod:

#Dahil etmek

//Döner kodlayıcı #define outputA 15 #define outputB 14 int sayaç = 0; int aState; int aLastState; void setup() { // bir kez çalıştırmak için kurulum kodunuzu buraya koyun: //Rotary pinMode (outputA, INPUT); pinMode (çıkışB, GİRİŞ); // ÇıkışA'nın ilk durumunu okur aLastState = digitalRead(outputA); } void rotaryAction(int dir) { if (dir>0) { Keyboard.press(']'); } else { Keyboard.press('['); } Keyboard.releaseAll(); } //-------------------------------- ANA DÖNGÜ------------------------- geçersiz döngü () { // tekrar tekrar çalıştırmak için ana kodunuzu buraya yazın: //Size aState = digitalRead(outputA); if (aState != aLastState){ if (digitalRead(outputB) != aState) { //counter ++; dönerAksiyon(1); } başka { //sayaç --; dönerAksiyon(-1); } //Serial.print("Konum: "); //Serial.println(sayaç); } aLastState = aState; }

Varsayılan olarak, Photoshop'un] ve [kısayolları fırça boyutunu artırır ve azaltır. Daha önce olduğu gibi, bunları tuşa basma olarak girmek istiyoruz. Kodlayıcı, dönüş başına bir dizi girdi gönderir (bu, modele bağlıdır) ve bu girdilerin her biri için fırça boyutunu artırmak/azaltmak istiyoruz, böylece kadranı gerçekten hızlı bir şekilde yukarı veya aşağı çevirebilirsiniz, ancak aynı zamanda büyük bir hassasiyetle yavaşça kontrol edin.

Tıpkı potmetrede olduğu gibi, eylemi yalnızca kadran çevrildiğinde çalıştırmak istiyoruz. Potmetreden farklı olarak, daha önce açıkladığım gibi, döner kodlayıcının iki alternatif girişi vardır. Kadranın çevrildiği yönü belirlemek için bunlardan hangisinin değiştiğine bakıyoruz.

Ardından yöne göre doğru tuşa basıyoruz.

İletişim sorunlarınız olmadığı sürece çalışması gerekir.

Adım 5: Hepsini Bir Araya Getirmek

Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy
Hepsini bir araya koy

Şimdi lehimleme üzerine. İlk olarak, iki kadranı sığdırmak için perfboard'a iki delik açıyoruz. düğmeleri ve ilgili dirençleri lehimliyoruz. Altta yer kazanmak için giriş kablolarının üstten geçmesine izin vermek için iki ekstra küçük delik açtım, ancak bu gerekli değil. Çok fazla giriş kablosu yoktur, bu nedenle GND ve 5V kabloları paralel çalışır, ancak kendinizi kurnaz hissediyorsanız bir matris yapmak isteyebilirsiniz. Mikrodenetleyiciyi, kodlayıcının ve potmetrenin altına sığan daha küçük başka bir perfboard'a lehimledim. Şimdi tüm kabloları ProMicro'ya lehimliyorum. Yaratıcı olmaya gerek yok, sadece devre tahtasındaki ile aynı şemayı takip etmem gerekti, ancak bu kadar küçük bir yerde lehimleme yapmak anlaşılır bir şekilde sıkıcı olabilir. Benim gibi olmayın, bir tel striptizci ve iyi bir lehim kullanın!

Son olarak, yeni Photoshop arkadaşınız için güzel bir vaka hazırlamak isteyebilirsiniz. En azından benimkinden daha iyi!

Ancak denemeye hevesliyseniz, biraz karton ve bant kullanın ve mikro USB'nizi takın.

Adım 6: Kod + Gösteri

Image
Image

Sürprizlerden kaçınmak için projede ilerlerken kontrol panelinin programını test ettiğinizden emin olun!

İşte kodun tamamı:

Okuduğunuz için çok teşekkür ederim!

Önerilen: