هذه المقالة مقدمة من @Erez Zukerman
أنا أستمتع كثيرًا باستخدام plotter الخاص بي iDraw 2.0، لكني أحب تشغيله ببطء – لذا قد تستغرق الرسومات وقتًا طويلاً. استخدمت إعداد Inkscape الافتراضي لفترة طويلة، لكن كان علي إبقاء جهاز الكمبيوتر الرئيسي قيد التشغيل ومتصلًا بالـ plotter أثناء العمل. لم يكن هذا مثاليًا – لذا قررت أن أحاول إعداد "بدون رأس" باستخدام Raspberry Pi.
اتضح أن الأمر أسهل بكثير مما كنت أظن، وممتع أيضًا. إليك ما سنفعله:
●إعداد الـ Pi نفسه.
●تثبيت CNCjs واعتمادياته. هذا ما سنستخدمه فعليًا للتحكم في plotter، عن طريق إرسال GCode عبر الاتصال.
●سنأخذ أيضًا لحظة لإعداد الأمور بحيث يبدأ CNCjs تلقائيًا كلما تم تشغيل الـ Pi، دون الحاجة لتسجيل الدخول أو القيام بأي شيء.
●معرفة كيفية تحويل ملفات SVG الخاصة بنا إلى GCode (مع التحكم في سرعة القلم).
يرجى ملاحظة أن هذا الدليل يفترض أنك مرتاح لاستخدام سطر أوامر Linux. إذا كنت تتابع هذا بعد شهور أو سنوات من نشره لأول مرة، قد تواجه جميع أنواع الأخطاء على طول الطريق – هذه هي طبيعة الأمر. في وقت الكتابة، كان النظام الموصوف يعمل جيدًا بالنسبة لي.
لنبدأ!
إعداد الـ Pi
من الأفضل إذا كان بإمكانك تخصيص Pi فقط لهذا المشروع، ليكون "وحدة تحكم plotter" الخاصة بك. إذا لم يكن كذلك، لا تقلق – سيظل يعمل، لكنه قد يكون أقل ملاءمة مع مرور الوقت.
سبب جيد آخر لتخصيص Pi فقط لهذا المشروع هو أنه يمكنك إعداده من الصفر مع إعدادات افتراضية منطقية. وهذا بالضبط ما فعلته: أخذت بطاقة SD بسعة 32 جيجابايت واستخدمت أداة Raspberry Pi Imager الرسمية لتثبيت نظام Raspberry Pi OS عليها.
أحد الأشياء التي يتيحها لك الأداة، والتي أوصي بها، هو إعداد بعض الإعدادات الافتراضية مباشرة من البداية. استخدمت المثبت لتكوين ما يلي:
●اسم المستخدم وكلمة المرور الخاصة بي
●اسم مضيف محلي لوحدة تحكم plotter (plotter.local في حالتي)
●مفتاح SSH العام الخاص بي، حتى أتمكن من الاتصال بالآلة عبر SSH فورًا
●معرّف شبكة WLAN/كلمة المرور الخاصة بي، حتى يتصل الـ Pi بشبكتي عند الإقلاع
قمت بإعداد كل هذا ثم تركت برنامج Imager يقوم بعمله. عندما انتهى، أخرجت بطاقة microSD وأدخلتها في جهاز Pi. فقط في الإقلاع الأول، قمت بتوصيل الـ Pi بلوحة مفاتيح وشاشة – لكن هذا لم يكن ضروريًا تمامًا. استغرق اسم المضيف plotter.local الذي اخترته بضع لحظات ليظهر على شبكتي، لذا استخدمت لوحة المفاتيح والشاشة للحصول على عنوان IP الحالي (عن طريق تشغيل ifconfig من الطرفية).
لقد اتصلت عبر SSH بالجهاز، وحان الوقت للانتقال إلى الخطوة التالية: تثبيت CNCjs
تثبيت CNCjs
كما قد تتوقع من الاسم، CNCjs مبني على Node. لذا نحتاج أولاً إلى تثبيت Node.
●اتصل عبر SSH إلى جهاز Pi
●دعنا نثبت NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●اخرج من الطرفية ثم أعد الدخول عبر ssh مرة أخرى. هذا يحمل NVM.
●الآن دعنا نثبت node:
○nvm install node
●رائع! حان الوقت لتثبيت CNCjs:
○npm install -g cncjs
●بافتراض أن كل شيء سار على ما يرام حتى هذه النقطة، دعنا نشغّل CNCjs مرة واحدة فقط. هذا سينشئ ملف التكوين الخاص بنا، ~/.cncrc:
○من سطر الأوامر، في دليل المنزل الخاص بك، شغّل cncjs
○اضغط Ctrl+C للخروج منه
●أنت الآن المالك الفخور لملف ~/.cncrc جديد تمامًا، تهانينا. دعنا نحرره، بشكل رئيسي للسماح بالوصول عن بُعد:
○vi .cncrc
{
"allowRemoteAccess": true,
"state": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"secret": YOUR_SECRET HERE
}
السطر الحاسم الذي يجب إضافته هنا هو الأول، allowRemoteAccess.
●شغّل cncjs على جهاز Pi مرة أخرى.
●باستخدام متصفحك على جهازك الرئيسي، اذهب إلى plotter.local:8000. يجب أن يظهر CNCjs.

