نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

اتصال LCD 1602 به آردوینو نانو. اتصال LCD به برد آردوینو (Arduino)

آردوینو نانو رسید، نهنگی از راه رسید که در آن یک تخته نان و یک نمایشگر LCD. صفحه نمایش روی برد - 1602A، زیر - QAPASS است. من شروع به مجسمه سازی اولین دستگاه کردم و البته می خواستم اطلاعات را روی صفحه نمایش نشان دهم و نه LED های فلاش.

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

مواد زیر به شروع نمایشگر کمک کردند: رانندگی یک LCD نوع کاراکتر از درگاه چاپگر رایانه شخصی. نحوه اتصال آردوینو با LCD کاراکتری Pwm Servo Driver Motor Control PDF.

صفحه نمایش بسیار رایج است و سپرهایی قبلاً برای آن اختراع شده اند - گزینه هایی با SPI like و / یا با I2C وجود دارد و اینترنت پر از دستور العمل های این موارد است. اما من فقط صفحه نمایش اصلی 16x2 و arduinka را داشتم که می خواستم آن را به آن وصل کنم.

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

من شرح خوبی از این نوع نمایشگرها را در اینجا پیدا کردم - http://greathard.ucoz.com/44780_rus.pdf. و در اینجا (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) نمونه ای از تنظیم یک مولد کاراکتر است.

ارتباط

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

ابتدا پایه 15 (A) را به + 5 ولت، 16 (K) به زمین وصل کردم و مطمئن شدم که نور پس زمینه کار می کند. در کل اتصال کاتد به زمین از طریق یک مقاومت 220 اهم درست است که بعداً انجام دادم.

سپس زمین (1) و برق (2) را وصل کردم. آردوینو می تواند از USB تغذیه شود، از ولتاژ تثبیت شده 5 ولت و از ولتاژ تنظیم نشده 6-12 ولت، بالاترین ولتاژ به طور خودکار انتخاب می شود. حالا آردوینکا از یو اس بی تغذیه می شود و من داشتم فکر می کردم کجا 5 ولت را بیرون بیاورم. معلوم شد که 5 ولت روی کنتاکت آردوینو است، جایی که 5 ولت تثبیت شده خارجی متصل است. بلکه معلوم شد 4.7 ولت است اما برای من کافی بود.

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

سپس پتانسیومتر کنتراست (پین 3 V0) را وصل می کنیم. یکی از پایانه های افراطی پتانسیومتر را به زمین می اندازیم، دومی را به + 5 ولت، وسط را به پین ​​3 نمایشگر می اندازیم. پتانسیومتر 10K توصیه می شود. من 50K از نهنگ داشتم، در ابتدا از آن استفاده کردم. تنظیم فقط در یک لبه بود، برای گرفتن کنتراست مورد نظر بسیار ظریف بود. سپس در یک نهنگ دیگر مشابهی را در 5K پیدا کردم و آن را پوشیدم. تنظیم از یک لبه تا نیم چرخش کشیده شد. ظاهراً حتی کمتر می توانید پتانسیومتر بگیرید. 10K احتمالاً توصیه می کند که مدار کمتر مصرف کند. بله، مجبور شدم کمی لحیم کاری کنم، سیم کشی را با دوپون به سرهای پتانسیومتر لحیم کردم.

طرح آزمایشی

ما یک طرح آزمایشی را در نمونه هایی از استودیوی آردوینو می گیریم - "C: \ Program Files (x86) \ Arduino \ libraries \ LiquidCrystal \ ex amples \ HelloWorld \ HelloWorld.ino"، فقط باید مخاطبین را به ما تغییر دهید - LiquidCrystal lcd ( 7، 6، 5، 4، 3، 2)؛

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

// شامل کد کتابخانه: #include // کتابخانه را با شماره پین ​​های رابط LiquidCrystal lcd (7، 6، 5، 4، 3، 2) مقداردهی اولیه کنید. تنظیم void () (// تعداد ستون‌ها و ردیف‌های LCD را تنظیم کنید: lcd.begin (16، 2)؛ // یک پیام را به LCD.lcd.print چاپ کنید ("سلام، دنیا!") حلقه void () (// مکان نما را روی ستون 0 تنظیم کنید، خط 1 // (توجه: خط 1 ردیف دوم است، زیرا شمارش با 0 شروع می شود): lcd.setCursor (0, 1)؛ // چاپ تعداد ثانیه پس از تنظیم مجدد: lcd.print (millis () / 1000)؛)

چیزی شبیه به این معلوم می شود:

ضمناً صفحه نمایشی که به دست من رسید بدون نور پس زمینه کار نمی کند. منظورم این است که کار می کند، اما عملا هیچ چیز قابل مشاهده نیست.

نمایش مخاطبین 1602A

#مخاطب نام چگونگی اتصال
1 VSS GND
2 VDD + 5 ولت
3 V0 کنتراست - به پین ​​وسط پتانسیومتر
4 RS (ثبت نام انتخاب کنید) D7 آردوینو
5 R/W (خواندن یا نوشتن) GND
6 E (فعال کردن سیگنال) D6 آردوینو
7-14 D0-D7 D0-D3 - متصل نیست. D4-D7 - به پین ​​های D5-D2 آردوینو متصل است
15 آ آند نور پس زمینه، اتصال به + 5 ولت
16 ک کاتد نور پس زمینه، از طریق یک مقاومت 220Ω به زمین متصل می شود

در تمام مدتی که شیفته وسایل الکترونیکی بودم، این فرصت را داشتم که از LCD های چندین سازنده استفاده کنم - DataVision، WINSTAR، Uniworld Technology Corp... آنها در نوع کنترلر، تعداد پین ها و طول خطوط متفاوت بودند، اما در عین حال همه آنها یک نمودار سیم کشی، سیستم فرمان یکسان داشتند و توسط یک برنامه از میکروکنترلر سرویس می شدند. بنابراین، اگرچه ما اکنون در مورد صفحه نمایش صحبت می کنیم WH0802A توسط WINSTAR، تمام موارد زیر در مورد LCD های کاراکتری و سایر شرکت ها صدق می کند.

بنابراین، ما صفحه نمایش WH0802A-YGH-CT را به میکروکنترلر متصل می کنیم

WH0802A - نمایشگر کاراکتر دو خطی برای 8 مکان با کنترلر داخلی KS0066.
ما هدف پین های نمایش را تجزیه و تحلیل می کنیم.

برخی از نمایشگرها دارای دو پایه اضافی هستند - پین های نور پس زمینه + LED و –LED. علاوه بر این، اگر نتیجه گیری وجود داشته باشد، این بدان معنا نیست که نور پس زمینه نیز وجود دارد. و همینطور بالعکس. صفحه نمایش من نور پس زمینه دارد، اما پین کنترلی ندارد.

به طور پیش فرض، نور پس زمینه صفحه نمایش WH0802A-YGH-CT خاموش است. برای روشن کردن آن، باید چند دستکاری ساده انجام دهید، یعنی دو جامپر را نصب کنید و مقاومت محدود کننده جریان را لحیم کنید (به ترتیب RK، JF و RA را در عکس ببینید).

نمایش نمودار اتصال

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

کد شروع

با اعمال برق به مدار، باید تنظیم کننده کنتراست (مقاومت R1) را بچرخانید. اگر خط بالایی روی صفحه ظاهر شد، به این معنی است که زنده است و زمان شروع به نوشتن کد است. در مرحله اولیه از گذرگاه 8 بیتی استفاده خواهیم کرد. برای به دست آوردن اولین نتایج، باید دو تابع بنویسیم - یک تابع برای نوشتن داده ها و یک تابع برای نوشتن دستورات. آنها فقط در یک خط متفاوت هستند - وقتی داده نوشته می شود، سیگنال RS باید 1 باشد، زمانی که دستور نوشته می شود، RS باید 0 باشد. ما هنوز از توابع خواندن استفاده نخواهیم کرد، بنابراین سیگنال R / W همیشه 0 خواهد بود.

چرخه نوشتن برای یک اتوبوس 8 بیتی به صورت زیر است:
1. تنظیم RS (0 - فرمان، 1 - داده)
2. مقدار بایت داده را به گذرگاه DB7 ... DB0 خروجی دهید
3. E = 1 را تنظیم کنید
4. تاخیر برنامه 1
5. E = 0 را تنظیم کنید
6. تاخیر برنامه 2

کنترلر LCD کاراکتری بی نهایت سریع نیست، بنابراین از تاخیرهای نرم افزاری بین برخی از عملیات استفاده می شود. اولین مورد برای نگه داشتن بارق سیگنال برای مدتی لازم است، دومی، به طوری که کنترل کننده زمان برای نوشتن داده یا اجرای یک فرمان را داشته باشد. تأخیرها همیشه در توضیحات مربوط به کنترلر نمایشگر آورده شده است و شما باید همیشه حداقل مقدار آنها را حفظ کنید، در غیر این صورت کنترلر به طور اجتناب ناپذیری دچار نقص می شود.

