شِفر (کود) آردوینو و ویدیو برای ماجیول فاصله مادونقرمز شارپ با LCD1602 و ماجیول I2C
این راهنما شما را گامبهگام در ساخت یک سیستم اندازهگیری فاصله ساده اما مؤثر با استفاده از حساس(حس کننده) فاصله مادون قرمز شارپ (IR) و نمایشگر LCD1602 همراهی میکند. این پیکربندی به شما امکان میدهد فاصلهها را در یک بازهٔ مشخص بهطور دقیق اندازهگیری کرده و مستقیماً روی صفحه نمایش نشان دهید، که آن را برای کاربردهای مختلف الکترونیک DIY ایدهآل میسازد.

نمونههای کاربردی و ایدههای پروژهای برای این سیستم عبارتند از:
- ساخت یک سیستم کمک پارک خودکار برای جلوگیری از آسیب دیدن سپر
- ساخت یک حساس(حس کننده) ساده سطح آب برای مخازن یا چاهها.
- توسعه یک دستگاه توزیع مایع بدون تماس
- پیادهسازی یک سیستم هشدار امنیتی ساده با تشخیص نزدیکی.
- ایجاد یک نشانگر سطح پر بودن برای هاپرها یا مخازن
- طراحی یک سیستم اجتناب از برخورد برای رباتهای کوچک یا وسایل نقلیه کنترلی (RC).
سختافزار/قطعات
برای تکمیل این پروژه، به اجزای زیر نیاز خواهید داشت:
- برد Arduino Uno یا برد سازگار
- حساس(حس کننده) فاصله مادونقرمز شارپ (مدل GP2Y0A41SK0F، محدوده اندازهگیری 4 تا 30 سانتیمتر)
- LCD1602 با ماجیول I2C (برای سیمکشی آسان)
- برد بورد (اختیاری، برای نمونهسازی)
- سیمهای جامپر
- کابل USB برای تغذیه و برنامهنویسی آردوینو
راهنمای سیمکشی

