هذا المقال من مساهمات @Erez Zukerman
أستمتع كثيرًا باستخدام الراسم iDraw 2.0، لكنني أفضل تشغيله ببطء - ولذلك قد تستغرق رسوماتي بعض الوقت. استخدمت إعداد Inkscape الجاهز لفترة طويلة، لكن كان عليّ إبقاء حاسوبي الرئيسي قيد التشغيل ومتصلًا بالراسم أثناء عمله. لم يكن ذلك مثاليًا - لذا قررت معرفة ما إذا كان بإمكاني إعداد نظام «بلا واجهة» باستخدام Raspberry Pi.
اتضح أن الأمر أسهل بكثير مما توقعت، وكان ممتعًا أيضًا. إليك ما سنفعله:
●إعداد جهاز Pi نفسه.
●تثبيت CNCjs وتبعياته. سنستخدم هذا للتحكم فعليًا في الراسم، عبر إرسال GCode إليه عبر الشبكة.
●سنخصص أيضًا بعض الوقت لإعداد الأمور بحيث يبدأ CNCjs تلقائيًا كلما أقلع جهاز Pi، من دون الحاجة إلى تسجيل الدخول أو القيام بأي شيء.
●معرفة كيفية تحويل ملفات SVG الخاصة بنا إلى GCode (مع التحكم في سرعة القلم).
يُرجى ملاحظة أن هذا الدليل يفترض أنك مرتاح لاستخدام سطر أوامر Linux. وإذا كنت تتابع هذا الدليل بعد أشهر أو سنوات من نشره، فقد تواجه شتى أنواع الأخطاء على طول الطريق - فهذه طبيعة الأمر. عند كتابة هذا الدليل، كان النظام الموضح يعمل جيدًا بالنسبة إليّ.
لنبدأ!
إعداد جهاز Pi
من الأفضل أن تتمكن من تخصيص جهاز Pi لهذا المشروع وحده، ليكون «وحدة تحكم الراسم» الخاصة بك. وإن لم يكن ذلك ممكنًا، فلا بأس - سيظل يعمل، لكنه قد يكون أقل ملاءمة مع مرور الوقت.
من الأسباب الجيدة الأخرى لتخصيص جهاز Pi لهذا المشروع وحده أنه يمكنك إعداده من الصفر باستخدام إعدادات افتراضية منطقية. وهذا بالضبط ما فعلته: أحضرت بطاقة SD بسعة 32GB واستخدمت أداة Raspberry Pi Imager الرسمية لتهيئتها بنظام Raspberry Pi OS.
يتيح لك البرنامج أيضًا إعداد بعض الإعدادات الافتراضية فور إخراج الأداة من العلبة، وهذا ما أوصي به. استخدمت برنامج التثبيت لتهيئة ما يلي:
●اسم المستخدم وكلمة المرور الخاصان بي
●اسم مضيف محلي لوحدة تحكم الراسم (plotter.local في حالتي)
●مفتاح SSH العام الخاص بي، لكي أتمكن من الاتصال بالجهاز عبر SSH فورًا
●معرّف SSID وكلمة مرور شبكة WLAN الخاصة بي، لكي يتصل جهاز Pi بشبكتي عند الإقلاع
أعددت كل ذلك، ثم تركت أداة التصوير تتولى المهمة. وعندما انتهت، أخرجت بطاقة microSD وأدخلتها في جهاز Pi. ولأول تشغيل فقط، أوصلت جهاز Pi بلوحة مفاتيح وشاشة - لكن ذلك لم يكن ضروريًا تمامًا. استغرق اسم المضيف plotter.local الذي اخترته بضع لحظات ليُسجَّل على شبكتي، لذا استخدمت لوحة المفاتيح والشاشة للحصول على عنوان IP الحالي (بتشغيل ifconfig من الطرفية).
اتصلتُ بالجهاز عبر SSH، وحان وقت الانتقال إلى الخطوة التالية: تثبيت CNCjs
تثبيت CNCjs
كما قد تتوقع من الاسم، فإن CNCjs مبني على Node. لذا نحتاج أولًا إلى تثبيت Node.
●اتصل بجهاز Pi عبر SSH
●لنثبّت 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 - فهو لا يتعامل مع ملفات SVG مباشرةً.
أنشئ مسارًا لتحويل 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: يمكننا تحميله عبر المتصفح بالنقر على «تحميل G-code»، أو يمكننا إعداد دليل مراقبة (بحيث يبدأ الراسم بالعمل كلما ظهر فيه ملف GCode).
قد يبدو الخيار الأخير رائعًا من الناحية النظرية، لكنه لا يبدو منطقيًا كثيرًا: إذ يتطلب كل تخطيط بعض الإعداد اليدوي على أي حال. فعلينا وضع الورق وتركيب القلم وما إلى ذلك. لذلك، من المنطقي جدًا بالنسبة لي تحميل الملف يدويًا عبر المتصفح.
بعد أن تفعل ذلك، صغّر العرض لرؤية المعاينة.

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