সুচিপত্র:

Arduino এবং Thumbwheel সুইচ: 9 ধাপ
Arduino এবং Thumbwheel সুইচ: 9 ধাপ

ভিডিও: Arduino এবং Thumbwheel সুইচ: 9 ধাপ

ভিডিও: Arduino এবং Thumbwheel সুইচ: 9 ধাপ
ভিডিও: {638} Hexadecimal to BCD Thumbwheel Switch Function & Testing 2024, জুলাই
Anonim
Arduino এবং Thumbwheel সুইচ
Arduino এবং Thumbwheel সুইচ

এই আর্টিকেলে আমরা আমাদের Arduino সিস্টেমের সাথে পুশ-হুইল/থাম্বহুইল সুইচের ব্যবহার পরীক্ষা করি। পিএমডি ওয়ে থেকে নেওয়া কিছু উদাহরণ এখানে দেওয়া হল।

ধাপ 1:

ছবি
ছবি

অনির্দিষ্ট জন্য, প্রতিটি সুইচ একটি উল্লম্ব অংশ এবং তারা বিভিন্ন আকার গঠন করতে একসঙ্গে সংযুক্ত করা যেতে পারে। আপনি শূন্য থেকে নয় পর্যন্ত সংখ্যা নির্বাচন করতে বোতামগুলি ব্যবহার করতে পারেন। এমন বিকল্প আছে যেগুলোতে একটি চাকা আছে যা আপনি বৃদ্ধির/হ্রাসের বোতামের পরিবর্তে আপনার থাম্ব দিয়ে সরাতে পারেন।

অভিনব ব্যবহারকারী ইন্টারফেসের দিনগুলির আগে এই সুইচগুলি সংখ্যাসূচক ডেটা এন্ট্রি সেট করার জন্য বেশ জনপ্রিয় পদ্ধতি ছিল। যাইহোক সেগুলি আজও পাওয়া যায়, তাই আসুন দেখি কিভাবে তারা কাজ করে এবং কিভাবে আমরা তাদের ব্যবহার করতে পারি। সুইচের মান বাইনারি-কোডেড দশমিক বা সোজা দশমিকের মাধ্যমে উপলব্ধ করা হয়। বিসিডি আকারে সুইচের পিছনের অংশটি বিবেচনা করুন।

ধাপ ২:

ছবি
ছবি

আমাদের বাম দিকে কমন আছে, তারপর 1, 2, 4 এবং 8 এর জন্য পরিচিতিগুলি। উচ্চ রাজ্য। উদাহরণস্বরূপ, যদি আপনি 3 নির্বাচন করেন - পরিচিতি 1 এবং 2 সাধারণ ভোল্টেজে থাকবে। শূন্য এবং নয় এর মধ্যে মানগুলি টেবিলে উপস্থাপন করা যেতে পারে।

ধাপ 3:

ছবি
ছবি

এতক্ষণে আপনার উপলব্ধি করা উচিত যে সুইচের মান পড়া সহজ হবে - এবং আপনি ঠিকই বলেছেন। আমরা আমাদের আর্ডুইনো বোর্ডের ডিজিটাল ইনপুট পিনের সাথে 5V কে সাধারণের সাথে সংযুক্ত করতে পারি, তারপর প্রতিটি আউটপুটের মান নির্ধারণের জন্য digitalRead () ব্যবহার করতে পারি। স্কেচে আমরা BCD মানকে দশমিক সংখ্যায় রূপান্তর করার জন্য কিছু মৌলিক গণিত ব্যবহার করি। সুতরাং আসুন এখন এটি করি।

একটি হার্ডওয়্যার দৃষ্টিকোণ থেকে, আমাদের আরও একটি বিষয় বিবেচনা করতে হবে-পুশ-হুইল সুইচ বৈদ্যুতিকভাবে চারটি খোলা পুশ বোতামের মতো আচরণ করে। এর অর্থ হল উচ্চ এবং নিম্ন রাজ্যের মধ্যে স্পষ্ট পার্থক্য থাকার জন্য আমাদের পুল-ডাউন প্রতিরোধক ব্যবহার করতে হবে। সুতরাং একটি সুইচের জন্য পরিকল্পিত উপরে দেখানো হয়েছে।

ধাপ 4:

