সুচিপত্র:
ভিডিও: হ্যান্ডহেল্ড শর্টকাট কন্ট্রোলার (ফটোশপ + আরও জন্য) [Arduino]: 4 টি ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:01
শেষবার আমি ফটোশপে ব্যবহার করার জন্য একটি ছোট নিয়ন্ত্রণ প্যাড তৈরি করেছি। এটি বিস্ময়কর কাজ করেছে, এবং আমি এখনও এটি ব্যবহার করি! কিন্তু এটি বরং সীমিত, মাত্র পাঁচটি বোতাম এবং দরকারী আকার এবং অস্বচ্ছতা ডায়াল সহ। আমি এখনও নিজেকে কীবোর্ডের কাছে অনেকটা পৌঁছাতে দেখেছি …
তাই আমি কন্ট্রোল প্যাডের পরবর্তী পুনরাবৃত্তির উপর কাজ শুরু করেছি, যার মধ্যে আরও অনেক বোতাম এবং কার্যকারিতা রয়েছে। তাদের সবাইকে শাসন করার জন্য একটি নিয়ন্ত্রণ প্যাড।
এটি সেই কন্ট্রোল প্যাড নয়। কিন্তু একটি উপায়ে এটি আরও ভাল হতে পারে।
আপনার যদি এক টন শর্টকাট থাকতে পারে, তবে একটি দুর্দান্ত স্নিগ্ধ এবং লাইটওয়েট প্যাকেজে আপনি আপনার মুক্ত হাতে ধরে রাখতে পারেন যখন আপনি বিরামহীনভাবে আঁকবেন? … ঠিক আছে, ইনফোমার্শিয়ালের জন্য যথেষ্ট।
এই নিয়ামকটি এমনভাবে প্রোগ্রাম করা হয়েছে যে, মাত্র 4 টি বোতাম দিয়ে এটি 32 টি সম্ভাব্য শর্টকাট পর্যন্ত ম্যাপ করা যায়! অতিরিক্ত পঞ্চম বোতামটি আমাকে যেকোনো সংমিশ্রণে সংশোধনকারী কী ব্যবহার করার অনুমতি দেওয়ার জন্য রয়েছে, যা অনেক প্রোগ্রামের জন্য দরকারী (আপনি কি কখনও পিএস-এ Alt-RMB কম্বো চেষ্টা করেছেন? যদি আপনি না করেন, দয়া করে করুন। এটি একটি জীবন রক্ষাকারী)। আমি পরে সিস্টেম ব্যাখ্যা।
এই সব করতে আপনার প্রয়োজন হবে:
- মাইক্রোকন্ট্রোলার
- 1 মাইক্রো-ইউএসবি অ্যাডাপ্টার (শুধুমাত্র পাওয়ার নয়)
- 5 টি ধাক্কা বোতাম (আমি নরমগুলি ব্যবহার করেছি, এর মতো)
- 10k ওহম প্রতিরোধক (প্রতি বোতাম 1)
- তার, রুটিবোর্ড, ঝাল উপাদান, ইত্যাদি
- (থ্রিডি প্রিন্টার ইত্যাদি) দিয়ে কেসিং করার কিছু
এটি একটি মধ্যবর্তী স্তরের আরডুইনো প্রজেক্ট, এবং আমি আমার অতীতের টিউটোরিয়ালটি ভালভাবে বোঝার জন্য পরামর্শ দিচ্ছি কি হচ্ছে, কারণ এর বেশিরভাগই আমি সেখানে ব্যাখ্যা করা জিনিসগুলির পুনরাবৃত্তি।
ঠিক আছে, শুরু করা যাক!
ধাপ 1: পরিকল্পনা
এটি একটি মৌলিক পরিকল্পিত যা আমি নিয়ন্ত্রকের আঁকা। সার্কিটটি সত্যিই সহজ যখন আপনি এটিকে আমার আগের প্রকল্পের সাথে তুলনা করেন! কিন্তু আমরা এটির কয়েকটি বোতামের সাহায্যে আরো অনেক কিছু করতে সক্ষম হব, সম্মিলিত প্রেসের শক্তি দিয়ে!
কন্ট্রোল স্কিমের পিছনে ধারণাটি হল যে প্রতিটি বোতাম মুক্ত, চাপা এবং ছেড়ে দেওয়া যেতে পারে, অথবা চাপা এবং ধরে রাখা যেতে পারে। চাপ দেওয়া এবং ছেড়ে দেওয়া আসলে কি শর্টকাট সক্রিয় করবে, যখন বোতামগুলি ধরে রাখা আমাদের বিভিন্ন শর্টকাটগুলিতে অ্যাক্সেস দেবে। সুতরাং যদি আপনি শুধু A বোতাম টিপেন, আপনি A শর্টকাট সক্রিয় করবেন, কিন্তু A চাপার সময় যদি আপনি B টি ধরে রাখেন, তাহলে আপনি একটি ভিন্ন শর্টকাট পাবেন। চাপার সময় আপনি একবারে 3 টি পর্যন্ত বোতাম ধরে রাখতে পারেন, তাই যখন আপনি কিছু মৌলিক কম্বিনেটরিক্স প্রয়োগ করবেন, তখন আপনি দেখতে পাবেন যে এই সিস্টেমের সাথে কতগুলি সংমিশ্রণ সম্ভব!
অতিরিক্ত পঞ্চম বোতামটি একটি প্রাকৃতিক সংযোজনের মতো মনে হয়েছিল, আমি যে হ্যান্ডহেল্ডের আকার নিয়ে এসেছিলাম তা দিয়ে। আমি ফটোশপে সংশোধক কীগুলি অ্যাক্সেস করার জন্য এটি ব্যবহার করার সিদ্ধান্ত নিয়েছি। এটি যেভাবে কাজ করে তা অন্যান্য বোতামগুলির থেকে কিছুটা আলাদা: যখনই থাম্ব বোতামটি রাখা হয়, কেবলমাত্র সংশোধনকারী ব্যবহার করা হবে। এগুলিকে ধরে রাখা হলে এটি সক্রিয় হবে এবং একাধিক চাপানো যাবে। সুতরাং যদি বোতাম A শিফট হয়, এবং বোতাম B Ctrl হয়, যখন আপনি A এবং B চেপে রাখবেন এটি শিফট এবং Ctrl উভয়ই টিপে দেওয়ার মতো হবে, তবে যতক্ষণ না থাম্ব বোতামটি ধরে থাকে ততক্ষণ!
শেলটি এর্গোনোমিক এবং অ্যাম্বিডেক্সট্রাস উভয়ই ডিজাইন করা হয়েছে। আমি খুব যত্ন নিয়েছিলাম যাতে এটিকে সুন্দরভাবে ফিট করে তুলতে পারি যাতে ছোট আঙুল ব্যবহার করা খুব ক্লান্তিকর না হয় এবং এটি আমার চেয়ে বড় হাতের জন্যও কাজ করা উচিত।
ধাপ 2: প্রোটোটাইপ + কোড
রুটিবোর্ডে বোতামগুলি পরীক্ষা করা ভাল অভ্যাস। এটি বেশ সহজ, দেখানো হিসাবে কেবল বোতাম এবং প্রতিরোধক সংযুক্ত করুন। আপনি এখানে কোড দিয়ে এটি পরীক্ষা করতে পারেন (পেস্টবিন লিঙ্ক বিকল্প):
#অন্তর্ভুক্ত
// MacOS এর জন্য vthisv বিকল্প ব্যবহার করুন:
// char ctrlKey = KEY_LEFT_GUI;
// উইন্ডোজ এবং লিনাক্সের জন্য vthisv বিকল্প ব্যবহার করুন:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// এখানে ফাংশন কী
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int pins = {9, 10, 11, 12, 13}; // সমস্ত বোতাম পিনের অ্যারে
// সংবেদনশীলতা
const int THRESH_0 = 10; const int THRESH_1 = 20; const int THRESH_2 = 25; const int THRESH_3 = 50; const int THRESH_4 = 100; const int THRESH_5 = 200;
const int BUTTON_NUM = 5;
// ফ্রেম ফ্রিজ
const int DELAY = 0;
enum States {মুক্ত, চাপা, অনুষ্ঠিত, মুক্তি};
স্ট্রাক্ট বোতাম {
int পিন; রাজ্য রাজ্য; int timeHeld; }; // থাম্ব, ইনডেক্স, মিড, রিং, লিটল;
বোতাম বোতাম [BUTTON_NUM] = {};
বাটন initButton (int p) {
বোতাম খ; পিনমোড (পি, ইনপুট); b.pin = p; b.state = States:: মুক্ত; b.timeHeld = 0; ফেরত খ; }
অকার্যকর সেটআপ() {
// আপনার সেটআপ কোড এখানে রাখুন, একবার চালানোর জন্য: Serial.begin (9600); Keyboard.begin ();
while (! সিরিয়াল) {};
// এর জন্য বোতাম (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("set button"); সিরিয়াল.প্রিন্ট (i); সিরিয়াল.প্রিন্ট ("পিনে:"); Serial.println (পিন ); // বাটন .pin = 1; বোতাম = initButton (পিন ); Serial.println (বোতাম .pin); }
}
bool readButton (int pin) {
// চেক এবং ডিবাউন্স বোতাম যদি (ডিজিটাল রিড (পিন) == উচ্চ) {বিলম্ব (10); যদি (ডিজিটাল রিড (পিন) == উচ্চ) {রিটার্ন ট্রু; }} মিথ্যা প্রত্যাবর্তন; }
int pintobin (int pin) {
যদি (pin == pins [0]) রিটার্ন 1; যদি (pin == pins [1]) 10 ফেরত দেয়; যদি (pin == pins [2]) 100 ফেরত দেয়; যদি (পিন == পিন [3]) রিটার্ন 1000; যদি (পিন == পিন [4]) 10000 ফেরত দেয়; } বাটন buttonStateUpdate (বাটন খ) {
বুল প্রেস = readButton (b.pin);
সুইচ (b.state) {ক্ষেত্রে রাজ্য:: মুক্ত: b.timeHeld = 0; যদি (প্রেস) b.state = States:: চাপা; বিরতি; কেস চাপা: b.timeHeld+= 1; if (প্রেস) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = States:: held; }} অন্য {// if (b.timeHeld
int getButtonStateCode (বোতাম খ)
{return b.state*pintobin (b.pin); }
int getCodeByButton (int code, int index) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+সূচক);
// প্রথম অপারেশন
যদি (opStep == 0) রিটার্ন কোড/10000; r1 = কোড%10000;
যদি (opStep == 1)
রিটার্ন r1/1000; r2 = r1%1000; যদি (opStep == 2) r2/100 ফেরত দেয়; r3 = r2%100; যদি (opStep == 3) r3/10 ফেরত দেয়; r4 = r3%10; যদি (opStep == 4) r4/1 ফিরিয়ে দেয়; r5 = r4%1; }
অকার্যকর প্রেস (int পিন) {
// সিরিয়াল.প্রিন্ট ("ইনপুট"); // Serial.println (পিন); বিলম্ব (THRESH_3); Keyboard.releaseAll (); }
অকার্যকর doAction (int কোড) {
// modifiers if (getCodeByButton (code, 0) == 2) {// Serial.println ("--- modifiers ----"); যদি (getCodeByButton (কোড, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } অন্যথায় Keyboard.release (altKey); যদি (getCodeByButton (কোড, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } অন্যথায় Keyboard.release (ctrlKey); যদি (getCodeByButton (কোড, 3)> 0) {Keyboard.press (''); } অন্যথায় Keyboard.release (''); যদি (getCodeByButton (কোড, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } অন্যথায় Keyboard.release (shiftKey); } অন্য {
// কর্ম সঞ্চালন
সুইচ (কোড) {কেস 30: // --- | ব্রাশ কীবোর্ড.প্রেস (shiftKey); Keyboard.print ('b'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 300: // --- | ইরেজার কীবোর্ড.প্রেস (shiftKey); Keyboard.print ('e'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 3000: // --- | বালতি কীবোর্ড.প্রেস (shiftKey); Keyboard.print ('g'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 320: //-| o কিবোর্ড পূর্বাবস্থায় ফেরান। প্রেস (ctrlKey); Keyboard.print ('z'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 30020: // | --o হিস্টোরি কিবোর্ড.প্রেস (shiftKey); Keyboard.print ('y'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 230: //-o | Keyboard.press সংরক্ষণ করুন (ctrlKey); Keyboard.print ('s'); সম্পূর্ণ প্রেস (কোড); বিরতি; কেস 3200: //- | o- দ্রুত-p.webp
int buttonCode = 0;
জন্য (int i = 0; i <BUTTON_NUM; ++ i) {বোতাম = buttonStateUpdate (বোতাম ); buttonCode+= getButtonStateCode (বোতাম ); }
যদি (buttonCode! = 0) {
সিরিয়াল.প্রিন্ট ("বোতাম কোড:"); Serial.println (buttonCode); }
doAction (buttonCode);
// বারবার চালানোর জন্য এখানে আপনার প্রধান কোডটি রাখুন: // for (int i = buttons [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
যদি (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
বিলম্ব (বিলম্ব);
}
যুক্তি সম্পর্কে বলার মতো কিছু নেই কারণ এটি আমার শেষ নিয়ামকের মতো, দুটি উল্লেখযোগ্য পার্থক্য সহ:
- বোতামগুলি তাদের নিজস্ব রাষ্ট্রীয় মেশিনের সাথে কাঠামো
- রাজ্যগুলি একত্রিত হয়ে একটি কোড তৈরি করে যা কর্ম নির্ধারণ করে
নীতিটি বিট-শিফটিংয়ের অনুরূপ, কিন্তু কারণ বোতামগুলির একাধিক অবস্থা রয়েছে এবং কেবল একটি বাইনারি দিয়ে প্রতিনিধিত্ব করা যায় না, সেগুলি পরিবর্তে দশটির ক্ষমতার দ্বারা গুণিত হয়। আমি তারপরে সমস্ত বোতাম রাজ্যগুলিকে একক সংখ্যায় যুক্ত করি এবং এটি doAction () সুইচ স্টেটমেন্টে পাস করি, যেখানে আমি সমস্ত শর্টকাট কোড রাখি।
আপনি দেখতে পাচ্ছেন, আমি প্রতিটি সম্ভাব্য সংমিশ্রণ মানচিত্র করিনি। আমি আমার পছন্দের কয়েকটি শর্টকাট যোগ করেছি, বাকিটা আপনি কিভাবে ফিট দেখবেন তা পূরণ করার জন্য আমি আপনার উপর ছেড়ে দিলাম;)
ধাপ 3: কেসিং
আমি কেসিংয়ের জন্য একটি 3D প্রিন্টার ব্যবহার করেছি। আপনি দেখতে পাচ্ছেন, নকশায় কিছু ত্রুটি রয়েছে এবং আমি ম্যাকগাইভারের কাছে এটি বন্ধ করার একটি উপায় ছিল। তাই আমি এখনও মডেল ফাইল পোস্ট করা হবে না।
বোতামগুলি "বেঞ্চগুলিতে" হট-আঠালো থাকে যাতে তারা ক্যাপগুলি জায়গায় রাখে। নরম pushbuttons যে বিশেষ করে ভাল, তাই আপনি যদি আমার মত একটি কেস তৈরীর পরিকল্পনা যদি তাদের কিছু পেতে ভুলবেন না।
এছাড়াও, আমি কেসের ভিতরে একটু ওজন যোগ করার পরামর্শ দিচ্ছি, কারণ এটি খুব হালকা। অতিরিক্ত গ্রাম এটিকে ধরে রাখাকে আরও স্বাভাবিক মনে করবে।
দেখানো হিসাবে সবকিছু সোল্ডার করুন এবং ইউএসবি তারের সাথে সংযুক্ত করুন, এবং সবকিছু জায়গায় বসতে হবে (কিছু আঠার সাহায্যে)!
ধাপ 4: ফলাফল এবং সম্ভাব্য উন্নতি
সেখানে আপনার আছে! একটি হ্যান্ডহেল্ড কন্ট্রোলার যা আপনি কেবলমাত্র একটি হাত দিয়ে আপনার সমস্ত গুরুত্বপূর্ণ শর্টকাট অ্যাক্সেস করতে ব্যবহার করতে পারেন!
এটি ব্যবহার করতে কিছু পেশী-মেমরি লাগে, কিন্তু এটি সত্যিই বহুমুখী!
অবশ্যই এটি নিখুঁত নয়, এবং এখনই আমি এটি উন্নত করার কিছু উপায় নিয়ে ভাবছি। কেসিংয়ের উন্নতি এবং শর্টকাট যুক্ত করা ছাড়াও, আমি মনে করি আমি বিভিন্ন শর্টকাট সহ একাধিক অ্যাপ্লিকেশন সমর্থন করতে আগ্রহী হব। আমি কন্ট্রোল স্কিমগুলির মধ্যে স্যুইচ করার জন্য একটি বোতাম সংমিশ্রণ করার কথা ভাবছি, যেমন ফটোশপ শর্টকাট লাইব্রেরির মধ্যে মায়ার জন্য তৈরি এক-দর্জিতে স্যুইচ করার জন্য একই সময়ে 4 টি বোতাম টিপুন।
শুধু কিছু ধারণা।
পড়ার জন্য ধন্যবাদ, পরবর্তী সময় পর্যন্ত!
প্রস্তাবিত:
আরও নির্ভরযোগ্য ফ্রিকোয়েন্সি সনাক্তকরণের জন্য এফআইআর ফিল্টারিং: 5 টি ধাপ
আরো নির্ভরযোগ্য ফ্রিকোয়েন্সি ডিটেকশনের জন্য এফআইআর ফিল্টারিং: আমি ডিএসপি টেকনিক ব্যবহার করে নির্ভরযোগ্য ফ্রিকোয়েন্সি ডিটেকশন সম্পর্কে অ্যাকেলিল্লারের নির্দেশনার সত্যিই বড় ভক্ত কিন্তু কখনও কখনও তিনি যে কৌশলটি ব্যবহার করেছেন তা যথেষ্ট ভাল নয় যদি আপনার গোলমাল পরিমাপ থাকে। ফ্রিকোয়েন্সি ডি
কোভবট - কোভিড ১ 19 তথ্য এবং আরও অনেক কিছুর জন্য একটি হোয়াটসঅ্যাপ ভিত্তিক চ্যাটবট: Ste টি ধাপ
কোভবট - কোভিড ১ 19 তথ্য এবং আরও অনেক কিছুর জন্য একটি হোয়াটসঅ্যাপ ভিত্তিক চ্যাটবট: কোভবট একটি সহজ এবং স্বজ্ঞাত হোয়াটসঅ্যাপ ভিত্তিক চ্যাটবট। বটের প্রধান বৈশিষ্ট্য হল: এটি আপনাকে একটি সহজ এবং স্বজ্ঞাত উপায়ে পছন্দের দেশে COVID-19 এর সর্বশেষ অবস্থা দিতে পারে। উপরন্তু, বট AT H করার জন্য মজার কার্যকলাপের পরামর্শ দিতে পারে
টাইমলেপস, পোর্ট্রেট এবং আরও অনেক কিছুর জন্য বড় LED "রিং" লাইট : 11 টি ধাপ (ছবি সহ)
টাইমলেপস, পোর্ট্রেট এবং আরও অনেক কিছুর জন্য বড় এলইডি "রিং" লাইট …: আমি বেশ কিছু টাইমল্যাপ ভিডিও শুট করি যা কয়েক দিন ধরে থাকে, কিন্তু ক্ল্যাম্প লাইটের অসম আলোকে ঘৃণা করে - বিশেষ করে রাতে। একটি বড় রিং লাইট খুব ব্যয়বহুল - তাই আমি আমার হাতে থাকা জিনিসগুলি দিয়ে এক সন্ধ্যায় নিজেই কিছু তৈরি করার সিদ্ধান্ত নিয়েছি।
ওয়্যারলেস কন্ট্রোলার এবং সেন্সর সহ হ্যান্ডহেল্ড কনসোল (আরডুইনো মেগা এবং ইউএনও): 10 টি ধাপ (ছবি সহ)
ওয়্যারলেস কন্ট্রোলার এবং সেন্সর সহ হ্যান্ডহেল্ড কনসোল (Arduino MEGA & UNO): আমি যা ব্যবহার করেছি:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 টাচস্ক্রিন HXD8357D- Buzzer- 4Ohm 3W স্পিকার- 5mm LED লাইট- Ultimaker 2+ Printer w/ Black PLA Filament- Lasercutter w/ MDF wood- কালো স্প্রে পেইন্ট (কাঠের জন্য)- 3x nRF24
গিটার এম্প টিল্ট সম্পূর্ণ মাথা বা অর্ধেক স্ট্যাকের জন্য পৃথক মাথা, এবং আরও অনেক কিছুর জন্য দাঁড়িয়ে আছে: 5 টি ধাপ
গিটার এম্প টিল্ট স্ট্যান্ড সম্পূর্ণ বা অর্ধেক স্ট্যাকের জন্য পৃথক মাথা, এবং আরো জন্য। স্থানীয় মিউজিক স্টোরের ঝাঁকুনি আমাকে তার মূল্যবান নতুন মার্শাল স্ট্যাকগুলি রাখতে দেয় না এবং আমাকে ছুড়ে ফেলে দেয়। আমি তাকে এত ছোট মনের জন্য দোষ দিতে পারি না