قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 19-09-2017, 06:59 AM المشاركة 1   
x4 مشروع مذكرة اوقات صلاة لأى مكان بالمعادلات الفلكية - بدون EEPROM Twitter FaceBook Google+



بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته ,

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

- اولا لمعرفة اوقات الصلاة هناك طريقتين :
- باستخدام MICRO + DS1307 + EEPROM + SWITCHES و هذه الطريقة تعتمد على تسجيل مواقيت الصلاة خلال العام (لمدينة ما) على ذاكرة و من ثم يقوم الميكرو بقراءة التاريخ و الزمن و مقارنتهم بما فى الذاكرة فاذا تطابق مع احد البيانات يكون قد حان وقت الصلاة , و يشغل الاذان .
مثال على هذا الاسلوب مشروع للاخ الكريم جاسم :
http://www.qariya.info/vb/showthread.php?t=208876


-الطريقة الاخرى طريقة المعادلات الفلكية :
باستخدام MICRO + DS1307 + SWITCHES و هنا نستغنى عن الذاكرة حيث سيتم حساب مواقيت الصلاة يوميا و بناءا على احداثيات المدينة و ذلك باستخدام بعض المعادلات الفلكية , و هذه الطريقة ان شاء الله سنقوم بالعمل عليها .
ان شاء الله تتميز انها تصلح لاى مدينة بمجرد ادخال احداثياتها , و التاريخ و الزمن , لا تحتاج لذاكرة معها .


فى مشروعنا سنكتب البرنامج و هو مكون من عدة دوال اساسية و هم 3 فقط سنكتب دوال تستخدم معادلات فلكية ببساطة و بدون الدخول فى التفاصيل لانه ليس علمنا , بالاضافة للدالة الرئيسية .


الهدف من البرنامج هو تبسيط الموضوع بالنسبة للمعادلات و يكون قاعدة لمن يريد تعديله و استخدامه كيفما يشاء .
ان شاء الله سنشرح البرنامج على شكل دوال متفرقة ثم سنجمعهم فى برنامج واحد .

ان شاء الله المشروع قائم على :
- ميكرو ATMEL - ATMEGA 8
- DS1307
- فى البداية سنقوم عرض مواقيت الصلاة على شاشة UART بالبروتيوس .
- اللغة المستخدمة C
- المترجم : اى مترجم لان اللغة المستخدمة هى STANDARD C .
- التردد : داخلى 8 او 4 او 1 ميجا


ارجو من الله العون و القبول و لا حول و لا قوة الا بالله


( اول فرائض الله أقرأ )




احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً aladdin_2005 ( شكر العضو على هذه المشاركة )
اعجاب aladdin_2005 ( أعجبته المشاركة )
اعلانات

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 19-09-2017, 07:26 AM المشاركة 2   
sun نستكمل باذن الله


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته ,


باذن الله اول دالة سنبدأ بها هى دالة حساب ترتيب اليوم داخل السنة , اى مثلا يوم 1 شهر مارس ترتيبه 60 اذا كانت السنة بسيطة , او ترتيبه 61 اذا كانت السنة كبيسة , و نحسبها كما يلى :
ايام يناير + ايام فبراير + ايام مارس = 31 + 28 + 1 = 60

اما السنة الكبيسة يكون فبراير 29 يوم و تعرف هذه السنة بانها تقبل القسمة على 4 اى ان عام 2016 كبيس و كذلك 2020 و ما بينهما سنوات بسيطة .

و بذلك سنحتاج مصفوفة تكون فيها ايام السنة لكل شهر , ثم لبرنامج لحساب ترتيب اليوم و معرفة السنة الكبيسة LEAP YEAR, كما يلى :

