آموزش ساخت ساعت و دماسنج-رطوبت سنج دیجیتال با آردوینو

در این آموزش با استفاده از ساعت دیجیتال PCF8563 و سنسور دماسنج/رطوبت سنج دیجیتال DHT11، برد آردوینو (مگا یا اونو) و شیلد نمایشگر ۱۶۰۲ (یا هر مدل دیگر از نمایشگر کاراکتری ۱۶ در ۲) یک ساعت دیجیتال با قابلیت نمایش روز/ماه/سال ساعت:دقیقه:ثانیه دما و رطوبت را روی نمایشگر و پورت سریال خواهیم ساخت. آموزش به صورت ساده و مقدماتی نوشته شده است و برای همگان قابل اجرا خواهد بود.

 

قطعات لازم

-برد آردوینو مگا یا اونو

-ماژول ساعت دیجیتال PCF8563

-شیلد نمایشگر کاراکتری ۱۶۰۲ یا هر مدل دیگری از این نمایشگر

-سنسور دماسنج/رطوبت سنج دیجیتال DHT11 یا DHT21 یا DHT22

 

نحوه ی اتصال قطعات به آردوینو

شیلد نمایشگر به راحتی روی برد قرار خواهد گرفت، درصورتی که از خود نمایشگر بجای شیلد استفاده می کنید از روی اسکچ ارائه شده پین های نمایشگر خود را به درستی انتخاب کنید. ماژول ساعت دیجیتال PCF8563 از طریق پروتکل I2C متصل خواهد شد. برای برد مگا پین SDA به پین ۲۰ و پین SCL به پین ۲۱ و برای برد اونو پین SDA به پین A4 و پین SCL به پین A5 متصل خواهد شد. برای سنسور های DHT پین دیجیتال را به پین ۱۵ متصل نمایید یا از داخل اسکچ پورت مناسبی را انتخاب کنید.

 

کتابخوانه ها و اسکچ آردوینو

در ابتدا دو کتابخوانه ی PCF8563 و TroykaDHT را دانلود و به نرم افزار آردوینوی خود اضافه کنید. سپس یک بار برنامه ی آردوینو را ری استارت کرده و اسکچ زیر را بارگذاری و روی برد خود آپلود کنید.


 /*

AK Digital Clock & Digital Temperature and Humidity with PCF8563 & DHT11

*/ 

//فراخوانی کتابخوانه های لازم

#include <LiquidCrystal.h>

#include <PCF8563.h>

#include <TroykaDHT.h>

//تنظیم پین های نمایشگر LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

//شروع ساعت دیجیتال

PCF8563 pcf;

//راه اندازی سنسور دماسنج و رطوبت سنج DHT روی پین ۱۵ دیجیتال

DHT dht(15, DHT11);



 // در قسمت Setup مواردی را تعریف می کنیم که با شروع فعالیت برد نیامند آن ها هستیم. 

 void setup() {

  Serial.begin(9600);

  lcd.begin(16, 2);

  pcf.init();

  pcf.startClock();

  dht.begin();

}



 // در قسمت Loop مواردی را تعریف می کنیم که پس از شروع کار برد نیازمند تکرار آن ها هستیم. 

void loop() {

  lcd_print(); 

  serial_print(); 

  delay(1000);

}



//نمایش مقادیر ساعت دیجیتال و سنسور دیجیتال روی نمایشگر

void lcd_print() {

  //بازخوانی ساعت از ماژول ساعت دیجیتال

  Time nowTime = pcf.getTime();

  //شروع خط اول نمایشگر

  lcd.setCursor(0, 0);

  if (nowTime.day < 10) { lcd.print("0");  }

  //نمایش روز

  lcd.print(nowTime.day);

  lcd.print("/");

  if (nowTime.month < 10) { lcd.print("0");  }

  //نمایش ماه

  lcd.print(nowTime.month);

  lcd.print("/");

  lcd.print("20");

  //نمایش سال

  lcd.print(nowTime.year);

  lcd.print(" ");

  if (nowTime.hour < 10) { lcd.print("0");  }

  //نمایش ساعت

  lcd.print(nowTime.hour);

  lcd.print(":");

  if (nowTime.minute < 10) { lcd.print("0");  }

  //نمایش دقیقه

  lcd.print(nowTime.minute);

  //شروع خط دوم نمایشگر

  lcd.setCursor(0, 1);

  //بازخوانی دما و روطوب از سنسور DHT

  dht.read();

  lcd.print("Temp=");

  //نمایش دما

  lcd.print(dht.getTemperatureC(),0);

  lcd.print("\337");

  lcd.print("C Hu=");

  //نمایش رطوبت

  lcd.print(dht.getHumidity(),0);

  lcd.print("%");

}



//نمایش مقادیر ساعت دیجیتال و سنسور دیجیتال روی پورت سریال

void serial_print() {

  //بازخوانی ساعت از ماژول ساعت دیجیتال

  Time nowTime = pcf.getTime();

  //نمایش روز

  Serial.print(nowTime.day);

  Serial.print("/");

  //نمایش ماه

  Serial.print(nowTime.month);

  Serial.print("/");

  //نمایش سال

  Serial.print(nowTime.year);

  Serial.print(" ");

  //نمایش ساعت

  Serial.print(nowTime.hour);

  Serial.print(":");

  //نمایش دقیقه

  Serial.print(nowTime.minute);

  Serial.print(":");

  Serial.println(nowTime.second);

  //بازخوانی دما و روطوب از سنسور DHT

  dht.read();

  //نمایش دما

  Serial.print("Temperature = ");

  Serial.print(dht.getTemperatureC());

  Serial.print(" ");

  //نمایش رطوبت

  Serial.print("Humidity = ");

  Serial.print(dht.getHumidity());

  Serial.println(" %");

}