شِفر (کود) جستجو

درس ۲۰/۳۱: نمایش ولتاژ روی LCD1602

درس ۲۰/۳۱: نمایش ولتاژ روی LCD1602

این پروژه نحوه ساخت یک ولت‌متر دیجیتال با استفاده از آردوینو و نمایشگر LCD1602 با رابط I2C را نشان می‌دهد. با خواندن ولتاژ آنالوگ از یک پتانسیومتر و نمایش آن بر روی صفحه، مهارت‌های ضروری تبدیل آنالوگ به دیجیتال، ارتباط I2C و کنترل LCD را یاد خواهید گرفت. 

LCD_sunFounder

این پروژه یک گام عالی برای بسیاری از کاربردهای عملی است. در اینجا چند ایده وجود دارد که می‌توانید بر اساس آن‌ها بسازید:

  • ساخت یک مانیتور ولتاژ باتری قابل حمل برای پروژه‌های خود.
  • ایجاد یک منبع تغذیه ساده با نمایشگر ولتاژ بصری.
  • نظارت بر خروجی یک پنل خورشیدی یا سایر منابع ولتاژ متغیر.
  • نمایش مقدار هر حساس(حس کننده) آنالوگ، مانند مقاومت وابسته به نور (LDR)، به عنوان یک عدد قابل خواندن.

در پایان این راهنما، درک روشنی از نحوه اتصال قطعات، پیکربندی کتابخانه‌های لازم و نوشتن شِفر (کود) برای ایجاد نمایشگر ولتاژ خود خواهید داشت.

پتانسیومتر

قطعات سخت‌افزاری

برای ساخت این پروژه، به قطعات زیر نیاز دارید. این دوره بر اساس کیت آردوینو ۳ در ۱ SunFounder است که شامل تمام این قطعات می‌شود.

  • برد آردوینو (به عنوان مثال، Uno)
  • نمایشگر LCD1602 با ماجیول I2C
  • پتانسیومتر (10kΩ توصیه می‌شود)
  • سیم‌های جامپر
  • برد بورد

آشنایی با LCD1602 و ماجیول I2C

LCD1602 یک نمایشگر الفبایی محبوب با ۱۶ ستون و ۲ ردیف است. یک LCD موازی استاندارد به پایه‌های دیجیتال زیادی برای کنترل نیاز دارد. با این حال، این نمایشگر با یک ماجیول I2C اختصاصی که به پشت آن متصل است (در ویدیو در ۰۱:۳۰) عرضه می‌شود. این ماجیول سیم‌کشی را به طور چشمگیری ساده می‌کند و اتصال را به فقط چهار سیم کاهش می‌دهد: VCC، GND، SDA و SCL. این امکان‌پذیر است زیرا ماجیول I2C به عنوان یک پل عمل می‌کند و سیگنال سریال ساده I2C را به سیگنال‌های موازی که LCD نیاز دارد ترجمه می‌کند.

این پروژه از رابط I2C استفاده می‌کند که یک پروتکل ارتباطی است که به آردوینو شما اجازه می‌دهد با چندین دستگاه فقط با استفاده از دو سیم صحبت کند. این یک مهارت اساسی برای اتصال بسیاری از انواع سنسورها و نمایشگرها است.

راهنمای سیم‌کشی

LCD1602_pot_wiring

اتصال LCD و پتانسیومتر به آردوینو ساده است. ماجیول I2C به برق و دو خط ارتباطی نیاز دارد. پتانسیومتر به عنوان یک تقسیم‌کننده ولتاژ متغیر عمل می‌کند و به شما امکان می‌دهد ولتاژ را در پایه لغزنده آن تنظیم کنید.

در اینجا تنظیمات دقیق سیم‌کشی آمده است:

  • ماجیول I2C LCD به آردوینو:
    • GND به GND آردوینو (در ویدیو در ۰۵:۳۸).
    • VCC به 5V آردوینو (در ویدیو در ۰۵:۴۷).
    • SDA به A4 آردوینو (در ویدیو در ۰۵:۴۷).
    • SCL به A5 آردوینو (در ویدیو در ۰۵:۵۷).
  • پتانسیومتر به آردوینو:
    • پایه چپ به 5V آردوینو (در ویدیو در ۳۳:۳۹).
    • پایه وسط (لغزنده) به A0 آردوینو (در ویدیو در ۳۳:۴۳).
    • پایه راست به GND آردوینو (در ویدیو در ۳۳:۴۳).

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

