সুচিপত্র:
- ধাপ 1: DS1803 এর সংযোগ
- ধাপ 2: কমান্ড বাইট
- ধাপ 3: DS1803 নিয়ন্ত্রণ
- ধাপ 4: সেট আপ করুন
- ধাপ 5: প্রোগ্রাম
ভিডিও: DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer: 5 পদক্ষেপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:02
আমি একটি Arduino এর সাথে একটি DS1803 ডিজিটাল পটমিটারের ব্যবহার ভাগ করতে পছন্দ করি। এই আইসিটিতে দুটি ডিজিটাল পটমিটার রয়েছে যা দুটি তারের ইন্টারফেসে নিয়ন্ত্রণ করা যায়, এর জন্য আমি wire.h লাইব্রেরি ব্যবহার করি।
এই আইসি একটি সাধারণ এনালগ পটমিটার প্রতিস্থাপন করতে পারে। এইভাবে আপনি উদাহরণস্বরূপ একটি পরিবর্ধক বা বিদ্যুৎ সরবরাহ নিয়ন্ত্রণ করতে পারবেন।
এই নির্দেশে আমি কাজ দেখানোর জন্য দুটি LED এর উজ্জ্বলতা নিয়ন্ত্রণ করি।
আরডুইনো একটি ঘূর্ণমান এনকোডারের ডাল গণনা করে এবং ভেরিয়েবল পাত্র [0] এবং পাত্র [1] তে মানটি রাখে। যখন আপনি এনকোডারে সুইচ চাপান, আপনি পট [0] এবং পট [1] এর মধ্যে স্যুইচ করতে পারেন।
পাত্রের আসল মান DS1803 থেকে পাঠ করা হয় এবং পরিবর্তনশীল potValue [0] এবং potValue [1] এ রাখা হয় এবং একটি LCD তে প্রদর্শিত হয়।
ধাপ 1: DS1803 এর সংযোগ
এখানে আপনি DS1803 এর সংযোগ দেখতে পারেন। H হল পোটেন্টিওমিটারের উঁচু দিক, L নিম্ন দিক এবং W ওয়াইপার। এসসিএল এবং এসডিএ হল বাস সংযোগ।
A0, A1 এবং A2 সংযোগের মাধ্যমে আপনি DS1803 এর নিজস্ব ঠিকানা দিতে পারেন, এইভাবে আপনি একটি বাসের মাধ্যমে আরও ডিভাইস নিয়ন্ত্রণ করতে পারেন। আমার উদাহরণে আমি সমস্ত পিনকে মাটিতে সংযুক্ত করে DS1803 অ্যাড্রেস 0 দিয়েছি।
ধাপ 2: কমান্ড বাইট
DS1803 যেভাবে কাজ করে তা কমান্ড বাইটে ব্যবহার করা যেতে পারে। যখন আপনি "potentiometer-0 লিখুন" নির্বাচন করেন তখন উভয় potentiometers নির্বাচিত হয়, যখন আপনি শুধুমাত্র potentiometer-0 সমন্বয় করতে চান, তখন আপনাকে শুধুমাত্র প্রথম ডেটা বাইট পাঠাতে হবে। "Potentiometer-1 লিখুন" শুধুমাত্র পটমিটার -১ সামঞ্জস্য করুন। "উভয় potentiometers লিখুন" উভয় potentiometers একই মান দেয়।
ধাপ 3: DS1803 নিয়ন্ত্রণ
কন্ট্রোল বাইট (চিত্র 3) এর একটি ডিভাইস শনাক্তকারী রয়েছে, এটি সর্বদা একই থাকে। আমার উদাহরণে A0, A1 এবং A2 হল 0 কারণ আমরা সমস্ত A- পিন মাটিতে রেখে adres নির্বাচন করি। আরডুইনোতে "Wire.beginTransmission" এবং "Wire.requestFrom" কমান্ড দ্বারা শেষ বিট R/W 0 বা 1 এ সেট করা হবে। চিত্র 5 এ আপনি পুরো টেলিগ্রামটি দেখতে পারেন। পঠিত টেলিগ্রামটি চিত্র 4 এ দেখানো হয়েছে।
ধাপ 4: সেট আপ করুন
এই সার্কিট দেখায় কিভাবে সবকিছু সংযুক্ত করতে হয়। নোকিয়া এলসিডি বিভিন্ন সংযোগের সাথে পাওয়া যায়, নিশ্চিত হোন যে আপনি আপনার সাথে সঠিকভাবে সংযুক্ত আছেন। এছাড়াও ঘূর্ণমান এনকোডার তার বিভিন্ন সংস্করণ, কিছু মাঝারি পিন অন্যদের না সাধারণ আছে। এনকোডারের A এবং B আউটপুট সিগন্যাল ফিল্টার করার জন্য আমি একটি ছোট ফিল্টার নেটওয়ার্ক (100nF ক্যাপ সহ 470 Ohm রোধ) রেখেছি। আমার এই ফিল্টারটি দরকার কারণ আউটপুটটিতে প্রচুর শব্দ ছিল। আমি কিছু আওয়াজ বাতিল করার জন্য আমার প্রোগ্রামে একটি ডিবাউন্স টাইমারও রেখেছিলাম। বাকিদের জন্য আমি মনে করি সার্কিটটি পরিষ্কার। LCD Adafruit https://www.adafruit.com/product/338 এর মাধ্যমে অর্ডার করা যেতে পারে।
ধাপ 5: প্রোগ্রাম
2-তারের বাস ব্যবহারের জন্য আমি Wire.h লাইব্রেরি অন্তর্ভুক্ত করি। LCD ব্যবহার করতে আমি Adafruit লাইব্রেরি অন্তর্ভুক্ত করি যা আপনি https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library থেকে ডাউনলোড করতে পারেন Adafruit_GFX.h লাইব্রেরি এখানে পাওয়া যায় https:// github। com/adafruit/Adafruit-GFX-Library।
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
Adafruit_PCD8544 প্রদর্শন = Adafruit_PCD8544 (7, 6, 5, 4, 3);
এখানে আপনি সব ভেরিয়েবল দেখতে পারেন। কন্ট্রোল বাইট এবং কমান্ড বাইট আগে বর্ণিত হয়েছে। আপনার এনকোডারের গোলমালের উপর নির্ভর করে deBounceTime সামঞ্জস্য করা যেতে পারে।
বাইট পট [2] = {1, 1}; বাইট কন্ট্রোলবাইট = B0101000; // 7 বিট, বাইট কমান্ডবাইট = B10101001; // শেষ 2 বিট পটমিটার নির্বাচন। বাইট পটভ্যালু [2]; int i = 0; int deBounceTime = 10; // শব্দ মান int encoder_A = 8 এর উপর নির্ভর করে এই মানটি সামঞ্জস্য করুন; const int encoder_B = 9; const int buttonPin = 2; স্বাক্ষরবিহীন দীর্ঘ newDebounceTime = 0; স্বাক্ষরবিহীন দীর্ঘ পুরানো সময়; বুলিয়ান চাপা = 0; বুলিয়ান গণনা = 1;
সেটআপে আমি ডান পিনগুলি সংজ্ঞায়িত করি এবং এলসিডিতে স্ট্যাটিক টেক্সট রাখি
অকার্যকর সেটআপ () {Wire.begin (); Serial.begin (9600); পিনমোড (এনকোডার_এ, ইনপুট); পিনমোড (এনকোডার_বি, ইনপুট); pinMode (buttonPin, INPUT); newDebounceTime = মিলিস ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (কালো); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
লুপে আমি প্রথমে চেক করি যদি ব্যবধান 500ms এর বেশি হয়, যদি হ্যাঁ LCD আপডেট হয়। না হলে এনকোডারের বোতামটি চেক করা হয়। টগল বাফার চাপলে কল করা হবে। এর পরে এনকোডার চেক করা হয়। যদি ইনপুট 0 কম হয় (ঘূর্ণন সনাক্ত করা হয়) আমি ইনপুট B চেক করি, যদি ইনপুট B 0 হয় আমি ইনক্রিমেন্ট পট , অন্যরা আমি হ্রাস করি। এর পরে মানটি DS1803 এ wire.write এর মাধ্যমে পাঠানো হবে।
অকার্যকর লুপ () {
অন্তর();
if (digitalRead (buttonPin) == 1 && (চাপা == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressed = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; যদি (পাত্র > 25) {পাত্র = 25;}} অন্য {পাত্র -; যদি (পাত্র <1) {পাত্র = 1;}} গণনা = 1; newDebounceTime = মিলিস ();
Wire.beginTransmission (controlByte); // প্রেরণ শুরু
Wire.write (commandByte); // পটমিটারের নির্বাচন Wire.write (পাত্র [0] * 10); // পটমিটার ডেটা Wire.write এর প্রথম বাইট পাঠান (পাত্র [1] * 10); // পটমিটার ডেটার ২ য় বাইট Wire.endTransmission () পাঠান; // stop transmitting} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = মিলিস (); }}
void toggleBuffer () {pressed = 1; যদি (i == 0) {i = 1;} অন্যথায় {i = 0;}}
প্রথমে আমি সেই এলাকা পরিষ্কার করি যেখানে আমাকে ভেরিয়েবল লিখতে হবে। আমি এই এলাকায় একটি আয়তক্ষেত্র আঁকতে এটি করি। তারপরে আমি পর্দায় ভেরিয়েবল লিখি।
অকার্যকর writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // প্রথম পটমিটার বাইট potValue [1] = Wire.read () পড়ুন; // পড়ুন দ্বিতীয় পটমিটার বাইট display.fillRect (40, 0, 40, 45, WHITE); // LCD display.setCursor (40, 10) এ স্পষ্ট পরিবর্তনশীল স্ক্রিন; display.print (potValue [0]); // LCD display.setCursor (40, 22) এ প্রথম পটমিটার মান লিখুন; display.print (potValue [1]); // LCD display.setCursor এ দ্বিতীয় পটমিটার মান লিখুন (60, (10 + i * 12)); display.print ("<"); display.display (); }
অকার্যকর ব্যবধান () {// ব্যবধান টাইমার LCD তে তথ্য লিখতে হলে যদি ((মিলিস () - ওল্ডটাইম)> 500) {writeToLCD (); oldTime = মিলিস (); }}
প্রস্তাবিত:
Arduino সঙ্গে Potentiometer সঙ্গে LED উজ্জ্বলতা নিয়ন্ত্রণ: 3 পদক্ষেপ
আরডুইনো দিয়ে পটেন্টিওমিটারের সাহায্যে এলইডি উজ্জ্বলতা নিয়ন্ত্রণ করা: এই প্রজেক্টে আমরা পটেন্টিওমিটারের প্রদত্ত ভেরিয়েবল রেজিস্ট্যান্স ব্যবহার করে LED এর উজ্জ্বলতা নিয়ন্ত্রণ করব। এটি একটি শিক্ষানবিসের জন্য একটি খুব মৌলিক প্রকল্প কিন্তু এটি আপনাকে পোটেন্টিওমিটার এবং এলইডি ওয়ার্কিং সম্পর্কে অনেক কিছু শেখাবে যা অ্যাডভা তৈরির জন্য প্রয়োজন
Claqueta ডিজিটাল কন Arduino (Arduino সঙ্গে ডিজিটাল Clapperboard): 7 ধাপ
Claqueta ডিজিটাল কন Arduino (Arduino সঙ্গে ডিজিটাল Clapperboard): Crea tu propia claqueta digital, también puedes converter una claqueta no digital en una, utilizando Arduino con arduino.Arduin
Arduino টিউটোরিয়াল - Potentiometer সঙ্গে Stepper মোটর নিয়ন্ত্রণ: 5 পদক্ষেপ
Arduino টিউটোরিয়াল - Potentiometer সহ Stepper মোটর কন্ট্রোল: এই নির্দেশনাটি আমার " Arduino: How to Control a Stepper Motor with Potentiometer " আমি সম্প্রতি আপলোড করা ইউটিউব ভিডিও। আমি আপনাকে এটি চেক করার জন্য দৃ strongly়ভাবে সুপারিশ করছি।আমার ইউটিউব চ্যানেল প্রথম, আপনি f দেখতে হবে
Arduino টিউটোরিয়াল - Potentiometer সঙ্গে Servo মোটর নিয়ন্ত্রণ: 5 পদক্ষেপ
Arduino টিউটোরিয়াল - Potentiometer সঙ্গে Servo মোটর নিয়ন্ত্রণ: এই নির্দেশযোগ্য আমার " Arduino: Potentiometer সঙ্গে Servo মোটর নিয়ন্ত্রণ কিভাবে লিখিত সংস্করণ " আমি সম্প্রতি আপলোড করা ইউটিউব ভিডিও। আমি আপনাকে এটি চেক করার জন্য দৃ strongly়ভাবে সুপারিশ করছি। ইউটিউব চ্যানেলে যান
Arduino টিউটোরিয়াল - Arduino সঙ্গে Servo মোটর নিয়ন্ত্রণ: 5 পদক্ষেপ
Arduino টিউটোরিয়াল - Arduino এর সাথে Servo মোটর কন্ট্রোল: এই নির্দেশনাটি হল আমার " Arduino: How to Control Servo Motor with Arduino " আমি সম্প্রতি আপলোড করা ইউটিউব ভিডিও। আমি আপনাকে এটি চেক করার জন্য দৃ strongly়ভাবে সুপারিশ করছি। ইউটিউব চ্যানেলে যান