فهرست مطالب:

پتانسیومتر دوگانه دیجیتال DS1803 با آردوینو: 5 مرحله
پتانسیومتر دوگانه دیجیتال DS1803 با آردوینو: 5 مرحله

تصویری: پتانسیومتر دوگانه دیجیتال DS1803 با آردوینو: 5 مرحله

تصویری: پتانسیومتر دوگانه دیجیتال DS1803 با آردوینو: 5 مرحله
تصویری: بااینکارماشینت مثل ساعت کارمیکنه بی سروصدا #مصرف سوخت#خلاقانه #آموزش 2024, جولای
Anonim
پتانسیومتر دیجیتال دوگانه DS1803 با آردوینو
پتانسیومتر دیجیتال دوگانه DS1803 با آردوینو

من دوست دارم استفاده از دستگاه دیجیتالی دیجیتال DS1803 را با آردوینو به اشتراک بگذارم. این 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 را با اتصال همه پین ها به زمین داده ام.

مرحله 2: Command Byte

دستور بایت
دستور بایت

نحوه عملکرد DS1803 را می توان در دستور بایت استفاده کرد. هنگامی که "نوشتن پتانسیومتر -0" را انتخاب می کنید ، هر دو پتانسیومتر انتخاب می شوند ، هنگامی که فقط می خواهید پتانسیومتر -0 را تنظیم کنید ، فقط باید اولین بایت داده را ارسال کنید. "بنویسید پتانسیومتر -1" فقط potmeter-1 را تنظیم کنید. "برای هر دو پتانسیومتر بنویسید" مقدار هر دو پتانسیومتر یکسان است.

مرحله 3: کنترل DS1803

کنترل DS1803
کنترل DS1803

بایت کنترل (شکل 3) دارای شناسه دستگاه است ، این همیشه ثابت می ماند. در مثال من A0 ، A1 و A2 0 هستند زیرا ما آدرس را با قرار دادن تمام پین های A روی زمین انتخاب می کنیم. آخرین بیت R/W با دستور "Wire.beginTransmission" و "Wire.requestFrom" در آردوینو روی 0 یا 1 تنظیم می شود. در شکل 5 می توانید کل تلگرام را مشاهده کنید. تلگرام خوانده شده در شکل 4 نشان داده شده است.

مرحله 4: تنظیم کنید

برپایی
برپایی

این مدار نحوه اتصال همه چیز را نشان می دهد. LCD نوکیا با اتصالات مختلف در دسترس است ، مطمئن شوید که دستگاه خود را درست وصل کرده اید. همچنین رمزگذار دوار نسخه های مختلف خود را ، برخی از مشترک در پین وسط برخی دیگر است. من یک شبکه فیلتر کوچک (مقاومت 470 اهم با درپوش 100nF) برای فیلتر کردن سیگنال های خروجی A و B رمزگذار قرار داده ام. من به این فیلتر احتیاج دارم زیرا خروجی نویز زیادی دارد. من همچنین یک تایمر خروج را در برنامه خود قرار دادم تا نویز را لغو کند. برای بقیه فکر می کنم مدار روشن است. 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} ؛ بایت controlByte = B0101000 ؛ // 7 بیت ، بایت commandByte = B10101001؛ // 2 بیت آخر انتخاب potmeter است. بایت potValue [2]؛ int i = 0 ؛ int deBounceTime = 10 ؛ // این مقدار را بسته به سر و صدای const int encoder_A = 8 تنظیم کنید؛ const int encoder_B = 9؛ const int buttonPin = 2؛ بدون علامت طولانی newDebounceTime = 0؛ بدون علامت قدیمی oldTime؛ بولی فشرده = 0 ؛ تعداد بول = 1 ؛

در تنظیم ، پین های مناسب را تعریف می کنم و متن استاتیک را روی LCD قرار می دهم

void setup () {Wire.begin ()؛ Serial.begin (9600)؛ pinMode (encoder_A ، INPUT) ؛ pinMode (encoder_B ، INPUT) ؛ pinMode (buttonPin ، INPUT) ؛ newDebounceTime = millis ()؛

display.begin ()؛

display.setContrast (50) ؛ display.clearDisplay ()؛ display.setTextSize (1) ؛ display.setTextColor (BLACK) ؛ 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 من گلدان افزایش ، بقیه را کاهش می دهم. پس از این مقدار از طریق wire.write به DS1803 ارسال می شود.

حلقه خالی () {

فاصله () ؛

if (digitalRead (buttonPin) == 1 && (pressed == 0)) {toggleBuffer ()؛} if (digitalRead (buttonPin) == 0) {pressed = 0؛}

if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++؛ if (pot > 25) {pot = 25؛}} else {pot -؛ if (pot <1) {pot = 1؛}} تعداد = 1؛ newDebounceTime = millis ()؛

Wire.beginTransmission (controlByte) ؛ // شروع به انتقال کنید

Wire.write (commandByte) ؛ // انتخاب potmeters Wire.write (قابلمه [0] * 10)؛ // ارسال یک بایت از اطلاعات potmeter Wire.write (pot [1] * 10)؛ // ارسال 2 بایت داده potmeter Wire.endTransmission ()؛ // توقف انتقال} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0؛ newDebounceTime = millis ()؛ }}

void toggleBuffer () {pressed = 1؛ اگر (i == 0) {i = 1؛} دیگری {i = 0؛}}

ابتدا ناحیه ای را که باید متغیرها را بنویسم پاک می کنم. این کار را می کنم تا یک مستطیل در این ناحیه رسم کنم. پس از آن متغیرها را روی صفحه می نویسم.

void writeToLCD () {Wire.requestFrom (controlByte، 2)؛ potValue [0] = Wire.read ()؛ // اولین potmeter byte potteValue [1] = Wire.read () را بخوانید؛ // صفحه دوم بایت potmeter display.fillRect (40 ، 0 ، 40 ، 45 ، WHITE) را بخوانید ؛ // پاک کردن متغیر روی صفحه نمایش LCD.setCursor (40 ، 10) ؛ display.print (potValue [0]) ؛ // اولین مقدار potmeter را در LCD display.setCursor (40 ، 22) بنویسید ؛ display.print (potValue [1]) ؛ // مقدار دوم potmeter را در LCD display.setCursor (60 ، (10 + i * 12)) بنویسید ؛ display.print ("<")؛ display.display ()؛ }

void interval () {// interval timer برای نوشتن اطلاعات روی LCD if ((millis () - oldTime)> 500) {writeToLCD ()؛ oldTime = millis ()؛ }}

توصیه شده: