• اتصال صفحه نمایش آردوینو اتصال صفحه متنی به آردوینو

    این دستورالعمل نحوه اتصال به آردوینو و استفاده از صفحه نمایش LCD را در ابعاد 16x2 و 20x4 نشان می دهد.

    این نمایشگرها دارای نور پس زمینه LED کم مصرف هستند و از +5 ولت کار می کنند. برای اتصال این نمایشگرهای LCD به 6 پین نیاز دارید. می توانید از هر پین در آردوینو خود استفاده کنید!

    دستورالعمل بر اساس صفحه نمایش LCD Adafruit - آبی و سفید 16x2، RGB 16x2 LCD، و آبی و سفید 20x4، RGB 20x4 نوشته شده است. اگر از یک صفحه نمایش LCD از سازنده دیگری استفاده می کنید، هیچ تضمینی 100٪ وجود ندارد که کار کند (اگرچه در 99٪ موارد کار می کند).

    کاراکتر در مقابل LCD گرافیکی - تفاوت چیست؟

    تعداد زیادی صفحه نمایش LCD مختلف وجود دارد. در این مقاله به بررسی LCD های کاراکتری می پردازیم. صفحه نمایش های مشابه- گزینه ای عالی برای نمایش متن. شما همچنین می توانید نمایش آیکون ها را شخصی سازی کنید، اما اندازه این آیکون ها نباید بیشتر از 7 پیکسل باشد (خیلی کوچک!).

    عکس زیر نمونه ای از مانیتور LCD 16 کاراکتری را با دو خط نشان می دهد:

    اگر به دقت نگاه کنید، مستطیل های کوچکی را می بینید که در آن نمادها نمایش داده می شوند. هر مستطیل یک شبکه جداگانه از پیکسل ها است. برای مقایسه، صفحه نمایش LCD گرافیکی در زیر نشان داده شده است:

    صفحه نمایش کریستال مایع گرافیکی دارای یک شبکه بزرگ از پیکسل ها (در این مثال- 128x64). می توانید متن را روی آن نمایش دهید، اما بهتر است تصاویر را نمایش دهید. LCD های گرافیکی معمولا بزرگتر هستند، پین های بیشتری برای اتصال دارند و استفاده از آنها تا حدودی دشوارتر از LCD های متنی است.

    در این مقاله، ما فقط صفحه نمایش متن / کاراکتر را پوشش خواهیم داد!

    مدل های مختلف صفحه نمایش ال سی دی

    بعد از اینکه نوع صفحه نمایش های مورد نظر را محدود کردیم، بیایید ببینیم آنها چه هستند.


    اگرچه آنها فقط برای نمایش متن استفاده می شوند، اما وجود دارند مدل های مختلفو عوامل شکل: در گوشه سمت چپ بالای صفحه LCD 20x4 با متن سفید در پس‌زمینه آبی، در سمت راست بالا - 16x4 با متن سیاه در پس‌زمینه سبز، در پایین سمت چپ - 16x2 با متن سفید در پس‌زمینه آبی و 16x1 با متن سیاه در پس‌زمینه خاکستری.

    خبر خوب این است که همه این صفحه نمایش ها قابل تعویض هستند. اگر یکی از آنها را سفارشی کرده اید، می توانید آن را با مدل دیگری جایگزین کنید. طرح آردوینو باید کمی اصلاح شود، اما سیم کشی یکسان است!


    در این قسمت از صفحه نمایش LCD با یک ریل و 16 پین برای اتصال استفاده می کنیم (عکس بالا را ببینید). همچنین یک LCD با 2 ریل با 8 پین برای اتصال (در شکل زیر) وجود دارد.


    اتصال مدل دوم به برد مدار بدون لحیم کاری دشوارتر است.

    اتصال صفحه نمایش LCD کاراکتری به آردوینو

    نصب ریل های تماسی


    علاوه بر صفحه نمایش LCD، به تسمه اضافی نیز نیاز خواهید داشت. ابتدا یک پتانسیومتر 10 کیلو اهم. با استفاده از پتانسیومتر کنتراست نمایشگر را تنظیم می کنیم. هر صفحه نمایش LCD دارای تنظیمات کنتراست متفاوتی است، بنابراین نمی توانید بدون تنظیم انجام دهید. علاوه بر این، به یک ریل پین 0.1 اینچی نیاز دارید.


    اگر ریل تماس خیلی طولانی باشد، تماس های اضافیمد روز فقط قطع!

    باید پین ها را به ال سی دی لحیم کنید.

    هنگام لحیم کاری، بسیار مراقب باشید که به برد برد خود آسیب نرسانید! ابتدا می توانید اولین و 16 مخاطب را "چاپ" کنید و سپس بقیه را لحیم کنید.


    برق و نور پس زمینه

    برق و روشنایی را وصل کنید

    توضیحات


    ما شروع به ورود به چیزهای جالب می کنیم! ال سی دی خود را روی تخته نان نصب کنید.


    ما برد برد را از آردوینو خود تغذیه می کنیم. +5V را به ریل قرمز و Gnd را به آبی وصل کنید.


    پس از آن، نور پس زمینه صفحه LCD خود را وصل می کنیم. پایه 16 را به gnd و پایه 15 را به +5 ولت وصل کنید. اکثر صفحه نمایش های LCD دارای مقاومت نور پس زمینه هستند.

    اگر هیچ مقاومتی روی ماژول شما وجود ندارد، باید یک مقاومت بین 5 ولت و پایه 15 اضافه کنید. برای محاسبه مقدار مقاومت ها، حداکثر جریان را برای تامین نور پس زمینه و مقدار تقریبی افت ولتاژ از برگه اطلاعات بررسی کنید. افت ولتاژ را از 5 ولت کم کنید، سپس بر حداکثر جریان تقسیم کنید و تا نزدیکترین مقدار مقاومت استاندارد بالاتر گرد کنید. به عنوان مثال، اگر افت ولتاژ 3.5 ولت و جریان 16 میلی آمپر باشد، مقدار مقاومت این خواهد بود: (5 - 3.5)/0.016 = 93.75 اهم، یا 100 اهم به مقدار استاندارد گرد شده است. اگر نمی توانید دیتاشیت را پیدا کنید، از یک مقاومت 220 اهم استفاده کنید. درست است، در این مورد، نور پس زمینه می تواند کاملا کم رنگ باشد.


    آردوینو خود را به برق وصل کنید. نور پس زمینه باید روشن شود.

    ضمناً برخی از صفحات LCD ارزان قیمت نور پس زمینه ندارند!

    طرحی برای تنظیم کنتراست

    مدار کنتراست

    توضیحات


    پتانسیومتر را نصب کنید. در عکس سمت راست پین 1 قرار دارد.


    یک طرف پتانسیومتر را به +5 ولت و طرف دیگر را به Gnd وصل کنید. پایه وسط پتانسیومتر را به پایه 3 روی LCD وصل کنید.


    اکنون منطق صفحه نمایش خود را به هم وصل می کنیم - این یک مدار جدا از نور پس زمینه است! پایه 1 به Gnd و پایه 2 به +5V می رود.


    آردوینو خود را روشن کنید. اگر روشن است صفحه نمایش ال سی دینور پس زمینه وجود دارد، باید روشن شود. دستگیره پتانسیومتر را بچرخانید تا اولین مستطیل از پیکسل ها را در خط اول ببینید.

    اگر همه چیز کار کرد، تبریک می گویم. یعنی منطق، نور و کنتراست کار می کند! اگر درست نشد، تا زمانی که متوجه نشدید اشتباه چیست، به مراحل بعدی آموزش ادامه ندهید!

    اتصال نهایی

    D0 تا D7، RS، EN و RW. D0-D7 پین هایی هستند که مقادیر ارسال شده به نمایشگر را ذخیره می کنند. پین RS به کنترل کننده می گوید که آیا داده ها را نمایش خواهیم داد (به عنوان مثال، کاراکتر اسکی) یا یک بایت کنترل است (مثلاً تغییر موقعیت مکان نما). پین EN مخفف «فعال» است، با این پین به ال سی دی می گوییم چه زمانی داده ها آماده خواندن هستند. پین RW برای تنظیم جهت استفاده می شود - ما می خواهیم داده ها را از صفحه نمایش (معمولاً) یا بخوانیم (که کمتر استفاده می شود).

    لازم نیست همه این پین ها به آردوینو متصل شوند. برای مثال، اگر فقط داده ها را روی صفحه نمایش می دهیم، لازم نیست از RW استفاده کنیم، بنابراین کافی است آن را به پین ​​Gnd "کشش" کنیم. علاوه بر این، امکان ارتباط با صفحه LCD با استفاده از 4 پین به جای 8 وجود دارد. احتمالاً یک سوال مشروع، در چه مواردی از 8 کنتاکت استفاده می شود؟ به احتمال زیاد، این بر سرعت انتقال داده تأثیر می گذارد. یعنی با استفاده از 8 مخاطب به جای 4 مخاطب می توانید سرعت تبادل اطلاعات را 2 برابر کنید. که در این مورد، سرعت مهم نیست، بنابراین برای اتصال LCD به آردوینو از 4 پین استفاده می کنیم.

    بنابراین، ما به 6 پین نیاز داریم: RS، EN، D7، D6، D5 و D4.

    برای کار با صفحه LCD، از کتابخانه LiquidCrystal استفاده می کنیم که فرآیند تنظیم پین ها را بسیار ساده می کند. یکی از مزایای این کتابخانه این است که می توانید از هر پایه ای در آردوینو برای اتصال پین های LCD استفاده کنید. بنابراین در پایان این راهنما، اگر برای پروژه شما حیاتی است، می توانید به راحتی پین ها را تغییر دهید.

    اتصال نهایی نمایشگر

    توضیحات


    همانطور که در بالا ذکر شد، ما از پین RW استفاده نمی کنیم، بنابراین آن را به زمین می کشیم. این پین 5 است.


    پس از اتصال RS - این پین شماره 4 است. ما از سیم قهوه ای برای اتصال آن به پین ​​دیجیتال شماره 7 در آردوینو استفاده می کنیم.


    با یک سیم سفید، پین EN - پین شماره 6 را به پین ​​دیجیتالی شماره 8 آردوینو متصل کنید.


    نوبت به مخاطبین داده رسید. DB7 پین شماره 14 روی LCD است. با سیم نارنجی به پین ​​شماره 12 در آردوینو متصل می شود.


    سه پین ​​داده باقی مانده است، DB6 (پایه شماره 13 زرد)، DB5 (پایه شماره 12 سبز) و DB4 (پایه شماره 11 آبی). آنها به ترتیب به پین ​​های 11، 10 و 9 آردوینو متصل می شوند.


    در نتیجه اتصال، چیزی شبیه به عکس سمت چپ دریافت خواهید کرد.

    استفاده از LCD کاراکتری

    وقت آن است که طرح را در آردوینو آپلود کنید تا صفحه LCD را کنترل کنید. کتابخانه LiquidCrystal به طور پیش فرض در Arduino IDE نصب شده است. پس کافی است یکی از نمونه ها را دانلود کرده و با توجه به پین ​​هایی که برای اتصال استفاده کرده ایم کمی تنظیم کنیم.

    فایل طرح → مثال ها → کریستال مایع → HelloWorld را باز کنید.

    به روز رسانی اطلاعات در مورد پین. به دنبال خط زیر هستید:

    ال سی دی LiquidCrystal (12، 11، 5، 4، 3، 2);

    و آن را به:

    اکنون می توانید اسکچ را در آردوینو کامپایل و آپلود کنید.


    در صورت لزوم کنتراست را تنظیم کنید.


    طبیعتا می توانید از نمایشگر LCD در هر اندازه ای استفاده کنید. به عنوان مثال، عکس زیر عملکرد LCD 20x4 را نشان می دهد.


    یا متن سیاه روی پس‌زمینه سبز:


    یکی از مزایای صفحه نمایش هایی با متن مشکی در پس زمینه سبز، امکان خاموش کردن نور پس زمینه است.


    ما از چند خط استفاده می کنیم

    بیایید ببینیم LCD چگونه پیام های طولانی را مدیریت می کند و از خطوط متعدد استفاده می کند. برای مثال، اگر خط زیر را تغییر دهید:

    lcd.print("سلام، دنیا!");

    برای بعدی:

    lcd.print("سلام، دنیا! این یک پیام طولانی است");

    صفحه نمایش ال سی دی 16x2 همه چیز را بعد از نویسه 16 کوتاه می کند:


    اما یک صفحه نمایش LCD 20x4 کاراکترهای نمایش داده نشده را از خط اول تا سوم حمل می کند (خط دوم در خط چهارم ادامه خواهد داشت). خیلی راحت نیست، اما در این مرحله باید آن را تحمل کنید. بنابراین هنگام نمایش رشته های بلند، کاراکترها را بشمارید تا از طول مجاز بیشتر نشود.


    LCD با نور پس زمینه RGB

    این صفحه نمایش ها درست مانند صفحه نمایش های معمولی کار می کنند، اما دارای سه LED (قرمز، سبز، آبی) برای نور پس زمینه هستند، بنابراین می توانید از رنگ های مختلف نور پس زمینه استفاده کنید.

    پس از اتصال LCD و بررسی آن طبق دستورالعمل های بالا، LED ها را به پین ​​های آنالوگ PWM آردوینو خود وصل کنید تا رنگ را به خوبی تنظیم کنید. اگر از Arduino Uno استفاده می کنید، باید سه پین ​​PWM رایگان برای شما باقی بماند. LED قرمز (پین 16 در LCD) را به Digital 3، LED سبز (پایه 17) را به Digital 5 و LED آبی (پین 18 در LCD) را به دیجیتال 6 وصل کنید. ماژول LCD از قبل دارای مقاومت است، بنابراین دیگر نیازی به اتصال ندارید.


    اکنون طرح زیر را در آردوینو آپلود کنید.

    // شامل کتابخانه ها در طرح:

    #عبارتند از

    #عبارتند از

    #تعریف REDLITE 3

    #تعریف GREENLITE 5

    #تعریف BLUELITE 6

    // تعداد مخاطبینی که استفاده می کنیم را اعلام کنیم

    // برای انتقال داده

    ال سی دی LiquidCrystal (7، 8، 9، 10، 11، 12);

    // روشنایی را می توان در محدوده 0 -> 255 تغییر داد

    روشنایی int = 255;

    // تعداد ستون ها و ردیف ها را روی LCD تنظیم کنید:

    lcd.begin(16, 2);

    // نمایش پیام در LCD.

    lcd.print ("نمایش RGB 16x2");

    lcd.setCursor(0,1);

    lcd.print ("LCD چند رنگ");

    pinMode (REDLITE، OUTPUT)؛

    pinMode (GREENLITE، OUTPUT)؛

    pinMode (BLUELITE، OUTPUT)؛

    روشنایی = 100;

    برای (int i = 0; i< 255; i++) {

    setBacklight(i, 0, 255-i);

    برای (int i = 0; i< 255; i++) {

    setBacklight(255-i, i, 0);

    برای (int i = 0; i< 255; i++) {

    setBacklight(0, 255-i, i);

    void setBacklight(uint8_t r, uint8_t g, uint8_t b) (

    // LED قرمز را تنظیم کنید - از بقیه روشن تر است!

    r = نقشه (r, 0, 255, 0, 100);

    g = نقشه (g, 0, 255, 0, 150);

    r = نقشه (r، 0، 255، 0، روشنایی)؛

    g = نقشه (g، 0، 255، 0، روشنایی)؛

    b = نقشه (b، 0، 255، 0، روشنایی)؛

    // آند معمولی، پس معکوس کنید!

    r = نقشه (r, 0, 255, 255, 0);

    g = نقشه (g, 0, 255, 255, 0);

    b = نقشه (b, 0, 255, 255, 0);

    Serial.print("R ="); Serial.print(r, DEC);

    Serial.print("G ="); Serial.print (g، DEC);

    Serial.print(" B = "); Serial.println(b، DEC);

    analogWrite (REDLITE، r);

    analogWrite (GREENLITE، g)؛

    analogWrite (BLUELITE، b);

    نتیجه این طرح در ویدیوی زیر نشان داده شده است.

    دستور createChar

    احتمالاً می خواهید استفاده کنید نمادهای خاص. برای مثال، اگر در حال طراحی پروژه ای با استفاده از سنسور دما (ترموکوپل) هستید، نماد (°) به کارتان می آید.

    این را می توان با استفاده از دستور createChar انجام داد. همچنین، ممکن است یک وب سایت عالی پیدا کنید که تمام کارهای کثیف ایجاد نمادهای جدید را برای شما انجام دهد!

    نظرات، سوالات خود را بنویسید و به اشتراک بگذارید تجربه شخصیزیر در بحث، ایده ها و پروژه های جدید اغلب متولد می شوند!

    امروز سعی خواهیم کرد به خروجی نمایش متن بپردازیم. محبوب ترین تراشه HD44780 (یا KS0066 سازگار با آن) است. ما مزایا و معایب آنها را لیست می کنیم:

    طرفداران:

    1. قیمت پایین.
    2. برنامه نویسی آسان، کد برای هر مدلی یکسان خواهد بود.
    3. انواع مدل ها - رایج ترین: 8x1، 16x2، 20x4. شما همچنین می توانید مدل های بسیار عجیب و غریب 40x4 را پیدا کنید، یعنی. چهار خط هر کدام 40 کاراکتر.
    4. امکان اتصال چند نمایشگر به یک آردوینو.
    5. امکان تنظیم نمادهای خود

    معایب:

    1. همه نمایشگرها از حروف روسی پشتیبانی نمی کنند. برای جزئیات بیشتر، توضیحات مربوط به یک نمایشگر خاص را ببینید.
    2. اتصال بدون استفاده از باس I2C نیاز به استفاده از 10-16 سیم دارد که بسیار بد است. با I2C - 4 سیم.

    بر اساس موارد فوق، من فقط اتصال صفحه نمایش را از طریق I2C در نظر خواهم گرفت.

    بیایید تلاش کنیم.

    آنچه ما نیاز داریم.

    1. آردوینو (من مدل نانو را گرفتم)
    2. نمایش بر روی تراشه HD44780 با یا بدون ماژول I2C (پس به یک برد IIC جداگانه LC1602 نیاز دارید) - در مورد ما 16x2 بدون ماژول I2C
    3. مقاومت 10K (در صورت نیاز) کنترل دستیروشنایی).
    4. پتانسیومتر (اگر به کنترل نور پس زمینه دستی نیاز دارید).
    5. تخته نان برد.
    6. کتابخانه LiquidCrystal_I2C. http://www.ansealk.ru/files/LiquidCrystal_V1.2.1.zip

    انحراف کوچک شماره 1: چگونه یک صفحه نمایش را با ماژول I2C تشخیص دهیم؟

    در واقع، همه چیز بسیار ساده است. اگر با چرخاندن نمایشگر، بلوک طولانی از اتصالات (معمولاً 16 قطعه) را مشاهده کنیم، در این صورت هیچ ماژول I2C روی صفحه نمایش وجود ندارد:

    و این همان چیزی است که صفحه نمایش با ماژول I2C که قبلاً نصب شده است به نظر می رسد:

    برای اتصال آردوینو از پین های SCL، SDA، VCC، GND استفاده می شود. دو کنتاکت سمت چپ - در تصویر با یک جامپر بسته شده اند - برای کارکرد نور پس زمینه لازم است.

    اگر ماژول متصل نیست، باید خودتان این کار را انجام دهید. نکته اصلی که باید به آن توجه کنید اتصال مخاطبین است نظم درست. به عنوان یک قاعده، اولین و 16 پین برچسب گذاری می شوند. گاهی اوقات اتفاق می افتد که مخاطبین 15-16، که از طریق آنها نور پس زمینه کنترل می شود، می توانند قبل از اولین قرار گیرند (در این صورت آنها شماره گذاری می شوند). در خود ماژول، اولین پین را می توان نه با یک عدد، بلکه با یک مربع در اطراف خود پین نشان داد.

    طرح:

    بیایید نمودار زیر را جمع آوری کنیم:

    توجه شما را به نکات زیر جلب می کنم:

    1. اگر به صفحه نمایشی برخورد کردید که ماژول I2C قبلاً روی آن لحیم شده است، سیم هایی که با رنگ خاکستری مشخص شده اند مورد نیاز نخواهند بود. در بقیه - هیچ چیز تغییر نمی کند.
    2. اگر نمی خواهیم روشنایی صفحه نمایش را تغییر دهیم، طرح ساده می شود:

    همانطور که متوجه شدید، دو پین در ماژول I2C با برچسب LED مسئول نور پس زمینه نمایشگر هستند. اگر نمی خواهیم از کنترل روشنایی استفاده کنیم، می توانیم به سادگی آنها را ببندیم.

    حالا بیایید کد را تجزیه کنیم.

    در اینجا تقریباً همه چیز باید برای ما آشنا باشد. در خط 5 آدرس دستگاه را نشان می دهیم. در خطوط 16 و 17 تعداد کاراکترها در هر خط و تعداد خطوط. در خطوط 20-22 - یک شی برای کار با نمایشگر ایجاد می کنیم و پارامتر کار با آن را شرح می دهیم.

    انحراف کوچک شماره 2: چگونه آدرس یک دستگاه I2C را پیدا کنیم؟

    در بیشتر موارد، آدرس را می توان در دیتاشیت تراشه ای که دستگاه I2C روی آن ساخته شده است یافت. اگر این امکان پذیر نیست، در اینجا پیوندی به آرشیو با طرح و نمودارها وجود دارد - http://www.ansealk.ru/files/Arduino_lcd_i2c.zip که آدرس تمام دستگاه های متصل شده از طریق گذرگاه I2C را تعیین می کند. فقط باید دستگاه را به آردوینو متصل کنید، طرح را آپلود کنید، کنسول را باز کنید و آدرس را ببینید.

    در اینجا ما تابعی را می بینیم که در واقع با خروجی نمایشگر سروکار دارد. اصل خروجی چیزی شبیه به این است:

    با استفاده از تابع setCursor() موقعیت شروع خروجی را تنظیم کنید

    چاپ رشته با تابع print().

    بعد از آن تابع بعدی print() خروجی را از موقعیت بعدی شروع می کند که پس از آن ورودی قبلی به پایان می رسد. همچنین توجه داشته باشید که برخلاف خروجی کنسول، تابع println() در اینجا برای تکمیل خروجی و تغذیه خط استفاده نمی شود.

    بنابراین، کتیبه "Test LCD1602" در خط اول روی صفحه ظاهر می شود و خط دوم وضوح صفحه نمایش و شمارنده را نشان می دهد که نشان می دهد طرح ما چند چرخه کار کرده است.

    اما اگر نیاز به نمایش مقادیر متغیر زیادی روی صفحه داشته باشیم، این روش خیلی راحت نیست. واقعیت این است که رویه نمایش نمایشگر بسیار انرژی بر و کند است و ما خروجی را در این عملکرد تا 7 بار انجام می دهیم. ساختن رشته از قبل و سپس خروجی کامل آن بسیار آسان تر خواهد بود. تابع ورودی فرمت شده sprintf() در این امر به ما کمک می کند.

    یادداشت جانبی #3: تابع ورودی فرمت شده sprintf().

    چندین بسیار وجود دارد ویژگی های راحتبرای چاپ رشته ها - به آنها توابع خروجی قالب بندی شده می گویند - printf (از کلمات print و format). در ما مورد خاصما به تابع sprintf علاقه مند هستیم که چیزی را روی صفحه نمایش نمی دهد، اما رشته ای را برای خروجی بعدی تشکیل می دهد. چیزی شبیه این به نظر می رسد:

    sprintf (str , "رشته %d به خروجی ", i );

    این تابع با استفاده از یک الگو (زرد) رشته ای (که با رنگ آبی مشخص شده است) تولید می کند که در آن مقادیر متغیرها (سبز) جایگزین می شوند. نتیجه در یک متغیر رشته ای (قرمز) نوشته می شود.

    می تواند چندین الگو و متغیر وجود داشته باشد. در این حالت متغیرها با کاما از هم جدا می شوند. مهمتر از همه، مطمئن شوید که تعداد الگوهای یک خط با تعداد متغیرها مطابقت دارد. متغیرهای قالب ها به صورت متوالی گرفته می شوند، یعنی. مقدار متغیر اول با الگوی اول جایگزین می شود، مقدار متغیر دوم با الگوی دوم جایگزین می شود و غیره.

    قالب ها چیست؟ هر الگوی با یک کاراکتر "%" شروع می شود و با یکی از ده کاراکتر (در مورد آردوینو - هفت) به پایان می رسد. بین آنها، ممکن است اطلاعات بسیار زیادی در مورد نحوه نمایش مقدار وجود داشته باشد، یا ممکن است اصلاً چیزی وجود نداشته باشد.

    بیایید ببینیم چه چیزی می تواند در قالب باشد. به طور کلی، قالب به شکل زیر است:

    %[flag ][width ][.precision ]نوع

    براکت های مربع نشان می دهد که عنصر محصور در آنها ممکن است حذف شده باشد. نوار عمودی نشان می دهد که یکی از مقادیر مشخص شده باید در این قسمت انتخاب شود (در مورد ما، یکی از حروف H، I، یا L).

    بیایید ابتدا به عنصر مورد نیاز الگو - نوع - بپردازیم. مشخص می کند که چه نوع متغیری خروجی خواهد بود و می تواند یکی از مقادیر زیر را بگیرد:

    سمبل معنی
    ج یک شخصیت
    س رشته کاراکتر
    د، من عدد صحیح اعشاری امضا شده
    o عدد صحیح هشتی
    تو عدد صحیح اعشاری بدون علامت
    x، x عدد صحیح هگزادسیمال
    پ اشاره گر (هگزادسیمال)
    f عدد کسری در قالب ثابت
    e، E عدد کسری در قالب علمی
    g، G عدد کسری در قالب علمی یا ثابت

    خاکستری آن دسته از انواعی را که هنگام کار با آردوینو قابل اجرا نیستند مشخص کرده است. بنابراین، برای خروجی یک رشته، باید "%s" و برای خروجی یک عدد صحیح - "%d" را مشخص کنید.

    بعد، فیلد عرض را در نظر بگیرید. عدد موجود در آن نشان دهنده حداقل عرض فیلدی است که الگو در آن نمایش داده می شود. اگر اندازه مقدار در متغیر کمتر باشد - فیلد با فاصله تکمیل می شود، اگر بیشتر باشد - رکورد فراتر از فیلد خواهد رفت. بنابراین الگوی "%6d" برای عدد 385، 385 را چاپ می کند (به سه فاصله قبل از عدد توجه کنید).

    مشخص کننده دقت همیشه با یک نقطه شروع می شود و عدد زیر آن بسته به نوع مقدار، اعمال مختلفی را نشان می دهد. برای انواع "d,o,u,x" حداقل تعداد کاراکترهایی که باید در طول پردازش ظاهر شوند را نشان می دهد. برای نوع "f" - تعداد ارقام اعشاری. برای نوع "s"، حداکثر تعداد کاراکترهای رشته ای که باید خروجی شود. به عنوان مثال، "%6.1f" برای عدد 34.2345 "34.1" را نشان می دهد (توجه داشته باشید که نقطه نیز یک علامت در نظر گرفته می شود و دو فاصله قبل از عدد وجود دارد). یا الگوی "%.3s" از رشته "precision" فقط سه کاراکتر اول - "dot" را نمایش می دهد.

    پرچم به شما امکان می دهد نمایش مقدار نمایش داده شده را تغییر دهید:

    می توانید اطلاعات بیشتری در مورد الگوهای تابع printf در اینترنت بخوانید. اینجا دادم بررسی کوتاهمتداول ترین ویژگی های مورد استفاده

    بنابراین، تابع خروجی ما، بازنویسی شده برای استفاده از خروجی فرمت شده، به صورت زیر خواهد بود:

    توجه داشته باشید که در خطوط 33 و 37 ما یک خط کامل تولید می کنیم تا خروجی داده شود و در خطوط 34 و 38 آنها را چاپ می کنیم.

    در نهایت، تنظیمات مورد علاقه ما و توابع حلقه.

    در خط 47 وضوح صفحه نمایش را تنظیم می کنیم، در خط 48 نور پس زمینه را روشن می کنیم (روشنایی آن را می توان با پتانسیومتر تنظیم کرد). در خط 49، شمارنده حلقه را روی صفر قرار دهید. در خط 37 در حین خروجی آن را یک عدد افزایش می دهیم (ساخت count++ را به خاطر دارید؟). در نهایت، در خط 56، تابع نمایش را که قبلاً بحث شد فراخوانی می کنیم. همه.

    چه چیزی را می توان تغییر داد یا بهبود بخشید؟

    به عنوان مثال، شما می توانید انجام دهید کنترل خودکارروشنایی بسته به میزان روشنایی، با استفاده از یک مقاومت نوری یا یک حسگر نور از ایستگاه هواشناسی که در چندین مقاله قبلاً مورد بحث قرار گرفت. به عنوان مثال، در نور شدید - روشنایی نور پس زمینه را افزایش دهید و در شب - آن را کاهش دهید. یا وقتی یک شی جلوی نمایشگر ظاهر می شود سنسور حرکت را پیچ کنید و نور پس زمینه را روشن کنید یا ... در کل فکر می کنم قبلاً متوجه شده اید که در صورت تمایل با تعویض یک یا چند جزء و نوشتن یک کد می توانید کاربرد نمایشگر را به طور جدی بهبود بخشید. همچنین می‌توانیم از نمادهای سفارشی برای نمایش روی نمایشگر استفاده کنیم.

    من تمام این سوالات را در اینجا در نظر نمی گیرم، زیرا آنها خارج از محدوده بررسی برای مبتدیان هستند.

    و برای امروز همه چیز دارم.

    آردوینو. اتصال صفحه نمایش LCD

    26 امتیاز، میانگین امتیاز: 5 از 5

    در این درس، در مورد نشانگرهای کریستال مایع سنتز علامت، اتصال آنها به برد آردوینو و کنترل نشانگرها با استفاده از کتابخانه های LiquidCrystal و LiquidCrystalRus صحبت خواهیم کرد.

    نشانگرهای هفت بخش LED، اگرچه ارزان ترین گزینه نشانگر هستند لوازم برقی، اما استفاده از آنها با دو اشکال قابل توجه محدود شده است.

    • عملاً اتصال بیش از 8 بیت به میکروکنترلر مشکل است نشانگرهای LED. نیاز به تعداد زیادی خروجی، جریان های شاخص قابل توجه، کلیدهای پیچیده، فرکانس پایینبازسازی و غیره
    • امکان نمایش اطلاعات کاراکترها در نمایشگرهای هفت بخش وجود ندارد.

    برای خروجی اطلاعات متنییا اعداد بزرگتر از 4 رقم، استفاده از نشانگرهای سنتز علامت کریستال مایع (نمایشگر) بسیار کاربردی تر است. مزایای آنها عبارتند از:

    • رابط مناسب برای اتصال به میکروکنترلرها؛
    • مصرف برق کم؛
    • ولتاژ منبع تغذیه کم؛
    • دوام

    طیف گسترده ای از نمایشگرهای کریستال مایع (LCD) در بازار وجود دارد. تولید کنندگان مختلف. تقریباً همه آنها در پارامترها، سیگنال های رابط، دستورات کنترل مشابه هستند. که در این لحظهرایج ترین نشانگرهای LCD روشن بازار روسیهدستگاه های تولید شده توسط Winstar، تایوان هستند. به شاخص های این شرکت اشاره می کنم. اما این اطلاعات برای نمایشگرهای LCD کاراکتری دیگر سازندگان کاملاً قابل استفاده است.

    اطلاعات کلی.

    نشانگرهای ترکیبی یا نمادین اطلاعات را در قالب آشنایی با عمق بیت معین نمایش می دهند. یک شخصیت نشان دهنده یک شخصیت است. تعداد آشنایی، عمق بیت نشانگر را تعیین می کند. اطلاعات مربوط به نشانگرها را می توان در چندین خط نمایش داد، بنابراین برای نشانگرهای این نوع، تعداد کاراکترها در هر خط و تعداد خطوط همیشه نشان داده می شود.

    اطلاعات بر روی یک ماتریس کریستال مایع با نمایش داده می شود نور پس زمینه LED. نور پس‌زمینه در رنگ‌های متنوعی ارائه می‌شود که اطلاعات متنی تک رنگ را تا حد زیادی زنده می‌کند.

    برای کنترل ماتریس کریستال مایع و سازماندهی رابط نشانگر، کنترلر داخلی HD44780 یا آن آنالوگ های کامل. این کنترلر سیگنال های رابط نشانگر و دستورات کنترل را تعریف می کند.

    HD44780 به استاندارد واقعی برای نمایشگرهای کریستال مایع (LCD) تبدیل شده است. مستندات فنیتوسط کنترلر HD44780 فرمت PDFدر این لینک قابل مشاهده است. شاید کسی مستندات یکی از آنالوگ های این کنترلر - SPLC780D را دوست داشته باشد. لینک پی دی اف - .

    ال سی دی های کاراکتریاندیکاتورهای Winstar

    من گزینه های زیر را برای نشانگرهای LCD این شرکت می دانم.

    نوع نشانگر فرمت نمایش، کاراکترهای x خطوط ابعاد، میلی متر ابعاد ناحیه قابل مشاهده، میلی متر پیوند به اسناد، فرمت PDF
    WH0802A1 8x2 58x32 38x16
    WH1202A 12x2 55.7 x 32 46x14.5
    WH1601A 16*1 80x36 66x16
    WH1601B 16*1 85x28 66x16
    WH1601L 16*1 122x33 99x13
    WH1602A 16x2 84x44 66x16
    WH1602B 16x2 80x36 66x16
    WH1602C 16x2 80x36 66x16
    WH1602D 16x2 85x30 66x16
    WH1602J 16x2 80x36 66x16
    WH1602L1 16x2 122x44 99x24
    WH1602M 16x2 85 x 32.6 66x16
    WH1602O 16x2 85 × 25.2 66x16
    WH1602P 16x2 85 × 25.2 66x16
    WH1602S 16x2 59 × 29.3 52x15
    WH1602T 16x2 65.4 x 28.2 54.8x19
    WH1602W 16x2 80x36 66x16
    WH1602V2 16x2 66.7 x 23.3 61 × 15.9
    WH1604A 16x4 87*60 62x26
    WH1604B 16x4 70.6x60 60 x 32.6
    WH2002A 20x2 116x37 85x18.6
    WH2002D 20x2 89 × 21.5 75x15
    WH2002L 20x2 180x40 149x23
    WH2002M 20x2 146x43 123x23
    WH2004A 20x4 98x60 77 × 25.2
    WH2004B 20x4 98x60 77 × 25.2
    WH2004D 20x4 77x47 60x22
    WH2004G 20x4 87x58 74.4 x 24.8
    WH2004H 20x4 87x58 74.4 x 24.8
    WH2004L 20x4 146x62.5 123.5x43
    WH2402A 24x2 118x36 94.5x16
    WH4002A 40x2 182 x 33.5 154.4 x 16.5
    WH4004A 40x4 190x54 147 × 29.5

    اتصال LCDنشانگر میکروکنترلر

    نمودارهای اتصال، نمودارهای زمان بندی، پارامترهای سیگنال، دستورات کنترل، کدهای کاراکتر به تفصیل در مستندات کنترلر HD44780 توضیح داده شده است. من فقط لازم ترین داده ها را در مورد اتصال نشانگرها به میکروکنترلرها می دهم.

    به عنوان یک قاعده، نشانگرهای LCD دارای 16 پین هستند.

    شماره خروجی علامت I - ورودی O - خروجی تخصیص سیگنال
    1 در مقابل - زمین (سیم مشترک)
    2 vdd - منبع تغذیه + 5 ولت
    3 Vo - کنترل کنتراست نمایشگر ورودی برای اتصال خروجی میانی تقسیم کننده ولتاژ + 5 ولت. می توانید از یک مقاومت پیرایش با مقاومت 10-20 کیلو اهم استفاده کنید.
    4 RS من انتخاب ثبت نام: 0 – ثبت فرمان. 1 - ثبت داده ها. سطح پایینسیگنال به این معنی است که یک فرمان در گذرگاه داده تولید شده است، سطح بالا- داده ها در اتوبوس
    5 R/W من جهت انتقال:

    0 - رکورد؛

    1 - خواندن

    بسیاری از برنامه ها از تابع خواندن استفاده نمی کنند، بنابراین سیگنال اغلب به زمین متصل می شود.

    6 E من بارق عملیات اتوبوس (در لبه سقوط).
    7 DB0 I/O بیت های کم حالت هشت بیتی. با رابط چهار بیتی، از آنها استفاده نمی شود.
    8 DB1 I/O
    9 DB2 I/O
    10 DB3 I/O
    11 DB4 I/O بیت های بالای حالت هشت بیتی یا بیت های داده رابط چهار بیتی.
    12 DB5 I/O
    13 DB6 I/O
    14 DB7 I/O
    15 آ - آند قدرت نور پس زمینه (+).
    16 ک - کاتد قدرت نور پس زمینه (-). جریان باید محدود باشد.

    شماره پین ​​(ستون اول) برای رایج ترین نوع است. بهتر است اسناد مربوط به نوع نشانگر خود را از جدول قسمت قبل دانلود کنید.

    نمایشگرهای LCD کاراکتری از دو گزینه برای اتصال به میکروکنترلر پشتیبانی می کنند:

    • استفاده از گذرگاه داده 8 بیتی همه سیگنال های باس DB0-DB7 متصل هستند. در یک چرخه تبادل، یک بایت اطلاعات منتقل می شود.
    • استفاده از گذرگاه داده 4 بیتی فقط 4 MSB DB4-DB7 متصل هستند. اطلاعات در هر چرخه اتوبوس چهار بیت ارسال می شود.

    گزینه اول انتقال اطلاعات به صفحه نمایش را با سرعت بالاتری فراهم می کند. دومی برای اتصال نشانگر به 4 خروجی کمتر نیاز دارد. بدون شک کاهش تعداد پین ها برای اتصال مهمتر از افزایش نرخ ارز است. علاوه بر این، نشانگرهای LCD کاملاً هستند دستگاه های کندبا زمان چرخه بازسازی 10-20 میلی ثانیه.

    اتصال نمایشگر LCD (LCD) کاراکتری به برد آردوینو.

    من نشانگر WH2004A (4 خط هر کدام 20 کاراکتر) را در حالت تبادل چهار بیتی به برد وصل خواهم کرد. آردوینو UNO R3. مستندات صفحه نمایش LCD WH2004 را می توانید در این لینک مشاهده کنید.

    این طرح به نظر می رسد.

    مقاومت های R2 و R3 کنتراست نشانگر را تعیین می کنند. می توانید یک مقاومت تنظیم را وصل کنید و وضوح تصویر مورد نیاز را تنظیم کنید. من اغلب از نشانگرهای WH2004 استفاده می کنم و در مدارهایم چنین مقادیر مقاومتی را انتخاب می کنم.

    من LED های نور پس زمینه نشانگر را از طریق یک مقاومت R1 (30 اهم) به منبع تغذیه 5 ولت وصل کردم. با این کار جریان رو روی 25 میلی آمپر تنظیم کردم. کم نور، اما درخشان. در تاریکی به خوبی می توانید ببینید. اگرچه نشانگرهای WH2004 جریان نور پس زمینه را تا 580 میلی آمپر امکان پذیر می کنند.

    کتابخانه برای کنترل نشانگرهای LCD در سیستم آردوینو LiquidCrystal.

    یک کتابخانه استاندارد برای کنترل نشانگرهای LCD بر اساس کنترلر HD44780 وجود دارد. روش های آن را به تفصیل شرح خواهم داد.

    کریستال مایع(…)

    سازنده کلاس ممکن است عدد متفاوتاستدلال ها

    • LiquidCristal (rs، en، d4، d5، d6، d7) - رابط چهار بیتی، سیگنال RW استفاده نمی شود (به زمین متصل است).
    • LiquidCristal (rs، rw، en، d4، d5، d6، d7) - رابط چهار بیتی، سیگنال RW استفاده می شود.
    • LiquidCristal (rs، en، d0، d1، d2، d3، d4، d5، d6، d7) - رابط هشت بیتی، سیگنال RW استفاده نمی شود (به زمین متصل است).
    • LiquidCristal (rs، rw، en، d0، d1، d2، d3، d4، d5، d6، d7) - رابط هشت بیتی، سیگنال RW استفاده می شود.

    استدلال ها:

    • rs شماره خروجی سیگنال RS است.
    • rw – شماره خروجی سیگنال RW.
    • en تعداد سیگنال خروجی E است.
    • d0، d1، d2، d3، d4، d5، d6، d7 اعداد پین گذرگاه داده هستند.

    دیسپ کریستال مایع (6، 7، 2، 3، 4، 5)؛

    شروع خالی (شکل ها، ردیف ها)

    رابط نشانگر را راه اندازی می کند. ابعاد نشانگر را تنظیم می کند. قبل از استفاده از سایر توابع کلاس، ابتدا باید متد فراخوانی شود.

    استدلال ها:

    • cols - تعداد کاراکترهای رشته؛
    • rows تعداد سطرها است.

    disp.begin(20, 4); // از صفحه نمایش استفاده کنید - 4 خط 20 کاراکتری

    void clear()

    پاک کردن صفحه، قرار دادن مکان نما در گوشه سمت چپ بالا.

    disp.clear(); // بازنشانی نمایشگر

    voidhome()

    مکان نما را در گوشه سمت چپ بالا قرار دهید.

    disp.home(); // به بالای صفحه

    مکان‌نمای خالی (ستون، ردیف)

    مکان نما را در موقعیت داده شده تنظیم می کند.

    • col – مختصات X، شماره گذاری از 0 شروع می شود.
    • ردیف - مختصات Y، شماره گذاری از 0.

    setCursor(0,1); // نشانگر به ابتدای خط دوم

    نوشتن بایت (داده)

    یک کاراکتر را روی صفحه نمایش می دهد. تعداد بایت های منتقل شده را برمی گرداند.

    طرح زیر داده‌هایی را نشان می‌دهد درگاه سریال. داده ها را می توان توسط مانیتور پورت IDE Arduino منتقل کرد.

    // خروجی داده پورت سریال روی نشانگر LCD
    #عبارتند از


    chardata;

    void setup()
    {
    Serial.begin(9600); // پورت سریال را مقداردهی اولیه کنید
    disp.begin(20, 4); //
    }

    حلقه خالی()
    {
    if (سریال. موجود()) (// در صورت وجود داده
    data= Serial.read(); // خواندن کاراکتر
    if((داده != 0xd) && (داده != 0xa)) (// خط جدید
    disp.write(data); // نمایش یک کاراکتر بر روی صفحه نمایش
    }
    }
    }

    من یک نشانگر بزرگ دارم - 4 خط 20 کاراکتری. دارای دو کنترلر HD44780. بنابراین، کاراکترهایی که به صورت متوالی ارسال می شوند، ابتدا خط اول، سپس سوم، سپس دوم و چهارم را پر می کنند. آن ها از طریق خط این ویژگی باید برای انواع خاصی از شاخص ها در نظر گرفته شود. اسناد مربوط به هر نشانگر LCD توالی کاراکترهای آدرس دهی را نشان می دهد.

    چاپ بایت (داده)

    متن را روی صفحه نمایش می دهد. تعداد بایت های منتقل شده را برمی گرداند.

    استدلال ها:

    داده - داده برای نمایش بر روی صفحه نمایش. می تواند داشته باشد انواع کاراکتر, بایت, int, long, string.

    ممکن است یک آرگومان دوم اختیاری وجود داشته باشد.

    چاپ بایت (داده، پایه)

    • BASE - سیستم اعداد را تنظیم می کند:
    • BIN - باینری؛
    • DEC - اعشاری؛
    • OCT - هشتی:
    • HEX هگزادسیمال است.

    نمونه ای از برنامه ای که رشته متنی را روی نمایشگر چاپ می کند.

    // نمایش یک رشته متن روی نشانگر LCD
    #عبارتند از

    دیسپ کریستال مایع (6، 7، 2، 3، 4، 5)؛ // ایجاد یک شی

    void setup()
    {
    disp.begin(20, 4); // صفحه نمایش را 4 خط 20 کاراکتری مقداردهی اولیه کنید
    disp.print("رشته تست");
    }

    حلقه خالی()
    { }

    مکان نما خالی ()

    حالت نمایش مکان نما را فعال می کند. موقعیتی که در آن کاراکتر بعدی نمایش داده می شود، زیر خط کشیده شده است.

    disp.cursor(); // نمایش مکان نما را فعال کنید

    void noCursor()

    نمایش مکان نما را غیرفعال می کند.

    disp.noCursor(); // غیرفعال کردن نمایش مکان نما

    چشمک زدن خالی ()

    حالت مکان نما چشمک زن را فعال می کند. همراه با تابع () cursor استفاده می شود. نتیجه بستگی دارد مدل خاصنشانگر

    disp.blink(); // مکان نما چشمک زن را فعال کنید

    void noBlink()

    حالت مکان نما چشمک زن را غیرفعال می کند.

    disp.noBlink(); // مکان نما چشمک زن را غیرفعال کنید

    نمایش خالی()

    پس از خاموش شدن صفحه توسط تابع noDisplay() روشن می شود. صفحه نمایش اطلاعاتی را که قبل از خاموش شدن بود نمایش می دهد.

    display.display(); // نمایشگر را روشن کنید

    void noDisplay()

    صفحه نمایش را خاموش می کند. اطلاعات در حافظه ذخیره می شود و با روشن شدن صفحه نمایش ظاهر می شود.

    disp.noDisplay(); // صفحه نمایش را خاموش کن

    void scrollDisplayLeft()

    محتویات نمایشگر را یک نویسه به سمت چپ پیمایش می کند.

    دیسپ scrollDisplayLeft(); // همه چیز را به چپ منتقل کنید

    void scrollDisplayRight()

    محتویات نمایشگر را یک نویسه به سمت راست پیمایش می کند.

    دیسپ scrollDisplayRight(); // همه چیز را به سمت راست حرکت دهید

    void autoscroll()

    پیمایش خودکار متن را فعال کنید. با خروجی هر کاراکتر، تمام متن روی صفحه به اندازه یک کاراکتر جابه‌جا می‌شود. این که اطلاعات در کدام جهت جابجا می شوند توسط توابع ()leftToRight و rightToLeft() تعیین می شود.

    دیسپ اسکرول خودکار()()؛ // اسکرول خودکار را روشن کنید

    void noAutoscroll()

    اسکرول خودکار متن را خاموش کنید.

    دیسپ noAutoscroll()(); // غیرفعال کردن پیمایش خودکار

    void leftToRight()

    حالت خروجی تست را از چپ به راست تنظیم می کند. نمادهای جدید در سمت راست نمادهای قبلی ظاهر می شوند.

    چپ به راست()؛ // حالت چپ به راست

    void rightToLeft()

    حالت خروجی تست از راست به چپ را تنظیم می کند. کاراکترهای جدید در سمت چپ شخصیت های قبلی ظاهر می شوند.

    راست به چپ()؛ // حالت راست به چپ

    void createChar (تعداد، داده)

    روش ایجاد یک نماد سفارشی کنترلر اجازه می دهد تا حداکثر 8 کاراکتر (0…7) با اندازه 5x8 پیکسل ایجاد کنید. تصویر کاراکتر توسط یک آرایه 8 بایتی ارائه می شود. کمترین اهمیت 5 بیت از هر بایت، وضعیت پیکسل های ردیف را تعیین می کند.

    برای خروجی یک کاراکتر سفارشی، می توانید از تابع write() با یک عدد کاراکتر استفاده کنید.

    // ایجاد یک نماد سفارشی
    #عبارتند از

    دیسپ کریستال مایع (6، 7، 2، 3، 4، 5)؛ // ایجاد یک شی

    بایت لبخند =(
    B00000000،
    B00010001،
    B00000000،
    B00000000،
    B00010001،
    B00001110،
    B00000000،
    B00000000
    };

    void setup()
    {
    disp.createChar(0، لبخند); // ایجاد نماد
    disp.begin(20, 4); // صفحه نمایش را 4 خط 20 کاراکتری مقداردهی اولیه کنید
    disp.print("لبخند");
    disp.write(byte(0)); // کاراکتر خروجی
    }

    حلقه خالی()
    { }

    در اینجا نمونه ای از برنامه ای است که الفبای روسی را نمایش می دهد.

    // اشتقاق الفبای روسی
    #عبارتند از

    LiquidCrystalRus disp(6، 7، 2، 3، 4، 5)؛ // ایجاد یک شی

    void setup()
    {
    disp.begin(20, 4); // صفحه نمایش را 4 خط 20 کاراکتری مقداردهی اولیه کنید
    disp.print("abvgdejzijklmnoprst");
    disp.print("ABCDEJZYKLMNOPRST");
    disp.print("اوههههههههههههههه");

    دسته بندی: . می توانید نشانه گذاری کنید.

    دستورالعمل

    عملکرد فاصله یاب اولتراسونیک HC-SR04 بر اساس اصل اکولوکاسیون است. پالس های صوتی را در فضا منتشر می کند و سیگنال بازتاب شده از مانع را دریافت می کند. فاصله تا جسم با زمان انتشار موج صوتی به مانع و عقب تعیین می شود.
    شروع یک موج صوتی با یک پالس مثبت با مدت زمان حداقل 10 میکروثانیه در پایه TRIG فاصله یاب شروع می شود. به محض پایان یافتن پالس، فاصله یاب موجی از پالس های صوتی با فرکانس 40 کیلوهرتز را در فضای جلوی خود منتشر می کند. در همان زمان، الگوریتم تعیین زمان تاخیر سیگنال منعکس شده راه اندازی می شود و یک واحد منطقی در پای ECHO فاصله یاب ظاهر می شود. به محض اینکه سنسور سیگنال منعکس شده را دریافت می کند، یک صفر منطقی روی پین ECHO ظاهر می شود. مدت زمان این سیگنال ("تاخیر اکو" در شکل) فاصله تا جسم را تعیین می کند.
    برد اندازه گیری فاصله یاب HC-SR04 تا 4 متر با وضوح 0.3 سانتی متر می باشد.زاویه مشاهده 30 درجه، زاویه موثر 15 درجه است. مصرف جریان در حالت آماده به کار 2 میلی آمپر، در حین کار - 15 میلی آمپر.

    مسافت یاب اولتراسونیک از +5 ولت تغذیه می کند. دو پایه دیگر به هر پورت دیجیتال آردوینو متصل می شوند، ما به 11 و 12 وصل می کنیم.

    حالا بیایید طرحی بنویسیم که فاصله تا مانع را مشخص می کند و آن را به پورت سریال خروجی می دهد. ابتدا شماره پین ​​های TRIG و ECHO را تنظیم می کنیم - اینها پین های 12 و 11 هستند. سپس ماشه را به عنوان خروجی و اکو را به عنوان ورودی اعلام می کنیم. پورت سریال را در 9600 baud مقداردهی اولیه می کنیم. در هر تکرار چرخه حلقه ()فاصله را می خوانیم و به پورت خروجی می دهیم.
    تابع getEchoTiming()یک پالس شروع ایجاد می کند. این فقط یک جریان 10 میکروثانیه یک ضربه ایجاد می کند، که محرکی برای فاصله یاب برای شروع انتشار یک بسته صوتی در فضا است. سپس زمان شروع انتقال موج صوتی تا رسیدن اکو را به یاد می آورد.
    تابع getDistance()فاصله تا جسم را محاسبه می کند. از درس فیزیک مدرسه، به یاد می آوریم که فاصله برابر است با سرعت زمان: S = V * t. سرعت صوت در هوا 340 متر بر ثانیه است، زمانی که بر حسب میکروثانیه می دانیم «دوره» است. تقسیم بر 1,000,000 برای دریافت زمان در ثانیه. از آنجایی که صدا دو برابر مسافت را طی می کند - تا جسم و عقب - باید فاصله را به نصف تقسیم کنید. بنابراین معلوم می شود که فاصله تا جسم S = 34000 سانتی متر بر ثانیه * مدت زمان / 1.000.000 ثانیه / 2 = 1.7 سانتی متر در ثانیه / 100 است، که در طرح نوشتیم. میکروکنترلر عملیات ضرب را سریعتر از تقسیم انجام می دهد، بنابراین من "/ 100" را با معادل "* 0.01" جایگزین کردم.

    همچنین، بسیاری از کتابخانه ها برای کار با فاصله یاب اولتراسونیک نوشته شده اند. برای مثال، این یکی: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. کتابخانه به روشی استاندارد نصب شده است: دانلود کنید، از حالت فشرده خارج کنید به دایرکتوری کتابخانه هاکه در پوشه Arduino IDE قرار دارد. پس از آن می توان از کتابخانه استفاده کرد.
    پس از نصب کتابخانه، بیایید یک طرح جدید بنویسیم. نتیجه کار آن یکسان است - فاصله تا جسم در سانتی متر در مانیتور پورت سریال نمایش داده می شود. اگر در طرح بنویسید float dist_cm = ultrasonic.Ranging(INC);، فاصله بر حسب اینچ نمایش داده می شود.

    بنابراین، ما یک مسافت یاب اولتراسونیک HC-SR04 را به آردوینو وصل کردیم و داده‌های آن را با دو دستگاه دریافت کردیم. راه های مختلف: با و بدون کتابخانه مخصوص.
    مزیت استفاده از کتابخانه این است که مقدار کد به میزان قابل توجهی کاهش می یابد و خوانایی برنامه بهبود می یابد، شما مجبور نیستید به پیچیدگی های دستگاه بپردازید و بلافاصله می توانید از آن استفاده کنید. اما این نیز یک اشکال است: شما درک ضعیف تری از نحوه کار دستگاه و فرآیندهایی که در آن انجام می شود دارید. در هر صورت استفاده از کدام روش به شما بستگی دارد.

    • ماژول FC-113 مبتنی بر تراشه PCF8574T است که یک رجیستر شیفت 8 بیتی است - یک گسترش دهنده I/O برای گذرگاه سریال I2C. در شکل، ریز مدار DD1 تعیین شده است.
    • R1 - صاف کننده برای تنظیم کنتراست صفحه نمایش LCD.
    • Jumper J1 برای روشن کردن نور پس زمینه نمایشگر استفاده می شود.
    • برای اتصال ماژول به پین ​​های نمایشگر LCD از پین های 1…16 استفاده می شود.
    • برای تغییر آدرس I2C دستگاه به پدهای تماس A1 ... A3 نیاز است. با لحیم کاری جامپرهای مناسب می توانید آدرس دستگاه را تغییر دهید. جدول مطابقت بین آدرس ها و جامپرها را نشان می دهد: "0" مربوط به یک مدار باز است، "1" - یک بلوز نصب شده است. به طور پیش فرض، هر 3 جامپر و آدرس دستگاه باز هستند 0x27.

    2 نمودار سیم کشی صفحه نمایش LCD به آردوینواز طریق پروتکل I2C

    ماژول به طور استاندارد برای گذرگاه I2C به آردوینو متصل است: خروجی SDA ماژول به پورت آنالوگ A4، پین SCL - به پورت آنالوگ A5 آردوینو. این ماژول با +5 ولت از آردوینو تغذیه می شود. خود ماژول توسط پین های 1…16 به پین ​​های مربوطه 1…16 در صفحه نمایش LCD متصل می شود.


    3 کتابخانه برای کاراز طریق پروتکل I2C

    اکنون به یک کتابخانه برای کار با LCD از طریق رابط I2C نیاز داریم. برای مثال می توانید از این (لینک در خط "دانلود نمونه کد و کتابخانه") استفاده کنید.

    آرشیو دانلود شده LiquidCrystal_I2Cv1-1.rarاز حالت فشرده در یک پوشه خارج کنید \ کتابخانه ها، که در فهرست Arduino IDE قرار دارد.

    این کتابخانه مجموعه ای از عملکردهای استاندارد را برای صفحه نمایش LCD پشتیبانی می کند:

    تابعهدف
    کریستال مایع() ایجاد می کند متغیر نوع LiquidCrystal و پارامترهای اتصال صفحه نمایش (اعداد پین) را می پذیرد.
    شروع() مقداردهی اولیه نمایشگر LCD، تنظیم پارامترها (تعداد خطوط و نمادها)؛
    واضح () پاک کردن صفحه نمایش و برگرداندن مکان نما به موقعیت اصلی خود؛
    خانه () بازگشت مکان نما به موقعیت اولیه؛
    setCursor() تنظیم مکان نما در یک موقعیت مشخص؛
    نوشتن() کاراکتر را روی صفحه LCD نمایش می دهد.
    چاپ() متن را روی صفحه LCD نمایش می دهد.
    مکان نما () مکان نما را نشان می دهد، یعنی. زیر خط کشیدن زیر کاراکتر بعدی؛
    noCursor() مکان نما را پنهان می کند.
    چشمک زدن () چشمک زدن مکان نما؛
    noBlink() لغو چشمک زدن؛
    noDisplay() خاموش کردن صفحه نمایش در حین ذخیره تمام اطلاعات نمایش داده شده؛
    نمایش دادن() روشن کردن صفحه نمایش در حین ذخیره تمام اطلاعات نمایش داده شده؛
    scrollDisplayLeft() پیمایش محتویات صفحه نمایش 1 موقعیت به سمت چپ.
    scrollDisplayRight() پیمایش محتویات صفحه نمایش 1 موقعیت به سمت راست.
    اسکرول خودکار() فعال کردن پیمایش خودکار؛
    noAutoscroll() اسکرول خودکار را خاموش کنید.
    چپ به راست() جهت متن را از چپ به راست تنظیم می کند.
    راست به چپ() جهت متن از راست به چپ؛
    createChar() یک نماد سفارشی برای صفحه LCD ایجاد می کند.

    4 طرحی برای خروجی متنبه صفحه LCD از طریق گذرگاه I2C

    بیایید نمونه را باز کنیم: نمونه فایل LiquidCrystal_I2C CustomCharsو بیایید کمی آن را تغییر دهیم. بیایید پیامی را نمایش دهیم که در انتهای آن یک کاراکتر چشمک زن وجود دارد. تمام تفاوت های ظریف طرح در نظرات به کد توضیح داده شده است.

    #عبارتند از // شامل کتابخانه Wire #include باشد // اتصال کتابخانه LCD #define printByte(args) write(args); // uint8_t قلب = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // بیت ماسک نماد "قلب" LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس 0x27 را برای نمایشگر LCD 16x2 تنظیم کنید void setup()( lcd.init(); // مقداردهی اولیه ال سی دی lcd.backlight(); // روشن کردن نور پس زمینه صفحه نمایش lcd.createChar(3, heart); // ایجاد یک نماد قلب در محل حافظه 3 lcd.home(); // مکان نما را در سمت چپ قرار دهید گوشه بالایی, به موقعیت (0,0) lcd.!")؛ // چاپ یک خط متن lcd.setCursor(0, 1)؛ // مکان نما را به خط 2، نویسه 1 حرکت دهید lcd.print(" i ")؛ // یک پیام را در خط 2 چاپ کنید lcd.printByte(3)؛ // چاپ نماد قلب واقع در سلول Arlcd 3rd . } حلقه خالی() (// چشمک زدن آخرین کاراکتر lcd setCursor(13, 1); // مکان نما را به خط 2، کاراکتر 1 حرکت دهید lcd.print("\t"); تاخیر (500); lcd.setCursor(13, 1); // مکان نما را به خط 2، کاراکتر 1 حرکت دهید lcd.print(" "); تاخیر (500); }

    به هر حال، شخصیت های نوشته شده توسط دستور lcd.createChar();حتی پس از قطع برق در حافظه نمایشگر باقی بماند. روی رام نمایشگر 1602 نوشته شده اند.

    5 ایجاد نمادهای خودبرای نمایشگر LCD

    بیایید نگاهی دقیق‌تر به موضوع ایجاد نمادهای خود برای صفحه‌های LCD داشته باشیم. هر کاراکتر روی صفحه از 35 نقطه تشکیل شده است: 5 نقطه عریض و 7 نقطه بالا (+1 خط اضافی برای خط کشی). در خط 6 طرح بالا، آرایه ای از 7 عدد تعریف می کنیم: (0x0، 0xa، 0x1f، 0x1f، 0xe، 0x4، 0x0). بیایید اعداد هگزادسیمال را به باینری تبدیل کنیم: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . این اعداد چیزی نیستند جز ماسک های بیتی برای هر یک از 7 خط کاراکتر، که در آن "0" یک نقطه روشن و "1" یک نقطه تاریک است. به عنوان مثال، نماد قلب که به عنوان بیت ماسک داده شده است، همانطور که در شکل نشان داده شده است، روی صفحه ظاهر می شود.

    6 کنترل LCDاز طریق اتوبوس I2C

    طرح را در آردوینو آپلود کنید. کتیبه ای که ما مشخص کردیم با یک مکان نما چشمک زن در انتها روی صفحه ظاهر می شود.


    7 آنچه پشت سر استاتوبوس I2C

    به عنوان یک امتیاز، نمودار زمان خروجی کاراکترهای لاتین "A" "B" و "C" را روی صفحه نمایش LCD در نظر بگیرید. این کاراکترها در رام نمایشگر ذخیره می شوند و به سادگی با ارسال آدرس خود به نمایشگر روی صفحه نمایش داده می شوند. نمودار از خروجی های RS، RW، E، D4، D5، D6 و D7 نمایشگر گرفته شده است، یعنی. در حال حاضر پس از مبدل FC-113 "I2C اتوبوس موازی". می توان گفت که کمی «عمیق تر» در «آهن» فرو می رویم.


    نمودار زمان برای نمایش کاراکترهای لاتین "A" "B" و "C" در صفحه نمایش LCD 1602

    نمودار نشان می دهد که کاراکترهایی که در ROM نمایشگر هستند (به صفحه 11 دیتاشیت، لینک زیر مراجعه کنید) در دو نوک پست منتقل می شوند که اولی شماره ستون جدول را تعیین می کند و دومی شماره خط را تعیین می کند. در این مورد، داده ها در امتداد لبه سیگنال روی خط "چفت" می شوند E(فعال) و خط RS(Register select, register selection) در حالت یک منطقی است که به معنای انتقال داده است. حالت پایین خط RS به معنای انتقال دستورالعمل هاست که قبل از ارسال هر کاراکتر شاهد آن هستیم. در این حالت کد دستورالعمل بازگشت کالسکه به موقعیت (0، 0) نمایشگر LCD مخابره می شود که با بررسی نیز می توان به آن پی برد. اطلاعات تکنیکینمایش دادن.

    و یک مثال دیگر. این نمودار زمان نمایش نماد قلب را بر روی LCD نشان می دهد.


    باز هم دو تکانه اول فعال کردندستورالعمل ها را رعایت کنید صفحه اصلی ()(0000 0010 2) - بازگشت کالسکه به موقعیت (0؛ 0) و دو خروجی به صفحه نمایش LCD ذخیره شده در سلول حافظه 3 10 (0000 0011 2) نماد "قلب" (دستورالعمل) lcd.createChar(3, heart);طرح).