آردوینو Arduino

آموزش گام به گام آردوینو بخش چهارم پروژه‌های ترکیبی و نمایشگرها

در بخش‌های قبلی، با مفاهیم پایه الکترونیک، اصول برنامه‌نویسی آردوینو، و کار با سیگنال‌های آنالوگ آشنا شدیم. تا الان، خروجی‌های ما mostly LEDهای ساده بودند و ورودی‌ها را از طریق Serial Monitor مشاهده می‌کردیم. اما در دنیای واقعی، نیاز داریم اطلاعات را به شکلی خوانا و کاربرپسند به کاربر نمایش دهیم. در این بخش، با نمایشگرهای ۷ سگمنت و LCD آشنا می‌شویم و یاد می‌گیریم چگونه پروژه‌های ترکیبی با سنسورها و نمایشگرها بسازیم.


فهرست محتوای بخش چهارم


قسمت ۱: آشنایی با نمایشگر ۷ سگمنت

 

ماژول سون سگمنت 8 تایی TM1638 با کلیدهای کنترلی

ماژول سون سگمنت 8 تایی TM1638 با کلیدهای کنترلی


🛒 خرید از ECA

شیلد نمایشگر LCD کاراکتری 1602 آردوینو

شیلد نمایشگر LCD کاراکتری 1602 آردوینو


🛒 خرید از ECA

ماژول سون سگمنت 4 تایی

ماژول سون سگمنت 4 تایی


🛒 خرید از ECA

 

۱.۱ ساختار داخلی نمایشگر ۷ سگمنت

نمایشگر ۷ سگمنت در واقع از ۸ LED تشکیل شده است: ۷ LED به شکل عدد ۸ و یک LED کوچک به عنوان نقطه اعشار (dp). هر کدام از این LEDها با حروف a تا g نام‌گذاری می‌شوند .

![نمایشگر ۷ سگمنت: شکل عدد ۸ با نام‌گذاری بخش‌ها a تا g و dp]

دو نوع رایج نمایشگر ۷ سگمنت:

  • کاتد مشترک (Common Cathode): پایه‌های منفی همه LEDها به هم وصل شده و به GND متصل می‌شود. برای روشن کردن هر سگمنت، باید پایه مربوطه را HIGH کنیم .
  • آند مشترک (Common Anode): پایه‌های مثبت همه LEDها به هم وصل شده و به VCC (۵ ولت) متصل می‌شود. برای روشن کردن هر سگمنت، باید پایه مربوطه را LOW کنیم .

۱.۲ اتصال نمایشگر ۷ سگمنت به آردوینو

برای کنترل یک نمایشگر ۷ سگمنت، به ۷ یا ۸ پین دیجیتال نیاز داریم (با احتساب نقطه اعشار). هر سگمنت باید از طریق یک مقاومت محدودکننده جریان (حدود ۲۲۰ تا ۳۳۰ اهم) به آردوینو متصل شود .

اتصالات پیشنهادی:

  • سگمنت a → پین ۲
  • سگمنت b → پین ۳
  • سگمنت c → پین ۴
  • سگمنت d → پین ۵
  • سگمنت e → پین ۶
  • سگمنت f → پین ۷
  • سگمنت g → پین ۸
  • پایه مشترک → GND (برای نوع کاتد مشترک) یا ۵ ولت (برای نوع آند مشترک)

۱.۳ نمایش اعداد با جدول حقیقت

برای نمایش هر رقم، باید ترکیب خاصی از سگمنت‌ها را روشن کنیم. به این ترکیب، “جدول حقیقت” یا “کد نویسه” می‌گویند .

جدول کدهای هگز برای نمایش اعداد ۰ تا ۹ (برای نمایشگر کاتد مشترک):

رقم سگمنت‌های روشن باینری (dp g f e d c b a) کد هگز
۰ a, b, c, d, e, f 0011 1111 0x3F
۱ b, c 0000 0110 0x06
۲ a, b, d, e, g 0101 1011 0x5B
۳ a, b, c, d, g 0100 1111 0x4F
۴ b, c, f, g 0110 0110 0x66
۵ a, c, d, f, g 0110 1101 0x6D
۶ a, c, d, e, f, g 0111 1101 0x7D
۷ a, b, c 0000 0111 0x07
۸ a, b, c, d, e, f, g 0111 1111 0x7F
۹ a, b, c, d, f, g 0110 1111 0x6F

۱.۴ کد نمونه: شمارنده ۰ تا ۹

نسخه ساده‌تر با استفاده از آرایه کدهای هگز :

۱.۵ نمایشگرهای چندرقمی و مفهوم مالتی‌پلکس

برای نمایش اعداد چندرقمی، به جای استفاده از چندین نمایشگر مجزا (که نیاز به پین‌های زیادی دارد)، از روش مالتی‌پلکس استفاده می‌کنیم. در این روش، سگمنت‌های متناظر همه ارقام به یک پین مشترک وصل می‌شوند و هر رقم یک پایه انتخاب جداگانه دارد. با سوئیچ کردن سریع بین ارقام (با سرعت بیشتر از ۵۰ هرتز)، چشم انسان همه ارقام را هم‌زمان می‌بیند .


قسمت ۲: کار با LCD کاراکتری (LCD 1602)

۲.۱ معرفی LCD 1602

LCD 1602 یک نمایشگر کریستال مایع است که می‌تواند ۱۶ کاراکتر در ۲ سطر (مجموعاً ۳۲ کاراکتر) نمایش دهد . این نمایشگرها بر پایه کنترل‌کننده معروف Hitachi HD44780 ساخته می‌شوند و تقریباً همه نسخه‌های موجود در بازار از نظر دستورات با هم سازگار هستند .

مشخصات:

  • ولتاژ کاری: ۵ ولت
  • قابلیت نمایش حروف، اعداد و نمادها
  • دارای نور پس‌زمینه (Backlight)
  • قابلیت تعریف کاراکترهای سفارشی

۲.۲ پایه‌های LCD 1602

LCD 1602 دارای ۱۶ پایه است که وظایف زیر را دارند :

شماره پایه نماد توضیح
۱ VSS زمین (GND)
۲ VDD برق مثبت (۵ ولت)
۳ V0 تنظیم کنتراست (به پتانسیومتر وصل می‌شود)
۴ RS انتخاب ثبات (Register Select) – ۰: فرمان، ۱: داده
۵ RW خواندن/نوشتن (معمولاً به GND وصل می‌شود برای حالت نوشتن)
۶ E پایه فعال‌ساز (Enable)
۷-۱۴ D0-D7 پایه‌های داده (۸ بیت)
۱۵ A آند نور پس‌زمینه (۵ ولت از طریق مقاومت)
۱۶ K کاتد نور پس‌زمینه (GND)

۲.۳ دو روش اتصال: ۸ بیتی و ۴ بیتی

برای صرفه‌جویی در پایه‌های آردوینو، معمولاً از حالت ۴ بیتی استفاده می‌کنیم. در این حالت، فقط از پایه‌های D4 تا D7 استفاده می‌شود و داده‌ها در دو مرحله (۴ بیت اول و ۴ بیت دوم) ارسال می‌گردند .

اتصالات در حالت ۴ بیتی:

  • RS → پین دیجیتال آردوینو (مثلاً ۱۲)
  • RW → GND (همیشه در حالت نوشتن)
  • E → پین دیجیتال آردوینو (مثلاً ۱۱)
  • D4 → پین دیجیتال آردوینو (مثلاً ۵)
  • D5 → پین دیجیتال آردوینو (مثلاً ۴)
  • D6 → پین دیجیتال آردوینو (مثلاً ۳)
  • D7 → پین دیجیتال آردوینو (مثلاً ۲)

۲.۴ کتابخانه LiquidCrystal

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

کد نمونه: نمایش “Hello World!” روی LCD

۲.۵ توابع مهم کتابخانه LiquidCrystal

تابع توضیح
lcd.begin(cols, rows) مقداردهی اولیه LCD (مثلاً ۱۶ ستون و ۲ سطر)
lcd.print(data) چاپ متن یا اعداد روی LCD
lcd.setCursor(col, row) تنظیم موقعیت مکان‌نما (ستون از ۰، سطر از ۰)
lcd.clear() پاک کردن صفحه و برگرداندن مکان‌نما به خانه
lcd.home() برگرداندن مکان‌نما به موقعیت (۰,۰)
lcd.cursor() نمایش مکان‌نما به صورت خط زیرین
lcd.noCursor() مخفی کردن مکان‌نما
lcd.blink() چشمک زدن مکان‌نما
lcd.noBlink() خاموش کردن چشمک مکان‌نما
lcd.display() روشن کردن صفحه (پس از خاموش کردن)
lcd.noDisplay() خاموش کردن صفحه (بدون پاک کردن حافظه)
lcd.scrollDisplayLeft() اسکرول محتوا به چپ
lcd.scrollDisplayRight() اسکرول محتوا به راست
lcd.createChar(num, data[]) ایجاد کاراکتر سفارشی (۰ تا ۷)

۲.۶ تنظیم کنتراست با پتانسیومتر

برای اینکه متن به وضوح دیده شود، باید پایه V0 (پایه ۳) LCD را به یک پتانسیومتر ۱۰ کیلواهم وصل کنیم. پتانسیومتر بین ۵ ولت و GND قرار می‌گیرد و خروجی آن به V0 می‌رود .

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


قسمت ۳: کتابخانه LiquidCrystal I2C

۳.۱ مشکل LCD معمولی و راه‌حل I2C

اتصال LCD به روش ۴ بیتی هنوز هم ۶ پایه از آردوینو اشغال می‌کند (RS, E, D4-D7). برای پروژه‌های بزرگ که به سنسورهای زیادی نیاز دارند، این تعداد پایه زیاد است. راه‌حل استفاده از ماژول آداپتور I2C است که روی پشت LCD نصب می‌شود .

مزایا:

  • فقط به ۴ سیم نیاز دارد: VCC, GND, SDA, SCL
  • نویز کمتر و اتصالات ساده‌تر
  • نیاز به پتانسیومتر جداگانه برای کنتراست ندارد (روی ماژول تعبیه شده)

۳.۲ اتصال ماژول I2C به آردوینو

ماژول I2C به پین‌های زیر متصل می‌شود :

  • VCC → ۵ ولت
  • GND → GND
  • SDA → A4 (در آردوینو Uno)
  • SCL → A5 (در آردوینو Uno)

نکته: در آردوینوهای جدیدتر (مانند Uno R3)، پین‌های SDA و SCL در نزدیکی پین AREF نیز وجود دارند.

۳.۳ نصب کتابخانه LiquidCrystal I2C

برای کار با LCD I2C، باید کتابخانه مناسب را نصب کنیم. دو کتابخانه معروف وجود دارد:

  1. LiquidCrystal_I2C توسط Frank de Brabander
  2. NewLiquidCrystal (پشتیبانی از آداپتورهای مختلف)

روش نصب:

  1. از منوی Sketch → Include Library → Manage Libraries
  2. جستجوی “LiquidCrystal I2C”
  3. نصب کتابخانه توسط Frank de Brabander

۳.۴ کد نمونه با LCD I2C

۳.۵ پیدا کردن آدرس I2C

اگر آدرس I2C را نمی‌دانید، می‌توانید از کد جستجوگر زیر استفاده کنید :


پروژه عملی پایان بخش چهارم: ایستگاه هواشناسی ساده

حالا همه مفاهیم این بخش را در یک پروژه جامع ترکیب می‌کنیم. هدف: ساخت یک ایستگاه هواشناسی ساده که دما و رطوبت را با سنسور DHT11 اندازه‌گیری کرده و روی LCD نمایش دهد .

قطعات مورد نیاز:

  • برد آردوینو Uno
  • سنسور DHT11 (دما و رطوبت)
  • LCD 1602 با ماژول I2C
  • مقاومت ۱۰ کیلو اهم (برای DHT11، اگر روی ماژول نیست)
  • برد بورد و سیم جامپر

نحوه بستن مدار:

قطعه پایه اتصال به آردوینو
DHT11 VCC ۵ ولت
DHT11 DATA پین ۲
DHT11 GND GND
LCD I2C VCC ۵ ولت
LCD I2C GND GND
LCD I2C SDA A4
LCD I2C SCL A5

نکته: اگر از DHT11 ماژول‌دار استفاده می‌کنید، معمولاً مقاومت pull-up روی ماژول وجود دارد. در غیر این صورت، یک مقاومت ۱۰ کیلو اهم بین پایه DATA و VCC قرار دهید.

نصب کتابخانه‌های مورد نیاز:

  1. DHT sensor library توسط Adafruit
  2. Adafruit Unified Sensor (پیش‌نیاز کتابخانه DHT)
  3. LiquidCrystal_I2C (برای LCD)

کد پروژه:

توضیح کد:

  1. کتابخانه‌ها: سه کتابخانه اصلی را وارد کرده‌ایم: Wire برای I2C، LiquidCrystal_I2C برای LCD، و DHT برای سنسور دما و رطوبت .
  2. مقداردهی اولیه: در تابع setup، LCD را مقداردهی کرده و نور پس‌زمینه را روشن می‌کنیم. سنسور DHT نیز با dht.begin() راه‌اندازی می‌شود.
  3. خواندن سنسور: برای اینکه سنسور DHT فرصت کافی برای اندازه‌گیری داشته باشد، هر ۲ ثانیه یکبار آن را می‌خوانیم (DHT11 حداکثر ۱ هرتز سرعت دارد).
  4. نمایش روی LCD: از توابع setCursor و print برای نمایش مقادیر در موقعیت‌های مناسب استفاده می‌کنیم. با temperature, 1 مشخص می‌کنیم که فقط یک رقم اعشار نمایش داده شود.
  5. عیب‌یابی: اگر سنسور خراب باشد یا اتصال درستی نداشته باشد، تابع isnan خطا را تشخیص داده و مقدار پیش‌فرض نمایش می‌دهد .

توسعه پروژه (تمرین بیشتر):

  1. اضافه کردن سنسور نور LDR: مقدار نور محیط را نیز اندازه‌گیری کرده و روی LCD نمایش دهید.
  2. تاریخ و زمان: با اضافه کردن ماژول RTC (Real Time Clock)، تاریخ و زمان را نیز نمایش دهید.
  3. ثبت حداکثر و حداقل: حداکثر و حداقل دما و رطوبت ثبت شده را محاسبه و نمایش دهید.
  4. صرفه‌جویی در انرژی: با اضافه کردن یک دکمه، LCD را فقط در صورت نیاز روشن کنید.
  5. کاراکترهای سفارشی: با تابع createChar، یک نماد درجه سانتیگراد (°) زیباتر یا یک آیکون قطره برای رطوبت بسازید .

خلاصه بخش چهارم

در این بخش یاد گرفتیم:

  • با نمایشگر ۷ سگمنت و نحوه نمایش اعداد با استفاده از جدول حقیقت آشنا شویم .
  • تفاوت بین نمایشگرهای کاتد مشترک و آند مشترک را درک کنیم .
  • از روش مالتی‌پلکس برای کنترل نمایشگرهای چندرقمی استفاده کنیم .
  • با LCD 1602 کاراکتری و پایه‌های آن آشنا شویم .
  • از کتابخانه LiquidCrystal برای کنترل LCD در حالت ۴ بیتی استفاده کنیم .
  • با توابع مهم این کتابخانه مانند print, setCursor, clear کار کنیم .
  • مشکل اشغال پایه‌های زیاد را با استفاده از ماژول I2C حل کنیم .
  • کتابخانه LiquidCrystal_I2C را نصب و استفاده کنیم.
  • آدرس I2C دستگاه‌ها را با کد اسکنر I2C پیدا کنیم .
  • یک پروژه جامع ایستگاه هواشناسی ساده با سنسور DHT11 و LCD I2C پیاده‌سازی کنیم .

در بخش پنجم، به سراغ ارتباط سریال و کتابخانه‌های پیشرفته می‌رویم و با پروتکل‌های ارتباطی I2C و SPI، کنترل موتورها، و سنسورهای پیشرفته‌تر آشنا خواهیم شد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا