الجمعة، 23 أكتوبر 2020

قم بتمكين Arduino I / O Header في MiniZed

 قم بتمكين الإدخال / الإخراج الرقمي المتاح على رأس غطاء Arduino في MiniZed.


الأشياء المستخدمة في هذا المشروع

Avnet MiniZed

دايود ضوئي

مقاومة 5 اوم

لوح التوصبل مع الاسلاك

تطبيقات البرمجيات والخدمات عبر الإنترنت

لتنزيل البرنامج من هنـــــــــــــــا


قصة

أثناء العمل في مشروع آخر ، لاحظت أن تصميم الأجهزة في BSP لـ MiniZed يحتوي على pinout لرأس Arduino GPIO المحدد في ملف قيود Vivado (.xdc) ولكنه لا يتصل فعليًا بأي شيء في الجهاز تصميم الكتلة. قررت أنه سيكون برنامجًا تعليميًا جيدًا قائمًا بذاته حول كيفية تمكين الإدخال / الإخراج الرقمي على رأس درع Arduino لأنني لم أر الكثير من الموارد المحددة الأخرى له.

(ملاحظة جانبية: أنا أستخدم Vivado / Vitis / PetaLinux 2019.2 لهذا المشروع. لاحظت أثناء وجودك في منتصف هذا المشروع أن مستودعات Avnet Github قد تم تحديثها قليلاً للإصدار 2020.1 ، خاصة بالنسبة لـ MiniZed. سيكون جانب Vitis في هذا المشروع والملفات المراد تحميلها على MiniZed مختلفًا قليلاً إذا كنت تستخدم الإصدار Vivado / Vitis / PetaLinux 2020.1 أو أحدث.)

أبدأ بمشروعي Vivado و PetaLinux اللذين أنشأتهما من MiniZed BSP في آخر مشروعي في MiniZed هنا. أول شيء يجب القيام به هو التحديثات على الأجهزة في Vivado.

لتعديل تصميم الأجهزة المعتمد على MiniZed ، افتح مشروع Vivado في دليل مشروع PetaLinux الذي تم إنشاؤه بواسطة BSP ضمن دليل <مسار المشروع> / Hardware / MINIZED.

نظرًا لأن EMIO GPIO الخاص بـ Zynq يتم استخدامه بالفعل في إدخال / إخراج البلوتوث ، أضف AXI GPIO إلى مخطط الكتلة. قبل تشغيل خيار أتمتة الاتصال الذي يظهر ، انقر نقرًا مزدوجًا فوق كتلة AXI GPIO الجديدة لإعادة تكوين إعداداتها.

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


أعد تسمية المنفذ للإشارة إلى أن هذه الخطوط سيتم توصيلها برأس Arduino



تحقق من صحة تصميم الكتلة واحفظه (قد يكون هناك تحذير هام بشأن خط الساعة ، ولكن يمكن تجاهله). انقر بزر الماوس الأيمن على تصميم الكتلة في نافذة المصادر وحدد خيار "إنشاء غلاف HDL ..." والخيار الفرعي للسماح لـ Vivado بإدارته. سيؤدي ذلك إلى تحديث HDL ذي المستوى الأعلى ليشمل منفذ GPIO الخارجي الجديد.

قم بتعديل ملف minized_petalinux.xdc لتبديل خطوط بيانات Adruino لمطابقة خرج الناقل من كتلة AXI GPIO.


احفظ ملف القيود ثم أعد تشغيل التوليف والتنفيذ وإنشاء دفق بت جديد. بمجرد إنشاء دفق البت ، قم بتصدير تصميم الأجهزة. يوجد بالفعل جهاز XSA موجود في دليل المشروع المحلي (<المسار إلى مشروع PetaLinux الذي تم إنشاؤه باستخدام BSP> / Hardware / MINIZED_2019_2 /) ، لذلك قبل تصدير جهاز XSA الجديد إليه ، قمت بإنشاء مجلد جديد في دليل المشروع بعنوان ' old_hw 'ونقل MINIZED.xsa إلى هناك. لتصدير تصميم الأجهزة الجديد ، حدد ملف> تصدير> تصدير الأجهزة ... وتأكد من تحديد المربع لتضمين تدفق البت. سترى MINIZED_wrapper.xsa تظهر الآن في دليل المشروع المحلي.

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

source <PetaLinux installation path>/2019.2/settings.sh
cd ./minized/minized_emmc_enhanced_2019_2/

استيراد تصميم الأجهزة الجديد إلى مشروع PetaLinux الحالي.

petalinux-config --get-hw-description ./hardware/MINIZED_2019_2/
بمجرد ظهور محرر تكوين الأجهزة ، يمكنك الخروج منه دون إجراء أي تغييرات. حدد خيار حفظ الإعدادات الجديدة عندما يُطلب منك ذلك ، ثم أنشئ مشروع PetaLinux.
petalinux-build

يجب إنشاء صورة تمهيد ثنائية جديدة (BOOT.BIN) من أجل MiniZed لاحتواء تيار البت الجديد منذ أن أضفنا أجهزة جديدة إلى التصميم في Vivado. يمكن القيام بذلك في Vitis GUI عن طريق إنشاء مشروع نظام أساسي جديد وتطبيق محمل إقلاع المرحلة الأولى. في هذه الحالة ، أجد أنه من الأسهل قليلاً إنشاء ملف boot.bif الخاص بي باستخدام محرر نصوص وأداة سطر أوامر برنامج Xilinx (XSCT) لإنشاء تطبيق FSBL مستقل ، ثم أداة bootgen للترجمة BOOT.BIN الجديد

