Παρασκευή 14 Αυγούστου 2015

DrawBot, ένα απλό και φθηνό ρομπότ ζωγραφικής !




Αφορά έναν απλό αυτοματισμό που βασίζεται σε έναν μικροελεγκτή (π.χ. arduino) και μπορεί να σχεδιάζει σε κάθετες επιφάνειες. Αρχικά θα μπορούσε κανείς να το χαρακτηρίσει ως έναν μάλλον κακής ποιότητας εκτυπωτή. Όμως είναι πολλά περισσότερα απ' αυτό. Είναι μια κατασκευή τύπου "κάντο μόνος σου" ή DIY (Do It Yourself) αρκετά απλή ώστε η διαδικασία κατασκευής της να αποτελέσει αφορμή για μαθητές, φοιτητές αλλά και οποιονδήποτε άλλο  να   έρθει σε επαφή με τον κόσμο της ρομποτικής και των αυτοματισμών.

  Ως προς το αποτέλεσμα, αν και αυτό δεν είναι καλό με απόλυτα κριτήρια σε σχέση ακόμα και με έναν απλό εκτυπωτή,  ωστόσο παρέχει και κάποια πλεονεκτήματα όπως η χρήση απλών και φθηνών υλικών (π.χ. στυλό, μολύβι, μαρκαδόρο,κτλ) αλλά και  δυνατότητα σχεδίασης σε διαφορετικά  είδη και μεγέθη επιφανειών εργασίας.

Επιπλέον, το αποτέλεσμα πρακτικά δεν επαναλαμβάνεται ακριβώς, όπως σε ένα εκτυπωτή, αλλά υπάρχει μια μικρή διαφοροποιήση που κανει την κάθε σχεδίαση μοναδική. Ή για να το διατυπώσουμε και με το πνεύμα των καιρών, υπάρχει μια δημιουργική ασάφεια.

Εκτός από DrawBot μπορεί να το συναντήσετε και ως v-plotter, wall plotter, wall drawing robot ή wall hanging drawbot.

Αποτελείται από τρία κύρια μέρη: τον μικροελεγκτή, δύο βηματικούς ηλεκτροκινητήρες (stepper motors) με τους οδηγούς τους (drivers) και  από ένα κινούμενο φορέα, κρεμασμένο σε νήμα (εξ αυτού και το σχήμα V), που συνήθως σε ξενόγλωσσες ιστοσελίδες αναφέρεται ως Gondel (γόνδολα).

Πως δουλεύει
Η κίνηση της “γόνδολας” γίνεται σε 2 άξονες που όμως δεν είναι κάθετοι μεταξύ τους, όπως σε άλλες κατασκευές (3d printers, cnc, κτλ). Αντίθετα αποτελούν τις υποτείνουσες δυο ορθογωνίων τριγώνων (όπως φαίνεται και στο σχήμα) τα μήκη των οποίων μεταβάλλονται από τους βηματικούς κινητήρες με βάση τις οδηγίες. Επίσης, η επιφάνεια εργασίας είναι κάθετη ή σχεδόν κάθετη και όχι οριζόντια.



Για την υλοποίηση, από πλευράς κώδικα, ακολουθούνται οι ίδιοι αλγόριθμοι (Bresenham's line algorithm) που χρησιμοποιούνται και για συστήματα όπου οι άξονες x,y είναι κάθετοι, αλλά στο τελευταίο στάδιο προστίθεται ακόμα ένα βήμα κατα το οποίο οι συντεταγμένες x,y μετατρέπονται σε μήκος του αντίστοιχου νήματος, με την βοήθεια του Πυθαγορείου θεωρήματος, γι'αυτό και εναλλακτικά ο τίτλος θα μπορούσε να είναι: art = (a2 +b2) !
Το μήκος του νήματος (γνωρίζοντας την περιφέρεια από το καρούλι που τυλίγεται το νήμα και τα χαρακτηριστικά του stepper), μετατρέπεται σε αριθμό βημάτων, που καλείται να εκτελέσει ο αυτοματισμός.

Η όλη διαδικασία περιλαμβάνει δύο κύρια στάδια: Μετατροπή μιας εικόνας σε απλουστευμένο κώδικα gcode και ακολούθως εκτέλεση του κώδικα γραμμή-γραμμή από τον αυτοματισμό.

Μετατροπή εικόνας σε κώδικα gcode
Σε επίπεδο λογισμικού (software) υπάρχουν διαφορετικές υλοποιήσεις για την μετατροπή εικόνων σε κώδικα gcode. Οι πιο αποδοτικές (ποιότητα/χρόνος) από αυτές για τον συγκεκριμένο αυτοματισμό, φαίνεται να είναι αυτές που σχεδιάζουν με συνεχείς γραμμές. Η ανάπτυξη τέτοιων προγραμμάτων έχει ενδιαφέρον μαθηματικά και η συμβολή τους στο τελικό αποτέλεσμα είναι καθοριστική.

Αυτό που χρησιμοποίησα στην συγκεκριμένη εργασία ήταν το πολύ καλό και ανοιχτού κώδικα Death to Sharpie το οποίο είναι γραμμένο και εκτελείται σε  processing.

Μπορείτε όμως να χρησιμοποίησετε και το δωρεάν πρόγραμμα inkscape για δημιουργία διανυσματικών σχεδίων και ακολούθως να τα μετατρέψετε σε gcode με τα κατάλληλα εργαλεία του (gcodetools plug-in).
Με λίγο ψάξιμο θα βρείτε και άλλα προγράμματα στο διαδίκτυο.

Αποστολή οδηγιών στον μικροελεγκτή
Εφόσον έχουμε μετατρέψει την εικόνα μας σε κώδικα gcode, θα πρέπει να χρησιμοποιήσουμε κάποιο πρόγραμμα για να στείλουμε τις οδηγίες στον μικροελεγκτή.
Εδώ, χρησιμοποιήσαμε το δωρεάν προγραμμα Universal-gcode-Sender. Βέβαια, υπάρχουν και πολλά άλλα για την ίδια δουλειά.

Διάφορες εκδοχές της κατασκευής

Για κάθε ένα μέρος του αυτοματισμού μπορούν να βρεθούν στο διαδύκτιο διαφορετικές υλοποιήσεις και διατάξεις (π.χ. Polorgraph, Dullbits, Marginally Clever).

Η αρχική σκέψη ήταν να κατασκευασθεί ο αυτοματισμός έτσι ώστε να μπορεί εύκολα και με τις λιγότερες τροποποιήσεις να προσαρμοστεί σε διαφορετικές επιφάνειες (παράθυρα, πόρτες, πίνακες, τοίχους, κτλ). Η πρώτη ιδέα ήταν να τοποθετηθούν σε ένα ενιαίο φορέα οι βημ.κινητήρες με τους οδηγούς τους, ο μικροελεγκτής και η βάση της γραφίδας. Έτσι, κάθε φορά για την αναπροσαρμογή θα απαιτούνταν μόνο η τοποθέτηση των δυο άκρων των νημάτων στις γωνίες της επιφάνειας εργασίας.

DrawBots με όλα τα επι μέρους τμήματα σε ένα ενιαίο φορέα/πλατφόρμα

Η ιδέα απορρίφθηκε τελικά γιατί:  1) υπήρχε δυσκολία στην αναδιάταξη κινητήρων, ηλεκτρονικών κτλ για να βρεθεί κάθε φορά το κατάλληλο σημείο ισορροπίας, 2) ο φορέας γινόταν πιο βαρύς και δεν υπήρχε τρόπος να χρησιμοποιηθούν αντίβαρα αλλά μόνο κινητήρες με γρανάζια, οι οποίοι όμως είναι πολύ πιο αργοί.

Η πιο συχνή διάταξη που θα συναντήσετε στο διαδίκτυο είναι αυτή της τοποθέτησης των δυο βηματικών κινητήρων στις επάνω γωνίες της επιφάνειας εργασίας. Αν και δεν είναι η πιο οικονομική διάταξη, ωστόσο επιτρέπει την χρήση αντίβαρων. Ιδίως για την περίπτωση που το βάρος της “γόνδολάς” αναμένεται να είναι μεγάλο και δεν θέλουμε να χρησιμοποιήσουμε ισχυρούς (>μεγάλους) κινητήρες, τότε η διάταξη αυτή είναι η καλύτερη.

Οι βηματικοί κινητήρες  πρέπει να δουλεύουν άνετα και όχι στα όρια της ροπής τους, γιατί τότε υπάρχει μεγάλη πιθανότητα να χαθούν βήματα και να τελικά να έχουμε αστοχία. Η παρακολούθηση των βημάτων με rotary encoders είναι μια σκέψη αλλά κάνει την κατασκευή πολυπλοκότερη. Το μειονέκτημα με την χρήση αντίβαρων είναι ότι θα απαιτηθεί και η χρήση κάποιου ιμάντα, αλυσίδας ή ανάλογου, αντί απλού νήματος για την αιώρηση της “γόνδολας”.

 
DrawBot με τα stepper motors στις ανω γωνίες της επιφ.εργασίας. Διακρίνονται εκατέρωθεν τα αντίβαρα.


Η κατασκευή

Τα υλικά
Συνολικά χρειάστηκαν:
  1. Δύο stepper motors (Phase voltage: 5V, Phase Current: 0.7A, Step Angle: 1.8 °) για την κίνηση της γόνδολας:

  1. Ένα μικρότερο stepper motor με γρανάζια (μειωτήρα) για την απώθηση της γόνδολας:


  1. Μια έτοιμη ενιαία πλατφόρμα (3DV4 CNC Shield V4) για την τοποθέτηση του arduino mini και των τριών motor drivers (A4988):

  1. Μεταλλικά clips (δύο μικρά και ένα μεγαλύτερο) με δύο μικρά ρουλεμάν τύπυ U:

5) Ένα mini DVD, μια σύριγγα 20ml, βίδες, καρουλάκια ραπτομηχανής

(Το συνολικό κόστος δεν ξεπέρασε τα 50-60 €)

Η διάταξη που τελικά επιλέχθηκε ήταν η τοποθέτηση του μικροελεγκτή , των βηματικών κινητήρων και των οδηγών τους σε μια ενιαία βάση, χωρίς την χρήση αντίβαρων, μιας και το αναμενόμενο βάρος της γόνδολας θα ήταν εντός των επιτρεπτών ορίων για τους βηματικούς κινητήρες που διέθετα. Η όλη κατασκευή στηρίζεται σε ένα μεγάλο μεταλλικό clip, όπως μπορείτε να δείτε και στις φωτογραφίες:


Δυο μικρότερα ματαλλικά clips με ρουλεμάν τοποθετούνται στις γωνίες της επιφάνειας εργασίας για την εύκολη κύλιση του νήματος:

 


Η γόνδολα

Κι εδώ μεγάλη ποικιλία σε κατασκευές. Από πολύ απλές (π.χ. μεταλλικό clip) εως περισσότερο σύνθετες. Η γόνδολα έχει το σημείο στήριξης της γραφίδας (μαρκαδόρου, κιμωλίας, κτλ) και ένα μηχανισμό απομάκρυνσης της γραφίδας από την επιφάνεια.
Ο μηχανισμός απομάκρυνσης μπορεί να είναι ένας βηματικός κινητήρας με βραχίονα, ή ένα πηνίο με κινούμενο μεταλλικό άξονα ή ένας μικρός σερβοκινητήρας ή ένας κινητήρας γραμμικής κίνησης, κτλ.

Εδώ οι λεπτομέρειες που κάνουν την διαφορά έχουν να κάνουν με το κατα πόσο η μύτη της γραφίδας ανταποκρίνεται σε μικρές κινήσεις και παραμένει με σταθερή γωνία στην επιφάνεια εργασίας. Επιπλέον θα πρέπει να ασκείται και κάποιου βαθμού πίεση στην γραφίδα. Για να ασκηθεί πίεση στην γραφίδα σε κάθετη θέση, θα πρέπει το σημείο όπου συγκρατείται από το νήμα η γόνδολα, να απέχει από την επιφάνεια εργασίας. Τότε όμως υπάρχει τάση της γόνδολας να γύρει από την μια ή την άλλη πλευρά κατα την κίνηση.

Η τοποθέτηση κάποιου βάρους στην κάτω πλευρά την ισορροπεί. Όμως, παρά το βάρος, όταν η γόνδολα κινηθεί, η τριβή στην μύτη της γραφίδας δεν θα την αφήσει να κάνει πολύ μικρές κινήσεις και θα κολλάει κατα διαστήματα.

Τελική λύση αποτελεί η τοποθέτηση "σταθεροποιητών" εκατέρωθεν οπότε δεν επιτρέπεται η κλίση της γόνδολας στον Χ άξονα.

Στην συγκεκριμένη κατασκευή η γόνδολα κατασκευάσθηκε από ένα mini DVD, μια σύριγγα 20ml, ένα μικρό stepper motor και μικρό βαρίδι, όπως φαίνεται στις εικόνες:

Δύο μακριές βίδες αποτελούν τους σταθεροποιητές της γόνδολας και επιπλέον σημεία απ' όπου αιωρείται η γόνδολα.


Συνολικά η κατασκευή:






Δυσκολίες κατα την κατασκευή
-Software
Κατα την διαδικασία μετατροπής της εικόνας σε gcode: χρησιμοποιήσα διάφορα προγράμματα και τελικά αυτό που δούλεψε εύκολα και παρείχε την δυνατότητα μεταβολών στον κώδικά του ήταν το Death to Sharpie.
Χρειάστηκε να γίνουν μικρές μετατροπές για να ανταποκρίνονται οι εντολές gcode με το αντίστοιχο πρόγραμμα του arduino, κυρίως για τον z άξονα όπου η θέση G0 Z1 ήταν η θέση επαφής και έπρεπε να αλλάξει σε G0 Z0.
Ο προγραμματισμός του arduino στηρίχθηκε στο αντίστοιχο του MarginallyClever. Κι εδώ χρειάστηκαν αλλαγές. Η εντολή G0 Z1 και G0 Z0 έπρεπε να κινεί το stepper motor της γόνδολας κατα ορισμένα βήματα (συγκεκριμένα ¼ του κύκλου).
Επίσης, οι τιμές X, Y να μετατραπούν σε υποτείνουσες (μήκος αριστερού και δεξιού νήματος). Σ’αυτό το σημείο, ένα λάθος στον χειρισμό των δεκαδικών, έκανε το όλο σύστημα να συσσωρεύει σφάλματα και τελικά να εκτρέπεται πλήρως.
Δυσκολία συνάντησα και κατα την εκτέλεση εντολών G02 και G03 που αφορούν σχεδίαση τόξων και κύκλων λόγω πιθανώς σφάλματος στον προγραμματισμό του arduino. Ευτυχώς όμως το death to sharpie παράγει μόνο εντολές G00 G01 που αφορούν ευθείες γραμμές και με τις οποίες δεν υπήρξε κανένα πρόβλημα.

Τέλος, μετά από την εκτέλεση κάθε εντολής πρέπει να επιστρέψει στην σειριακή πόρτα ένα "OK" όπως απαιτεί το Universal-GCode-Sender, ως επιβεβαίωση ότι εκτελέστηκε η προηγούμενη εντολή για να στείλει την επόμενη. Το παραπάνω δεν αναφέρεται στην ιστοσελίδα του univeral GCode Sender ευκρινώς και χρειάστηκε να το υποψιαστώ.
Δοκίμασα να αντικαταστήσω την ενσύρματη επικοινωνία υπολογιστή-arduino με ασύρματη δια μέσω Bluetooth. Αν και η επικοινωνία πέτυχε,  ωστόσο παροδικά εμφανίζονταν κάποια κακή μετάδοση που μπλόκαρε όλη την εργασία. Τελικά, παραιτήθηκα από την ιδέα.

-Βηματικοί κινητήρες και οι οδηγοί τους
Για την καθοδήγηση των stepper motors χρησιμοποιήθηκαν οδηγοί A4988 της pololu. Ο συγκεκριμένος driver αντέχει μέχρι 2A και χρησιμοποιεί παροχή ρεύματος 8 – 35 V και μπορεί να ρυθμιστεί ως προς την ένταση του ρεύματος που θα παρέχει. Υπάρχουν οδηγίες στην σελίδα της εταιρείας σχετικά με την ρύθμιση του driver.
Το σημείο αυτό απαιτεί προσοχή και θα πρέπει να ασχοληθούμε με την ρύθμιση τους για να έχουμε την βέλτιστη λειτουργία των stepper motors και να μειώσουμε τις πιθανότητες για απώλεια βημάτων.
(αν σας συμβεί, ένας καλός οδηγός επίλυσης είναι εδώ)

Να σημειωθεί επίσης ότι ο οδηγός ρυθμίζει την ένταση ρεύματος παρέχοντας τετράγωνα μεταβαλλόμενο συνεχές ρεύμα (PWM) και μπορεί να προκαλέσει ταλάντωση και αστάθεια στον ηλεκτροκινητήρα εάν δεν ρυθμιστεί σωστά.

Επίλογος
Θέλησα να γράψω άλλο ένα άρθρο, από τα πολλά που υπάρχουν στο διαδίκτυο σχετικά με αυτή την απλή κατασκευή σχεδίασης σε κάθετες επιφάνειες, μιας και είναι η πλέον απλή και μπορεί να αποτελέσει την πρώτη προσπάθεια ενασχόλησης με αυτή την τεχνολογία, τόσο σε επίπεδο λογισμικού όσο και σε υλικά. Μια τεχνολογία που συγγενεύει με τους 3D printers, CNC μηχανήματα, laser cutters κτλ.
Επιπλέον, οι παραλλαγές που μπορεί να εκτελέσει κανείς είναι πάρα πολλές.

Παράδειγμα σχεδίασης
(διάρκεια σχεδίασης ~ 01 ωρα και 30 λεπτά, εδώ σε γρήγορη κίνηση):






Νίκος Σ.

Άλλες πηγές:

http://plotterbot.com/plotterbot-documentation/plotterbot-prior-art/
 http://www.dullbits.com/drawbot/drawbot
https://www.marginallyclever.com/blog/2012/02/drawbot-overvie/
http://www.polargraph.co.uk/
--------------
3/11/2016 The modified code (on your own risk, do not use arcs) here.

2 σχόλια:

Unknown είπε...

Hello, could you please share the modified arduino code? THanks!

Νικόλας είπε...

A link with a modified CNC code has been added at the end of the post.
Does not work with arcs. You have to use straight lines (Death to Sharpie produce gcode with straight lines). Death-to-sharpie runs on the "processing" platform.