من أين مكة؟ بوصلة تحديد اتجاه القبلة مفتوحة المصدر

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

Open-source qibla finder with tilt compensation using 9-DoF IMU and GPS connected with Arduino

يُظهر لي تاريخ صفحة الملاحظات لأول مرة فكرت في المشروع أنها من عشرة أشهر، وبعد دراسة مبدأية لما يتطلبه المشروع، علمت أني سأحتاج لحساس مغناطيسي Magnetometer وجهاز استقبال الموقع GPS ولهذا ابتعت Adafruit Mini GPS PA1010D وحساس مغناطيسي BMM150 موجود في دارة BMI270 shuttle board وموجود أيضاً في Arduino Nano 33 BLE Sense Rev2 وشاشة صغيرة لإظهار النتائج Monochrome 0.91″ 128×32 I2C OLED Display.  

بدأت تجريب كل وحدة من المشروع لوحدها وسأرتب توثيق المشروع بنفس ترتيب تلك التجارب. إن ميزات المشروع هي: 

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

سلسلة حساس الـIMU:

الحساس المغناطيسي 

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

صورة توضيحية لوضعية محاور الحساس في الحالة العامة مع شعاع الحقل المتجه نحو الشمال وتشكيل زواية بين الحقل والمحور.

و نجد من قوانين المثلثات أن الاتجاه يحسب بالمعادلة التالية: 

عند تطبيق هذه المعادلة لم تنطبق الجهة المحسوبة من الحساس مع الجهة الظاهرة في بوصلة جهاز الموبايل. عند البحث وجدت أن الحساس المغناطيسي يعاني من تشويشه ناتج عن الحقول المغناطيسية المجاورة المتولدة من دارة إلكترونية بالقرب منه أو من أجسام معدنية قريبة تسبب تشوه الحقل المغناطيسي الأرضي وهذا يسمى بالـ Soft iron calibration و Hard iron calibration ولهذا الغرض كتبت مقالة تفصيلة عن معايرة الحساس المغناطيسي يمكن الرجوع لها لفهم أفضل. سنستخدم برنامج Motion Sensor Calibration Tool الذي يتضمن عرض القيم المستقبلة وعرض إحصائيات عنها للتأكد من أنها جيدة لعملية المعايرة ومن ثم حساس مصفوفات العايرة لنوعي Hard iron و Soft iron  يتم إرسال قيم الحساسات إلى البرنامج عبر الاتصال التسلسلي وبسرعة 115200 بالشكل التالي: 

Raw:acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,mag_x*10,mag_y*10,mag_z*10
ملاحظة: لتفعيل خرج الدارة اللازم للمعايرة يتم تعديل قيمة الماكرو MOTION_CAL_SOFT إلى 1.

 يجنب التنبه لأن تشكل النقاط كرة ثلاثية الأبعاد ولأن تكون المعلومات الإحصائية الموجودة في البرنامج:

بعد حساب مصفوفة المعايرة يتم نقلها إلى الكود ليتم استخدامها في كل مرة. يوجد درس تفصيلي لاستخدام البرنامج Motion Sensor Calibration Tool على اليوتيوب لمن أراد استيضاحه. 

// Mag. calibration
// Hard ironing
//B
#define B1 -3.48
#define B2 0.42
#define B3 -5.78

//Soft ironing
//H column1
#define H11 1.036
#define H21 -0.023
#define H31 0.009
//H column2
#define H12 -0.023
#define H22 1.010
#define H32 -0.008
//H column3
#define H13 0.009
#define H23 -0.008
#define H33 0.956
/**********************/

ويبقى حساب زاوية الإزاحة حسب مكانك من سطح الأرض بين القطب الجغرافي والقطب المغناطيسي ويسمى declination angle ويتم معرفتها من خلال هذا الموقع magnetic-declination.com .

صورة توضّح الاختلاف بين مكان القطب الجغرافي والقطب المغناطيسي.

شاشة العرض

إن عرض الشاشة المستخدمة 128 بكسل عرض و 32 بكسل طول وسنستخدم مكتبة Adafruit_GFX ومكتبة Adafruit_SSD1306 للتعامل مع شاشة Monochrome 0.91″ 128×32 I2C OLED Display ولتحويل الصور المراد عرضها إلى قيم بكسلات تُعرض على الشاشة، نستخدم برنامج اسمه LCD Assistant لهذا الغرض وغم أنه مصمم للويندوز إلا أنه يعمل باستخدام برنامج Wine على لينكس. 

ندخل الصورة File>Load image إلى البرنامج بصيغة BMP ونضع الإعدادات التالية: 

عند تحويل الصورة File>Save output نجد في الملف مصفوفة. نستخدم هذه المصفوفة كما هي في البرنامج باستخدام التابع drawBitmap. 

للاطلاع على التوابع المستخدمة في الكود للعرض مثل clearDisplay, display, setTextSize, setCursor نقرأ التوثيق الرسمي من Adafruit.

مستقبل الجي بي إس 

إن الكود مصمم للعمل بالحساس المغناطيسي فقط الذي يعطي زاوية الاتجاه الجغرافي ويكشف تطابق الزاوية مع زاوية القبلة بناءً على تثبيت خط الطول وخط العرض كثابت في البرنامج باستخدام YOUR_LAT و YOUR_LONG ولمعرفة خط الطول والعرض يمكن استخدام الموقع latlong.net وكمان أن الكود مصمم ليعمل في حال وجود الجي بي إس ليقوم بحساب جهة القبلة عندما يتم ضبط GPS_EN إلى1. إن المستقبل المستخدم يعمل مع مكتبة Adafruit_GPS  وهو المستقبل Adafruit Mini GPS. ليس الغاية شرح طريقة عمل المستقبل ولكن من أساسيات عمل مستقبلات الجي بي إس ضرورة وجود المستقبل تحت السماء أو قريب منها وذلك لضمان دقته، وكما أن المستقبل يحتاج إلى وقت معين لكي يكتشف الأقمار الصناعية اللازمة لحساب الموقع وهذا يسمى fix.  

تعويض الإمالة 

معظم تصميمات البوصلات وأجهزة تحديد القبلة المنتشرة لا تناقش مشكلة إمالة الجهاز وتفترض عمله على سطح مستوٍ، ولكن السطح المستوي ما هو إلا حالة خاصة والحالة العامة أن المستخدم للجهاز لا بد له من إمالة الجهاز ولو بعض الشيء وهذه الإمالة لا تصلح في معادلة تحديد الجهة التي تفترض ابتداءً السطح المستوي، ولذلك يتم إضافة خطوة رياضية للتعامل مع قراءات الحساس والتي تؤدي في خرجها إلى تحويل القيم الحالية إلى قيم وكأن الجسم مستوٍ فعلاً، وهذا يسمى Tilt compensation. يجب تصحيح الإمالة والدحرجة وأما الانعراج فهو المستخدم لتحديد زاوية الجهة الجغرافية ولذلك نستخدم مصفوفتي التحويل للدحرجة Roll والإمالة pitch وذلك لتحويل حالة الجهاز لحالة افتراضية وهي حالة المستوي الأفقي الافتراضي.

خطأ في اتجاه القبلة بسبب الإمالة. نلاحظ أن القيمة المصححة تكاد تكون ثابتة حتى مع الإمالة.

عدة أوراق تطبيقية Application Notes تتحدث عن تعويض الإمالة للبوصلة وللمهتم العودة لها وأفضلها Infineon-AN2272. شرحتُ في الجزء الثالث من سلسلة تفهيم الحساس IMU مصفوفات التدوير. في الصيغة التالية المصفوفة النهائية المستخدمة لتعويض الإمالة.

إن حساب زوايا الإمالة والدحرجة موضح تفصيلاً في الجزء الأول من سلسلة “تفهيم حساس الـ IMU”. تم نشر المكتبة الخاصة بدارة الحساس المستخدمة BMI270_AUX_BMM150.

ملاحظة: يعتمد البرنامج على وجود مقاطعتين واحدة للـIMU وواحدة للحساس المغناطيسي.

معادلة حساب زاوية القبلة 

إن المعادلة المتبعة والمشتقة من قوانين رياضيات المثلثات هي:

إن هي خط الطول وإن هي خط العرض لموقع المصلي وإن هي خط طول الكعبة المشرفة و هي خط العرض للكعبة المشرفة. يجب الانتباه لتحويل خطوط الطول والعرض من تمثيل (الدرجات (°), الدقائق (‘), الثواني (”)) إلى الدرجات العشرية. إن خط طول مكة بالدرجات العشرية 21.422510 وخط العرض 39.826168. لمن رغب الاطلاع على شرح المفصل للمعادلة ولطرق حساب القبلة أن يطالع المرجع The correct qibla

المراجع

http://nurlu.narod.ru/qibla.pdf 

https://www.mikrocontroller.net/attachment/292888/AN4248.pdf

https://www.nxp.com/files-static/sensors/doc/app_note/AN3461.pdf

https://www.infineon.com/dgdl/Infineon-AN2272_PSoC_1_Sensing_Magnetic_Compass_with_Tilt_Compensation-ApplicationNotes-v04_00-EN.pdf?fileId=8ac78c8c7cdc391c017d0731b0d05573

Exit mobile version