সুচিপত্র:

DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer: 5 পদক্ষেপ
DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer: 5 পদক্ষেপ

ভিডিও: DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer: 5 পদক্ষেপ

ভিডিও: DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer: 5 পদক্ষেপ
ভিডিও: Home Automation: Change direction of rotation of DC motor using 2 relays and Arduino - Robojax 2024, জুলাই
Anonim
DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer
DS1803 Arduino সঙ্গে দ্বৈত ডিজিটাল Potentiometer

আমি একটি Arduino এর সাথে একটি DS1803 ডিজিটাল পটমিটারের ব্যবহার ভাগ করতে পছন্দ করি। এই আইসিটিতে দুটি ডিজিটাল পটমিটার রয়েছে যা দুটি তারের ইন্টারফেসে নিয়ন্ত্রণ করা যায়, এর জন্য আমি wire.h লাইব্রেরি ব্যবহার করি।

এই আইসি একটি সাধারণ এনালগ পটমিটার প্রতিস্থাপন করতে পারে। এইভাবে আপনি উদাহরণস্বরূপ একটি পরিবর্ধক বা বিদ্যুৎ সরবরাহ নিয়ন্ত্রণ করতে পারবেন।

এই নির্দেশে আমি কাজ দেখানোর জন্য দুটি LED এর উজ্জ্বলতা নিয়ন্ত্রণ করি।

আরডুইনো একটি ঘূর্ণমান এনকোডারের ডাল গণনা করে এবং ভেরিয়েবল পাত্র [0] এবং পাত্র [1] তে মানটি রাখে। যখন আপনি এনকোডারে সুইচ চাপান, আপনি পট [0] এবং পট [1] এর মধ্যে স্যুইচ করতে পারেন।

পাত্রের আসল মান DS1803 থেকে পাঠ করা হয় এবং পরিবর্তনশীল potValue [0] এবং potValue [1] এ রাখা হয় এবং একটি LCD তে প্রদর্শিত হয়।

ধাপ 1: DS1803 এর সংযোগ

DS1803 এর সংযোগ
DS1803 এর সংযোগ

এখানে আপনি DS1803 এর সংযোগ দেখতে পারেন। H হল পোটেন্টিওমিটারের উঁচু দিক, L নিম্ন দিক এবং W ওয়াইপার। এসসিএল এবং এসডিএ হল বাস সংযোগ।

A0, A1 এবং A2 সংযোগের মাধ্যমে আপনি DS1803 এর নিজস্ব ঠিকানা দিতে পারেন, এইভাবে আপনি একটি বাসের মাধ্যমে আরও ডিভাইস নিয়ন্ত্রণ করতে পারেন। আমার উদাহরণে আমি সমস্ত পিনকে মাটিতে সংযুক্ত করে DS1803 অ্যাড্রেস 0 দিয়েছি।

ধাপ 2: কমান্ড বাইট

কমান্ড বাইট
কমান্ড বাইট

DS1803 যেভাবে কাজ করে তা কমান্ড বাইটে ব্যবহার করা যেতে পারে। যখন আপনি "potentiometer-0 লিখুন" নির্বাচন করেন তখন উভয় potentiometers নির্বাচিত হয়, যখন আপনি শুধুমাত্র potentiometer-0 সমন্বয় করতে চান, তখন আপনাকে শুধুমাত্র প্রথম ডেটা বাইট পাঠাতে হবে। "Potentiometer-1 লিখুন" শুধুমাত্র পটমিটার -১ সামঞ্জস্য করুন। "উভয় potentiometers লিখুন" উভয় potentiometers একই মান দেয়।

ধাপ 3: DS1803 নিয়ন্ত্রণ

DS1803 এর নিয়ন্ত্রণ
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 = মিলিস (); }}

প্রস্তাবিত: