
في الآونة الأخيرة ، ظهر على الشبكة وصف لمشروع DIY الأصلي على أساس لوحات Raspberry Pi و LED. الهدف من المشروع هو تصور مستوى تحميل معالج الكمبيوتر. لهذا الغرض ، يتم استخدام الرسوم المتحركة على لوحات LED لجهاز محلي الصنع.
كلما زاد الحمل على وحدة المعالجة المركزية ، ارتفعت درجة حرارة الرقاقة وزادت حرارة ألوان لوحات LED. الحد الأدنى للحمل باللون الأزرق والأزرق ، والحد الأقصى باللون البرتقالي والأحمر. يصل العدد الإجمالي لمصابيح LED المعنية إلى 12000. ويوجد تحت القطع وصف للمشروع وعناصره بالإضافة إلى الكود المصدري للبرنامج الذي يضمن تشغيل الأداة.
هكذا يبدو الأمر كله:
كيف جاءت فكرة المشروع
في العام الماضي ، حضر المؤلف المؤتمر 36 لاتصالات الفوضى (36C3) ، حيث رأى عددًا كبيرًا من مشاريع DIY ، بما في ذلك مكعبات LED. لقد تأثر كثيرا بهذا.

كانت معظم هذه المشاريع حول استجابة الجهاز للعوامل الخارجية. لذلك ، عندما تم تدوير الجهاز باليد ، كان يتلألأ بكل ألوان قوس قزح ، ويعرض صورًا ملونة.
قرر سيباستيان ستاكس تطوير مشروعه الخاص - جهاز يمكنه إظهار مستوى تحميل معالج الكمبيوتر. لا يوجد أي معنى عملي معين ، هذا مشروع للمتعة فقط ، التكلفة الإجمالية للنظام في التجميع كانت 150 دولار.
تنفيذ المشروع
يظهر الشكل الذي يظهر ويعمل به مكعب LED أعلاه. الآن بعض التفاصيل. يتم تشغيل الجهاز تلقائيًا بعد تمهيد الكمبيوتر المتصل به.

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

"المكعب" له ثلاثة وجوه فقط. يتم ذلك من أجل تقليل التكلفة وتبسيط التصميم إلى حد ما. إذا نجحت جميع الجوانب ، فسيكون المشروع مكلفًا للغاية.
طلب المؤلف لوحات LED من Aliexpress ، واختار أفضل مزيج من السعر والجودة. وقال إن الأمر لم يكن سهلاً لأن الموردين نادراً ما يقدمون مواصفات مفصلة لمنتجهم. وفقًا لذلك ، لم يكن من الواضح دائمًا ما إذا كانت هذه اللوحات مناسبة للمشروع. نتيجة لذلك ، اشترى المطور لوحات بمصدر طاقة 64x64 RGB LED و 5V.

تم استخدام وحدة 50 وات مع 10 أمبير و 5 فولت لتشغيل هذه الألواح. يقوم المحول بتشغيل برنامج تشغيل مصفوفة Adafruit ، المتصل باللوحات عبر Raspberry Pi. الشيء الرئيسي هو أن خصائص مزود الطاقة تغطي استهلاك النظام.
إدارة اللوحة
أما بالنسبة لـ "Raspberry" ، فقد استخدم المطور Raspberry Pi 2. في الوقت الحالي ، لا يمكن اعتبار هذا الجهاز أحادي اللوحة قديمًا جدًا من الناحية الأخلاقية ، فهو يكفي تمامًا لهذه الأغراض. بالإضافة إلى ذلك ، لا يتم تسخينه تقريبًا أثناء التشغيل ، وهو ما لا يمكن قوله عن الجيلين الثالث والرابع.

تم توصيل وحدة WiFi خارجية باللوحة للتخلص من الكابلات للاتصال بالشبكة. لم تكن هناك حاجة إلى أي شيء تقريبًا للحام ، باستثناء عمليتين مع Adafruit RGB Matrix Bonnet.

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

لا يتم لصق الألواح بحيث يمكن إزالتها من العلبة في أي وقت. كما يتم توفير حوامل Raspberry Pi. يمكنك أيضًا طباعة قاعدة المكعب ، ولكن بشكل عام ، يبدو كل شيء جيدًا وهكذا.

الآن حول البرنامج. مع الأجهزة ، كل شيء أسهل ، ولكن مع برنامج الإدارة ، سيتعين عليك العبث. يستخدم OpenGL shader للرسوم المتحركة. بالإضافة إلى ذلك ، يتم تشغيل برنامج نصي على جهاز الكمبيوتر يقوم بنقل خصائص المعالج إلى "malinka".
أهم جزء من البرنامج هو برنامج C ++ الصغير الذي يتعامل مع المكعب. يستخدم مكتبة rpi-rgb-led-matrix الخاصة . على وجه الخصوص ، من الضروري فتح منفذ UDP للحصول على خصائص عمل المعالج مع جهاز كمبيوتر ، بالإضافة إلى OpenGL لعرض الرسوم المتحركة. تفاصيل عمل المكتبة هنا .
للتثبيت ، تحتاج إلى برنامج نصي من Adafruit . تعليمات التثبيت متوفرة على الرابط المحدد.
فيما يلي الخيارات لتخصيص اللوحات
//LED Matrix settings
RGBMatrix::Options defaults;
rgb_matrix::RuntimeOptions runtime;
defaults.hardware_mapping = "adafruit-hat-pwm";
defaults.led_rgb_sequence = "RGB";
defaults.pwm_bits = 11;
defaults.pwm_lsb_nanoseconds = 50;
defaults.panel_type = "FM6126A";
defaults.rows = 64;
defaults.cols = 192;
defaults.chain_length = 1;
defaults.parallel = 1;
يرجى ملاحظة أن pwm_bits و pwm_lsb_nanoseconds لا يبدوان مهمين للغاية ، لكنهما مهمان - بشكل أساسي لجودة الصورة. على وجه الخصوص ، يحدد pwm_bits عدد بتات PWM ، والتي تحدد عدد خطوات اللون. الجانب السلبي لزيادة هذه القيمة هو تقليل معدل تحديث لوحة LED. يمكنك تحسين المعلمة عن طريق تقليل إعدادات pwm_lsb_nanoseconds - إذا كانت اللوحات الخاصة بك تدعم هذه القيم المنخفضة. إذا كنت ستقوم بتصوير مكعب بكاميرا ، فمن الأفضل زيادة معدل التحديث حتى يبدو كل شيء جميلاً.
من المهم أن يقوم Pi بتشغيل RGB Bonnet بشكل مستمر ، وإلا فقد تظهر القطع الأثرية. لهذا يوصى بحجز نواة المعالج بالكامل.
و المشروع يمكن العثور-احصائيات وحدة المعالجة المركزية، gl.cpp، لاستخدامها في المشروع الخاص بك. ستحتاج إلى مكتبات g ++ -g -o cpu-stats-gl cpu-stats-gl.cpp -std = c ++ 11 -lbrcmEGL -lbrcmGLESv2 -I / opt / vc / include -L / opt / vc / lib -Lrpi -rgb-led-matrix / lib -lrgbmatrix -lrt -lm -lpthread -lstdc ++ -Irpi-rgb-led-matrix / include /. حسنًا ، من أجل إضافة دعم OpenGl ، يجب عليك اتباع التعليمات من Matus Novak .
OpenGl شادر
حسنًا ، في هذه المرحلة ، اكتملت الأجهزة ، بالإضافة إلى الرمز المهم لإدارة اللوحات. على وجه الخصوص ، يمكنك بالفعل عرض النصوص والصور وملفات GIF. ولكن للعرض الملون ، تحتاج إلى إضافة OpenGL.
يتم تنفيذ الرسوم المتحركة التي تعرض حالة المعالج بواسطة أداة تظليل الأجزاء ، أي جزء صغير من الكود يعمل بالتوازي مع "الزملاء". هناك حاجة لمثل هذه المناطق لكل بكسل من اللوحة.
لعرض الصورة بشكل صحيح على المكعب ، يعرض المؤلف ثلاثة أزواج من المثلثات ، يغطي كل منها وجهًا واحدًا من المكعب. النقطة هي ، إذا كنت تنظر إلى المكعب على أنه كائن ثلاثي الأبعاد وتريد إظهار شكل ثنائي الأبعاد مثل دائرة ، فيمكنك تعيين إحداثيات لوحة تخيلية ثنائية الأبعاد أمام وجهك لكل حافة من حواف المكعب.

إذا قمنا الآن "بتوسيع" المكعب إلى مصفوفة مستطيلة من وحدات البكسل التي نعالجها بالفعل ، فيمكننا تغطية هذه المصفوفة بمثلثات متعددة. يمكننا أيضًا تعيين إحداثيات "اللوحة الافتراضية" لكل رأس للحصول على تعيين لإحداثيات اللوحة القماشية الخاصة بنا إلى وحدات البكسل الفعلية في صفيف اللوحة.
بالنسبة إلى التظليل ، يعد هذا أمرًا سهلاً - تحتاج إلى توفير إحداثيات اللوحة القماشية لكل قمة كمخزن صفيف إضافي لوحدة معالجة الرسومات ، مما يسمح لها باستيفاء هذه الإحداثيات لكل بكسل.
احصل على حالة المعالج
يمكن الحصول على معلومات حول وضع تشغيل المعالج عبر بروتوكول UDP باستخدام برنامج نصي بلغة Python.
#!/usr/bin/python3
import psutil
import socket
import time
TARGET_IP="192.168.2.45"
TARGET_PORT=1234
while True:
temperature = 0.0
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
time.sleep(0.5)
temperature += psutil.sensors_temperatures()["k10temp"][0].current
temperature /= 5.0
cores = psutil.cpu_percent(percpu=True)
out = str(temperature) + "," + ",".join(map(str, sorted(cores, reverse=True)))
socket.socket(socket.AF_INET, socket.SOCK_DGRAM).sendto(out.encode("utf-8"), (TARGET_IP, TARGET_PORT))
على جهاز الكمبيوتر الخاص بالمؤلف ، يبدأ البرنامج النصي تلقائيًا ، ويتم استخدام IP ثابت للعمل ، محجوزًا لمكعب LED.
في هذه المرحلة ، يجب أن يعمل كل شيء على النحو المنشود.

هل أعجبك هذا المشروع؟ ربما تكون قد طورت شيئًا مشابهًا أو على العكس من ذلك فريدًا؟ اسمحوا لنا أن نعرف في التعليقات.