اتصال حساس(حس کننده) IR شارپ و LCD1602 با ماجیول I2C به آردوینو شما ساده است؛ زیرا ماجیول I2C تعداد سیمهای مورد نیاز برای LCD را کاهش میدهد.
حساس(حس کننده) IR شارپ سه سیم دارد: قرمز (5V)، مشکی (زمین/GND) و زرد (خروجی). سیم قرمز را به پایه 5V آردوینو وصل کنید، سیم مشکی را به هر پایه GND روی آردوینو وصل کنید، و سیم خروجی زرد را به پایه آنالوگ A0 آردوینو وصل کنید (در ویدیو در 03:55).
ماجیول LCD1602 با I2C چهار سیم دارد: VCC، GND، SDA و SCL. پایه VCC را به 5V آردوینو و پایه GND را به GND آردوینو متصل کنید. سیم SDA (خط داده سریال) باید به پایه آنالوگ A4 آردوینو متصل شود و سیم SCL (خط کلاک سریال) باید به پایه آنالوگ A5 آردوینو متصل شود (در ویدیو در 02:42).
توضیح شِفر (کود)
شِفر (کود) آردوینو ارائهشده از دو کتابخانهٔ اصلی استفاده میکند:Wire.hبرای ارتباط I2C وLiquidCrystal_I2C.hبرای کنترل السیدی، وSharpIR.hبرای حساس(حس کننده) مادونقرمز شارپ، بخشهای قابل پیکربندیِ شِفر (کود) توسط کاربر عمدتاً مربوط به تعریف حساس(حس کننده) و مقداردهی اولیهٔ نمایشگر LCD هستند.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
خطLiquidCrystal_I2C lcd(0x27, 16, 2);شیء LCD را مقداردهی اولیه میکند. پارامتر اول،0x27(در ویدیو در 03:26)، آدرس پیشفرض I2C برای بیشتر ماجیولهای LCD مبتنی بر PCF8574 است. اگر LCD شما کار نمیکند، ممکن است لازم باشد آدرس صحیح آن را پیدا کنید (جایگزینهای رایج عبارتاند از0x3F). پارامتر دوم،16, مشخص میکند که LCD شما دارای 16 خصیصه در هر خط است، و پارامتر سوم،2، نشان میدهد که 2 خط دارد.
#include <SharpIR.h>
#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
* GP2Y0A02YK0F --> "20150"
GP2Y0A21YK --> "1080"
GP2Y0A710K0F --> "100500"
GP2YA41SK0F --> "430"
*/
SharpIR SharpIR(IR, model);
این خطوط حساس(حس کننده) مادون قرمز شارپ را راهاندازی میکنند.#define IR A0پایه آنالوگ آردوینو را که سیم خروجی حساس(حس کننده) مادونقرمز شارپ به آن متصل شده است، تعریف میکند.#define model 430(در ویدئو در 04:27) بسیار مهم است زیرا مدل دقیق حساس(حس کننده) IR شارپ شما را مشخص میکند. کتابخانه از این شماره مدل برای اعمال تبدیل ریاضی صحیح از خروجی ولتاژ آنالوگ حساس(حس کننده) به فاصله بر حسب سانتیمتر استفاده میکند. بلوک کامنت مدلهای مختلف سنسورهای IR شارپ و مقادیر عدد صحیح متناظر با آنها که باید در اینجا استفاده شوند را فهرست میکند. برای مثال، اگر از GP2Y0A21YK استفاده میکردید، باید تغییر دهید430به1080.
void setup()
{
lcd.begin();
lcd.backlight();
}
درsetup()تابع،lcd.begin()LCD را مقداردهی اولیه میکند، وlcd.backlight()نور پسزمینهاش را روشن میکند و صفحهنمایش را قابلمشاهده میسازد.
void loop()
{
lcd.clear();
lcd.print("Robojax IR Test");
lcd.setCursor (0,1); // go to start of 2nd line
int dis=SharpIR.distance();// gets the distance in cm
String distance = String(dis);
distance ="Distance: "+distance+"cm";
lcd.print(distance);
delay(500);
}
در داخلِloop()تابع:
lcd.clear();هر متن قبلی روی نمایشگر را پاک میکند.lcd.print("Robojax IR Test");یک پیام ثابت را در خط اول چاپ میکند.lcd.setCursor (0,1);کرسر را به ابتدای سطر دوم منتقل میکند (0 ستون اول است، 1 سطر دوم است، زیرا سطرها از صفر شمارهگذاری میشوند).int dis=SharpIR.distance();فراخوانی میکندdistance()تابعی از کتابخانه SharpIR برای خواندن مقدار حساس(حس کننده) و تبدیل آن به یک عدد صحیح که نشاندهندهٔ فاصله بر حسب سانتیمتر است (در ویدئو در 05:06). این تابع اصلی برای بهدستآوردن اندازهگیری است.String distance = String(dis);فاصلهٔ عددی صحیح را به یک رشته تبدیل میکند، زیرا نمیتوانید اعداد صحیح را مستقیماً برای چاپ با رشتهها الحاق کنید.distance ="Distance: "+distance+"cm";رشته را قالببندی میکند تا قبل از مقدار "Distance: " و بعد از آن "cm" قرار گیرد.lcd.print(distance);رشتهٔ فاصله قالببندیشده را روی السیدی نمایش میدهد.delay(500);یک مکث 500 میلیثانیهای ایجاد میکند (در ویدئو در 06:00). این تأخیر برای دقت و پایداری حساس(حس کننده) Sharp مهم است. میتوانید این مقدار را تنظیم کنید: افزایش آن ممکن است دقت را بهبود بخشد اما بهروزرسانیها را کند کند، در حالی که کاهش آن سرعت بهروزرسانیها را افزایش میدهد اما ممکن است دقت را کاهش دهد.
پروژه/نمایش زنده
پس از سیمکشی قطعات و آپلود شِفر (کود) روی آردوینو، سیستم شروع به اندازهگیری و نمایش فاصلهها میکند. این پروژه دقت مناسبی در فواصل نزدیک نشان میدهد؛ برای مثال وقتی جسم در فاصلهٔ 12 cm قرار دارد مقدار 12 cm را نمایش میدهد (در ویدئو در :31) و وقتی در فاصلهٔ 10 cm است مقدار 10 cm را نمایش میدهد (در ویدئو در :37).
با این حال، هرچه جسم بیشتر دور شود، بهویژه فراتر از 15-20 cm، دقت ممکن است کاهش یابد. برای مثال، در 20 cm نمایش ممکن است 21 cm را نشان دهد (در ویدئو در 07:06)، و در 25 cm ممکن است 28 یا 29 cm را نشان دهد (در ویدئو در 07:32). این رفتار مخصوص این حسگرهای مادونقرمز است. حساس(حس کننده) مادونقرمز شارپ ولتاژ آنالوگی تولید میکند که با فاصله تغییر میکند: با افزایش فاصله، ولتاژ خروجی کاهش مییابد (در ویدئو در 07:56).
رابطه بین فاصله و ولتاژ خروجی غیرخطی است، بهویژه در مرزهای محدوده حساس(حس کننده). همین غیرخطی بودن دلیل مفید بودن کتابخانه SharpIR است، چون شامل دادههای کالیبراسیون برای تبدیل این ولتاژهای متغیر به اندازهگیریهای فاصله دقیقتر میباشد. برای کاربردهایی که دقت بالاتری در بردهای طولانیتر نیاز دارند، ممکن است لازم باشد مدل دیگری از Sharp IR که برای آن فاصلهها طراحی شده است را انتخاب کنید یا منحنیهای کالیبراسیون سفارشی پیادهسازی کنید.
فصلها
- [00:06] معرفی و کلیات پروژه
- [01:10] جزئیات و پایهاوت حساس(حس کننده) IR شارپ
- [02:09] سیمکشی ماجیول LCD I2C
- [02:58] توضیح شِفر (کود) آردوینو
- [06:36] نمایش اندازهگیری فاصله
- [07:47] مشخصات حساس(حس کننده) و محدودیتهای دقت
- [08:48] نتیجهگیری و منابع
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازونPurchase LCD1602-I2C from Amazonamzn.to
-
آمازون
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
کتابخانههای آردوینو (zip)
-
Arduino library for sharp IR distance sensor
application/zip
فایل Fritzing
-
LCD LCD1602-I2C module with 4 wires
application/zip0.01 MB -
sharp ir sensor GP2Y0A02YK0F
application/zip