تصميم مؤقت العد التنازلي باستخدام الاردوينو اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث الحرائق أو غيرها لا سمح الله.

مقدمـــــــــة عن المشروع

الموقت هو نوع من الساعات المستخدمة لقياس الفواصل الزمنية . يوجد نوعان من أجهزة ضبط الوقت ، أحدهما يعتمد صعودًا من الصفر ، لقياس الوقت المنقضي ، والذي يسمى ساعة التوقيت . والثاني هو العد التنازلي من مدة زمنية محددة المقدمة من قبل المستخدم ، وتسمى عادة باسم العد التنازلي .
هنا ، في هذا المشروع  سوف نعرض لك كيفية عمل مؤقت للعد التنازلي باستخدام الاردوينو . نحن هنا لا نستخدم أي وحدة حساب وقت حقيقي  للحصول على الوقت . يتم توفير المدة الزمنية من قبل المستخدم بمساعدة لوحة المفاتيح وشاشة LCD . وعندما يصل المؤقت إلى الصفر ، سيتم إنتاج صوت التنبيه بمساعدة Buzzer .

الكيت يحتوي علي المكونات التالية

  1. لوحة أردوينو مع كابل يوأس بي
  2. عدد 10 أسلاك التوصيل ذكر الي أنثي
  3. عدد 10 أسلاك التوصيل ذكر الي ذكر
  4. لوح تجارب صغيرة
  5. لوح تجارب كبيرة
  6. مذود طاقة 5 فولت
  7. لوح مفاتيح 4×4
  8. عدد 3 مقاومة 220 أوم أو 330 أوم
  9. عدد 3 ليد أحمر
  10. عدد 1 مفتاح ضاغط أو بوش بوتون
  11. عدد 1 منبه صوتي (بزر أو طنان )
  12. عدد 1 مقاومة متغيرة بقيمة من ( 1 الي 20 كيلوأوم)
  13. شاشة عرض كرستالية من النوع 16×2 مع برتيكول 12c
Untitled1

طريقة العمل والتوصيل

تأكد من أجراء جميع التوصيلات وفقا للمخطط أدناه .

Arduino-based-Countdown-Timer-circuit-diagram

يستخدم الاردوينو  هنا كوحدة تحكم رئيسية . يتم استخدام لوحة المفاتيح لتغذية المدة الزمنية وتستخدم شاشة LCD  لعرض العد التنازلي . يستخدم الضغط على الزر لبدء الوقت .

عمل هذا المؤقت التنازلي بسيط لكن الكود معقد قليلاً . وأوضح طريقة العمل .

في البداية ، ستطبع “Arduino Timer” على شاشة LCD حتى تضغط على زر الضغط . بمجرد الضغط على زر الضغط ، سيطلب منك إدخال مدة وقت العد التنازلي . ثم يمكنك إدخال المدة الزمنية بمساعدة لوحة المفاتيح . ثم تحتاج إلى الضغط على “D” لتوفير الوقت وبدء مؤقت العد التنازلي .

عندما يصل الموقت إلى الصفر ، يبدأ الجرس في إصدار صوت تنبيه ويصدر صوتًا لمدة 100 ميلي ثانية . لإيقاف الجرس ، اضغط مع الاستمرار على زر الضغط . يمكنك استخدام زر الضغط في أي وقت لإيقاف المؤقت بين العد .

تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.

الكــــــــود البرمجي

لتحميل الكود البرمجي اضغط هنا
#include <LiquidCrystal.h>
#include <Keypad.h>

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns

long int set1;
long int set2;
long int set3;
long int set4;
long int j;

String hours;
String minutes;
String seconds;
// Define the Keymap

char keys[ROWS][COLS] = {

  {'1','2','3','A'},

  {'4','5','6','B'},

  {'7','8','9','C'},

  {'*','0','#','D'}

};