این پروژه به یک کتابخانه خارجی برای کنترل LCD از طریق I2C نیاز دارد. کتابخانه استفاده شده در ویدیو کتابخانه "Arduino Liquid Crystal I2C" است. می‌توانید آن را از واصل ارائه شده در صفحه منابع Robojax یا از GitHub دانلود کنید (در ویدیو در ۰۶:۱۶).

برای نصب آن، کتابخانه را به عنوان یک فایل ZIP دانلود کنید. سپس، در Arduino IDE خود، به Sketch > Include Library > Add .ZIP Library... بروید و فایل دانلود شده را انتخاب کنید (در ویدیو در ۰۶:۴۱).

یافتن آدرس I2C نمایشگر LCD شما

قبل از آپلود شِفر (کود) اصلی، تعیین آدرس I2C ماجیول LCD خاص شما بسیار مهم است. این آدرس بسته به سازنده می‌تواند متفاوت باشد. ویدیو نحوه استفاده از یک اسکنر I2C برای یافتن آن را نشان می‌دهد (در ویدیو در ۰۸:۱۱).

می‌توانید این اسکنر را با رفتن به File > Examples > Wire > i2c_scanner پیدا کنید. این شِفر (کود) را با LCD متصل به آردوینو خود آپلود کنید و نمایشگر مسلسل را باز کنید. آدرس را نمایش می‌دهد که اغلب 0x27 یا 0x3F است. باید از این آدرس در شِفر (کود) اصلی خود استفاده کنید.

توضیح شِفر (کود)

شِفر (کود) این پروژه بر خواندن یک مقدار آنالوگ و قالب‌بندی آن برای نمایش متمرکز است. بیایید بخش‌های کلیدی و قابل تنظیم توسط کاربر را تجزیه و تحلیل کنیم.

۱. شامل کتابخانه‌ها و شیء LCD

این بخش کتابخانه‌های لازم را شامل می‌شود و یک شیء برای LCD شما ایجاد می‌کند. مهمترین بخش در اینجا آدرس I2C است که باید آن را مطابق با آدرسی که در مرحله قبل پیدا کردید تغییر دهید.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// آدرس LCD را برای نمایشگر ۱۶ یا ۲۰ کاراکتری و ۲ یا ۴ خطی روی 0x27 تنظیم کنید
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: این کتابخانه به‌صورت داخلی در آردوینو وجود دارد و برای ارتباط I2C ضروری است.
  • #include <LiquidCrystal_I2C.h>: این شامل کتابخانه‌ای است که ما نصب کردیم و توابع لازم برای کنترل LCD را فراهم می‌کند.
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: این خط یک شیء به نام lcd ایجاد می‌کند. پارامتر اول، 0x27، آدرس I2C است که قبلاً پیدا کردید. پارامترهای دوم و سوم ابعاد LCD را تعریف می‌کنند: ۱۶ ستون و ۲ ردیف. اگر آدرس شما متفاوت است، باید 0x27 را به آدرس خاص خود تغییر دهید.

۲. توابع Setup و Loop

تابع setup() LCD را مقداردهی اولیه می‌کند و نور پس‌زمینه آن را روشن می‌کند. تابع loop() شامل منطق اصلی برای خواندن ولتاژ و نمایش آن است.

void setup()
{
  lcd.begin();
  lcd.backlight();
}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (شِفر (کود) نمایش LCD)
  delay(1000);
}
  • lcd.begin(): این رابط LCD را مقداردهی اولیه می‌کند و آن را برای استفاده آماده می‌سازد.
  • lcd.backlight(): این نور پس‌زمینه نمایشگر را روشن می‌کند و متن را قابل مشاهده می‌سازد.
  • int potValue = analogRead(A0);: این مقدار آنالوگ خام را از پایه A0 می‌خواند که به لغزنده پتانسیومتر متصل است. مقدار یک عدد صحیح بین ۰ تا ۱۰۲۳ خواهد بود که ولتاژ از ۰ ولت تا ۵ ولت را نشان می‌دهد.
  • float voltage = potValue * (5.0 / 1023.0);: این مرحله تبدیل حیاتی است. مقدار خام ADC را به یک خوانش ولتاژ واقعی تبدیل می‌کند. فرمول مقدار خام را در نسبت ولتاژ مرجع (۵.۰ ولت) به حداکثر مقدار ADC (۱۰۲۳) ضرب می‌کند. این ضروری است زیرا ADC ولتاژ را مستقیماً نمی‌خواند؛ بلکه یک عدد متناسب را می‌خواند.

۳. نمایش ولتاژ

