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

نمایش دما از یک LM35 روی یک LCD1602 به صورت سلسیوس، فارنهایت و کلوین

نمایش دما از یک LM35 روی یک LCD1602 به صورت سلسیوس، فارنهایت و کلوین

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

LM35_with_LCD-1

برای شروع، از حساس(حس کننده) دما LM35 استفاده خواهیم کرد که یک دستگاه سه پایه است. این حساس(حس کننده) یک ولتاژ آنالوگ تولید می‌کند که با دما به درجۀ سلسیوس مطابقت دارد. از LCD1602 برای نمایش خوانش‌های دما استفاده خواهد شد. در پایان این آموزش، شما یک سیستم نمایش دما به طور کامل کارآمد خواهید داشت. برای توضیحات بیشتر، ویدیو را در (در ویدیو در 00:55) ببینید.

سخت‌افزار توضیح داده شده

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

LCD1602 یک نمایشگر کاراکتری 16x2 است که می‌تواند دو خط متن را نمایش دهد. این نمایشگر از طریق یک رابط I2C کنترل می‌شود که با استفاده از چهار اتصال تنها: VCC، GND، SDA (خط داده) و SCL (خط کلاک) سیم‌کشی را ساده می‌کند. این ترتیب حداقل تعداد پایه‌های مورد نیاز بر روی آردوینو را کاهش می‌دهد که این امر اتصال و مدیریت آسان‌تر را ممکن می‌سازد.

LM35_pینوت

جزئیات ورق اطلاعات

تولیدکننده تگزاس اینسترومنتس
شماره قطعه LM35
ولتاژ منطق/ورودی و خروجی ۳-۳۰ ولت
ولتاژ خروجی ۱۰ میلی‌ولت بر درجه سانتی‌گراد
دامنه دما -55 تا +150 درجه سانتی‌گراد
دقت ±0.5 درجه سلسیوس (شایع)
بسته TO-46، TO-220

  • تأمین منبع تغذیه مناسب، حداقل ۴ ولت برای LM35.
  • در صورت لزوم از یک مقاومت کششی برای خطوط SDA/SCL استفاده کنید.
  • سیم‌کشی را کوتاه نگه‌دارید تا اغتشاش (نویز) را به حداقل برسانید.
  • توان منبع تغذیه را با خازن‌ها برای ثبات جدا کنید.
  • قبل از روشن کردن سیستم، هر اتصال را امتحان کنید.

دستورالعمل‌های سیم‌کشی

LM35_LCD1602_wiring_new

برای اتصال حساس(حس کننده) دما LM35، پایه سمت چپ را به منبع تغذیه ۵ ولتی از آردوینو وصل کنید، که در شِفر (کود) به عنوان تعریف شده است.VCC2پایه وسط، که پایه خروجی است، باید به پایه ورودی آنالوگ متصل شود.A0روی آردوینو. در نهایت، پای راست LM35 را به زمین وصل کنید.

برای ماجیول LCD1602، پایه زمین را به زمین آردوینو متصل کنید. پایه VCC باید به خروجی ۵ ولت آردوینو متصل شود. خط داده (SDA) باید به پایه آنالوگ متصل شود.A4در حالی که خط ساعت (SCL) باید به وصل شودA5این تنظیمات به آردوینو اجازه می‌دهد تا با LCD از طریق پروتکل I2C ارتباط برقرار کند.

مثال‌های شِفر (کود) و راهنمایی

در شِفر (کود)، ما پایه ورودی حساس(حس کننده) LM35 را تعریف می‌کنیم و LCD را با آدرس I2C آن تنظیم می‌کنیم. تابع راه‌اندازی ارتباط سری و نمایشگر LCD را اولیه‌سازی می‌کند. قطعه زیر نشان می‌دهد که چگونه پایه‌ها را اولیه‌سازی کنیم:

const int inPin = A0; // Pin for LM35 output
const int VCC2 = 2; // Pin for LM35 VCC
const int iteration = 1000; // Number of readings for averaging

اینجا،inPinتنظیم شده است برایA0، جایی که خروجی LM35 خوانده می‌شود. TheVCC2پایه برای تامین انرژی LM35 تعیین شده است، وiterationبرای میانگین‌گیری از قرائت‌های دما استفاده می‌شود.

بعد، ما یک حلقه اصلی داریم که قرائت‌های دما را مدیریت کرده و آن‌ها را روی LCD نمایش می‌دهد. هر نوع دما به ترتیب با یک تأخیر نمایش داده می‌شود:

lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');  
delay(2000);    

این بلوک شِفر (کود)، فراخوانی می‌کندlcdDisplayتابعی برای نمایش دما به سلسیوس، فارنهایت و کلوین، با مکث ۲ ثانیه‌ای بین هر نمایش.

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

نمایشگاه / چه انتظاری داشته باشیم

LM35_with_LCD-2

زمانی که پروژه کامل شده را اجرا می‌کنید، LCD باید دما را به ترتیب در سلسیوس، فارنهایت و کلوین نمایش دهد و هر نمایش را چرخه‌ای رد کند. می‌توانید با اعمال گرما، مانند استفاده از سشوار حرارتی، واکنش حساس(حس کننده) را آزمایش کنید و تغییرات دما را که نمایش داده می‌شود، مشاهده کنید (در ویدیو در 09:15). اگر حساس(حس کننده) به منبع تغذیه‌ای با ولتاژ پایین‌تر از ولتاژ توصیه شده متصل باشد، ممکن است قرائت‌ها نادرست باشند، بنابراین اطمینان حاصل کنید که حداقل با 4 ولت عمل کند.

زمان‌بندی ویدئو

  • ۰۰:۰۰- مقدمه
  • ۰۰:۵۵- مرور سخت‌افزار
  • ۰۳:۳۰- راهنمای سیمکشی
  • ۰۶:۱۵- مرور شِفر (کود)
  • ۰۹:۱۵- نمایش

تصاویر

LM35_pinout
LM35_pinout
LM35_LCD1602_wiring_new
LM35_LCD1602_wiring_new
LM35_with_LCD-2
LM35_with_LCD-2
LM35_with_LCD-1
LM35_with_LCD-1
326-On Lm35 Prints the temperature as C, F, or K on the LCD1602 or LCD2004
زبان: C++
/*
 * This Arduino sketch is to use LM35 to measure temperature.

 * Prints the temperature as C, F, or K on the LCD1602 or LCD2004 with I2C module (4 wires).
 
 * 
 * Watch video instructions for this code: https://youtu.be/XpMtQVCMIRA
 * 
 
 * Written by Ahmad Shamshiri on May 12, 2020 at 19:53 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 * 


 or make a donation using PayPal: http://robojax.com/L/?id=64

 *  * 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 downloaded 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/>.


*/

const int inPin =A0;//can change
const int VCC2 =2;
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x26, 16, 2);
// end of settings for LCD1602 with I2C

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  Serial.println("Robojax LM35 with LCD for Arduino");
  
  pinMode(VCC2,OUTPUT);
  digitalWrite(VCC2, HIGH);
  
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax LM35");
  lcd.setCursor(0,1);
  lcd.print("Temp: "); 
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 with LCD Code for Arduino

  lcdDisplay(getTemperature('C'),'C');
  delay(2000);
  
  lcdDisplay(getTemperature('F'),'F');
  delay(2000);
    
  lcdDisplay(getTemperature('K'),'K');  
  delay(2000);    

if(getTemperature('C') >87)
{
 // do something here (watch video)
}

//  printTemperature('C');
//  Serial.println();
//  printTemperature('F');
//  Serial.println();  
//  printTemperature('K'); 
//  Serial.println();     
//  Serial.println();    
//  Serial.print(" Temperature: ");
//  printDegree();    
//  Serial.print(getTemperature('C'));
//  Serial.println();
  delay(100);
}

/*
 * getTemperature()
 * @brief gets the average temperature
 * @param average temperature
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return returns one of the values above
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
float getTemperature(char type)
{
    float value;
    float averageTemperature =0;
    int sensorValue = analogRead(inPin);
    float voltage = sensorValue * (5.0 / 1023.0); 
    float temperature = voltage / LM35_FACTOR;
    for(int i=0; i< iteration; i++)
    {
      averageTemperature += temperature;
    }

    averageTemperature /=iteration;
  if(type =='F')
   {
    value = averageTemperature *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = averageTemperature + 273.15;//convert to Kelvin
   }else{
    value = averageTemperature;// return Celsius
   }    
    return value ;
}//getTemperature()

/*
 * printTemperature()
 * @brief prints  temperature on serial monitor
 * @param charact type
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return none
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 */
void printTemperature(char type)
{
    float value;
    float temp = getTemperature(type);
   Serial.print(temp);
    printDegree();    
  if(type =='F')
   {
     Serial.print("F");
    }else if(type =='K')
   {
     Serial.print("K");
   }else{
     Serial.print("C");
   }    
 
}//printTemperature()

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2"); 
    Serial.print("\\xB0");  
}


/*
 * lcdDisplay(float value,char symbol)
 * displays value and title on LCD1602
 * How to use:
 * lcdDisplay(35.3,'C');

 */
void lcdDisplay(float value,char symbol)
{
   // Robojax.com LCD1602 for LM35 Demo   

   for(int i=7; i<16;i++)
   {
    lcd.setCursor(i,1);
    lcd.write(254);  
   }
   lcd.setCursor (7,1); //
   lcd.print(value);
   lcd.print((char)223);    
   if(symbol =='F')
   {
    lcd.print("F");
   }else if(symbol =='K')
   {
    lcd.print("K");
   }else{
    lcd.print("C");    
   }
 // Robojax.com LCD1602 for LM35 Demo
}

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

منابع و مراجع

فایل‌ها📁

هیچ فایلی موجود نیست.