تعلم كيفية إنشاء ساعة قائمة على Arduino باستخدام RTC IC الذي يعبر عن الوقت والتاريخ عند الطلب!
في هذا البرنامج التعليمي ، سننشئ ساعة تعتمد على Arduino في الوقت الفعلي والتي ستتحدث عن الوقت والتاريخ عند الضغط على الزر. تكمن الفكرة في إنشاء طريقة لبيانات المستشعر من Arduino ليتم التحدث بها عبر الهاتف الذكي ، وأنا أستخدم وحدة RTC كمثال. يمكن أن يكون برنامجًا تعليميًا رائعًا للتصميم حول تطبيقات IoT وأجهزة الاستشعار للمكفوفين حيث يمكن مراقبة البيانات عبر الصوت.
باستخدام RTC IC
سنقوم بنشر IC على مدار الساعة في الوقت الحقيقي (RTC) بدلاً من استخدام IC المؤقت 555 العادي. يقوم RTC بتتبع الوقت حتى بدون طاقة. يحتوي على دائرة مدمجة لاستشعار الطاقة والتي تتعقب حالات انقطاع التيار وتتحول تلقائيًا إلى مصدر الطاقة الاحتياطية.
في حالة Arduino ، تتم إعادة ضبط الساعة الداخلية عند إعادة تشغيلها أو فصلها. يفقد مسار الوقت ويعيد ضبط الساعة إلى الصفر ويبدأ العد من الصفر عند التشغيل. لذلك ، من أجل مزامنة ساعة Arduino الداخلية مع الساعة الحقيقية حتى في حالة عدم وجود طاقة ، نستخدم RTC.
سنقوم بواجهة Arduino و RTC لإرسال البيانات إلى هاتف ذكي باستخدام وحدة Bluetooth التي تسمح بنطق البيانات عبر تطبيق تحويل النص إلى كلام.
الأجهزة المطلوبة
اردوينو UNO
وحدة DS1307 RTC
اللوح
توصيل الأسلاك
مزود الطاقة
اضغط الزر
وحدة بلوتوث HC-05
البرامج المطلوبة
اردوينو IDE
تطبيق تحويل النص إلى كلام اردوينو بلوتوث
الوحدة النمطية DS-1307 RTC
DS1307 عبارة عن ساعة في الوقت الحقيقي (RTC) بها ثمانية دبابيس وتستخدم واجهة I2C. إنها ساعة منخفضة الطاقة مع 56 بايت من البطارية الاحتياطية SRAM. توفر الساعة بيانات مؤهلة للثواني والدقائق والساعات واليوم والشهر والسنة. يتم تعديل تاريخ انتهاء كل شهر تلقائيًا ، بما في ذلك الأشهر التي تقل عن 31 يومًا.
الربط بين RTC و Arduino
RTClib هي مكتبة خفيفة الوزن تستخدم لتحديد تاريخ ووقت Arduino ويمكن تنزيلها من هنـــــــــــــــــا
يتتبع RTC IC الوقت الحقيقي الحالي الذي يمكن استخدامه لبرمجة الإجراءات في وقت معين. يستخدم المذبذب البلوري في معظم الدوائر المتكاملة RTC بتردد 32.768 كيلوهرتز (نفس التردد المستخدم في ساعات الكوارتز والساعات). هذا التردد يساوي 2 ^ 15 دورة في الثانية.
وحدة بلوتوث HC-05
وحدة Bluetooth HC-05 هي مكون سهل الاستخدام يستخدم بروتوكول المنفذ التسلسلي (SSP). إنه مصمم لإنشاء اتصالات تسلسلية لاسلكية شفافة.
هذه الوحدة هي Bluetooth V2 + EDR (معدل بيانات محسّن) ، ولها تعديل 3 ميغابت في الثانية إلى جانب جهاز إرسال واستقبال لاسلكي 2.4 جيجا هرتز ونطاق أساسي. يستخدم جهاز Bluetooth ذو رقاقة أحادية خارجية من bluecore يعتمد على تقنية CMOS ويستخدم ميزة قفز التردد التكيفي (AFH). حجمها صغير مثل 12.7 مم × 27 مم.
ربط HC-05 مع Arduino باستخدام SerialSoftware.h
تم تطوير مكتبة SoftwareSerial لتمكين الاتصال التسلسلي على المسامير (الرقمية الأخرى) في Arduino باستخدام البرنامج لإعادة إنتاج وظائف المنفذ التسلسلي ، ومن هنا جاء اسمه "SoftwareSerial". من الممكن أيضًا أن يكون لديك أكثر من منفذ تسلسلي للبرنامج بسرعات تصل إلى 115200 بت في الثانية.
إعداد تطبيق Arduino Bluetooth لتحويل النص إلى كلام
يتلقى تطبيق الهاتف الذكي هذا رسائل نصية عبر البلوتوث من جهاز Bluetooth مقترن ، أي لوحة Arduino مع وحدة HC-05. ثم يقوم بتحويل النص المستلم إلى كلام.
تكوين زر الضغط
يتم توصيل زر الضغط عبر المقاوم 10 كيلو أوم ، المعروف باسم المقاوم المنسدل ، من الأرض إلى دبوس التبديل المتصل بـ Arduino. يقوم بتوصيل الدبوس بالأرض عندما يكون المفتاح مفتوحًا ، لذلك يقرأ LOW عندما لا يكون هناك جهد قادم من خلال المفتاح.
عند الضغط على الزر الانضغاطي ، يتم ضبط حالة الزر على HIGH ويتم تكوين إشارة الصوت عبر Bluetooth. بمجرد تحرير الزر ، تنتقل حالة الزر إلى LOW وتنقطع الدائرة.
فيما يلي مخطط الدائرة الذي يوضح وضع الزر الانضغاطي والمقاوم 10 كيلو أوم.
تكوين زر الضغط
يتم توصيل الزر الانضغاطي عبر المقاوم 10 كيلو أوم ، والمعروف باسم المقاوم المنسدل ، من الأرض إلى دبوس التبديل المتصل بـ Arduino. يقوم بتوصيل الدبوس بالأرض عندما يكون المفتاح مفتوحًا ، لذلك يقرأ LOW عندما لا يكون هناك جهد قادم من خلال المفتاح.
عند الغط على الزر الانضغاطي ، يتم ضبط حالة الزر على HIGH ويتم تكوين إشارة الصوت عبر Bluetooth. بمجرد تحرير الزر ، تنتقل حالة الزر إلى LOW وتنقطع الدائرة.
فيما يلي مخطط الدائرة الذي يوضح وضع الزر الانضغاطي والمقاوم 10 كيلو أوم.
تجميع الأجهزة
دعنا نربط المكونات الفردية والوحدات الموضحة أعلاه بـ Arduino UNO كما هو موضح في المخطط التالي.
واجهة تحويل النص إلى كلام من Arduino Bluetooth
قم بتحميل كود Arduino من أسفل هذه المقالة. بمجرد التحميل ، افتح إعداد Bluetooth بهاتفك وابحث عن أجهزة Bluetooth. في قائمة أجهزة Bluetooth المتاحة ، قم بإقران هاتفك باسم الجهاز HC-05 باستخدام رمز المرور 1234 أو 0000. ثم افتح تطبيق تحويل النص إلى كلام Arduino Bluetooth. ستظهر لك قائمة الأجهزة المقترنة. حدد HC-05 كما هو موضح في الصور أدناه.
إذا ضغطت على زر الضغط ، فسيتحدث التطبيق ويعرض الوقت والتاريخ الحاليين. يمكن أيضًا التحكم في درجة الصوت والسرعة داخل التطبيق.
كود المشروع الكامل
#include <Wire.h>
#include <SoftwareSerial.h>
#include "RTClib.h"
//bluetooth variable
SoftwareSerial BT(10,11);
RTC_DS1307 rtc;
//pushbutton declaration
int buttonPin = 7;
int buttonState = 0;
boolean on=false;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
char monthsOfTheYear[13][12] = {"m","January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
void setup ()
{
while (!Serial); // for Leonardo/Micro/Zero
Serial.begin(9600);
Wire.begin();
rtc.begin();
BT.begin(9600);
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning())
{
Serial.println("RTC is NOT running!");
}
// This line sets the RTC with an explicit date & time, for example to set
// rtc.adjust(DateTime(2020, 1, 21, 19, 47, 36));
pinMode(buttonPin, INPUT);
//testing serial monitor
Serial.print("Date: ");
Serial.print(__DATE__);
Serial.print('\n');
Serial.print("Time: ");
Serial.print(__TIME__);
}
void loop () {
buttonState = digitalRead(buttonPin);
DateTime now = rtc.now();
if(buttonState == HIGH)
{
//Serial.print('test');
on=true;
if(on == true)
{
digitalWrite(buttonPin, HIGH);
delay(4000);
BT.println("Today is");
delay(3000);
BT.println(monthsOfTheYear[now.month()]);
delay(1000);
BT.println(now.day());
delay(1000);
BT.println(now.year());
delay(3000);
BT.println("Time in 24 hour clock is");
delay(3000);
BT.println(now.hour());
delay(1000);
BT.println("hours");
delay(3000);
BT.println(now.minute());
delay(1000);
BT.println("minutes");
delay(3000);
BT.println(now.second());
delay(1000);
BT.println("seconds");
}
}
else if (buttonState == LOW)
{
digitalWrite(buttonPin, LOW);
}
delay(800);