به طور کلی، کنترل کننده نمایشگر دارای یک پرچم به اصطلاح مشغول - BF است. اگر پرچم 1 باشد - کنترلر مشغول است، اگر 0 باشد - رایگان است. به جای یک تاخیر نرم افزار دوم، می توانید پرچم اشغال را بخوانید و بررسی کنید که کنترل کننده نمایشگر آزاد است. اما از آنجایی که می خواهیم سریعاً اولین نتایج را بگیریم، بعداً با پرچم مشغول می شویم.

// LCD کاراکتری را به AVR متصل کنید
#عبارتند از
#عبارتند از

// پورتی که گذرگاه داده LCD به آن متصل است
#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDRX_DATA DDRD

// پورتی که پین ​​های کنترلی به آن متصل هستند
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

// شماره پین ​​میکروکنترلر
// که پین ​​های کنترل LCD به آن متصل هستند
#تعریف RS 5
#تعریف RW 6
#تعریف EN 7

// ماکروها برای کار با بیت ها
#define ClearBit (reg, bit) reg & = (~ (1<<(bit)))
#define SetBit (reg, bit) reg | = (1<<(bit))

#F_CPU 8000000 را تعریف کنید
#تعریف_کردن_ما (ما) __تاخیر_چرخه((F_CPU / 1000000) * (ما));
#define_delay_ms (ms) __تاخیر_چرخه((F_CPU / 1000) * (ms));