এখন 1, 2, 4, এবং 8 লেবেলযুক্ত আউটপুটগুলিকে (উদাহরণস্বরূপ) ডিজিটাল পিন 8, 9, 10 এবং 11 এর সাথে সংযুক্ত করা একটি সহজ বিষয়। পরবর্তী, আমাদের একটি স্কেচ থাকা দরকার যা ইনপুটগুলি পড়তে পারে এবং BCD আউটপুটকে দশমিক রূপান্তর করতে পারে। নিম্নলিখিত স্কেচ বিবেচনা করুন:

/ * SAA1064 সংখ্যাসূচক ডিসপ্লে ieldাল ব্যবহার করে https://www.gravitech.us/7segmentshield.html যদি আপনার SAA1064 ieldাল না থাকে তবে সিরিয়াল মনিটর ব্যবহার করুন সংজ্ঞায়িত করুন q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // যোগ দিন i2c বাস (মাস্টারের জন্য optionচ্ছিক ঠিকানা) বিলম্ব (500); পিনমোড (কিউ 1, ইনপুট); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // Gravitech SAA1064 ieldাল {const int look [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int হাজার, শত, দশ, বেস; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); হাজার = গণনা/1000; শত শত = (গণনা- (হাজার*1000))/100; দশ = (গণনা-((হাজার*1000)+(শত শত*100)))/10; ভিত্তি = গণনা-((হাজার*1000)+(শত*100)+(দশ*10)); Wire.write (সন্ধান [বেস]); Wire.write (সন্ধান [দশক]); Wire.write (সন্ধান [শত শত]); Wire.write (অনুসন্ধান [হাজার হাজার]); Wire.endTransmission (); বিলম্ব (10); } int readSwitch () {int total = 0; যদি (digitalRead (q1) == উচ্চ) {মোট+= 1; } যদি (digitalRead (q2) == উচ্চ) {মোট+= 2; } যদি (digitalRead (q4) == উচ্চ) {মোট+= 4; } যদি (digitalRead (q8) == উচ্চ) {মোট+= 8; } মোট ফেরত; } অকার্যকর লুপ () {dispSAA1064 (readSwitch ()); // switchাল Serial.println (readSwitch ()) প্রদর্শন করতে সুইচ মান পাঠায়; // সিরিয়াল মনিটর বক্সে সুইচ মান পাঠায়}

ফাংশন readSwitch () হল কী। এটি প্রতিটি সুইচ আউটপুটের সংখ্যাসূচক উপস্থাপনা যোগ করে সুইচের মান গণনা করে এবং এর ফলাফল হিসাবে মোট প্রদান করে। এই উদাহরণের জন্য আমরা একটি সংখ্যাসূচক ডিসপ্লে shাল ব্যবহার করেছি যা NXP SAA1064 দ্বারা নিয়ন্ত্রিত।

ধাপ 5:

Image
Image

ফাংশন readSwitch () হল কী। এটি প্রতিটি সুইচ আউটপুটের সংখ্যাসূচক উপস্থাপনা যোগ করে সুইচের মান গণনা করে এবং এর ফলাফল হিসাবে মোট প্রদান করে। এই উদাহরণের জন্য আমরা একটি সংখ্যাসূচক ডিসপ্লে shাল ব্যবহার করেছি যা NXP SAA1064 দ্বারা নিয়ন্ত্রিত।

আপনার যদি এটি না থাকে তবে এটি ঠিক আছে - ফলাফলগুলি সিরিয়াল মনিটরেও প্রেরণ করা হয়। এখন, ভিডিওতে এটিকে কার্যকরীভাবে দেখা যাক।

ধাপ 6:

ঠিক আছে এটি খুব বেশি দেখাচ্ছে না, তবে যদি আপনার সংখ্যাসূচক প্রবেশের প্রয়োজন হয় তবে এটি প্রচুর শারীরিক স্থান বাঁচায় এবং প্রবেশের একটি সুনির্দিষ্ট পদ্ধতি সরবরাহ করে।

তাই সেখানে যদি আপনি এটি আছে। আপনি আসলে একটি প্রকল্পে এই ব্যবহার করবেন? এক অঙ্কের জন্য - হ্যাঁ। চার এর জন্য? সম্ভবত না-সম্ভবত 12-সংখ্যার কীপ্যাড ব্যবহার করা সহজ হবে। একটা ধারণা আছে…

ধাপ 7: একাধিক সুইচ

ছবি
ছবি

এখন আমরা পরীক্ষা করবো কিভাবে চারটি সংখ্যা পড়তে হয় - এবং এই সমস্ত ডিজিটাল পিনগুলি এই প্রক্রিয়ায় নষ্ট করবেন না। পরিবর্তে, আমরা মাইক্রোচিপ MCP23017 16-বিট পোর্ট এক্সপেন্ডার IC ব্যবহার করব যা I2C বাসের মাধ্যমে যোগাযোগ করে। এটিতে ষোল ডিজিটাল ইনপুট/আউটপুট পিন রয়েছে যা আমরা প্রতিটি সুইচের অবস্থা পড়তে ব্যবহার করতে পারি।

এগিয়ে যাওয়ার আগে, দয়া করে মনে রাখবেন যে এই নিবন্ধের জন্য কিছু অনুমিত জ্ঞান প্রয়োজন - I2C বাস (অংশ এক এবং দুই) এবং MCP23017। আমরা প্রথমে হার্ডওয়্যার সংযোগগুলি বর্ণনা করব, এবং তারপরে Arduino স্কেচ। একক সুইচ উদাহরণের জন্য ব্যবহৃত পরিকল্পিত স্মরণ করুন।

যখন সুইচটি সরাসরি আরডুইনোতে সংযুক্ত ছিল, আমরা সুইচের মান নির্ধারণের জন্য প্রতিটি পিনের অবস্থা পড়ি। আমরা MCP23017 ব্যবহার করে আরও বড় আকারে এটি আবার করব। পিনআউট ডায়াগ্রামটি বিবেচনা করুন:

ধাপ 8:

আমাদের 16 টি পিন আছে, যা চারটি সুইচ সংযুক্ত করতে দেয়। প্রতিটি সুইচের জন্য কমন্স এখনও 5V এর সাথে সংযোগ স্থাপন করে, এবং প্রতিটি সুইচ যোগাযোগের এখনও GND তে 10k পুল-ডাউন রোধক থাকে। তারপর আমরা ডিজিট ওয়ান এর 1, 2, 4, 8 পিনকে GPBA0 ~ 3 এর সাথে সংযুক্ত করি; অঙ্ক দুই এর 1, 2, 4, 8 থেকে GPA4 ~ 7; অঙ্ক তিনের 1, 2, 4, 8 থেকে GPB0 ~ 3 এবং অঙ্ক চার এর 1, 2, 4, 8 থেকে GPB4 ~ 7।

এখন আমরা কিভাবে সুইচগুলি পড়ব? এই সমস্ত তারের কারণে আপনি মনে করতে পারেন যে এটি কঠিন, কিন্তু স্কেচটি বেশ সহজ। যখন আমরা GPBA এবং B এর মান পড়ি, তখন প্রতিটি ব্যাংকের জন্য একটি বাইট ফেরত দেওয়া হয়, যার মধ্যে সবচেয়ে গুরুত্বপূর্ণ বিট প্রথমে থাকে। প্রতিটি চারটি বিট মিলে যাওয়া I/O পিনের সাথে সংযুক্ত সুইচের সেটিংয়ের সাথে মিলবে। উদাহরণস্বরূপ, যদি আমরা আইও ব্যাঙ্কগুলির জন্য ডেটা অনুরোধ করি এবং সুইচগুলি 1 2 3 4 এ সেট করা হয় - ব্যাংক এ 0010 0001 এবং ব্যাংক বি 0100 0011 ফেরত দেবে।

আমরা প্রতিটি বিটকে আলাদা ভেরিয়েবলে আলাদা করার জন্য কিছু বিটশিফ্ট অপারেশন ব্যবহার করি - যা আমাদের প্রতিটি অঙ্কের মান দিয়ে ছেড়ে দেয়। উদাহরণস্বরূপ, সুইচ ফোরের মান আলাদা করার জন্য, আমরা বিটগুলিকে ব্যাংক B >> 4 থেকে সরিয়ে দিই। এর ফলে সুইচ তিনটির মান বের হয়ে যায় এবং বাম ফাঁকা বিটগুলি শূন্য হয়ে যায়।

সুইচ থ্রি এর মান আলাদা করার জন্য, আমরা একটি যৌগিক ব্যবহার করি বিটওয়াইজ & - যা সুইচ তিন এর মান ছেড়ে দেয়। ছবিটি বাইনারি সুইচ মানগুলির একটি ভাঙ্গন দেখায় - এটি কাঁচা GPIOA এবং B বাইট মান দেখায়, তারপর প্রতিটি সংখ্যার বাইনারি মান এবং দশমিক মান।