byte rowPins[ROWS] = { 6, 7, 8, 9 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins
byte colPins[COLS] = { 10, 11, 12, 13 };// Connect keypad COL0, COL1 and COL2 to t

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

LiquidCrystal lcd(A0, A1, 5, 4, 3, 2); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

 int t1, t2, t3, t4, t5, t6;
 int r1, r2, r3;
 
boolean feed = true; // condition for alarm

 char key;
 String r[8];

 void setFeedingTime()
{
  feed = true;
   int i=0;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Set feeding Time");
  lcd.clear();
  lcd.print("HH:MM:SS");
  lcd.setCursor(0,1);

  
  while(1){
    key = kpd.getKey();

    char j;
    
  if(key!=NO_KEY){
    
    lcd.setCursor(j,1);
    
    lcd.print(key);
    
    r[i] = key-48;
    i++;
    j++;

    if (j==2 || j == 5)
    {
      lcd.print(":"); j++;
    }
    delay(500);
  }

  if (key == 'D')
  {key=0; break; }
  }
 lcd.clear();
}
 
 void setup() 
 { 
  lcd.begin(16,2);
  Serial.begin(9600);
  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(A3, INPUT);
  pinMode(A4, OUTPUT);
 } 
 
 void loop() 
 { 
      lcd.setCursor(0,0);
      lcd.print("Arduino Timer");
      //Serial.println(A3);

      if (digitalRead(A3)==1) //
      {
      lcd.clear();
      setFeedingTime(); 
      for(int i = 0; i < 6; i++)  // this for loop is used to get the value of the feeding time and print it serially
      {
       Serial.print(r[i]);
       Serial.println();
      }
      
   hours = String (r[0]) + String (r[1]) ; //combining two separate int values of r[0] and r[1] into one string and save it to "hours" 
   minutes = String (r[2]) + String (r[3]) ;  //combining two separate int values of r[2] and r[3] into one string and save it to "minutes" 
   seconds = String (r[4]) + String (r[5]) ;  //combining two separate int values of r[4] and r[5] into one string and save it to "seconds" 

  
  set1 = (hours.toInt()*3600); //converting hours into seconds
  set2 = (minutes.toInt() * 60);  //converting minutes into seconds
  set3 = seconds.toInt();
  set4 = (hours.toInt() * 3600)+ (minutes.toInt() * 60) + seconds.toInt(); //adding set1, set2 and set3 together in set4
  Serial.print("set4");
  Serial.print(set4);
  Serial.println();

  lcd.setCursor(0,0);
  lcd.print("Countdown begins");
  delay(1000);
  lcd.clear();
  
  for(long int j = set4; j >= 0; j--) // this for loopis used to decrease the total time in seconds
  {
  Serial.println(j);
  
  lcd.setCursor(0,0);
  lcd.print("HH:MM:SS");
  
  long int HH = j / 3600; // converting the remaining time into remaining hours
  lcd.setCursor(0,1);
  Serial.println(HH);
  if (HH < 10) { lcd.print('0');  }
  lcd.print(HH);
  lcd.print(":");
  
  long int MM = (j - (HH*3600))/60 ; //converting the remaining time into remaining minutes
  lcd.setCursor(3,1);
  Serial.println(MM);
  if (MM < 10) { lcd.print('0');  }
  lcd.print(MM);
  lcd.print(":");
  
  long int SS = j - ((HH*3600)+(MM*60)); //converting the remaining time into remaining seconds
  lcd.setCursor(6,1);
  Serial.println(SS);
  if (SS < 10) { lcd.print('0');  } 
  lcd.print(SS);
  delay(1000);

  if (digitalRead(A3)==1){break;} 

   if (j == 0)
    
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Timer Stop");
      lcd.setCursor(2,1);
      lcd.print("-Ring-Ring-");
      
    for(int k =0; k<= 100; k++) //this for loop is used for the buzzer to beep 100 time as the timer reaches zero
      {
        digitalWrite(A4,HIGH);
        delay(300);
        digitalWrite(A4,LOW);  
        delay(300); 
        if (digitalRead(A3)==1){break;}  
      }
    }
   }
  }
}       

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *