حساس(حس کننده) دما LM75A با LCD1602 I2C
در این آموزش میآموزیم چگونه با استفاده از حساس(حس کننده) دمای LM75A و ارتباط I2C، مقادیر دما را بهصورت همزمان در واحدهای سانتیگراد و فارنهایت روی صفحه LCD1602 نمایش دهیم. LM75A میتواند دماها را در بازهٔ -55°C تا +125°C اندازهگیری کند، که آن را برای کاربردهای گوناگون مناسب میسازد. پس از تکمیل تنظیمات، قادر خواهید بود خوانشهای دما را بهصورت زمان واقعی روی نمایشگر LCD مشاهده کنید.


برای این پروژه از حساس(حس کننده) LM75A و ماجیول LCD1602 که از طریق I2C متصل میشوند استفاده میکنیم، که این امر سیمکشی را سادهتر کرده و تعداد پایههای مورد استفاده روی Arduino را کاهش میدهد. هدف ایجاد سیستمی است که بهصورت پیوسته دما را میخواند و آن را روی LCD نمایش میدهد. اگر در هر قسمت از فرایند به توضیح بیشتری نیاز دارید، حتماً آموزش ویدیویی را ببینید (در ویدیو در 00:00).
شرح سختافزار
مولفههای اصلی این پروژه شامل حساس(حس کننده) دمای LM75A و نمایشگر LCD1602 هستند. LM75A یک حساس(حس کننده) دمای I2C است که اندازهگیریهای دقیق دما را ارائه میدهد. این حساس(حس کننده) تنها با دو سیم، SDA (خط داده) و SCL (خط ساعت)، با آردوینو ارتباط برقرار میکند که یکپارچهسازی آن در پروژههای شما را آسان میکند.
LCD1602 یک نمایشگر کاراکتری 16x2 است که میتواند تا 32 خصیصه را همزمان نمایش دهد. با استفاده از رابط I2C میتوان آن را تنها با 2 سیم اضافی کنترل کرد که این کار فرآیند سیمکشی را بهطور چشمگیری ساده میکند. قابلیت نور پسزمینهٔ LCD همچنین میتواند در محیطهای کمنور دید بهتری فراهم کند.
جزئیات برگه مشخصات
| تولیدکننده | تگزاس اینسترومنتس |
|---|---|
| شماره قطعه | LM75A |
| ولتاژ منطق/ورودیخروجی | 2.7 V تا 5.5 V |
| ولتاژ تغذیه | 2.7 V تا 5.5 V |
| جریان خروجی (برای هر کانال) | مربوط نیست |
| جریان پیک (برای هر کانال) | مربوط نیست |
| راهنمای فرکانس PWM | قابل اعمال نیست |
| آستانههای منطقی ورودی | 0.3 * Vcc (پایین)، 0.7 * Vcc (بالا) |
| افت ولتاژ / RDS(روشن)/ اشباع | غیرقابلاعمال |
| محدودیتهای حرارتی | دمای کاری: -55°C تا +125°C |
| بسته | SOT-23 |
| یادداشتها / واریانتها | در چندین آدرس I2C در دسترس است |
- از منبع تغذیه مناسب (2.7 V تا 5.5 V) اطمینان حاصل کنید.
- در صورت لزوم از مقاومتهای pull-up روی خطوط SDA و SCL استفاده کنید.
- پیکربندی آدرس I2C برای چندین دستگاه را بررسی کنید.
- برای کاهش تداخل، سیمکشی را کوتاه نگه دارید.
- دامنه دمای مانیتور: -55°C تا +125°C
- برای اشکالزدایی خوانشهای دما از نمایشگر مسلسل استفاده کنید.
- حالتهای خطا را در شِفر (کود) بهطور مؤثر مدیریت کنید.
- در مورد نیازهای برق نمایشگر محتاط باشید.
دستورالعملهای سیمکشی

برای سیمکشی حساس(حس کننده) دمای LM75A و نمایشگر LCD1602، کار را با اتصال منبع تغذیه آغاز کنید. پایه VCC هر دو ماجیول LM75A و LCD1602 را به پایه 5V روی آردوینو متصل کنید. سپس پایه زمین (GND) هر دو ماجیول را به پایه GND آردوینو وصل کنید.
سپس خطوط ارتباطی I2C را متصل کنید. پایه SDA در LM75A باید به پایه A4 روی آردوینو وصل شود، در حالی که پایه SCL باید به پایه A5 متصل شود. این باعث برقراری ارتباط I2C بین حساس(حس کننده) و آردوینو میشود. مطمئن شوید اتصالات محکم هستند تا از هرگونه خطای ارتباطی جلوگیری شود.
نمونههای شِفر (کود) و راهنمای گامبهگام
در شِفر (کود)، ابتدا کتابخانههای لازم برای حساس(حس کننده) LM75A و نمایشگر LCD1602 را وارد میکنیم. قطعهٔ شِفر (کود) زیر نشان میدهد چگونه یک نمونه از حساس(حس کننده) LM75A را ایجاد کنیم:
LM75A lm75a_sensor(false, false, false);این خط شیء حساس(حس کننده) LM75A را مقداردهی اولیه میکند. پارامترهای بولی متناظر با پایههای A0، A1 و A2 در LM75A هستند و در صورت نیاز امکان استفاده از آدرسهای مختلف I2C را فراهم میکنند.
سپس، نمایشگر مسلسل را تنظیم کرده و نمایشگر LCD را مقداردهی اولیه میکنیم:
void setup(void) {
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM75A");
}در اینجا ارتباط سریال را با سرعت 9600 baud آغاز میکنیم و نمایشگر LCD را مقداردهی اولیه میکنیم. نور پسزمینه روشن میشود و یک پیام اولیه روی صفحه چاپ میشود.
در حلقهٔ اصلی، بهطور مداوم دما را میخوانیم و آن را نمایش میدهیم:
float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
Serial.println("Error while getting temperature");
}این بخش دما را از حساس(حس کننده) دریافت میکند. اگر قرائت نامعتبر باشد، پیام خطا به نمایشگر مسلسل ارسال میشود. در غیر این صورت، دما قابل پردازش بوده و روی LCD نمایش داده میشود.
تظاهرات / چه انتظاری باید داشته باشید
پس از اینکه همهٔ سیمکشیها انجام شد و شِفر (کود) آپلود شد، باید خوانشهای دما را روی نمایشگر LCD1602 ببینید که بهصورت متناوب بین سانتیگراد و فارنهایت نمایش داده میشوند. اگر حساس(حس کننده) LM75A درست کار کند، بهطور مداوم دمای نمایش دادهشده را هر ثانیه بهروزرسانی میکند. اگر مشکلی وجود داشت، مانند قطبیت معکوس یا سیمکشی نادرست، اتصالات را بررسی کنید و مطمئن شوید پایههای صحیح استفاده شدهاند (در ویدیو در 00:00).
/*
* \brief Show temperature in degrees Celsius and Fahrenheit every second
*
* \author Quentin Comte-Gaz <quentin@comte-gaz.com>
* \date 8 July 2016
* \license MIT License (contact me if too restrictive)
* \copyright Copyright (c) 2016 Quentin Comte-Gaz
* \version 1.0
*
* Modified by Ahmad Shamshiri on July 12, 2018 at 22:40 for Robojax.com
* in Ajax, Ontario, Canada
* Watch video instructions for this code: https://youtu.be/hVo_msVMlaI
For this sketch, you need to connect:
VCC to 3.3V or 5V and GND to GND of the Arduino
SDA to A4 and SCL to A5
*/
#include <LM75A.h>
// Create I2C LM75A instance
LM75A lm75a_sensor(false, //A0 LM75A pin state
false, //A1 LM75A pin state
false); //A2 LM75A pin state
// Equivalent to "LM75A lm75a_sensor;"
// start of settings for LCD1602 with I2C
#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);
// end of settings for LCD1602 with I2C
void setup(void)
{
Serial.begin(9600);
Serial.println("Robojax LM75A Test");
// initialize the LCD
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM75A");
lcd.setCursor(0,1);
lcd.print("Demo");
delay(2000);
}
void loop()
{
lcd.clear();// clear previous values from screen
// Robojax.com LM75A Test
float temperature_in_degrees = lm75a_sensor.getTemperatureInDegrees();
if (temperature_in_degrees == INVALID_LM75A_TEMPERATURE) {
Serial.println("Error while getting temperature");
} else {
Serial.print("Temp: ");
Serial.print(temperature_in_degrees);
Serial.print(" C (");
float tmpF = LM75A::degreesToFahrenheit(temperature_in_degrees);
Serial.print(tmpF);
Serial.println(" F)");
lcdDisplay(
// to print Celsius:
0, // character 0
0, // line 0
"Celsius: ",
// to print Celsius
11, // character 10
0, // line 0
temperature_in_degrees
);
lcdDisplay(
// to print Fahrenheit:
0, // character 0
1, // line 1
"Fahrenheit: ",
// to print Fahrenheit
11, // character 9
1, // line 0
tmpF
);
}
delay(1000);
}
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56)
*
* tc is the character number (0)
* tr is the row number in the LCD (1)
* title is the text ("Voltage:")
* vc is the character number for the value
* vr is the row number for the value
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
// Robojax.com LCD1602 for LM75A Demo
lcd.setCursor (tc,tr); //
lcd.print(title);
lcd.setCursor (vc,vr); //
lcd.print(value);
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
آمازونخرید LCD1602-I2C از اَمه زونamzn.to
-
ایبیخرید LCD1602-I2C از eBayebay.us
-
علیاکسپرسخرید ۱۰ عدد LCD1602-I2C از علیاکسپرسs.click.aliexpress.com
منابع و مراجع
-
خارجیبرگه داده LM75A از NXPnxp.com
-
خارجیبرگه مشخصات LM75A از TIti.com
-
خارجیکتابخانه LM75A از گیتهابgithub.com
فایلها📁
فایل فریزینگ
-
حساس(حس کننده) دما LM75
Temperature Sensor - LM75.fzpz0.01 MB
سایر فایلها
-
کتابخانه LM75A از Robojax.com
robojax-LM75A_temperature_sensor.zip0.56 MB