// تابع ضبط فرمان
خالی LcdWriteCom ( کاراکتر بدون امضاداده ها)
{
ClearBit (PORT_SIG، RS)؛ // RS را روی 0 قرار دهید
PORT_DATA = داده; // داده های خروجی را به اتوبوس می دهد
SetBit (PORT_SIG، EN)؛ // E را روی 1 تنظیم کنید
_تاخیر_ما (2);
ClearBit (PORT_SIG، EN)؛ // E را روی 0 تنظیم کنید
_تاخیر_ما (40);

// تابع نوشتن داده

خالی LcdWriteData ( کاراکتر بدون امضاداده ها)
{
SetBit (PORT_SIG، RS)؛ // RS را روی 1 قرار دهید
PORT_DATA = داده; // داده های خروجی را به اتوبوس می دهد
SetBit (PORT_SIG، EN)؛ // E را روی 1 تنظیم کنید
_تاخیر_ما (2);

ClearBit (PORT_SIG، EN)؛ // E را روی 0 تنظیم کنید

Delay_us (40);
}

بین المللیاصلی ( خالی )
{
در حالی که (1);
برگشت 0;
}

اینجا هیچ مکان سختی وجود ندارد، همه چیز باید روشن باشد. حرکت کن

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

1. سرو غذا

2. صبر کنید> 40 میلی ثانیه

3. دستور Function set را ارسال کنید

DL- بیت برای تنظیم عرض اتوبوس
0 - گذرگاه 4 بیتی، گذرگاه 1 - 8 بیتی

ن- بیت برای تنظیم تعداد خطوط نمایش
0 - حالت یک خطی، 1 - حالت دو خطی

اف- بیت تنظیم فونت
0 - فرمت 5 * 8، 1 - فرمت 5 * 11

* - مهم نیست در این بیت ها چه خواهد بود

4. ما دستور Display ON / OFF را ارسال می کنیم

دی- نمایشگر کمی روشن/خاموش
0 - نمایش خاموش، 1 - نمایش روشن

سی- بیت روشن / خاموش مکان نما
0 - نشانگر خاموش، 1 - مکان نما روشن است

ب- بیت فعال سوسو زدن
0 - چشمک زدن مکان نما روشن، 1 - مکان نما چشمک زن خاموش است

5. دستور Clear Display را ارسال می کنیم


6. صبر کنید> 1.5 میلی ثانیه

7. دستور Entry Mode Set را بدهید

شناسه- ترتیب افزایش / کاهش آدرس DDRAM (نمایش رم داده)
0 - مکان نما به سمت چپ حرکت می کند، آدرس 1، 1 کاهش می یابد - مکان نما به سمت راست حرکت می کند، آدرس 1 افزایش می یابد.

SH- دستور تغییر کل صفحه نمایش
0 - بدون تغییر، 1 - تغییر با توجه به سیگنال I / D رخ می دهد - اگر 0 باشد - نمایشگر به سمت راست منتقل می شود، 1 - نمایشگر به چپ منتقل می شود

برای مثال ما، تابع مقداردهی اولیه به این صورت خواهد بود

نمایشگرهای LCD با ابعاد 1602 بر پایه کنترلر HD44780 یکی از ساده ترین، مقرون به صرفه ترین و پرتقاضاترین نمایشگرها برای ساخت انواع دستگاه های الکترونیکی هستند. این را می توان هم در دستگاه های مونتاژ شده روی زانو و هم در دستگاه های صنعتی مانند دستگاه های قهوه ساز پیدا کرد. بر اساس این نمایشگر محبوب ترین ماژول ها و شیلدها در تم آردوینو مانند و.

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

اجزای مورد استفاده (خرید در چین):

... برد کنترل

... سیم های اتصال

این نمایشگرها در دو نسخه موجود هستند: نور پس زمینه زرد با حروف سیاه یا معمولاً نور پس زمینه آبی با حروف سفید.

ابعاد نمایشگرها در کنترلر HD44780 می تواند متفاوت باشد، به همین ترتیب کنترل خواهند شد. رایج ترین ابعاد 16x02 (یعنی 16 کاراکتر در دو خط) یا 20x04 هستند. وضوح خود نمادها 5x8 پیکسل است.

اکثر نمایشگرها از الفبای سیریلیک پشتیبانی نمی کنند، فقط نمایشگرهایی با علامت CTK از آن پشتیبانی می کنند. اما این مشکل تا حدی قابل حل است (ادامه در مقاله).

پین های نمایش:

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

1 (VSS) - منبع تغذیه کنترلر (-)
2 (VDD) - منبع تغذیه کنترلر (+)
3 (VO) - پین کنترل کنتراست
4 (RS) - ثبت نام انتخاب
5 (R / W) - خواندن / نوشتن (حالت نوشتن هنگام اتصال به زمین)
6 (E) - فعال کردن (دروازه در حال فروپاشی)
7-10 (DB0-DB3) - بیت های کم رابط 8 بیتی
11-14 (DB4-DB7) - بیت های مرتبه بالای رابط
15 (A) - منبع نور پس زمینه آند (+).
16 (K) - منبع نور پس زمینه کاتد (-).

حالت خودآزمایی:

قبل از تلاش برای اتصال و خروجی اطلاعات، بهتر است صفحه نمایش کار را بدانید یا نه. برای این کار باید به خود کنترلر ولتاژ اعمال کنید ( VSS و VDD، نور پس زمینه را روشن کنید ( الف و ک) و همچنین کنتراست را تنظیم کنید.

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

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

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

خروجی اطلاعات:

صفحه نمایش از کتابخانه LiquidCrystal.h که با Arduino IDE ساخته شده است استفاده می کند.

عملکرد کتابخانه

// با مکان نما کار کنید lcd.setCursor (0, 0); // تنظیم مکان نما (شماره سلول، خط) lcd.home (); // مکان نما را روی صفر قرار دهید (0، 0) lcd.cursor (); // قابلیت مشاهده مکان نما را روشن کنید (زیرخط) lcd.noCursor (); // پنهان کردن نمایان بودن مکان نما (زیرخط) lcd.blink (); // چشمک زدن مکان نما را روشن کنید (مکان نما 5x8) lcd.noBlink (); // خاموش کردن مکان نما چشمک زن (مکان نما 5x8) //خروجی اطلاعات lcd.print ("سایت")؛ // خروجی اطلاعات lcd.clear (); // پاک کردن صفحه نمایش، (حذف همه داده ها) مکان نما را صفر کنید lcd.rightToLeft (); // نوشتن از راست به چپ انجام می شود lcd.leftToRight (); // نوشتن از چپ به راست انجام می شود lcd.scrollDisplayRight (); // همه چیز روی صفحه نمایش را یک کاراکتر به سمت راست تغییر دهید lcd.scrollDisplayLeft (); // همه چیز روی نمایشگر را یک کاراکتر به سمت چپ تغییر دهید // اطلاعات مفید برای جاسوسان :) lcd.noDisplay (); // اطلاعات روی صفحه نمایش نامرئی می شود، داده ها پاک نمی شوند // اگر در لحظه ای که این تابع فعال است، چیزی روی نمایشگر نمایش داده نمی شود، پسصفحه نمایش ال سی دی ()؛ // هنگام فراخوانی عملکرد display () ، نمایشگر تمام اطلاعات موجود را بازیابی می کند

خود نمایشگر می تواند در دو حالت کار کند:

حالت 8 بیتی - برای این کار از کم‌ترین و مهم‌ترین بیت‌ها استفاده می‌شود (BB0-DB7)

حالت 4 بیتی - فقط بیت های کم اهمیت برای این مورد استفاده می شود (BB4-DB7)

استفاده از حالت 8 بیتی در این نمایشگر توصیه نمی شود. برای کار کردن به 4 پایه دیگر نیاز دارد و عملاً هیچ افزایش سرعتی وجود ندارد. نرخ تازه سازی این نمایشگر به حد مجاز رسیده است< 10раз в секунду.

برای نمایش متن، پین های RS، E، DB4، DB5، DB6، DB7 را به پایه های کنترلر متصل کنید. آنها را می توان به هر پین آردوینو متصل کرد، نکته اصلی این است که دنباله صحیح را در کد تنظیم کنید.

نمونه کد برنامه:

// تست شده بر روی Arduino IDE 1.0.5#عبارتند از // کتابخانه مورد نیاز را اضافه کنیدال سی دی LiquidCrystal (7، 6، 5، 4، 3، 2); // (RS، E، DB4، DB5، DB6، DB7)خالی برپایی() (lcd.begin (16, 2); // ابعاد صفحه را تنظیم کنید lcd.setCursor (0, 0); // مکان نما را در ابتدای خط 1 قرار دهید lcd.print ("سلام، جهان!")؛ // نمایش متن lcd.setCursor (0, 1); // مکان نما را در ابتدای خط 2 قرار دهید lcd.print ("سایت")؛ // نمایش متن) void حلقه (){ }

ایجاد نمادهای خود

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

دستورالعمل ها

عملکرد فاصله یاب اولتراسونیک 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 میکروثانیه ای ایجاد می کند که محرکی برای شروع انتشار یک بسته صوتی توسط فاصله یاب به فضا است. سپس زمان شروع انتقال موج صوتی تا رسیدن اکو را به یاد می آورد.
عملکرد دریافت فاصله ()فاصله تا جسم را محاسبه می کند. از درس فیزیک مدرسه، به یاد می آوریم که مسافت برابر است با سرعت ضرب در زمان: 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 را به آردوینو متصل کردیم و داده ها را از آن به دو روش مختلف دریافت کردیم: با استفاده از یک کتابخانه خاص و بدون استفاده.
مزیت استفاده از کتابخانه این است که مقدار کد به میزان قابل توجهی کاهش می یابد و خوانایی برنامه بهبود می یابد، لازم نیست به پیچیدگی های دستگاه بپردازید و می توانید بلافاصله از آن استفاده کنید. اما این نیز نقطه ضعف است: شما به خوبی درک نمی کنید که دستگاه چگونه کار می کند و چه فرآیندهایی در آن انجام می شود. در هر صورت استفاده از کدام روش به شما بستگی دارد.

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

طرفداران:

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

معایب:

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

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

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

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

  1. آردوینو (من مدل نانو را گرفتم)
  2. نمایش بر روی تراشه HD44780 با یا بدون ماژول I2C (سپس به یک برد جداگانه LC1602 IIC نیاز خواهید داشت) - در مورد ما 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 () چاپ می کنیم

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

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

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

انحراف کوچک شماره 3: تابع ورودی فرمت شده sprintf ().

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

sprintf (str، "String% d برای خروجی"، i);

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

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

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

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

% [پرچم] [عرض] [. دقت] نوع

براکت های مربع نشان می دهد که عنصر محصور در آنها ممکن است وجود نداشته باشد. نوار عمودی نشان می دهد که یکی از مقادیر مشخص شده باید در این قسمت انتخاب شود (در مورد ما، یکی از حروف 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" خواهد داشت (توجه داشته باشید که نقطه نیز یک علامت در نظر گرفته می شود و دو فاصله قبل از عدد وجود خواهد داشت). یا الگوی "% 0.3s" از رشته "precision" تنها سه کاراکتر اول - "exact" را خروجی می دهد.

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

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

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

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

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

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

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

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

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

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

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

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

مقالات مرتبط برتر