جدول المحتويات:

DS1803 مقياس الجهد الرقمي المزدوج مع Arduino: 5 خطوات
DS1803 مقياس الجهد الرقمي المزدوج مع Arduino: 5 خطوات

فيديو: DS1803 مقياس الجهد الرقمي المزدوج مع Arduino: 5 خطوات

فيديو: DS1803 مقياس الجهد الرقمي المزدوج مع Arduino: 5 خطوات
فيديو: Lesson 9: Reading Voltage Using Arduino, Potentiometer AnalogRead SunFounder Kit | Robojax 2024, يوليو
Anonim
DS1803 مقياس الجهد الرقمي المزدوج مع Arduino
DS1803 مقياس الجهد الرقمي المزدوج مع Arduino

أحب مشاركة استخدام مقياس جهد رقمي DS1803 مع Arduino. يحتوي هذا IC على جهازي قياس رقمي يمكن التحكم فيهما من خلال واجهة بسلكين ، لذلك أستخدم مكتبة wire.h.

يمكن أن يحل هذا IC محل مقياس الجهد التناظري العادي. بهذه الطريقة يمكنك التحكم على سبيل المثال في مكبر الصوت أو مصدر الطاقة.

في هذا الدليل ، أتحكم في سطوع اثنين من مصابيح LED لإظهار العمل.

يحسب اردوينو نبضات المشفر الدوار ويضع القيمة في وعاء متغير [0] ووعاء [1]. عندما تضغط على المفتاح في المشفر ، يمكنك التبديل بين القدر [0] والوعاء [1].

تمت قراءة القيمة الفعلية للأواني مرة أخرى من DS1803 ووضعها في potValue متغير [0] و potValue [1] وعرضها على شاشة LCD.

الخطوة 1: توصيلات DS1803

اتصالات DS1803
اتصالات DS1803

هنا يمكنك رؤية وصلات DS1803. H هو الجانب العالي من مقياس الجهد ، L هو الجانب المنخفض و W الماسحة. SCL و SDA هي وصلات الناقل.

مع التوصيلات A0 و A1 و A2 ، يمكنك إعطاء DS1803 العنوان الخاص به ، وبهذه الطريقة يمكنك التحكم في المزيد من الأجهزة عبر ناقل واحد. في المثال الخاص بي ، قمت بإعطاء DS1803 adres 0 عن طريق توصيل جميع المسامير بالأرض.

الخطوة 2: الأمر بايت

بايت الأمر
بايت الأمر

يمكن استخدام الطريقة التي يعمل بها DS1803 في بايت الأمر. عند تحديد "كتابة مقياس الجهد 0" ، يتم تحديد كلا المقياسين ، عندما تريد فقط ضبط مقياس الجهد 0 ، ما عليك سوى إرسال بايت البيانات الأول. "اكتب مقياس الجهد -1" فقط اضبط مقياس الجهد -1. يعطي "الكتابة إلى كلا مقياسي فرق الجهد" كلا المقياسين نفس القيمة.

الخطوة 3: التحكم في DS1803

التحكم في DS1803
التحكم في 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 = ميلي () ؛ }}

موصى به: