هذه المقالة مقدمة من @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 ]; then
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 وجهاز الرسم. انتصار!