جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
أحب مشاركة استخدام مقياس جهد رقمي DS1803 مع Arduino. يحتوي هذا IC على جهازي قياس رقمي يمكن التحكم فيهما من خلال واجهة بسلكين ، لذلك أستخدم مكتبة wire.h.
يمكن أن يحل هذا IC محل مقياس الجهد التناظري العادي. بهذه الطريقة يمكنك التحكم على سبيل المثال في مكبر الصوت أو مصدر الطاقة.
في هذا الدليل ، أتحكم في سطوع اثنين من مصابيح LED لإظهار العمل.
يحسب اردوينو نبضات المشفر الدوار ويضع القيمة في وعاء متغير [0] ووعاء [1]. عندما تضغط على المفتاح في المشفر ، يمكنك التبديل بين القدر [0] والوعاء [1].
تمت قراءة القيمة الفعلية للأواني مرة أخرى من DS1803 ووضعها في potValue متغير [0] و potValue [1] وعرضها على شاشة LCD.
الخطوة 1: توصيلات DS1803
هنا يمكنك رؤية وصلات DS1803. H هو الجانب العالي من مقياس الجهد ، L هو الجانب المنخفض و W الماسحة. SCL و SDA هي وصلات الناقل.
مع التوصيلات A0 و A1 و A2 ، يمكنك إعطاء DS1803 العنوان الخاص به ، وبهذه الطريقة يمكنك التحكم في المزيد من الأجهزة عبر ناقل واحد. في المثال الخاص بي ، قمت بإعطاء DS1803 adres 0 عن طريق توصيل جميع المسامير بالأرض.
الخطوة 2: الأمر بايت
يمكن استخدام الطريقة التي يعمل بها DS1803 في بايت الأمر. عند تحديد "كتابة مقياس الجهد 0" ، يتم تحديد كلا المقياسين ، عندما تريد فقط ضبط مقياس الجهد 0 ، ما عليك سوى إرسال بايت البيانات الأول. "اكتب مقياس الجهد -1" فقط اضبط مقياس الجهد -1. يعطي "الكتابة إلى كلا مقياسي فرق الجهد" كلا المقياسين نفس القيمة.
الخطوة 3: التحكم في DS1803
يحتوي بايت التحكم (الشكل 3) على معرّف الجهاز ، ويبقى هذا دائمًا كما هو. في المثال الخاص بي ، A0 و A1 و A2 هي 0 لأننا نختار العناوين عن طريق وضع جميع دبابيس A على الأرض. سيتم تعيين آخر بت R / W على 0 أو 1 بواسطة الأمر "Wire.beginTransmission" و "Wire.requestFrom" في Arduino. في الشكل 5 يمكنك رؤية البرقية كاملة. تظهر برقية القراءة في الشكل 4.
الخطوة 4: الإعداد
توضح هذه الدائرة كيفية توصيل كل شيء. شاشة Nokia LCD متوفرة بوصلات مختلفة ، تأكد من توصيلك بالشكل الصحيح. أيضا المشفر الدوار إصداراته المختلفة ، بعضها مشترك في الدبوس الأوسط والبعض الآخر ليس كذلك. لقد وضعت شبكة مرشح صغيرة (470 أوم المقاوم مع غطاء 100nF) لتصفية إشارات الخرج A و B لجهاز التشفير. أحتاج إلى هذا المرشح لأن الإخراج يحتوي على الكثير من الضوضاء. أضع أيضًا مؤقتًا للارتداد في برنامجي لإلغاء بعض الضوضاء. بالنسبة للباقي ، أعتقد أن الدائرة واضحة. يمكن طلب شاشة LCD عبر Adafruit
الخطوة الخامسة: البرنامج
لاستخدام الحافلة ذات السلكين ، أقوم بتضمين مكتبة Wire.h. لاستخدام شاشة LCD ، أقوم بتضمين مكتبة Adafruit التي يمكنك تنزيلها من https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library أيضًا مكتبة Adafruit_GFX.h متاحة هنا https:// github. كوم / adafruit / Adafruit-GFX-Library.
#يشمل
#يشمل
#يشمل
Adafruit_PCD8544 display = Adafruit_PCD8544 (7، 6، 5، 4، 3) ؛
هنا يمكنك رؤية جميع المتغيرات. بايت التحكم و بايت الأمر كما هو موضح من قبل. يمكن ضبط deBounceTime بناءً على الضوضاء الموجودة في برنامج التشفير.
وعاء البايت [2] = {1 ، 1} ؛ بايت controlByte = B0101000 ؛ // 7 بت ، بايت أمر بايت = B10101001 ؛ // آخر 2 بت هو اختيار مقياس الجهد. بايت potValue [2] ؛ كثافة العمليات أنا = 0 ؛ عدد int deBounceTime = 10 ؛ // اضبط هذه القيمة اعتمادًا على الضوضاء const int encoder_A = 8 ؛ encoder_B = 9 ؛ const int buttonPin = 2 ؛ newDebounceTime طويلة بدون توقيع = 0 ؛ قديم طويل بدون توقيع. ضغط منطقي = 0 ؛ العد المنطقي = 1 ؛
في الإعداد ، أحدد المسامير الصحيحة وأضع النص الثابت على شاشة LCD
إعداد باطل () {Wire.begin () ؛ Serial.begin (9600) ؛ pinMode (encoder_A ، INPUT) ؛ pinMode (encoder_B، INPUT) ؛ 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 () ،
}
في الحلقة ، أتحقق أولاً مما إذا كان الفاصل الزمني أكثر من 500 مللي ثانية ، إذا كانت الإجابة بنعم ، فسيتم تحديث شاشة LCD. إذا لم يتم تحديد الزر الموجود على وحدة التشفير. إذا ضغطت على toggleBuffer اتصل. بعد ذلك يتم فحص المشفر. إذا كان الإدخال 0 منخفضًا (تم اكتشاف الدوران) ، فأنا أتحقق من الإدخال B ، إذا كان الإدخال B هو 0 I زيادة وعاء ، فأنا أقوم بالتناقص. بعد ذلك سيتم إرسال القيمة إلى DS1803 عبر wire.write.
حلقة فارغة() {
فترة()؛
إذا (digitalRead (buttonPin) == 1 && (الضغط == 0)) {toggleBuffer ()؛} إذا (digitalRead (buttonPin) == 0) {الضغط = 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 = ميلي () ، }}
toggleBuffer () باطلة {pressed = 1؛ إذا (i == 0) {i = 1 ؛} وإلا {i = 0 ؛}}
أولاً ، قمت بمسح المنطقة حيث يتعين علي كتابة المتغيرات. أفعل هذا لرسم مستطيل في هذه المنطقة. بعد ذلك أكتب المتغيرات على الشاشة.
writeToLCD () باطلة {Wire.requestFrom (controlByte، 2) ؛ potValue [0] = Wire.read () ، // قراءة البايت الأول potmeter potValue [1] = Wire.read ()؛ // قراءة عرض بايت مقياس البايت الثاني (40 ، 0 ، 40 ، 45 ، أبيض) ؛ // مسح شاشة متغيرة على شاشة LCD.setCursor (40 ، 10) ؛ display.print (potValue [0]) ؛ // اكتب قيمة مقياس الجهد الأول على شاشة LCD.setCursor (40 ، 22) ؛ display.print (potValue [1]) ؛ // اكتب قيمة مقياس الجهد الثاني على شاشة LCD.setCursor (60، (10 + i * 12)) ؛ display.print ("<") ؛ display.display () ، }
فاصل فارغ () {// مؤقت الفاصل الزمني لكتابة البيانات إلى شاشة LCD إذا ((مللي () - قديم الزمن)> 500) {writeToLCD () ؛ oldTime = ميلي () ؛ }}