كود:
const uint8_t MONTHS[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

و وضعنا صفر فى اول المصفوفة ليكون ترتيبها متناسق مع ترتيب الاشهر فمثلا شهر مايو ترتيبه 5 فى العام و هو فى المصفوفة MONTHS[5]

دالة حساب ترتيب اليوم - مع ملاحظة السنة الكبيسة leap year :
كود:
unsigned int calculate_days(){
    // calculate and return days of year in 356
    
    unsigned int days = 0;
    unsigned char month;
    for ( month= 1; month < rtc.month; month++) { days += MONTHS[month];}
    days += rtc.dayofmonth;
    if ( !(rtc.year % 4) && (rtc.month > 2) ) days += 1;  // for leap year affect on No. of days after month february 
    return days;
}
و ما توفيقى الا بالله




احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً aladdin_2005 ( شكر العضو على هذه المشاركة )
اعجاب aladdin_2005 ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

حمودي1010
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
المشاركات: 237
نشاط [ حمودي1010 ]
قوة السمعة:0
قديم 19-09-2017, 09:14 PM المشاركة 3   
افتراضي


بارك الله فيك اخى مشتاق
نتابعك ان شاء الله بشوق

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً مشتاق الله ( شكر العضو على هذه المشاركة )

رسول العراق
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
المشاركات: 90
نشاط [ رسول العراق ]
قوة السمعة:0
قديم 20-09-2017, 08:04 AM المشاركة 4   
افتراضي


بارك الله فيك أستاذ مشتاق الله

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً مشتاق الله ( شكر العضو على هذه المشاركة )

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 20-09-2017, 09:25 AM المشاركة 5   
sun


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته ,

ان شاء الله سنكتب اليوم دالة مهمة جدا لحساب معاملين مهمين هما :
معادلة الزمن Equation of Time - الميل الزاوى declination و نرمز له delta
, و طبعا لا احد يسالنى عن هذه المعادلات الفلكية ( الله اعلم ) :


كود:

float* EOT (unsigned int day)  
{    /*  calculate and return Equation of Time and delta
    takes days of year in 356
    */

    static float data[2];
    double A, W, B, C, EQ, delta ;
    double lambda = 23.44 * M_PI / 180;    // Earth's inclination in radians
    W = 2*M_PI/365.25;          // angular velocity of annual revolution (radians/day)
    // the result is in seconds
    // add to the Mean Solar Time  (UTC + Longitude*240 sec.) to get Apparent Solar Time
    // D                                                          day of the year
    // A = W*(D+10)                                               angle of revolution (circular)
    // B = A + 0.0333*sin(W*(D-2))                                angle of revolution (elliptical)
    // C = ( A - atan[  tan(B) / cos (inclination) ] ) / 'pi'     angular correction
    // EOT = 43200 * (C ? int(C+0.5))                             Equation of Time in seconds
    
    A = W * ((day + 10)%365);
    B = A + 0.0333 * sin(W*((day-2)%365));
    C = ( A - atan(tan(B) / cos (lambda)) ) / M_PI ;
    EQ = 720.0 * (C - (int)(C+0.5));
    delta = -asin(sin(lambda) * cos(B)) *57.5;

    data[0] = EQ;
    data[1] = delta;
    return data;
}
هذه الدالة ستاخذ ترتيب اليوم الذى حسبناه فى البوست السابق و ترجع قيمتين الاولى EQ معادلة الزمن - و الثانية DELTA ,

و يتم تخزينهما فى مصفوفة DATA مكونة من عنصرين , لاننا لا نستطيع عمل return لعنصرين بينما يمكن عمل return لل pointer data .



و ما توفيقى الا بالله




التعديل الأخير تم بواسطة : مشتاق الله بتاريخ 20-09-2017 الساعة 02:44 PM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً aladdin_2005 ( شكر العضو على هذه المشاركة )
اعجاب aladdin_2005 ( أعجبته المشاركة )

الصورة الرمزية aladdin_2005
aladdin_2005
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2004
الدولة: مصر ((الأسكندريه))
المشاركات: 1,246
نشاط [ aladdin_2005 ]
قوة السمعة:116
قديم 22-09-2017, 08:46 PM المشاركة 6   
افتراضي


اسئل الله لك التوفيق والسداد


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 23-09-2017, 03:30 PM المشاركة 7   
sun


السلام عليكم و رحمة الله و بركاته ,

ان شاء الله سنكتب اليوم دالة حساب مواقيت خمسة و هن : الظهر و الفجر و الشروق و المغرب و العشاء , و ان شاء الله ساضيف كود العصر فيما بعد .
هذه الدالة تأخذ ترتيب اليوم فى السنة و ذلك لانها تستدعى دالة الزمن بداخله EOT(DAY) .
و تحتاج هذه الدالة ايضا ثلاث بيانات عن المدينة و هى : خط الطول - دائرة العرض - الارتفاع عن سطح البحر , وهذه البيانات تجدها فى بحثك باسم المدينة حيث تجد ويكبيديا تظهر لك هذه البيانات .

ان شاء الله فى المشاركات القادمة ساشرح اجزاء الدالة .

كود:

void praying_calc(uint16_t days){
    /* to calculate and return time of all praying, */
    
    uint8_t hight;    
    float length_line_mid, length_line_real, length_line_diff, width_circle;

    float* data;
    float cita;
    float equoftime;
    float delta;
    float duhur, shorok, ghroup, fagr, ishaa;
    float numerator;
    float denominator;
    
    
    length_line_mid  = 30;
    hight             = 23;        
    width_circle     = 30;        
    length_line_real = 31.13;    
    
    
    length_line_diff = length_line_mid - length_line_real;
    
    data = EOT(days);  //calculate and return Equation of Time and delta 
    equoftime = data[0];
    delta     = data[1];
    
    cita  = 90.8309 + 0.0353 * sqrt(hight) ;
    numerator   = cos(cita * M_PI/180) - sin(width_circle*M_PI/180) * sin(delta*M_PI/180);
    denominator = cos(30*M_PI/180) * cos(delta*M_PI/180);
    
    duhur  = 12.0 + length_line_diff / 15.0 - equoftime / 60.0; // الظهر
    shorok = duhur - acos(numerator/denominator)*180/M_PI/15;   // الشروق
    ghroup = duhur + acos(numerator/denominator)*180/M_PI/15;   // المغرب
             
    numerator   = cos((cita+18) * M_PI/180) - sin(width_circle*M_PI/180) * sin(delta*M_PI/180);
    fagr  = duhur - acos(numerator/denominator)*180/M_PI/15;  // الفجر
    ishaa = duhur + acos(numerator/denominator)*180/M_PI/15;  // العشاء

}
و ما توفيقى الا بالله




الصورة الرمزية وليدمحمدالمخلص
وليدمحمدالمخلص
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2012
الدولة: الشرقية-مصر
المشاركات: 150
نشاط [ وليدمحمدالمخلص ]
قوة السمعة:0
قديم 28-09-2017, 10:00 PM المشاركة 8   
افتراضي


موضوع اكثر من رائع زادك الله من علمه

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 11:14 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025