🌡️ نمایشگر دما با آردوینو و LCD
یک پروژهی مفید و ساده که چند مهارت را با هم تمرین میدهد: خواندن سنسور، تبدیل واحد، و نمایش روی LCD.
کدام سنسور؟
- LM35 — سادهترین. سه پایه و به ازای هر درجه، ۱۰ میلیولت میدهد. برای شروع عالی است.
- DHT11 / DHT22 — دما و رطوبت را با هم میدهند، خروجی دیجیتال و به کتابخانه نیاز دارند. DHT22 دقیقتر است.
- ترمیستور — ارزانترین، ولی به مقسم ولتاژ و محاسبه نیاز دارد.
کد با LM35
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int sensor = A0;
const int buzzer = 8;
void setup() {
lcd.init();
lcd.backlight();
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
int raw = analogRead(sensor);
float volts = raw * 5.0 / 1023.0;
float celsius = volts * 100.0; // ۱۰ میلیولت به ازای هر درجه
lcd.setCursor(0, 0);
lcd.print("Dama: ");
lcd.print(celsius, 1);
lcd.print(" C ");
lcd.setCursor(0, 1);
if (celsius > 30) {
lcd.print("Garm ast! ");
tone(buzzer, 1000, 200);
} else if (celsius < 15) {
lcd.print("Sard ast ");
} else {
lcd.print("Monaseb :) ");
}
Serial.print("dama:");
Serial.println(celsius);
delay(1000);
}
چرا فاصلههای اضافه بعد از متن؟
LCD متن قبلی را پاک نمیکند. اگر «Monaseb :)» روی «Garm ast!» بیفتد، باقیماندهی حروف قبلی میماند. چند فاصلهی اضافه آنها را پاک میکند — خیلی بهتر از lcd.clear() که کل صفحه را میپراند و باعث سوسو میشود.
چرا با فرمت name:value چاپ میکنیم؟
چون آنوقت میتوانی بهجای ستون اعداد، نمودار دما را در طول زمان ببینی — برای فهمیدن رفتار سنسور خیلی گویاتر است.
قدم بعدی
یک فن کوچک با ترانزیستور اضافه کن که وقتی دما از ۳۰ گذشت روشن شود — و پروژهات از «نمایشگر» به «کنترلکننده» ارتقا پیدا میکند.
نمایشگر دما را بساز 🌡️