آردوینو اینترنت اشیا IOT برد ESP8266 نمایشگر LCD

مانیتور گرافیکی دما در نمایشگر TFT 240×240 با سنسور دما LM35 و آردوینو

نوشته شده توسط CiferTech

در این آموزش قصد داریم دمای محیط را در یک نمایشگر TFT مانیتور کنیم اما این به این معنا نیست که تنها عدد مقدار دما بر روی نمایشگر نمایش داده شود، به لطف نمایگر های های TFT به تمام رنگ های مورد نیاز دسترسی داریم و همچنین قادر حواهیم بود اشکال مختلف را نمایش دهیم. در این آموزش برای بدست آوردن مقادیر دما از سنسور LM35 استفاده خواهیم کرد که یکی سنسور های دقیق و همچنین مقرون به صرفه برای خرید است. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


سنسور دما LM35


LM35 یک سنسور دما است که سیگنال آنالوگ متناسب با دمای لحظه ای تولید می کند، ولتاژ خروجی را می توان به راحتی تحلیل و معادل سازی کرد تا دما را در سانتیگراد بدست آورد، مزیت lm35 نسبت به ترمیستور این است که نیازی به کالیبراسیون خارجی ندارد. بسیاری از محصولات ارزان قیمت که در عمل از دقت بیشتر بهره می برند از LM35 در محصولات خود استفاده می کنند. تقریباً ۱۵ سال از زمان ساخت و انتشار این سنسور می‌گذرد اما هنوز زنده مانده و در محصولات مختلفی استفاده می شود.
سنسور دما LM35 - دیجی اسپارک

LM35 می تواند از ۵۵- درجه سانتیگراد تا ۱۵۰ درجه سانتیگراد اندازه گیری کند، اگر در سطح دما و رطوبت مناسب استفاده شود از سطح دقت بسیار زیادی برخوردار خواهد بود، ولتاژ ورودی LM35 می تواند از ۴+ ولت تا ۳۰ ولت باشد و حدود ۶۰ میکروآمپر جریان مصرف می کند. Lm35 دارای خانواده بزرگی از سنسور های مشابهی است که با نام های LM35C ،LM35CA ،LM35D ،LM135 ،LM135A ،LM235 ،LM335 ساخته می‌شوند. همه اعضای خانواده LM35 بر اساس اصول پایه LM35 کار می کنند اما ظرفیت اندازه گیری دما در آنها متفاوت است.

سنسور دما LM35 و راه اندازی با آردوینو - دیجی اسپارک

نمایشگر LCD 240×240 TFT


TFT مخفف “Thin Film Transistor” است. صفحه نمایش TFT LCD رنگی، دارای ترانزیستورهایی است که از فیلمهای نازک سیلیکون آمورف روی شیشه رسوب کرده اند. این به عنوان یک شیر کنترل برای ایجاد ولتاژ مناسب بر روی کریستال های مایع برای زیر پیکسل های جداگانه عمل می کند. به همین دلیل صفحه نمایش TFT LCD را نمایشگر Active Matrix نیز می نامند. این صفحه نمایش ۱٫۵۴ اینچی دارای ۲۴۰×۲۴۰ پیکسل، ۱۶ بیتی تمام رنگ است و یک نمایشگر IPS است، بنابراین رنگ تا ۸۰ درجه از محور در هر جهت عالی به نظر می رسد. این LCD از درایور ST7789 استفاده می‌کند.

نمایشگر LCD 240x240 TFT - دیجی اسپارک

 


برد ESP8266


تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید می‌شوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی می‌کنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.

برد Nodemcu ESP8266 - دیجی اسپارک

 


توضیح تکمیلی


در این آموزش با رسم شکل یک دماسنج بر روی صفحه نمایش و همچنین با تعریف یک انیمیشن برای آن دمای محیط را نمایش خواهیم داد. در این آموزش از برد Nodemcu بر پایه تراشه ESP8266 به عنوان برد راه‌انداز استفاده می‌شود همچنین برای اندازه گیری دما از سنسور LM35 استفاده خواهیم کرد. سنسور دما LM35 از جمله موارد پر مصرف و مناسب برای سنجش دمای محیط است.

پروژه مانیتور گرافیکی دما در نمایشگر TFT 240x240 با سنسور دما LM35 و آردوینو - دیجی اسپارک

 


وسایل مورد نیاز


برد Nodemcu برپایه ESP8266

نمایشگر TFT 240×240

سنسور دما LM35

 


شماتیک و اتصالات


ابتدا اتصالات مربوط به نمایشگر TFT و همچنین سنسور دمای LM35 را مطابق جدول و شماتیک زیر برقرار کنید، ابتدا اتصالات مربوط به سنسور LM35 را برقرار می‌کنیم. پین دیتا در LM35 به پین آنالوگ به دیجیتال ESP8266 یعنی A0 متصل می‌شود.

اتصالات سنسور دما LM35 به برد Nodemcu - دیجی اسپارک

  • اتصالات نمایشگر TFT و برد nodemcu

اتصالات LCD TFT به برد Nodemcu - دیجی اسپارک

  • شماتیک مربوط به اتصالات هر دو قطعه استفاده شده

اتصالات نمایشگر TFT 240x240 با سنسور دما LM35 و آردوینو - دیجی اسپارک

 


راه‌اندازی و کدنویسی


در این مرحله بعد از برقراری اتصالات، نوبت به کد های این پروژه خواهد رسید. مرحله به مرحله بخش های مختلف کد را یک بار با هم مرور خواهیم کرد. ابتدا کتابخانه های مورد نیاز برای راه‌اندازی ماژول نئوپیکسل را فراخوانی خواهیم کرد.

#include <Arduino_ST7789.h>
#include <SPI.h>

 

در این بخش پین های مورد نیاز را تعریف خواهیم کرد که هر یک به کدام پین از برد NodeMCU متصل خواهند شد.

#define TFT_DC   D1   
#define TFT_RST  D0   
#define TFT_MOSI D7   
#define TFT_SCLK D5 

 

در ادامه به این دلیل که این نمایشگر تمام رنگ است، رنگ های مورد نیاز را با استفاده از کد رنگیه آن ها را تعریف خواهیم کرد.

#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0
#define WHITE    0xFFFF
#define VIOLET   0xAEAE8DF

 

کد کامل پروژه.

#include <Arduino_ST7789.h>
#include <SPI.h>

#define TFT_DC   D1   // pin of your choice
#define TFT_RST  D0   // pin of your choice
#define TFT_MOSI D7   // fixed pin
#define TFT_SCLK D5   // fixed pin

#define BLACK    0x0000
#define BLUE     0x001F
#define RED      0xF800
#define GREEN    0x07E0
#define CYAN     0x07FF
#define MAGENTA  0xF81F
#define YELLOW   0xFFE0
#define WHITE    0xFFFF
#define VIOLET   0xAEAE8DF

#define YP A3
#define XM A2
#define YM 9
#define XP 8

#define XGRAPH 50
#define YGRAPH 75
#define HGRAPH 135
#define WGRAPH 21 

#define LM35 A0
Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST);

int newHeight;
int oldHeight = 0;
int heightDiff;


void setup(void) {

tft.init (240, 240); 
tft.fillScreen (BLACK);
tft.drawRect(10, 10, 220, 220, WHITE);
tft.fillRect(10, 10, 220, 220, BLACK);

Serial.begin(9600);
tft.fillCircle(XGRAPH, YGRAPH, (WGRAPH/2), WHITE);
tft.fillRect((XGRAPH-(WGRAPH/2)), YGRAPH, WGRAPH, HGRAPH, WHITE);
tft.fillCircle(XGRAPH, (HGRAPH+YGRAPH), ((WGRAPH/2)+10), WHITE);
tft.fillCircle(XGRAPH, YGRAPH, (WGRAPH/2)-3, WHITE);
tft.fillRect((XGRAPH-(WGRAPH/2)+3), YGRAPH, (WGRAPH-6), HGRAPH, WHITE);
tft.fillCircle(XGRAPH, (HGRAPH+YGRAPH), ((WGRAPH/2)+7), WHITE);
tft.fillCircle((XGRAPH+WGRAPH), YGRAPH, 3, WHITE);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(((XGRAPH+WGRAPH)+8), (YGRAPH-5));
tft.print("100");
tft.setTextSize(1);
tft.print("0");
tft.setTextSize(2);
tft.print("C");
tft.fillCircle((XGRAPH+WGRAPH), ((YGRAPH+(HGRAPH/2))-(WGRAPH/2)), 3, WHITE);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(((XGRAPH+WGRAPH)+8), (((YGRAPH+(HGRAPH/2))-(WGRAPH/2)))-5);
tft.print("50");
tft.setTextSize(1);
tft.print("0");
tft.setTextSize(2);
tft.print("C");
tft.fillCircle((XGRAPH+WGRAPH), ((YGRAPH+HGRAPH)-((WGRAPH/2)+7)), 3, WHITE);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(((XGRAPH+WGRAPH)+8), (((YGRAPH+HGRAPH)-((WGRAPH/2)+7))-5));
tft.print("0");
tft.setTextSize(1);
tft.print("0");
tft.setTextSize(2);
tft.print("C");

tft.fillRect((XGRAPH-(WGRAPH/2)+5), YGRAPH, (WGRAPH-10), HGRAPH, RED);
tft.fillCircle(XGRAPH, (HGRAPH+YGRAPH), ((WGRAPH/2)+5), RED);
}


void loop(void) {
  
int suhu=(analogRead(LM35)*5)/10;
tft.setCursor(150, 145);
tft.setTextColor(VIOLET, BLACK);
tft.setTextSize(4);
tft.print(suhu);
tft.setTextSize(2);
tft.print("0");
tft.setTextSize(4);
//tft.print("C");
tft.fillRect(130, 255, 80, 4, RED);
if(suhu <= 100){
newHeight = map(suhu,0, 100, 0, (HGRAPH-(WGRAPH/2)));
heightDiff = oldHeight-newHeight; // only draw new part of bar graph for faster display
if (oldHeight != newHeight) tft.fillRect((XGRAPH-(WGRAPH/2)+5), YGRAPH+((HGRAPH-suhu)-((WGRAPH/2)+7)), (WGRAPH-10), HGRAPH-((HGRAPH-suhu)-((WGRAPH/2)+7)), RED);
tft.fillRect((XGRAPH-(WGRAPH/2)+5), YGRAPH, (WGRAPH-10), ((HGRAPH-suhu)-((WGRAPH/2)+7)), WHITE);
if (suhu==100)tft.fillCircle(XGRAPH, YGRAPH, (WGRAPH/2)-5, RED);
oldHeight=newHeight; // remember how high bar is
}
tft.fillCircle(XGRAPH, (HGRAPH+YGRAPH), ((WGRAPH/2)+5), RED);
delay(300);
}

 


جمع بندی


در نهایت با استفاده از LCD TFT با درایور ST7789 و البته سنسور دما LM35، دمای محیط را اندازه گیری و بصورت گرافیکی و انیمیشنی در نمایشگر مورد نظر نمایش دهیم و در هر زمان قادر به خواندن دما خواهیم بود.

پروژه مانیتور گرافیکی دما در نمایشگر TFT 240x240 با سنسور دما LM35 و آردوینو - دیجی اسپارک

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه