195 lines
6.6 KiB
Plaintext
195 lines
6.6 KiB
Plaintext
Ein [[V-Plotter]], auch ''hanging wall plotter'' genannt, ist
|
|
* eine Wand zum Befestigen von Papier,
|
|
* zwei Rollen mit ansteuerbaren Motor,
|
|
* eine Halterung für ein Zeichengerät, die an den Fäden der Rollen hängt und
|
|
* eine Steuerung von den Motoren (mit Stromversorgung).
|
|
|
|
== roadmap ==
|
|
|
|
* SVG support
|
|
** internes Zwischenformat für Puntwolke (json)
|
|
*** Skalierungsfaktor (Bild zu Zeichenfläche), Linienart/Pfad, Linienbreite, defaults, Liste von Punkten (ein Pfad = 1 Objekt)(Absolute Werte)
|
|
* Parser für Zwischenformat in libvplotter einbauen
|
|
* Servosteuerung (Stifthebeautomatik) (muss noch getestet werden)
|
|
* TCP Interface
|
|
** GUI-Interface
|
|
* Autokalibrierung
|
|
** 2 Taster, beide Schnüre einzelen aufwickeln, Anschlagspunkt = Schnurlänge
|
|
* OSM-Karten parser :D
|
|
|
|
== plotbert ==
|
|
|
|
Zur [[Codeweek EU#2015]], wurde in einem Workshop für Kinder und Jugendliche begonnen ein V-Plotter, gesteuert von einem [https://www.raspberrypi.org/blog/hanging-wall-plotter/ entsprechenden] [[Raspberry Pi]] zu bauen.
|
|
|
|
[[#plotbert]] steht dem [[HQ]] für allerlei Spielereien zur Verfügung.
|
|
|
|
[[Bild:V-Plotter1_2.jpg|100px]]
|
|
[[Bild:V-Plotter2_2.jpg|100px]]
|
|
[[Bild:V-Plotter3.JPG|100px]]
|
|
|
|
Grundsätzlich ist [[#plotbert]] als [[wikipedia:de:Stiftplotter|Stiftplotter]] angedacht.
|
|
|
|
=== Aufbau ===
|
|
|
|
Ein [[Raspberry Pi 2]] steuert über 8 Pins 2 [[wikipedia:de:Schrittmotor|Steppermotor]]en 28BYJ-48 (5V DC) via 2 passender [[wikipedia:de:Vierquadrantensteller|H-Brücken]]. Und ein
|
|
|
|
; Pinbelegung:
|
|
:; MOTOR_LEFT:
|
|
:* _pins[0] = 11
|
|
:* _pins[1] = 10
|
|
:* _pins[2] = 13
|
|
:* _pins[3] = 12
|
|
:; MOTOR_RIGHT:
|
|
:* _pins[0] = 5
|
|
:* _pins[1] = 4
|
|
:* _pins[2] = 9
|
|
:* _pins[3] = 8
|
|
|
|
=== Verwendung ===
|
|
|
|
Verbinden mit [[plotbert]]
|
|
: <source lang="bash">ssh pi@172.22.99.103</source>
|
|
<tt>raspberry</tt>
|
|
|
|
Starten des [[C++]] Kommandointerpreters
|
|
: <source lang="bash">vplotter</source>
|
|
|
|
* l <length> // direct control, left motor
|
|
* r <length> // direct control, right motor
|
|
* m <dx> <dy> // move relative to current position
|
|
* g <x> <y> // move to absolute coordinate
|
|
* c // calibrate printer position
|
|
* u // move pen up
|
|
* d // move pin down
|
|
* w <time> // wait for a given time (in ms)
|
|
* s <level> // set servo to this pwm level
|
|
* h // move to calibration point
|
|
|
|
Parameter der Zeichenfläche und des Plotters sind in der main.cpp hard gecodet: (Koordinatenursprung ist 0:0)
|
|
* Position des Kalibrierungspunktes
|
|
* Entfernung der Motoren vom Kalibrierungspunkt aus
|
|
* Größe der Zeichenfläche
|
|
|
|
; Quellen sind unter
|
|
* <code>/home/pi/V-Plotter</code>
|
|
|
|
; Oder bei Github:
|
|
* [https://github.com/schwarzchristian/v-plotter V-Plotter C++ Repo]
|
|
|
|
=== script interface: Klassen Definition (Ruby) ===
|
|
|
|
Um besser damit spielen zu können, haben wir eine Ruby-Schnittstelle gebaut ([http://schwarz-chr.de/doc/V-Plotter-Ruby/ RDoc]):
|
|
|
|
== Beispiel für die Verwendung ==
|
|
|
|
<source lang="ruby">
|
|
# config laden
|
|
plotter = VPlotter.new :plotbert
|
|
|
|
# in den Zeichenmodus wechseln
|
|
plotter.draw do |d|
|
|
d.goto 50, 50 # Punkt anfahren
|
|
d.penDown # Stift aufsetzen
|
|
d.move 100, 0 # Relativbewegung
|
|
d.penUp # Stift absetzen
|
|
d.home # zurück zum Startpunkt
|
|
end
|
|
</source>
|
|
|
|
; Laden der richtigen Konfiguration (config) für unseren Plotter
|
|
entweder im Konstruktor:
|
|
: <source lang="ruby">plotter = VPlotter.new :plotbert</source>
|
|
oder auch nachher:
|
|
: <source lang="ruby">plotter.use_config :plotbert</source>
|
|
|
|
; Aufsetzen vom Stift
|
|
: <source lang="ruby">plotter.penDown</source>
|
|
; Absetzen vom Stift
|
|
: <source lang="ruby">plotter.penUp</source>
|
|
|
|
; Rotieren lassen vom (linken oder rechten) Motor:
|
|
Warnung: Die Benutzung dieser Funktionen kann im Moment dazu führen, dass der Plotter seine Kalibrierungsdaten verliert!
|
|
:: Wert>0 = abrollen
|
|
;: Wert<0 = aufrollen
|
|
: <source lang="ruby">plotter.rotateLeftMotor(int Entfernung in mm)</source>
|
|
: <source lang="ruby">plotter.rotateRightMotor(int Entfernung in mm)</source>
|
|
|
|
; absolute Bewegung vom Koordinatenursprung aus
|
|
: <source lang="ruby">plotter.goto x, y</source>
|
|
|
|
; relative Bewegung von aktueller Position
|
|
: <source lang="ruby">plotter.move x, y</source>
|
|
|
|
; Fahren zum Kalibrierungspunkt
|
|
: <source lang="ruby">plotter.home</source>
|
|
|
|
; Schreiben des Wortes ''Test'' an der aktuellen Position (noch nicht implementiert)
|
|
: <source lang="ruby">plotter.test</source>
|
|
|
|
servo motor position für definierte Stiftposition
|
|
: <source lang="ruby">plotter.setPen(int 0-100)</source>
|
|
|
|
; Neues Kalibieren der Stiftspitze:
|
|
:: Fahren zum Kalibrierungspunkt und Ausführen von <code>calibrate</code>
|
|
: <source lang="ruby">plotter.calibrate</source>
|
|
|
|
; unter Angabe der Rahmenparameter ist es auch möglich andere Plotter damit zu steuern
|
|
<source lang="ruby">
|
|
plotter.use_config(
|
|
pos_left: [x, y],
|
|
pos_right: [x, y],
|
|
pos_cali: [x, y],
|
|
height: height,
|
|
width: width
|
|
)
|
|
</source>
|
|
|
|
; Ändern der Geschwindigkeit vom Zeichen: (noch nicht implementiert)
|
|
:: default=10
|
|
:: langsam=1
|
|
:: Werte über 10 sind möglich aber können zu übersprungenen Steps führen, die die Zeichnung zerstören
|
|
: <source lang="ruby">VPlotter.printSpeed(int [1-10-∞])</source>
|
|
|
|
[[Kategorie:C++]]
|
|
[[Kategorie:Ruby]]
|
|
[[Kategorie:Raspberry Pi]]
|
|
[[Kategorie:Projekt]]
|
|
|
|
== Zwischenformat ==
|
|
<source lang="javascript">
|
|
{
|
|
"scale": null, // float, Skalierungsfaktor (default: auto)
|
|
"offset": null, // int, Verschiebung in mm (default: auto)
|
|
"line_width": 1, // int, Linienbreite
|
|
"line_pattern": "-" // string, Linienmuster (siehe unten) (default: durchgezogen)
|
|
"paths": [
|
|
{
|
|
"line_width": null, // siehe oben (default: globale Einstellung)
|
|
"line_pattern": null, // siehe oben (default: globale Einstellung)
|
|
"points": [[0, 0], [10, 0], [5, 5]], // Punkte in absoluten Koordinaten
|
|
"closed": false, // Pfad wird geschlossen, wenn 'true'
|
|
},
|
|
// ...
|
|
]
|
|
}
|
|
</source>
|
|
|
|
=== Linienmuster ===
|
|
Der Linientyp wird als String dargestellt, wobei folgende Zeichen verwendet werden können:
|
|
|
|
;' ' (Leerzeichen)
|
|
:es wird 1mm ausgelassen (es wird kein strich gezeichnet)
|
|
;'.' (Punkt)
|
|
: es wird ein Punkt gesetzt, ohne die Position zu ändern; stehen mehrere dieser Zeichen hintereinander, wird beim das ersten Zeichen der Stift abgesenkt und für jeden weiteren Punkt 1mm weiter bewegt.
|
|
;'-' (Minus)
|
|
: es wird eine Linie von 1mm gezeichnet
|
|
|
|
==== Beispiele ====
|
|
<source lang="text">
|
|
pattern => [10 mm linie]
|
|
". " => [. . . . . . . . . . ]
|
|
"- " => [- - - - - -]
|
|
". - " => [. - . - . - . ]
|
|
". .. " => [. - . - . - . ]
|
|
</source>
|