V-Plotter: Unterschied zwischen den Versionen

Aus C3D2
Zur Navigation springen Zur Suche springen
K (tippfehler beseitigt und RDoc für Ruby-Interface verlinkt)
(Update für die Beschreibung des Ruby-Interfaces)
Zeile 67: Zeile 67:


Um besser damit spielen zu können, haben wir eine Ruby-Schnittstelle gebaut ([http://schwarz-chr.de/V-Plotter-Ruby/doc/ RDoc]):
Um besser damit spielen zu können, haben wir eine Ruby-Schnittstelle gebaut ([http://schwarz-chr.de/V-Plotter-Ruby/doc/ RDoc]):
<source lang="ruby">class VPlotter</source>
 
 
== 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
; Laden der richtigen Konfiguration (config) für unseren Plotter
: <source lang="ruby">VPlotter.selectPlotter("plotbert")</source>
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
; Aufsetzen vom Stift
: <source lang="ruby">VPlotter.penUp()</source>
: <source lang="ruby">plotter.penDown</source>
; Absetzen vom Stift
; Absetzen vom Stift
: <source lang="ruby">VPlotter.penDown()</source>
: <source lang="ruby">plotter.penUp</source>


; Rotieren lassen vom (linken oder rechten) Motor:
; 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 = abrollen
;: Wert<0 = aufrollen
;: Wert<0 = aufrollen
: <source lang="ruby">VPlotter.rotateLeftMotor( int Entfernung in 1/10 mm)</source>
: <source lang="ruby">plotter.rotateLeftMotor(int Entfernung in mm)</source>
: <source lang="ruby">VPlotter.rotateRightMotor( int Entfernung in 1/10 mm)</source>
: <source lang="ruby">plotter.rotateRightMotor(int Entfernung in mm)</source>


; absolute Bewegung vom Koordinatenursprung aus
; absolute Bewegung vom Koordinatenursprung aus
: <source lang="ruby">VPlotter.goto(x,y)</source>
: <source lang="ruby">plotter.goto x, y</source>


; relative Bewegung von aktueller Position
; relative Bewegung von aktueller Position
: <source lang="ruby">VPlotter.move(x,y)</source>
: <source lang="ruby">plotter.move x, y</source>


; Fahren zum Kalibrierungspunkt
; Fahren zum Kalibrierungspunkt
: <source lang="ruby">VPlotter.home()</source>
: <source lang="ruby">plotter.home</source>
      
      
; Schreiben des Wortes ''Test'' an der aktuellen Position
; Schreiben des Wortes ''Test'' an der aktuellen Position (noch nicht implementiert)
: <source lang="ruby">VPlotter.test()</source>
: <source lang="ruby">plotter.test</source>
   
   
servo motor position für definierte Stiftposition
servo motor position für definierte Stiftposition
: <source lang="ruby">VPlotter.setPen(int 0-100)</source>
: <source lang="ruby">plotter.setPen(int 0-100)</source>
   
   
; Neues Kalibieren der Stiftspitze:
; Neues Kalibieren der Stiftspitze:
:: Fahren zum Kalibrierungspunkt und Ausführen von <code>calibrate()</code>
:: Fahren zum Kalibrierungspunkt und Ausführen von <code>calibrate</code>
: <source lang="ruby">VPlotter.calibrate()</source>
: <source lang="ruby">plotter.calibrate</source>


; unter Angabe der Rahmenparameter ist es auch möglich andere Plotter damit zu steuern
; unter Angabe der Rahmenparameter ist es auch möglich andere Plotter damit zu steuern
: <source lang="ruby">VPlotter.customConfig(posMotorRight(x,y), posMotorLeft(x,y), calibrationPoint(x,y), height, width)</source>
<source lang="ruby">
plotter.customConfig(
  pos_left:  [x, y],
  pos_right: [x, y],
  pos_cali:  [x, y],
  height:    height,
  width:    width
)
</source>


; Ändern der Geschwindigkeit vom Zeichen:
; Ändern der Geschwindigkeit vom Zeichen:
:: default=10
:: default=10
:: langsam=1
:: langsam=1
:: Werte über 10 sind möglich aber können zu übersprungenen Steps führen die die Zeichnung zerstören
:: 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>
: <source lang="ruby">VPlotter.printSpeed(int [1-10-∞])</source>



Version vom 13. November 2015, 17:22 Uhr

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).

plotbert

Zur Codeweek EU#2015, wurde in einem Workshop für Kinder und Jugendliche begonnen ein V-Plotter, gesteuert von einem entsprechenden Raspberry Pi zu bauen.

#plotbert steht dem HQ für allerlei Spielereien zur Verfügung.

Grundsätzlich ist #plotbert als Stiftplotter angedacht.

Aufbau

Ein Raspberry Pi 2 steuert über 8 Pins 2 Steppermotoren 28BYJ-48 (5V DC) via 2 passender 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

ssh pi@172.22.99.103

raspberry

Starten des C++ Kommandointerpreters

vplotter
  • 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
  • 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
  • /home/pi/V-Plotter
Oder bei Github

script interface: Klassen Definition (Ruby)

Um besser damit spielen zu können, haben wir eine Ruby-Schnittstelle gebaut (RDoc):


Beispiel für die Verwendung

# 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
Laden der richtigen Konfiguration (config) für unseren Plotter

entweder im Konstruktor:

plotter = VPlotter.new :plotbert

oder auch nachher:

plotter.use_config :plotbert
Aufsetzen vom Stift
plotter.penDown
Absetzen vom Stift
plotter.penUp
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
plotter.rotateLeftMotor(int Entfernung in mm)
plotter.rotateRightMotor(int Entfernung in mm)
absolute Bewegung vom Koordinatenursprung aus
plotter.goto x, y
relative Bewegung von aktueller Position
plotter.move x, y
Fahren zum Kalibrierungspunkt
plotter.home
Schreiben des Wortes Test an der aktuellen Position (noch nicht implementiert)
plotter.test

servo motor position für definierte Stiftposition

plotter.setPen(int 0-100)
Neues Kalibieren der Stiftspitze
Fahren zum Kalibrierungspunkt und Ausführen von calibrate
plotter.calibrate
unter Angabe der Rahmenparameter ist es auch möglich andere Plotter damit zu steuern
plotter.customConfig(
  pos_left:  [x, y],
  pos_right: [x, y],
  pos_cali:  [x, y],
  height:    height,
  width:     width
)
Ändern der Geschwindigkeit vom Zeichen
default=10
langsam=1
Werte über 10 sind möglich aber können zu übersprungenen Steps führen, die die Zeichnung zerstören
VPlotter.printSpeed(int [1-10-∞])