سپس شِفر (کود) صفحه را پاک می‌کند و مقدار ولتاژ را در موقعیت خاصی در خط دوم چاپ می‌کند.

  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // رفتن به ابتدای خط دوم
  lcd.print("Voltage:");
  lcd.setCursor (9,1); // تنظیم به خط ۲ خصیصه ۹
  lcd.print(voltage); 
  lcd.setCursor (13,1); // تنظیم به خط ۲ خصیصه ۱۴
  lcd.print("V"); 
  • lcd.clear(): هر متن قبلی را از صفحه پاک می‌کند.
  • lcd.print("LCD1602 Tutorial"): عنوان را در خط اول چاپ می‌کند.
  • lcd.setCursor (0,1): مکان‌نما را به ابتدای خط دوم تنظیم می‌کند. پارامتر اول ستون (۰-۱۵) و پارامتر دوم ردیف است (۰ برای خط اول، ۱ برای خط دوم).
  • lcd.print(voltage): مقدار ولتاژ محاسبه‌شده را چاپ می‌کند. متغیر float به‌طور پیش‌فرض با دو رقم اعشار چاپ می‌شود.
  • lcd.setCursor (13,1): مکان‌نما را به ستون ۱۳ در خط دوم می‌برد تا خصیصه "V" دقیقاً بعد از عدد قرار گیرد.

نمایش زنده پروژه

پس از آپلود شِفر (کود)، LCD باید "LCD1602 Tutorial" را در خط اول نمایش دهد. در خط دوم، "Voltage:" و سپس خوانش ولتاژ فعلی را نشان می‌دهد. هنگام چرخاندن دستگیره پتانسیومتر، ولتاژ نمایش‌داده‌شده را به‌صورت زنده تغییر می‌بینید، از حدود ۰.۰۰ ولت تا ۵.۰۰ ولت (در ویدیو در ۳۵:۲۵).

این پروژه نمونه‌ای عالی از نحوه تبدیل یک سیگنال آنالوگ خام به یک مقدار واضح و قابل‌خواندن برای انسان است. مهارت‌هایی که در اینجا یاد گرفته‌اید می‌توانند مستقیماً برای هر حساس(حس کننده) آنالوگ دیگری که در آینده استفاده می‌کنید اعمال شوند.

ویدیو همچنین موضوعات مرتبط دیگری مانند نمایش متن، اسکرول و ایجاد کاراکترهای سفارشی روی LCD را پوشش می‌دهد.

پروژه‌های مرتبط از این ویدیو

فصل‌ها

  • [۰۰:۰۰] مقدمه‌ای بر LCD1602 و نمای کلی پروژه
  • [۰۱:۳۰] توضیح سخت‌افزار LCD1602 و ماجیول I2C
  • [۰۴:۰۶] تنظیم آدرس I2C با جامپرها
  • [۰۵:۲۸] نمودار سیم‌کشی برای LCD1602
  • [۰۷:۳۱] توضیح شِفر (کود) برای نمایش متن پایه
  • [۱۱:۱۰] نمایش مثال مکان‌نمای چشمک‌زن
  • [۱۳:۴۶] ایجاد و استفاده از کاراکترهای سفارشی
  • [۱۸:۵۱] استفاده از مثال نمایش سریال
  • [۲۳:۱۶] اسکرول متن روی LCD
  • [۲۶:۱۳] نمایش دما و رطوبت از DHT11
  • [۳۳:۰۰] خواندن و نمایش ولتاژ از پتانسیومتر
  • [۳۵:۵۶] نمایش فاصله از حساس(حس کننده) اولتراسونیک

تصاویر

potentiometer
potentiometer
LCD1602_pot_wiring
LCD1602_pot_wiring
LCD_sunFounder
LCD_sunFounder
912-Lesson 20/31: Displaying voltage on LCD1602
زبان: C++
/*
Lesson 20/31: Displaying voltage on LCD1602
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 or 20 chars and 2 or 4 lines display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int count =700;
void setup()
{
  // Robojax code for LCD with I2C
	// initialize the LCD, 
	lcd.begin();
 
	// Turn on the blacklight and print a message.
	lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Voltage:");

  lcd.setCursor (9,1); // set to line 2 char 9
  lcd.print(voltage); 

  lcd.setCursor (13,1); // set to line 2 char 14
  lcd.print("V"); 

  //lcd.setCursor (3,3); // set to line 4 character 4
  //lcd.print("Text in line 4"); 
        
  delay(1000);
  count++;
 //end of loopcode Robojax code for LCD with I2C
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

کتابخانه‌های آردوینو (zip)

راهنمای کاربر