ধাপ 9:

সুতরাং আসুন বিক্ষোভ স্কেচ দেখুন:

/ * উদাহরণ 40a-MCP23017 এর মাধ্যমে চারটি পুশওয়েল BCD সুইচ পড়ুন, SAA1064/4-অঙ্কের 7-সেগমেন্ট LED ডিসপ্লে */// MCP23017 পিন 15 ~ 17 থেকে GND, I2C বাসের ঠিকানা 0x20 // SAA1064 I2C বাসের ঠিকানা 0x38 # পড়ুন LED অঙ্কের সংজ্ঞাগুলির জন্য "Wire.h" // অন্তর্ভুক্ত করুন }; বাইট GPIOA, GPIOB, dig1, dig2, dig3, dig4; অকার্যকর initSAA1064 () {// সেটআপ 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA আউটপুট, Wire.endTransmission () কোন অঙ্ক ফাঁকা } অকার্যকর সেটআপ () {Serial.begin (9600); Wire.begin (); // I2C বাস initSAA1064 () শুরু করুন; } অকার্যকর লুপ () {// ব্যাঙ্ক এ ওয়্যার ইনপুট পড়ুন। BeginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // এই বাইটটিতে 1 এবং 2 অঙ্কের সুইচ ডেটা রয়েছে // ব্যাঙ্ক B Wire.beginTransmission (0x20) এর ইনপুট পড়ুন; Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // এই বাইটে সংখ্যা 3 এবং 4 এর জন্য সুইচ ডেটা রয়েছে // প্রতিটি সুইচের জন্য নিষ্কাশন মান // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // সমস্ত GPIO এবং পৃথক সুইচ ডেটা সিরিয়াল মনিটরে পাঠান // ডিবাগ এবং স্বার্থের জন্য Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); সিরিয়াল.প্রিন্ট ("ডিজিট 1 ="); Serial.println (dig1, BIN); সিরিয়াল.প্রিন্ট ("অঙ্ক 2 ="); Serial.println (dig2, BIN); সিরিয়াল.প্রিন্ট ("অঙ্ক 3 ="); Serial.println (dig3, BIN); সিরিয়াল.প্রিন্ট ("অঙ্ক 4 ="); Serial.println (dig4, BIN); Serial.println (); সিরিয়াল.প্রিন্ট ("ডিজিট 1 ="); Serial.println (dig1, DEC); সিরিয়াল.প্রিন্ট ("অঙ্ক 2 ="); Serial.println (dig2, DEC); সিরিয়াল.প্রিন্ট ("অঙ্ক 3 ="); Serial.println (dig3, DEC); সিরিয়াল.প্রিন্ট ("অঙ্ক 4 ="); Serial.println (dig4, DEC); Serial.println (); // SAA1064 Wire.beginTransmission (0x38) এর মাধ্যমে LED ডিসপ্লেতে সুইচ মান পাঠান; Wire.write (1); Wire.write (অঙ্ক [dig4]); Wire.write (অঙ্ক [dig3]); Wire.write (সংখ্যা [dig2]); Wire.write (অঙ্ক [dig1]); Wire.endTransmission (); বিলম্ব (10); বিলম্ব (1000); }

এবং অবিশ্বাসীদের জন্য … একটি ভিডিও প্রদর্শন।

তাই সেখানে যদি আপনি এটি আছে। একটির পরিবর্তে চারটি সংখ্যা, এবং I2C বাসের উপর Arduino ডিজিটাল I/O পিন সংরক্ষণ। আটটি MCP23017 ব্যবহার করে আপনি একবারে 32 সংখ্যা পড়তে পারেন। এটা করে মজা পান!

আপনি বিশ্বব্যাপী বিনামূল্যে ডেলিভারির সাথে PMD ওয়ে থেকে বিভিন্ন আকারের BCD এবং দশমিক সুইচ উভয় অর্ডার করতে পারেন।

এই পোস্টটি আপনার জন্য নিয়ে এসেছে pmdway.com - নির্মাতা এবং ইলেকট্রনিক্স উত্সাহীদের জন্য সবকিছু, বিশ্বব্যাপী বিনামূল্যে বিতরণ সহ।

প্রস্তাবিত: