Header Ads

Seo Services

Arduino Alarm Clock ម៉ោងអូតូ

នៅក្នុងគម្រោងនេះយើងបានបង្កើតនាឡិការ Real Time Clock មួយជាមួយនឹងការជូនដំណឹង។ នាឡិការពិតប្រាកដឬ RTC គឺជានាឡិកាប្រើថ្មដែលវាស់ពេលសូម្បីតែពេលគ្មានថាមពលខាងក្រៅឬ microcontroller ត្រូវបានគេធ្វើឡើងវិញ។
RTC បង្ហាញនាឡិកានិងប្រតិទិនជាមួយនឹងមុខងារគ្រប់ពេលទាំងអស់។ ថ្មដែលត្រូវបានតភ្ជាប់ទៅ RTC គឺដាច់ដោយឡែកមួយហើយមិនត្រូវបានទាក់ទងឬភ្ជាប់ទៅនឹងការផ្គត់ផ្គង់ថាមពល។



នៅពេលដែលថាមពលត្រូវបានស្តារឡើងវិញ RTC បង្ហាញពេលវេលាពិតដោយមិនគិតពីរយៈពេលដែលថាមពលបិទ។ នាឡិការនាឡិកាពិតប្រាកដនេះត្រូវបានគេរកឃើញជាទូទៅនៅក្នុងកុំព្យូទ័រហើយត្រូវបានគេសំដៅជា CMOS (លោហធាតុផ្សំពីលោហធាតុផ្សំ) ។

microcontrollers និង microprocessors ភាគច្រើនបានសាងសង់ឡើងនៅក្នុងកម្មវិធីកំណត់ពេលវេលាសម្រាប់ការរក្សាទុកពេលវេលា។ ប៉ុន្តែពួកវាដំណើរការបានតែនៅពេលដែលឧបករណ៍បញ្ជាមីក្រូត្រួតពិនិត្យត្រូវបានភ្ជាប់ទៅនឹងការផ្គត់ផ្គង់ថាមពល។
នៅពេលដែលថាមពលត្រូវបានបើកឧបករណ៍កំណត់ពេលខាងក្នុងត្រូវបានកំណត់ទៅជា 0. ដូច្នេះឈីប RTC ដាច់ដោយឡែកត្រូវបានរួមបញ្ចូលនៅក្នុងកម្មវិធីដូចជាឧបករណ៍ចូលទិន្នន័យឧទាហរណ៍ដែលមិនកំណត់ទៅជា 0 នៅពេលដែលថាមពលត្រូវបានបិទឬកំណត់ឡើងវិញ។

នាឡិការពិតប្រាកដជារឿយៗមានប្រយោជន៍ក្នុងការកត់ត្រាទិន្នន័យកម្មវិធីម៉ោងបណ្តោះអាសន្នសញ្ញារោទ៍នាឡិកាពេលវេលានាឡិកាបង្កើតជាដើម។ នៅក្នុងគម្រោងនេះនាឡិការហ្វ្រេសពិតប្រាកដដែលបង្ហាញពេលវេលានិងកាលបរិចេ្ឆទត្រឹមត្រូវរួមជាមួយនឹងលក្ខណៈពិសេសនៃការជូនដំណឹងត្រូវបានរចនាឡើង។

មួយក្នុងចំណោម ICTC ដែលប្រើជាញឹកញាប់ ICs DS1307 ត្រូវបានប្រើនៅក្នុងគម្រោងនេះរួមជាមួយ Arduino ។ សៀគ្វីការរចនានិងការងារត្រូវបានពន្យល់នៅក្នុងផ្នែកដូចខាងក្រោម។






Components Required

  • Arduino UNO – 1
  • DS 1307 RTC Module – 1
  • Push Buttons – 3
  • 16X2 LCD Display – 1
  • Buzzer – 1
  • 10 KΩ – 2
  • 10 KΩ POT – 1
សេចក្ដីពិពណ៌នាសមាសភាគ
DS1307
DS1307 គឺជានាឡិការពេលវេលាជាក់ស្តែង (RTC) ដែលគេប្រើញឹកញាប់បំផុតសម្រាប់ម៉ោងនិងប្រតិទិន។ មុខងារនាឡិកាផ្តល់នូវវិនាទីនាទីនិងម៉ោងខណៈពេលដែលមុខងារប្រតិទិនផ្តល់នូវតម្លៃថ្ងៃ, កាលបរិច្ឆេទ, ខែនិងឆ្នាំ។

នាឡិកាអាចដំណើរការបានក្នុងរយៈពេល 12 ម៉ោងជាមួយការបង្ហាញពី AM / PM ឬ 24 ម៉ោង។ ថ្មបម្រុងទុក 3V ត្រូវភ្ជាប់ទៅ RTC ដូច្នេះ IC អាចប្តូរដោយស្វ័យប្រវត្ដិទៅការផ្គត់ផ្គង់ទិន្នន័យបម្រុងទុកក្នុងករណីដែលការដាច់ចរន្តអគ្គិសនី។ A

ខឿនគ្រីស្តាល់ 32.768 KHz ត្រូវបានភ្ជាប់ទៅនឹងស្ថានីយ៍លំយោលនៃ DS1307 សម្រាប់ការយោល 1 Hz ។

សៀគ្វីរចនា
ការទំនាក់ទំនងរវាង microcontroller និង RTC IC IC DS1307 គឺជារថយន្តស៊េរី I2C ពីរស៊េរី។ ពិធីការ I2C គឺជាវិធីសាស្រ្តនៃការទំនាក់ទំនងរវាងឧបករណ៍លឿនជាងមុន (Microcontroller ឬ Arduino ក្នុងករណីនេះ) នៅក្នុងមេនិងឧបករណ៍យឺត (RTC) នៅក្នុងរបៀប slave ។

មានម្ជុលពីរនៅលើ Arduino សម្រាប់ទំនាក់ទំនង I2C ។ ម្ជុលអាណាឡូក 4 និង 5 នឹងដើរតួជា SDA (Serial Data) និង SCL (Serial Clock) ។

ទាំងនេះត្រូវបានភ្ជាប់ទៅនឹង SDA និង SCL រៀងៗខ្លួនរបស់ RTC ។ ចំនុចទាំងពីរនៃ RTC ត្រូវបានទាញដោយប្រើកម្លាំង10KΩ។

LCD ត្រូវបានប្រើដើម្បីបង្ហាញនាឡិកា។ 6 បន្ទះ LCD ត្រូវភ្ជាប់ជាមួយ Arduino ។ ខ្សែ RS, E, D4, D5, D6 និង D7 (Pins 4, 6, 11, 12, 13 និង 14) នៃ LCD ត្រូវបានភ្ជាប់ទៅនឹងម្ជុល 2, 3, 4, 5, 6 និង 7 នៃ Arduino ។

ប៊ូតុងបីត្រូវបានប្រើដើម្បីកំណត់សំឡេងរោទិ៍។ ប៊ូតុងទាំងនេះត្រូវបានតភ្ជាប់ទៅម្ជុល 8, 9 និង 10 នៃ Arduino ។ ឧបករណ៍រោទ៍ត្រូវបានភ្ជាប់ទៅនឹងអា 11 របស់ Arduino ដែលដើរតួជាការជូនដំណឹង។

ធ្វើការគោលបំណងនៃគម្រោងនេះគឺដើម្បីបង្កើតនាឡិកាពេលវេលាពិតរួមជាមួយនឹងលក្ខណៈពិសេសការជូនដំណឹង។ ការងារនៃគម្រោងនេះត្រូវបានពន្យល់ដូចខាងក្រោម។រាល់ការតភា្ជប់ទាំងអស់ត្រូវបានបង្កើតឡើងតាមដ្យាក្រាមសៀគ្វីដែលបានបង្ហាញ។ កូដសំរាប់ Arduino ត្រូវបានផ្ទុកឡើងហើយអេក្រង់ LCD បង្ហាញកាលបរិច្ឆេទនិងពេលវេលាបច្ចុប្បន្ន។ដើម្បីកំណត់សំឡេងរោទិ៍យើងចុចប៊ូតុង។ វានឹងទៅជារបៀបដាស់តឿននិងសួររកម៉ោងដែលមានពេលវេលាបច្ចុប្បន្នកំពុងបង្ហាញ។ ប៊ូតុងបង្កើនបន្ថែមត្រូវតែត្រូវបានចុចដើម្បីប្តូរម៉ោង។នៅពេលនាឡិកាស្ថិតនៅក្នុងទ្រង់ទ្រាយ 24 ម៉ោងម៉ោងនឹងត្រូវបានបង្កើនរវាង 0 និង 23 ។ នៅពេលដែលម៉ោងនៃការជូនដំណឹងត្រូវបានកំណត់យើងត្រូវចុចប៊ូតុងបន្ទាប់ដើម្បីចូលទៅកាន់ផ្ទាំងនាទី។ប៊ូតុងបន្ថែមម្តងទៀតត្រូវបានចុចដើម្បីផ្លាស់ប្តូរនាទី។ នៅពេលការជូនដំណឹងបានបញ្ចូលប៊ូតុងកំណត់ត្រូវបានកំណត់ហើយសំឡេងរោទ៍ត្រូវបានកំណត់។តម្លៃដែលបានបញ្ចូលជារោទិ៍ត្រូវបានរក្សាទុកក្នុង EEPROM នៃ Arduino ។ តម្លៃទាំងនេះត្រូវបានប្រៀបធៀបជាបន្តបន្ទាប់ជាមួយពេលបច្ចុប្បន្ន។នៅពេលដែលតម្លៃដែលបានរក្សាទុកនិងតម្លៃបច្ចុប្បន្នផ្គូផ្គងនោះឧបករណ៍ជូនដំណឹងសម្រាប់សំឡេងរោទិ៍នឹងត្រូវបានកេះ។ ដើម្បីបញ្ឈប់ការជូនដំណឹងប៊ូតុងបន្ទាប់ត្រូវបានចុច។



Code


#include <Wire.h>
#include<EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
RTC_DS1307 RTC;
int tmp,Inc,hor,mIn,add=11;
int set=8; 
int cge=9;  
int mod=10;
int off=0;
#define buz 11
int Hor,Min,Sec;
///////////////////////////////////////Function to adjust the time//////////////////////////////////
void time()                            
{
    int tmp=1,mins=0,hors=0,secs=0;
    while(tmp==1)
    {
     off=0;
     if(digitalRead(cge)==0)
     {
      Hor++;
      if(Hor==24)
      {
       Hor=0;
      }
     }
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Set Alarm Time ");

    lcd.setCursor(0,1);
    if(Hor<=9)
    lcd.print("0");
    lcd.print(Hor);
    lcd.print(":");
    lcd.print(Min);
    lcd.print(":");
    lcd.print(Sec);
    delay(200);
    lcd.setCursor(0,1);
    lcd.print("  ");
    lcd.print(":");
    lcd.print(Min);
    lcd.print(":");
    lcd.print(Sec);
    delay(200);
    if(digitalRead(set)==0)
    {
      hor=Hor;
      EEPROM.write(add++,hor);
     tmp=2;
     while(digitalRead(set)==0);
    }
    }
   
    while(tmp==2)
    {
     if(digitalRead(cge)==0)
     {
      Min++;
      if(Min==60)
      {Min=0;}
     }
    lcd.setCursor(0,1);
    lcd.print(Hor);
    lcd.print(":");
     if(Min<=9)
    lcd.print("0");
    lcd.print(Min);
    lcd.print(":");
    lcd.print(Sec);
    lcd.print("  ");
    delay(200);
     lcd.setCursor(0,1);
    lcd.print(Hor);
    lcd.print(":");
    lcd.print("  ");
    lcd.print(":");
    lcd.print(Sec);
    lcd.print("  ");
    delay(200);
      if(digitalRead(set)==0)
      {
       mIn=Min;
       EEPROM.write(add++, mIn);
       tmp=0;
       while(digitalRead(set)==0);
      }
    }
    off=1;
    delay(10);
}
///////////////////////////////////////////function to sound the buzzer//////////////////////////////////
void Buz()
{
  if(digitalRead(set)==0)
  off=0;
  if(off==1)
  {
   digitalWrite(buz,HIGH);
   delay(500);
 
   digitalWrite(buz, LOW);
   delay(500);
  }
}
//////////////////////////////////////////function to compare the alarm time with current RTC time//////////////////
void TimeCheck()
{
  int tem[17];
  for(int i=11;i<17;i++)
  {
    tem[i]=EEPROM.read(i);
  }
  if(Hor == tem[11] && Min == tem[12] && off==1)
  {
   add=11;
   Buz();
   Buz();
   lcd.clear();
   lcd.print("alarm...........");
   lcd.setCursor(0,1);
   lcd.print("...........alarm");
   Buz();
   Buz();
    }
}
////////////////////////////////////////////////////////////setup///////////////////////////
void setup()
{
Wire.begin();
RTC.begin();
lcd.begin(16,2);
pinMode(cge, INPUT);
pinMode(set, INPUT);
pinMode(mod, INPUT);
pinMode(buz, OUTPUT);
digitalWrite(set, HIGH);
digitalWrite(mod, HIGH);
digitalWrite(cge, HIGH);
   lcd.setCursor(0,0);
   lcd.print("ELECTRONICS HUB");
   lcd.setCursor(0,1);
   lcd.print("  Alarm Clock  ");
   delay(2000);
   
if(!RTC.isrunning())
{
RTC.adjust(DateTime(__DATE__,__TIME__));
}
}
////////////////////////////////////////////////////////////loop/////////////////////////////////////
void loop()
{
   DateTime now = RTC.now();
   if(digitalRead(mod) == 0)     
   {
    current();
    time();
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("  Alarm On");
    delay(2000);
   }
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.setCursor(6,0);
Hor=now.hour(),DEC;
if(Hor<=9)
{
  lcd.print("0");
  lcd.print(Hor=now.hour(),DEC);
}
else
lcd.print(Hor=now.hour(),DEC);
lcd.print(":");
Min=now.minute(),DEC;
if(Min<=9)
{
lcd.print("0");
lcd.print(Min=now.minute(),DEC);
}
else
lcd.print(Min=now.minute(),DEC);
lcd.print(":");
Sec=now.second(),DEC;
if(Sec<=9)
{
  lcd.print("0");
  lcd.print(Sec=now.second(),DEC);
}
else
lcd.print(Sec=now.second(),DEC);
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(now.day(),DEC);
lcd.print("/");
lcd.print(now.month(),DEC);
lcd.print("/");
lcd.print(now.year(),DEC);
TimeCheck();
delay(200);
}
///////////////////////////////////////////////////////function to get current RTC time//////////////////////////////
void current()
{
  lcd.setCursor(0,1);
  lcd.print(Hor);
  lcd.print(":");
  lcd.print(Min);
  lcd.print(":");
  lcd.print(Sec);
}
#include <Wire.h>
#include<EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
RTC_DS1307 RTC;
int tmp,Inc,hor,mIn,add=11;
int set=8; 
int cge=9;  
int mod=10;
int off=0;
#define buz 11
int Hor,Min,Sec;
///////////////////////////////////////Function to adjust the time//////////////////////////////////
void time()                            
{
    int tmp=1,mins=0,hors=0,secs=0;
    while(tmp==1)
    {
     off=0;
     if(digitalRead(cge)==0)
     {
      Hor++;
      if(Hor==24)
      {
       Hor=0;
      }
     }
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Set Alarm Time ");

    lcd.setCursor(0,1);
    if(Hor<=9)
    lcd.print("0");
    lcd.print(Hor);
    lcd.print(":");
    lcd.print(Min);
    lcd.print(":");
    lcd.print(Sec);
    delay(200);
    lcd.setCursor(0,1);
    lcd.print("  ");
    lcd.print(":");
    lcd.print(Min);
    lcd.print(":");
    lcd.print(Sec);
    delay(200);
    if(digitalRead(set)==0)
    {
      hor=Hor;
      EEPROM.write(add++,hor);
     tmp=2;
     while(digitalRead(set)==0);
    }
    }
   
    while(tmp==2)
    {
     if(digitalRead(cge)==0)
     {
      Min++;
      if(Min==60)
      {Min=0;}
     }
    lcd.setCursor(0,1);
    lcd.print(Hor);
    lcd.print(":");
     if(Min<=9)
    lcd.print("0");
    lcd.print(Min);
    lcd.print(":");
    lcd.print(Sec);
    lcd.print("  ");
    delay(200);
     lcd.setCursor(0,1);
    lcd.print(Hor);
    lcd.print(":");
    lcd.print("  ");
    lcd.print(":");
    lcd.print(Sec);
    lcd.print("  ");
    delay(200);
      if(digitalRead(set)==0)
      {
       mIn=Min;
       EEPROM.write(add++, mIn);
       tmp=0;
       while(digitalRead(set)==0);
      }
    }
    off=1;
    delay(10);
}
///////////////////////////////////////////function to sound the buzzer//////////////////////////////////
void Buz()
{
  if(digitalRead(set)==0)
  off=0;
  if(off==1)
  {
   digitalWrite(buz,HIGH);
   delay(500);
 
   digitalWrite(buz, LOW);
   delay(500);
  }
}
//////////////////////////////////////////function to compare the alarm time with current RTC time//////////////////
void TimeCheck()
{
  int tem[17];
  for(int i=11;i<17;i++)
  {
    tem[i]=EEPROM.read(i);
  }
  if(Hor == tem[11] && Min == tem[12] && off==1)
  {
   add=11;
   Buz();
   Buz();
   lcd.clear();
   lcd.print("alarm...........");
   lcd.setCursor(0,1);
   lcd.print("...........alarm");
   Buz();
   Buz();
    }
}
////////////////////////////////////////////////////////////setup///////////////////////////
void setup()
{
Wire.begin();
RTC.begin();
lcd.begin(16,2);
pinMode(cge, INPUT);
pinMode(set, INPUT);
pinMode(mod, INPUT);
pinMode(buz, OUTPUT);
digitalWrite(set, HIGH);
digitalWrite(mod, HIGH);
digitalWrite(cge, HIGH);
   lcd.setCursor(0,0);
   lcd.print("ELECTRONICS HUB");
   lcd.setCursor(0,1);
   lcd.print("  Alarm Clock  ");
   delay(2000);
   
if(!RTC.isrunning())
{
RTC.adjust(DateTime(__DATE__,__TIME__));
}
}
////////////////////////////////////////////////////////////loop/////////////////////////////////////
void loop()
{
   DateTime now = RTC.now();
   if(digitalRead(mod) == 0)     
   {
    current();
    time();
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("  Alarm On");
    delay(2000);
   }
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.setCursor(6,0);
Hor=now.hour(),DEC;
if(Hor<=9)
{
  lcd.print("0");
  lcd.print(Hor=now.hour(),DEC);
}
else
lcd.print(Hor=now.hour(),DEC);
lcd.print(":");
Min=now.minute(),DEC;
if(Min<=9)
{
lcd.print("0");
lcd.print(Min=now.minute(),DEC);
}
else
lcd.print(Min=now.minute(),DEC);
lcd.print(":");
Sec=now.second(),DEC;
if(Sec<=9)
{
  lcd.print("0");
  lcd.print(Sec=now.second(),DEC);
}
else
lcd.print(Sec=now.second(),DEC);
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(now.day(),DEC);
lcd.print("/");
lcd.print(now.month(),DEC);
lcd.print("/");
lcd.print(now.year(),DEC);
TimeCheck();
delay(200);
}
///////////////////////////////////////////////////////function to get current RTC time//////////////////////////////
void current()
{
  lcd.setCursor(0,1);
  lcd.print(Hor);
  lcd.print(":");
  lcd.print(Min);
  lcd.print(":");
  lcd.print(Sec);
}
referent :file:///D:/arduino/Arduino%20Alarm%20Clock.html/Arduino%20Alarm%20Clock.html

No comments:

Powered by Blogger.