في نافذة طرفية جديدة ، مصدر البرنامج النصي لإعدادات بيئة Vitis:
source <Vitis installation path>/2019.2/settings64.sh
قم بإنشاء دليل لمشروع تطبيق FSBL.
cd ./minized/minized_emmc_enhanced_2019_2/
mkdir -p ./fsbl_project/
قم بتشغيل أداة سطر أوامر برنامج Xilinx (XSCT):
xsct
ثم استخدم أوامر HSI لإنشاء تطبيق Zynq في المرحلة الأولى من برنامج bootloader bare-metal لـ MiniZed. تعرف على المزيد حول HSI وكيفية استخدامه في Vitis هنا.

ابدأ بفتح تصميم الأجهزة لـ MiniZed في مثيل XSCT الحالي.
xsct% hsi open_hw_design ./minized/minized_emmc_enhanced_2019_2/hardware/MINIZED_2019_2/MINIZED_wrapper.xsa
تحقق من فتح الجهاز بنجاح باستخدام الأمر current_hw_design ، فسيتم تكرار اسم الجهاز مرة أخرى في الجهاز الطرفي على غرار ما يلي
xsct% hsi current_hw_design
MINIZED_wrapper

قم بإنشاء تطبيق bare-metal لـ FSBL باستخدام أمر HSI create_app:

xsct% hsi generate_app -dir ./minized/minized_emmc_enhanced_2019_2/fsbl_project/ -hw MINIZED_wrapper -sw fsbl -proc ps7_cortexa9_0 -os standalone -app zynq_fsbl -compile

قم بإنهاء XSCT والخروج منه بالضغط على Ctrl + C مرتين متتاليتين ثم استخدم محرر النصوص الذي تختاره لإنشاء ملف معلومات تمهيد جديد (boot.bif) لـ MiniZed.

nano boot.bif
يضاف النص التالي:
image : {
[bootloader] fsbl_project/executable.elf
images/linux/minized_petalinux_wrapper.bit
images/linux/u-boot.elf

الملف القابل للتنفيذ هو ملف FSBL الجديد لنواة ARM الخاصة بـ Zynq في MiniZed الذي تم إنشاؤه للتو في الخطوة الأخيرة باستخدام XSCT.

أخيرًا ، استخدم أداة bootgen لإنشاء ملف التمهيد الثنائي الجديد لـ MiniZed.

bootgen -image boot.bif -o i BOOT.BIN -w on
بمجرد إنشاء ملف التمهيد الثنائي بنجاح ، انسخ صورة kernel الجديدة (image.ub) وملف التمهيد الثنائي (BOOT.BIN) إلى eMMC الخاص بـ MiniZed. اخترت استخدام عميل FTP مرة أخرى لتحميل الملفات إلى MiniZed عبر اتصال Wi-Fi الخاص به



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

root@MiniZed:~# flashcp /run/media/mmcblk1p1/BOOT.BIN /dev/mtd0 
root@MiniZed:~# reboot

لاختبار أن GPIOs تعمل بشكل صحيح ، قمت بتوصيل مصابيح LED بكل من I / O على رأس Arduino الخاص به وقمت بتبديل كل سطر يدويًا من سطر الأوامر (ظهر GPIO على أنه 999 بالنسبة لي ، ولكن قد يكون مختلفًا بالنسبة لي عليك التحقق جيدًا باستخدام تطبيق get-gpio-offests).

root@minized-emmc-enhanced-2019-2:~# cd /sys/class/gpio/
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 999 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1000 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1001 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1002 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1003 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1004 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1005 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1006 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1007 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1008 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1009 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1010 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1011 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1012 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio999/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1000/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1001/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1002/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1003/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1004/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1005/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1006/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1007/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1008/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1009/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1010/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1011/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1012/direction


لقد اختبرت قضبان الجهد المرجعي باستخدام DMM الخاص بي على رأس Arduino مع أو بدون توصيل USB بالطاقة AUX وقراءتهما بالجهد المناسب. كان MiniZed أيضًا قادرًا على تشغيل جميع مصابيح LED الأربعة عشر مع توصيل AUX powe

شرح وتفاصيل Raspberry Pi 4 و Compute Module 4 Lite

 بتعبئة نفس BCM2711C0 SoC مثل Raspberry Pi 4 بالحجم الكامل ، هل هذه الأنظمة على الوحدات هي الأدوات الجديدة التي يجب امتلاكها؟



بعد عامين من إطلاق Raspberry Pi Compute Module 3+ ، وبعد أربع سنوات من Raspberry Pi Compute Module 3 ، تمتلك مؤسسة Raspberry Pi نظامًا جديدًا على وحدة (SOM) - ولكن في حين أنها تقدم أداءً معززًا بشكل كبير ، إلا أنها تلغي مع التوافق مع الإصدارات السابقة للوحات الحاملة الموجودة.

مع نفس الأجهزة الأساسية مثل الكمبيوتر أحادي اللوحة Raspberry Pi 4 Model B الشهير ، والذي يوفر الآن اتصال PCI Express Gen.2 عالي السرعة بالأجهزة الطرفية ، هو Raspberry Pi Compute Module 4 - وزميله المستقر لايت المخفض التكلفة. الذهاب إلى SOM؟

الأجهزة

تم إطلاق عائلة Raspberry Pi Compute Module كوسيلة لجلب نفس التكنولوجيا التي توفرها مجموعة أجهزة الكمبيوتر أحادية اللوحة Raspberry Pi للمستخدمين المدمجين والصناعيين كنظام على وحدة. تم استبدال وحدة الحوسبة الأصلية بوحدة Compute 3 - تخطي جيل - ثم Compute Module 3+ ، والتي استخدمت نفس أجهزة المعالجة مثل Raspberry Pi 3 Model B + ولكنها سجلت انخفاضًا من 1.5 جيجا هرتز إلى 1.2 جيجا هرتز.

إذن ، لا ينبغي أن تفاجئ الوحدة الحاسوبية 4: إنها نظام على وحدة مبنية على Broadcom BCM2711C0 ، وهو نفس النظام على الرقاقة الذي يشغل Raspberry Pi 4. مثل Raspberry Pi 4 بالحجم الكامل ، الأربعة 64 يتم تسجيل أنوية Arm Cortex-A72 -bit بسرعة 1.5 جيجاهرتز - مع عدم وجود علامة على نفس تقليل سرعة الساعة مثل وحدة الحوسبة 3+ - ويمكن للمشترين اختيار ذاكرة وصول عشوائي LPDDR4 بسعة 1 جيجابايت أو 2 جيجابايت أو 4 جيجابايت أو 8 جيجابايت. على عكس Raspberry Pi 4 ، هناك أيضًا خيار تخزين eMMC على اللوحة: 8 جيجابايت أو 16 جيجابايت أو 32 جيجابايت ؛ يمكن لأولئك الذين لا يحتاجون إلى التخزين على متن الطائرة اختيار Compute Module 4 Lite بدلاً من ذلك.


في حين أن المفهوم الأساسي للوحدة الحاسوبية 4 هو نفسه تمامًا مثل الإصدارات السابقة ، فقد تغير التصميم: فقد اختفى عامل الشكل SODIMM المكون من 200 سن ، واستبدل بموصلين عالي الكثافة 100 سن في الجانب السفلي. إنه يجعل مظهرًا أنظف بمجرد تثبيته على لوحة حامل ، بينما تمنحه فتحات التركيب الأربعة قوة ميكانيكية كبيرة. هذا أيضًا ، للأسف ، لا يعني عدم التوافق مع الإصدارات السابقة: على الرغم من أن وحدة Compute 4 متوافقة مع جميع البرامج المكتوبة للنماذج السابقة ، إلا أنها لن تتناسب فعليًا مع لوحة الناقل المصممة للوحدة الحسابية ، أو الوحدة النمطية 3 ، أو وحدة الحساب 3+.

تحتوي الوحدة على مجموعة من الميزات الأساسية المكشوفة على المسامير: هناك إدخال / إخراج للأغراض العامة ، ومنفذين للواجهة التسلسلية للعرض (DSI) ، ومنفذين للواجهة التسلسلية للكاميرا (CSI) ، ومنفذين HDMI يدعمان إخراج فيديو 4K30 مزدوج كما وعد من قبل المؤسس المشارك للمشروع Eben Upton في وقت سابق من العام - ممر واحد من PCI Express Gen. 2 ، بالإضافة إلى جيجابت إيثرنت PHY. الوحدة متاحة أيضًا مع نفس 802.11b / g / n / ac Wi-Fi ووحدة راديو Bluetooth 5.0 / Bluetooth منخفضة الطاقة (BLE) كنطاق Raspberry Pi 4 كامل الحجم - ولكن هذه المرة مع اختيار هوائي PCB أو هوائي خارجي عبر موصل Hirose U.FL ، مع توفير مجموعة الهوائي الاختيارية للأخير.


لكن ما هو متاح للاستخدام بالضبط سيعتمد بشكل كبير على لوحة الناقل. أصدرت مؤسسة Raspberry Pi Foundation تصميمها المرجعي مفتوح المصدر ، لوحة Raspberry Pi Compute 4 Input / Output (IO) ، التي توفر أكبر قدر ممكن من الوظائف: رأس GPIO 40 سنًا ، رأس PoE ، اثنان من HDMI بالحجم الكامل المنافذ و Gigabit Ethernet ومنفذي DSI ومنفذين CSI وفتحة microSD لوحدة Compute Module 4 Lite للتخزين ومنفذين USB 2.0 وفتحة بطارية لساعة الوقت الحقيقي ومنفذين USB 2.0 ومنفذ USB صغير ثانوي. هناك أيضًا ، لأول مرة في المجموعة ، فتحة PCI Express بالحجم الكامل - والتي توفر طريقة رائعة لتوصيل وحدة تخزين عالية السرعة بالوحدة.

أداء

بالنظر إلى وحدة الحوسبة 4 تستخدم نفس نظام BCM2711C0 على الرقاقة مثل Raspberry Pi 4 Model B ، فليس هناك مفاجأة من النتائج القياسية: إنها ضربة مقابل ضربة متطابقة في جميع النواحي تقريبًا ، من معيار Linpack الاصطناعي إلى الحقيقي -الاختبارات العالمية مثل استجابة المتصفح وضغط الملفات وتحرير الصور.



بعد عامين من إطلاق Raspberry Pi Compute Module 3+ ، وبعد أربع سنوات من Raspberry Pi Compute Module 3 ، تمتلك مؤسسة Raspberry Pi نظامًا جديدًا على وحدة (SOM) - ولكن في حين أنها تقدم أداءً معززًا بشكل كبير ، إلا أنها تلغي مع التوافق مع الإصدارات السابقة للوحات الحاملة الموجودة.

مع نفس الأجهزة الأساسية مثل الكمبيوتر أحادي اللوحة Raspberry Pi 4 Model B الشهير ، والذي يوفر الآن اتصال PCI Express Gen.2 عالي السرعة بالأجهزة الطرفية ، هو Raspberry Pi Compute Module 4 - وزميله المستقر لايت المخفض التكلفة. الذهاب إلى SOM؟

الأجهزة
تم إطلاق عائلة Raspberry Pi Compute Module كوسيلة لجلب نفس التكنولوجيا التي توفرها مجموعة أجهزة الكمبيوتر أحادية اللوحة Raspberry Pi للمستخدمين المدمجين والصناعيين كنظام على وحدة. تم استبدال وحدة الحوسبة الأصلية بوحدة Compute 3 - تخطي جيل - ثم Compute Module 3+ ، والتي استخدمت نفس أجهزة المعالجة مثل Raspberry Pi 3 Model B + ولكنها سجلت انخفاضًا من 1.5 جيجا هرتز إلى 1.2 جيجا هرتز.

إذن ، لا ينبغي أن تفاجئ الوحدة الحاسوبية 4: إنها نظام على وحدة مبنية على Broadcom BCM2711C0 ، وهو نفس النظام على الرقاقة الذي يشغل Raspberry Pi 4. مثل Raspberry Pi 4 بالحجم الكامل ، الأربعة 64 يتم تسجيل أنوية Arm Cortex-A72 -bit بسرعة 1.5 جيجاهرتز - مع عدم وجود علامة على نفس تقليل سرعة الساعة مثل وحدة الحوسبة 3+ - ويمكن للمشترين اختيار ذاكرة وصول عشوائي LPDDR4 بسعة 1 جيجابايت أو 2 جيجابايت أو 4 جيجابايت أو 8 جيجابايت. على عكس Raspberry Pi 4 ، هناك أيضًا خيار تخزين eMMC على اللوحة: 8 جيجابايت أو 16 جيجابايت أو 32 جيجابايت ؛ يمكن لأولئك الذين لا يحتاجون إلى التخزين على متن الطائرة اختيار Compute Module 4 Lite بدلاً من ذلك.

في حين أن المفهوم الأساسي للوحدة الحاسوبية 4 هو نفسه تمامًا مثل الإصدارات السابقة ، فقد تغير التصميم: فقد اختفى عامل الشكل SODIMM المكون من 200 سن ، واستبدل بموصلين عالي الكثافة 100 سن في الجانب السفلي. إنه يجعل مظهرًا أنظف بمجرد تثبيته على لوحة حامل ، بينما تمنحه فتحات التركيب الأربعة قوة ميكانيكية كبيرة. هذا أيضًا ، للأسف ، لا يعني عدم التوافق مع الإصدارات السابقة: على الرغم من أن وحدة Compute 4 متوافقة مع جميع البرامج المكتوبة للنماذج السابقة ، إلا أنها لن تتناسب فعليًا مع لوحة الناقل المصممة للوحدة الحسابية ، أو الوحدة النمطية 3 ، أو وحدة الحساب 3+.

تحتوي الوحدة على مجموعة من الميزات الأساسية المكشوفة على المسامير: هناك إدخال / إخراج للأغراض العامة ، ومنفذين للواجهة التسلسلية للعرض (DSI) ، ومنفذين للواجهة التسلسلية للكاميرا (CSI) ، ومنفذين HDMI يدعمان إخراج فيديو 4K30 مزدوج كما وعد من قبل المؤسس المشارك للمشروع Eben Upton في وقت سابق من العام - ممر واحد من PCI Express Gen. 2 ، بالإضافة إلى جيجابت إيثرنت PHY. الوحدة متاحة أيضًا مع نفس 802.11b / g / n / ac Wi-Fi ووحدة راديو Bluetooth 5.0 / Bluetooth منخفضة الطاقة (BLE) كنطاق Raspberry Pi 4 كامل الحجم - ولكن هذه المرة مع اختيار هوائي PCB أو هوائي خارجي عبر موصل Hirose U.FL ، مع توفير مجموعة الهوائي الاختيارية للأخير.

لكن ما هو متاح للاستخدام بالضبط سيعتمد بشكل كبير على لوحة الناقل. أصدرت مؤسسة Raspberry Pi Foundation تصميمها المرجعي مفتوح المصدر ، لوحة Raspberry Pi Compute 4 Input / Output (IO) ، التي توفر أكبر قدر ممكن من الوظائف: رأس GPIO 40 سنًا ، رأس PoE ، اثنان من HDMI بالحجم الكامل المنافذ و Gigabit Ethernet ومنفذي DSI ومنفذين CSI وفتحة microSD لوحدة Compute Module 4 Lite للتخزين ومنفذين USB 2.0 وفتحة بطارية لساعة الوقت الحقيقي ومنفذين USB 2.0 ومنفذ USB صغير ثانوي. هناك أيضًا ، لأول مرة في المجموعة ، فتحة PCI Express بالحجم الكامل - والتي توفر طريقة رائعة لتوصيل وحدة تخزين عالية السرعة بالوحدة.

أداء
بالنظر إلى وحدة الحوسبة 4 تستخدم نفس نظام BCM2711C0 على الرقاقة مثل Raspberry Pi 4 Model B ، فليس هناك مفاجأة من النتائج القياسية: إنها ضربة مقابل ضربة متطابقة في جميع النواحي تقريبًا ، من معيار Linpack الاصطناعي إلى الحقيقي -الاختبارات العالمية مثل استجابة المتصفح وضغط الملفات وتحرير الصور.

بالنسبة لأي شخص يقوم بالترقية من Raspberry Pi Compute Module 3 - تذكر ، بالطبع ، سيعني ذلك لوحة ناقل جديدة - والتي تترجم إلى مكاسب رائعة في الأداء: تراوحت النتائج القياسية من أقل من ضعف السرعة إلى ما يقرب من خمسة أضعاف السرعة - وهذا يعني يجب سحب أي تصميم تم تقييده بواسطة أداء Compute Module 3 + 

بعد عامين من إطلاق Raspberry Pi Compute Module 3+ ، وبعد أربع سنوات من Raspberry Pi Compute Module 3 ، تمتلك مؤسسة Raspberry Pi نظامًا جديدًا على وحدة (SOM) - ولكن في حين أنها تقدم أداءً معززًا بشكل كبير ، إلا أنها تلغي مع التوافق مع الإصدارات السابقة للوحات الحاملة الموجودة.

مع نفس الأجهزة الأساسية مثل الكمبيوتر أحادي اللوحة Raspberry Pi 4 Model B الشهير ، والذي يوفر الآن اتصال PCI Express Gen.2 عالي السرعة بالأجهزة الطرفية ، هو Raspberry Pi Compute Module 4 - وزميله المستقر لايت المخفض التكلفة. الذهاب إلى SOM؟

الأجهزة
تم إطلاق عائلة Raspberry Pi Compute Module كوسيلة لجلب نفس التكنولوجيا التي توفرها مجموعة أجهزة الكمبيوتر أحادية اللوحة Raspberry Pi للمستخدمين المدمجين والصناعيين كنظام على وحدة. تم استبدال وحدة الحوسبة الأصلية بوحدة Compute 3 - تخطي جيل - ثم Compute Module 3+ ، والتي استخدمت نفس أجهزة المعالجة مثل Raspberry Pi 3 Model B + ولكنها سجلت انخفاضًا من 1.5 جيجا هرتز إلى 1.2 جيجا هرتز.

إذن ، لا ينبغي أن تفاجئ الوحدة الحاسوبية 4: إنها نظام على وحدة مبنية على Broadcom BCM2711C0 ، وهو نفس النظام على الرقاقة الذي يشغل Raspberry Pi 4. مثل Raspberry Pi 4 بالحجم الكامل ، الأربعة 64 يتم تسجيل أنوية Arm Cortex-A72 -bit بسرعة 1.5 جيجاهرتز - مع عدم وجود علامة على نفس تقليل سرعة الساعة مثل وحدة الحوسبة 3+ - ويمكن للمشترين اختيار ذاكرة وصول عشوائي LPDDR4 بسعة 1 جيجابايت أو 2 جيجابايت أو 4 جيجابايت أو 8 جيجابايت. على عكس Raspberry Pi 4 ، هناك أيضًا خيار تخزين eMMC على اللوحة: 8 جيجابايت أو 16 جيجابايت أو 32 جيجابايت ؛ يمكن لأولئك الذين لا يحتاجون إلى التخزين على متن الطائرة اختيار Compute Module 4 Lite بدلاً من ذلك.

في حين أن المفهوم الأساسي للوحدة الحاسوبية 4 هو نفسه تمامًا مثل الإصدارات السابقة ، فقد تغير التصميم: فقد اختفى عامل الشكل SODIMM المكون من 200 سن ، واستبدل بموصلين عالي الكثافة 100 سن في الجانب السفلي. إنه يجعل مظهرًا أنظف بمجرد تثبيته على لوحة حامل ، بينما تمنحه فتحات التركيب الأربعة قوة ميكانيكية كبيرة. هذا أيضًا ، للأسف ، لا يعني عدم التوافق مع الإصدارات السابقة: على الرغم من أن وحدة Compute 4 متوافقة مع جميع البرامج المكتوبة للنماذج السابقة ، إلا أنها لن تتناسب فعليًا مع لوحة الناقل المصممة للوحدة الحسابية ، أو الوحدة النمطية 3 ، أو وحدة الحساب 3+.

تحتوي الوحدة على مجموعة من الميزات الأساسية المكشوفة على المسامير: هناك إدخال / إخراج للأغراض العامة ، ومنفذين للواجهة التسلسلية للعرض (DSI) ، ومنفذين للواجهة التسلسلية للكاميرا (CSI) ، ومنفذين HDMI يدعمان إخراج فيديو 4K30 مزدوج كما وعد من قبل المؤسس المشارك للمشروع Eben Upton في وقت سابق من العام - ممر واحد من PCI Express Gen. 2 ، بالإضافة إلى جيجابت إيثرنت PHY. الوحدة متاحة أيضًا مع نفس 802.11b / g / n / ac Wi-Fi ووحدة راديو Bluetooth 5.0 / Bluetooth منخفضة الطاقة (BLE) كنطاق Raspberry Pi 4 كامل الحجم - ولكن هذه المرة مع اختيار هوائي PCB أو هوائي خارجي عبر موصل Hirose U.FL ، مع توفير مجموعة الهوائي الاختيارية للأخير.

لكن ما هو متاح للاستخدام بالضبط سيعتمد بشكل كبير على لوحة الناقل. أصدرت مؤسسة Raspberry Pi Foundation تصميمها المرجعي مفتوح المصدر ، لوحة Raspberry Pi Compute 4 Input / Output (IO) ، التي توفر أكبر قدر ممكن من الوظائف: رأس GPIO 40 سنًا ، رأس PoE ، اثنان من HDMI بالحجم الكامل المنافذ و Gigabit Ethernet ومنفذي DSI ومنفذين CSI وفتحة microSD لوحدة Compute Module 4 Lite للتخزين ومنفذين USB 2.0 وفتحة بطارية لساعة الوقت الحقيقي ومنفذين USB 2.0 ومنفذ USB صغير ثانوي. هناك أيضًا ، لأول مرة في المجموعة ، فتحة PCI Express بالحجم الكامل - والتي توفر طريقة رائعة لتوصيل وحدة تخزين عالية السرعة بالوحدة.

أداء
بالنظر إلى وحدة الحوسبة 4 تستخدم نفس نظام BCM2711C0 على الرقاقة مثل Raspberry Pi 4 Model B ، فليس هناك مفاجأة من النتائج القياسية: إنها ضربة مقابل ضربة متطابقة في جميع النواحي تقريبًا ، من معيار Linpack الاصطناعي إلى الحقيقي -الاختبارات العالمية مثل استجابة المتصفح وضغط الملفات وتحرير الصور.

بالنسبة لأي شخص يقوم بالترقية من Raspberry Pi Compute Module 3 - تذكر ، بالطبع ، سيعني ذلك لوحة ناقل جديدة - والتي تترجم إلى مكاسب رائعة في الأداء: تراوحت النتائج القياسية من أقل من ضعف السرعة إلى ما يقرب من خمسة أضعاف السرعة - وهذا يعني يجب سحب أي تصميم تم تقييده بواسطة أداء Compute Module 3 + من كرات النفتالين وإعادة نسجها.

إنه ممر PCI Express الذي يقدم أكبر مكاسب في الأداء ، على الرغم من ذلك ، كما تم الكشف عنه في معيار التخزين. يؤدي التبديل من بطاقة microSD إلى وحدة Compute Module 4 إلى مضاعفة أداء القراءة تقريبًا وأداء الكتابة ثلاث مرات - ولكن تثبيت محرك أقراص الحالة الصلبة غير المتطاير (NVMe) SSD في فتحة PCI Express على لوحة الناقل يأخذ سعة التخزين من 83.6 ميجابايت / ثانية للقراءة و 75.9 ميجابايت / ثانية للكتابة بسرعة مذهلة تبلغ 413 ميجابايت / ثانية و 392 ميجابايت / ثانية للكتابة - بترتيب أكبر. في حين أنه من الممكن الاقتراب من هذه السرعات - 363 ميجابايت / ثانية للقراءة و 323 ميجابايت / ثانية - باستخدام منافذ USB 3.0 على Raspberry Pi 4 Model B ، فإن استخدام NVMe بدلاً من ذلك يؤدي إلى انخفاض ملحوظ في استخدام وحدة المعالجة المركزية أثناء نقل الملفات
الجواب.

ومع ذلك ، هناك سلبي واحد في تصميم Compute Module 4 ، وهو شيء لا يمكن تجنبه حقًا: درجة حرارة التشغيل. على الرغم من سلسلة تحديثات البرامج الثابتة المصممة لتقليل استخدام الطاقة ، فمن المعروف أن Raspberry Pi 4 يعمل بشكل ساخن إلى حد ما - ووضع نفس النظام على شريحة PCB أصغر بشكل ملحوظ لا يفيد وحدة Compute 4.

في اختبار تعذيب الخانق الحراري ، والذي يمثل السيناريو الأسوأ المطلق لنظام محمّل بشدة ، يخنق الوحدة الحسابية 4 بشكل أسرع وأكثر قوة من وحدة Raspberry Pi 4 B - لذلك بما في ذلك التبريد السلبي على الأقل ، إن لم يكن نشطًا مروحة تبريد ، في التصميمات المبنية حول وحدة الحوسبة 4 ستكون ضرورية.

خاتمة
تعتبر وحدة Raspberry Pi Compute 4 ترقية جديرة. يقدم تعزيزًا كبيرًا في الأداء مقارنة بسابقه البالغ من العمر عامين ، وفي حين أن الابتعاد عن عامل الشكل SODIMM والفقدان اللاحق للتوافق مع الإصدارات السابقة قد أدى إلى حد ما إلى السماح للمؤسسة بتقديم بعض ترقيات الميزات المهمة - وأكبرها هو اتصال PCI Express لا يمكن إنكاره.

بينما قمنا باختبار قدرات PCI Express في Compute Module 4 باستخدام تخزين NVMe ، فإن هذا لا يعني أن الممر عالي السرعة متاح حصريًا لأغراض التخزين: إنه ممر PCIe Gen. 2.0 متوافق تمامًا مع المعايير القياسية ، ويوفر برامج تشغيل متاحة أو يمكن سوف تقبل أي شيء من بطاقة الشبكات عالية السرعة إلى بطاقات التقاط الفيديو أو المعالجات المساعدة لتسريع التعلم العميق أو وحدة تحكم USB 3.0 - الأخير هو كيفية توصيل منفذي USB 3.0 الخاصين بـ Raspberry Pi 4 Model B بشبكة SoC.


ومع ذلك ، فإن نجاح وحدة الحوسبة 4 سيعتمد إلى حد كبير على اعتماد السوق. لقد رأينا عددًا من المنتجات التجارية التي تم إطلاقها باستخدام وحدة Raspberry Pi Compute 3+ وما قبلها في قلبها ، ومن المحتمل أن تتبعها تصميمات للوحدة الحاسوبية الجديدة 4 - سيكون من الصعب على المطورين رفض مكاسب الأداء ، بعد الكل ، حتى لو كانت اللوحات الحاملة بحاجة إلى إعادة تصميم لعامل الشكل الجديد.

تتوفر الآن وحدة Raspberry Pi Compute 4 و Raspberry Pi Compute Module 4 Lite التي لا تحتوي على eMMC في القناة ، مع مزيد من المعلومات التي يمكن العثور عليها على موقع Raspberry Pi على الويب. يبدأ السعر من 25 دولارًا لـ Raspberry Pi Compute Module 4 Lite مع ذاكرة وصول عشوائي (RAM) سعة 1 جيجابايت ولا يوجد اتصال لاسلكي ، حيث يرتفع السعر إلى 90 دولارًا لوحدة Raspberry Pi Compute 4 مع ذاكرة وصول عشوائي (RAM) سعة 8 جيجابايت وتخزين eMMC بسعة 32 جيجابايت ووحدة راديو Wi-Fi و Bluetooth.




الجمعة، 18 سبتمبر 2020

كيفية التوصيل بين اثنين من اردوينو على بعد 1000 متر

 تعرف على كيفية إنشاء اتصال بعيد المدى باستخدام اثنين من Arduinos من خلال وحدة HC-12.

غالبًا ما نرغب في تشغيل العديد من المشغلات عن بُعد مثل المصابيح والمحركات والمحركات الأخرى.

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

في هذه الحالات ، يكون جهاز التحكم عن بعد بديلاً لاستخدامه ، وهناك العديد من أجهزة الإرسال والاستقبال اللاسلكية التي يمكن استخدامها ، مثل وحدة HC-12 و NRF24L01 و Lora وغيرها.

في هذه المقالة ، سوف نتعلم كيفية بناء NEXTPCB Electronic Board لإنشاء نظام أتمتة والتحكم في العديد من الأجهزة عن بعد.

سوف يحتوي NEXTPCBPCB على وحدة الإرسال / الاستقبال الراديوي HC-12 و Arduino Nano الذي سيكون المستقبل و HC-12 مع Arduino Uno الذي سيكون جهاز الإرسال لأداء تنشيط LEDs على مسافة

من خلال هذا المقال سوف:

قم بإجراء تجميع الدائرة على اللوحة الأولية

افهم كيف تعمل وحدة HC-12

قم بإجراء اتصال Arduino Nano / Arduino Nano بوحدة HC-12

تفعيل الجهاز عن بعد

افهم كيف يعمل الاتصال التسلسلي مع جهاز الإرسال والاستقبال اللاسلكي

قم بإنشاء NEXTPCB ثنائي الفينيل متعدد الكلور

بناء نظام أتمتة التحكم عن بعد

كما ذكرنا سابقًا ، يتكون المشروع من إنشاء نظام لتنشيط الأجهزة عن بُعد وإنشاء لوحة دوائر مطبوعة NEXTPCB للتحكم في الأجهزة.

وحدة HC-12 هي جهاز إرسال واستقبال لاسلكي وتردد تشغيلها من 433.4 ميجاهرتز إلى 473 ميجاهرتز.

من الممكن توصيل نوعين من الهوائيات في هذه الوحدة ، هوائي حلزوني يأتي مع الوحدة أو هوائي آخر يتم توصيله بموصل UFL.

يمكن أن يصل مدى هذه الوحدة إلى كيلومتر واحد حسب الإعدادات والهوائي المستخدم.

تأتي هذه الوحدات عادةً مع بعض إعدادات المصنع ، حتى نتمكن من التواصل بين وحدتي HC-12. على سبيل المثال ، يمكننا التواصل بين جهازي Arduinos.

لتنفيذ هذه العملية ، يجب علينا تعديل بعض المعلمات مثل سرعة الاتصال وقناة الاتصال ووضع التشغيل باستخدام أوامر AT.

لتكوين الوحدة النمطية ، يجب توصيل دبوس المجموعة بـ GND كما هو موضح في الشكل 1. تسمح هذه العملية للوحدة بالدخول في وضع التكوين.

يوصى بتزويد وحدة HC-12 بمصدر خارجي 5 فولت ، حيث تحتوي على بعض محولات USB-SERIAL التي لا توفر تيارًا كافيًا لتزويد الوحدة.

لتحسين التصميم ، سنقوم بإنشاء لوحة دوائر مطبوعة NEXTPCB لضمان الطاقة الكافية لـ HC

12.

يجب توصيل GND الخاص بمحول USB-SERIAL بـ GND الخاص بمصدر الطاقة.




قبل أن نبدأ في تكوين الوحدة ، يجب علينا تنزيل برنامج Termite المتاح على الرابط: تنزيل برنامج Termite

بعد إجراء التوصيلات بوحدة HC-12 ومحول USB التسلسلي ، افتح برنامج Termite.

تكوين وحدة HC-12 باستخدام برنامج Termite.


بعد فتح برنامج Termite ، يجب أن نضغط على Settings (الإعدادات) لعمل بعض الإعدادات وفقًا للشكل.


بعد إجراء الإعدادات في برنامج Termite ، انقر فوق Ok ثم COM3 لتوصيل المحول التسلسلي USB بوحدة HC-12 بالمنفذ التسلسلي المتصل.

انتظر لتوصيل المنفذ ببرنامج Termite ونكتب في شريط الأوامر الأمر AT

إذا سارت الأمور على ما يرام ، فستظهر OK كما في الشكل.



بعد هذا الاختبار الأولي ، سنقوم بتكوين وحدة HC-12 بالمعلمات التالية:

مسلسل Velocidad de comunicación: 9600 بت في الثانية
قناة de comunicação 5
بوتينسيا دي ترانسيسيون دي 11 ديسيبل
طريقة العمل FU3











بعد إجراء التكوين للوحدة الأولى ، نكرر الخطوات لتكوين الوحدة الثانية.

بعد تكوين كلتا الوحدتين ، يمكننا الاتصال بـ Arduino كما هو موضح في الشكل 8 لجهاز الإرسال والشكل 9 لجهاز الاستقبال

سيكون Arduino Uno هو جهاز الإرسال الذي سيقوم بقراءة زرين وعندما يتم الضغط على الزر B0 ، سيتم إرسال أمر لإضاءة المصباح الأحمر وعند الضغط على الزر B1 سيضيء المصباح الأزرق.

لإيقاف تشغيل المصابيح ، ما عليك سوى الضغط على B0 أو B1 لإيقاف تشغيل المصباح المعني.




في Arduino Uno ، سيكون لدينا زر B0 متصل بالدبوس الرقمي 2 من Arduino Uno والزر B1 متصل بالدبوس الرقمي 3 من Arduino Uno.

يتم تنشيط كلا الزرين عند مستوى منطقي منخفض عند الضغط على الأزرار.

لإنشاء اتصال تسلسلي ، سنستخدم المكتبة التي تسمى البرنامج التسلسلي لتكوين هذين المسامير 7 و 8 كدبابيس اتصال تسلسلي ، أي أننا سنحاكي اتصالًا تسلسليًا بواسطة البرنامج.

اتصال HC-12 على Arduino Nano الذي سيكون جهاز الاستقبال هو نفس دائرة الإرسال ، سيكون الاختلاف هو وجود مصابيح LED على المسامير الرقمية 4 و 3.



بعد تجميع دائرتي الإرسال والاستقبال ، سنبرمج الدائرتين.

أولاً ، لدينا كود المرسل. يتم تقديم رمز المصدر أدناه.

        #include <SoftwareSerial.h> // Inclui a biblioteca Software Serial
SoftwareSerial HC12(8,7); // 8 RX vai ligado no Tx do modulo HC 12, 7 TX vai
ligado no RX do módulo
#define B0 2
#define B1 3
void setup()
{
 pinMode(B0,INPUT);
 pinMode(B1,INPUT);
 Serial.begin(9600);
 HC12.begin(9600);
}
void loop() 
{
 if(!digitalRead(B0))
 {
 Serial.println("B0 pressionado ");
 Serial.print('1');
 HC12.print('1');

 while(digitalRead(B0)==0);
 }
if(!digitalRead(B1))
 {
 Serial.println("B1 pressionado ");
 Serial.print('2');
 HC12.print('2');

 while(digitalRead(B1)==0);
 }
}
         أولاً ، قمنا بتضمين مكتبة البرامج التسلسلية حتى نتمكن من استخدام أي دبوس رقمي كدبوس TX أو RX لاستخدامه كجهاز إرسال بيانات.   
#include <SoftwareSerial.h> // Inclui a biblioteca Software Serial
    
نقوم بإنشاء كائن باستخدام المسامير التي ستؤدي الاتصال التسلسلي.        SoftwareSerial HC12(8,7); // 8 RX vai ligado no Tx do modulo HC 12, 7 TX vai
ligado no RX do módulo
    
نقوم بتسمية المسامير 2 B0 و 3 B1 باستخدام التعريف ، كما هو موضح أدناه.        #define B0 2 
#define B1 3
    
في وظيفة الإعداد الفارغ ، يتم تكوين المسامير 2 و 3 كمدخلات ، وتكوين سرعة الاتصال التسلسلي لـ USB والاتصال التسلسلي مع وحدة HC-12.        void setup()
{
 pinMode(B0,INPUT);
 pinMode(B1,INPUT);
 Serial.begin(9600);
 HC12.begin(9600);
}




الجمعة، 11 سبتمبر 2020

مكتشف المسافة بالموجات فوق الصوتية في الزمن الحقيقي

 في هذا المشروع ، سنقوم بعمل مكتشف عن بعد قائم على جهاز استشعار بالموجات فوق الصوتية ، ولكن في الزمن الحقيقي ، أي - كائن قادم أو بعيدًا.

Ultra sonic distance finder with live status


الأشياء المستخدمة في هذا المشروع

جهاز الاستشعار بالموجات فوق الصوتية - HC-SR04 

اردوينو نانو R3


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

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

في هذا المشروع ، نستخدم فقط 2mainhardware وهي:

يمكن استخدام أي نوع من لوحات Arduino (uno ، nano ، mega ، إلخ) ، ولكن يجب أن يكون لها خرج 5 فولت. لقد استخدمت اردوينو نانو.

جهاز استشعار بالموجات فوق الصوتية (HC-SRO-4)

ملامح المشروع:

This is HC-SR04


This is mother board:  (Arduino nano)


لبدء

1) كيف يعمل جهاز الاستشعار بالموجات فوق الصوتية؟

إنه يعمل عن طريق إرسال موجة صوتية ، موجة استقبال منعكسة بواسطة الكائن. وإذا لم يكن هناك جسم فلن تكون هناك موجة منعكسة.

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

إذا كنت بحاجة إلى قياس المسافة المحددة من المستشعر الخاص بك ، فيمكن حساب ذلك بناءً على هذه الصيغة:

المسافة = ½ T x C

T = الوقت و C = سرعة الصوت)

عند 20 درجة مئوية (68 درجة فهرنهايت) ، تبلغ سرعة الصوت 343 مترًا / ثانية (1125 قدمًا / ثانية) ، لكن هذا يختلف تبعًا لدرجة الحرارة والرطوبة.

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

إنه يعمل عن طريق إرسال موجة صوتية ، موجة استقبال منعكسة بواسطة الكائن. وإذا لم يكن هناك جسم فلن تكون هناك موجة منعكسة.

connections

استكشاف الأخطاء وإصلاحها

تحقق من منفذ com أثناء التحميل.

تأكد من تحديد لوحة الكتابة.

تأكد من تحديد برنامج Wright bootloader.

// ---------------------------------------------------------------- //
// made by rho sigma electronics
// Arduino Ultrasoninc Sensor HC-SR04
// Using Arduino IDE 1.8.7
// Using HC-SR04 Module
// ---------------------------------------------------------------- //

#define echoPin 2 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 3 //attach pin D3 Arduino to pin Trig of HC-SR04

// defines variables
long duration; // variable for the duration of sound wave travel
float distance, distance1, diff;//variable forthedistancemeasuremenorother
int i=0;

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
Serial.begin(9600); // // Serial Communication is starting with 9600 of baudrate speed
Serial.println("Ultrasonic Sensor HC-SR04 Test"); // print some text in Serial Monitor
Serial.println("with Arduino");
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
// Displays the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");

if(distance <= 5.0){
Serial.println(" object is near");
}
if(distance >= 100.0){
Serial.println(" object is far");
}
if((distance < 100.0) && (distance >5.0)){
Serial.println(" object is in green zone");
}

if(i != 0)
{
diff=abs(distance-distance1);

if(diff > 0.4) //because sensor has an eorrer of 0.3 cm
{
if(distance < distance1)
Serial.println(" object is coming closer");
else
{
if(distance > distance1)
Serial.println(" object is going farther");
else
Serial.println(" object is not moving");
}
}
else
Serial.println(" object is not moving"); //print object is not moving
}

distance1=distance;
i=i+1;              

delay(1000); // delay 1 second
}