الآن، حان الوقت لتوصيل جهاز الرسم ورؤية ما إذا كان CNCjs يمكنه التواصل معه.
●وصل جهاز iDraw 2.0 بمنفذ USB في جهاز Pi.
●شغّل جهاز الرسم.
●في CNCjs، ابحث عن أداة الاتصال (عادة في الزاوية العلوية اليسرى).
○اضغط على زر تحديث تحت المنفذ.
○افتح القائمة المنسدلة واختر المنفذ.

●انقر على فتح. إذا سار كل شيء على ما يرام، يجب أن يعرض وحدة تحكم Gcode بعض النصوص الآن.

لنحرك المحركات!
●باستخدام أداة المحاور، اضغط على + و - على المحاور المختلفة لتحريك المحركات. يمكنك أيضًا تفعيل "التحكم بلوحة المفاتيح" ثم استخدام مفاتيح الأسهم لتحريك جهاز الرسم. إذا وضعت قلمًا وخفضت المحور Z، سيكون الأمر مثل جهاز Etch-a-Sketch باهظ الثمن.

ملاحظة واحدة هي أن الموضع 0 على محور Y هو عكس ما قد تتوقعه: فهو يذهب إلى أسفل منطقة الرسم. سنعود إلى هذا لاحقًا.
جعل CNCjs يعمل عند الإقلاع
ننتقل الآن إلى الخطوة التالية، نريد العودة إلى هذه النقطة المثالية في كل مرة يعيد فيها Pi التشغيل، دون أن تضطر إلى فعل أي شيء. لذا:
●في جلسة SSH إلى جهاز Pi، قم بإنهاء CNCjs بالضغط على Ctrl-C.
●تأكد من أنه توقف فعلاً عن العمل بتحديث المتصفح (plotter.local:8000، بافتراض أن هذا هو اسم المضيف الذي قمت بتكوينه أعلاه). يجب أن يفشل الآن.
●على جهاز Pi، قم بتثبيت pm2: npm install -g pm2
●ابدأ CNCjs باستخدام pm2: pm2 start cncjs --name cncjs
●تأكد من أنه بدأ ويعمل كما تتوقع: انتظر بضع لحظات، ثم اذهب إلى plotter.local:8000 وتأكد من تحميله.
●أنشئ سكربت بدء التشغيل: pm2 startup. سيعطيك هذا أمرًا تحتاج إلى تنفيذه بصلاحيات sudo، فقم بذلك.
●احفظ قائمة العمليات: pm2 save
●أعد تشغيل جهاز Pi لترى إذا نجح: sudo reboot
●انتظر حتى يعود للعمل، ربما من 3 إلى 5 دقائق، ثم افتح http://plotter.local:8000/ لترى إذا كان بإمكانك الوصول إلى CNCjs مرة أخرى. إذا فعلت ذلك بشكل صحيح، يجب أن يعود للعمل فورًا.
نجاح! نحن على وشك الانتهاء – تم إعداد CNCjs بالكامل الآن. لكن لرسم شيء ما، نحتاج إلى تزويده بملف GCode – فهو لا يتعامل مع SVGs بشكل مباشر.
أنشئ خط معالجة لتحويل ملفات SVG إلى Gcode
لتحويل SVG إلى Gcode، سنستخدم Juicy-Gcode، وهي أداة صغيرة تعمل عبر سطر الأوامر.
التغيير الكبير هنا هو أننا نُصفّر بالنسبة للزاوية السفلية اليسرى من ورقتك، وليس الزاوية العلوية اليمنى! قد يستغرق هذا التغيير بعض الوقت للتعود عليه. سأذكرك به لاحقًا.
●على جهازك الرئيسي، قم بتنزيل النسخة التنفيذية Juicy-Gcode لنظام التشغيل الخاص بك: https://github.com/domoszlai/juicy-gcode/releases
●تم حفظ إعدادات Juicy-Gcode في ما يسمونه "ملف نكهة". هذا مجرد ملف yaml. إليك ملف نكهة جيد كبداية، يمكنك نسخه/لصقه في flavor.yaml على جهازك:
begin: |
G21 ; تعيين الوحدات إلى المليمترات
G17 ; تعيين مستوى الطائرة إلى XY
G90 ; تعيين التمركز المطلق
F600 ; تعيين السرعة إلى 600 مم/دقيقة -- هذه بطيئة جدًا، قد ترغب في تعديلها
G00 Z0 ; رفع القلم
G92 X0 Y0 ; اعتبر الموقع الحالي كنقطة 0,0 -- هذه هي الزاوية السفلية اليسرى
end: |
G0Z0 ; رفع القلم
G00 X0 Y0 Z0
toolon: |
G0Z6 ; وضع القلم على الورق
tooloff: |
G0Z0 ; رفع القلم
بعض الأمور المهمة التي يجب ملاحظتها حول ملف النكهة هذا:
●أشغل جهاز الرسم بسرعة 600 مم/دقيقة، وهي بطيئة جدًا. قد ترغب في تسريعها، حسب أقلامك وتفضيلاتك.
●السطر الآخر الملحوظ هو الذي يبدأ بـ G92. في هذا السطر، نخبر جهاز الرسم "أينما كنت الآن، هذا هو المنزل". لذا لمعايرة الرسم، نتوقع منك أن تحرك رأس جهاز الرسم يدويًا (وبهدوء) إلى الزاوية السفلية اليسرى من الورقة.
تريد أن يكون حجم الورقة مضبوطًا بشكل صحيح في ملف SVG، هذا مهم.
لتشغيل Juicy-Gcode، يبدو الأمر كالتالي:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
هذا أمر طويل بعض الشيء للكتابة في كل مرة، لذا صنعت هذا السكربت الصغير لجعل الأمور أكثر سهولة:
#!/bin/bash
# الاستخدام: ./run-juicy.sh input.svg [speed]
# إذا لم يتم توفير السرعة، الافتراضي هو 600
# التحقق من توفير وسيط واحد على الأقل
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; ثم
echo "الاستخدام: $0 <input-svg> [speed]"
echo " إذا لم يتم توفير السرعة، الافتراضي هو 600"
exit 1
fi
inputfile="$1"
# تعيين السرعة الافتراضية إلى 600 إذا لم يتم توفيرها
speed="${2:-600}"
# بناء اسم ملف النكهة
flavor_file="flavor-${speed}mm-speed.yaml"
# إنشاء اسم ملف الإخراج عن طريق استبدال امتداد .svg بـ .gcode
outputfile="${inputfile%.*}.gcode"
# تشغيل أمر juicy-gcode
juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
يمكنك الآن أن تمتلك عدة ملفات بنكهات مختلفة، كل منها بسرعة تشغيل مختلفة، وتحديد السرعة بسهولة بتمرير الرقم الذي يطابق اسم ملف النكهة.
الآن بعد أن حصلت على ملف GCode، حان الوقت لتحميله ورسمه!
قم بتحميل ملف GCode وابدأ الرسم
يوفر لنا CNCjs طريقتين لإدخال ملف GCode: يمكننا تحميله عبر المتصفح بالنقر على "Upload G-code"، أو يمكننا إعداد مجلد مراقبة (حتى يبدأ جهاز الرسم في العمل تلقائيًا عند ظهور ملف GCode فيه).
يبدو الأمر الأخير رائعًا نظريًا، لكنه لا معنى له كثيرًا: كل رسم يتطلب إعدادًا يدويًا على أي حال. علينا وضع الورقة، وتركيب القلم، إلخ. لذا بالنسبة لي، من المنطقي أكثر تحميل الملف يدويًا عبر المتصفح.
بمجرد القيام بذلك، قم بالتكبير للخارج لرؤية المعاينة.

هذا يعطينا بعض الفحوصات العقلانية المهمة:
●يتم تذكيرنا مرة أخرى (...) بأن الرسم سيبدأ من الزاوية السفلية اليسرى من ورقتنا.
●نرى القياسات على محوري X و Y. من المفيد أن تأخذ لحظة لقراءة ذلك والتحقق من أنها لا تتجاوز منطقة الرسم الخاصة بك. إذا حدث ذلك، فهناك مشكلة في ملف SVG الخاص بك – لا تبدأ في الرسم، أو ستكون المحركات غير سعيدة جدًا.
بافتراض أن قلمك في الزاوية السفلية اليسرى من ورقتك وأن القياسات منطقية، حان الوقت للرسم! اضغط على زر التشغيل وراقب جهاز الرسم الخاص بك. يمكنك الآن إيقاف تشغيل الكمبيوتر أو نقله إلى غرفة أخرى بينما يعمل جهاز Pi وجهاز الرسم. النصر!