Jump to content

Laserplotter


Recommended Posts

Moin,

 

ich habe den Laserplotter aus der ct "Mach Flott den Schrott" mal nachgebaut.

Die Plotterfläche beträgt ca 40 x 40mm. Die Auflösung beträgt bei mir 53 Steps/mm.

Verwendet habe ich :

Step Down Power Supply

Master-Brick

2 Stepper-Bricks

Dual-Relais Bricklet

20x4 LCD

Python

CorelDraw malings speichere ich als .plt ab. Anschl muss ich nur den "Vorspann" bis zum 1. SP1 entfernen.

Nach Einlesen des Files und Umwandlung der Zeilen in PU, PD ,x und y Koordinaten werden die Fahrzeiten, Laser-On Zeiten und Pausenzeiten berechnet. Ist einiges an Tüftelei, da ja von den Schrittmotoren keine Rückmeldung kommt.

Die Stepper stehen auf 350mA, der 300mW Laser (Vorsicht Klasse 3b) wird über eine regelbare Konstantstromquelle versorgt und über eins der Relais geschaltet. Das 2. Relais schaltet den Lüfter am Beginn ein.

Sonst hat man den Rauch im Strahl.

Da ich nicht die "Leuchte" in Python bin, möchte ich den Code hier nicht veröffentlichen. Auf Nachfrage gibt´s aber selbstverständlich Teile davon und zus. Infos.

Anbei noch 2 Bilder.

 

Grüße

 

Sascha

[[Category:Projekte]]

Foto1.thumb.JPG.3a26276e619635aff79fde6690194c0d.JPG

Foto2.JPG.a0e8e57291ddc9c5e5d6b48421f4bf27.JPG

Link to comment
Share on other sites

Wow, wie krass ist das denn? Tolles Projekt.

 

Was ist das für ein Metallrahmen mit den beiden Schienen in dem der Laser fährt? Wie genau treibst du diesen Schlitten an?

 

Stell es mir gar nicht einfach vor, das alle so genau ineinander greifend hinzubekommen. Das Ergebnis sieht ja recht genau aus. Respekt.

 

Willst du (die Frage kommt von mir ja immer :-D) es vielleicht in die Wiki stellen? Mit ein paar Bildern und mehr Details?

 

So der Phyton-noob kannst du ja nicht sein, wenn dein Laserplotter offensichtlich so gut damit läuft.

 

 

 

 

Link to comment
Share on other sites

Es sieht so aus (geschätzt) als wäre dein Name breiter als 4cm, hast du das Teil in zwei Schritten geplottet?

 

Ansonsten sieht das sehr cool aus.

Übrigens brauchst du beim Veröffentlichen von Code keine Scheu haben ^^ Es funktioniert und bei aller Kritik kann man höchstens selbst lernen ;) (Meine Hoffnung wäre auch, dass ich beim Lesen auch noch was lerne ^^) Ist aber natürlich deine Sache ^^

Link to comment
Share on other sites

Die Hardware ist nicht so schwer nachzubauen.

Es sind 2 Schlitten aus 2 samsung DVD-Rom Laufwerken.

Die Schlitten bewegen die Laser in den Laufwerken.

Statt des schwachen Originallasers habe ich auf eine Einheit eine Platte geschraubt (y-Richtung) und an den anderen den roten 300mW Laser gestrapst.

Unter http://www.heise.de/hardware-hacks/projekte/Laserplotter-1351340.html gibt es mehr Infos zur Hardware.

 

Hier also mein Programm:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from __future__ import division

HOST = "localhost"

PORT = 4223

UID = "a4JriVK3qZ8"

UID_step1 ="9p3kGiXvHS3"

UID_step2 ="a4LCLTU6G8m"

UID_rel = "7Fq"

UID_lcd = "8vA"

 

from tinkerforge.ip_connection import IPConnection

from tinkerforge.brick_stepper import Stepper

from tinkerforge.brick_master import Master

from tinkerforge.bricklet_dual_relay import DualRelay

from tinkerforge.bricklet_lcd_20x4 import LCD20x4

 

import time

import string

import math

 

lsr= " "

xur = 0

yur = 0

x = 0

y = 0

al = 0.00

xsp = 0

ysp = 0

xysleep = 0.00

i = 1

fakt = 1.000

sl = 0

xdif = 1090.0

ydif = 1090.0

ms = 70

 

if __name__ == "__main__":

ipcon = IPConnection(HOST, PORT) # Create IP connection to brickd

master = Master(UID) # Create device object

ipcon.add_device(master) # Add device to IP connection

stepperx = Stepper(UID_step1) # Create device object

ipcon.add_device(stepperx) # Add device to IP connection

steppery = Stepper(UID_step2) # Create device object

ipcon.add_device(steppery) # Add device to IP connection

dr = DualRelay(UID_rel) # Create device object

ipcon.add_device(dr) # Add device to IP connection

lcd = LCD20x4(UID_lcd) # Create device object

ipcon.add_device(lcd) # Add device to IP connection

 

lcd.backlight_on()

fobj = open("C:\\Dokumente\\Plots\\test1.plt", "r")

content = fobj.read()

fobj.close()

dataset = content.split("\n")

lcd.write_line(0, 0, "Achtung Laser Kl. 3b")

dr.set_state(True, False)

stepperx.enable()

stepperx.set_speed_ramping(600,600)

stepperx.set_motor_current(350)

stepperx.set_step_mode(8)

stepperx.set_max_velocity(400) # Velocity 400 steps/s

steppery.enable()

steppery.set_speed_ramping(600,600)

steppery.set_motor_current(350)

steppery.set_step_mode(8)

steppery.set_max_velocity(400) # Velocity 400 steps/s

stepperx.set_current_position(0)

steppery.set_current_position(0)

stepperx.set_target_position(1090)

steppery.set_target_position(1090)

time.sleep(4)

stepperx.set_current_position(0)

steppery.set_current_position(0)

xur = 0.0

yur = 0.0

for data in dataset:

arr = data.split(" ")

if arr[0] <> "SP1;" and arr[0] <> "SP0;":

lsrx = arr[0]

lsr = lsrx[0]+lsrx[1]

if len(lsrx) == 3:

x = int(lsrx[2])

elif len(lsrx) == 4:

x = int(lsrx[2]+lsrx[3])

elif len(lsrx) == 5:

x = int(lsrx[2]+lsrx[3]+lsrx[4])

elif len(lsrx) == 6:

x = int(lsrx[2]+lsrx[3]+lsrx[4]+lsrx[5])

elif len(lsrx) == 7:

x = int(lsrx[2]+lsrx[3]+lsrx[4]+lsrx[5]+lsrx[6])

lsry = arr[1]

if len(lsry) == 2:

y = int(lsry[0])

elif len(lsry) == 3:

y = int(lsry[0]+lsry[1])

elif len(lsry) == 4:

y = int(lsry[0]+lsry[1]+lsry[2])

elif len(lsry) == 5:

y = int(lsry[0]+lsry[1]+lsry[2]+lsry[3])

elif len(lsry) == 6:

y = int(lsry[0]+lsry[1]+lsry[2]+lsry[3]+lsry[4])

 

xdif = abs(xur-x)

ydif = abs(yur-y)

if xdif == 0:

xdif = 1

if ydif == 0:

ydif = 1

if xdif > ydif:

fakt = xdif/ydif

ysp = int(ms / fakt)+1

xsp = ms

xysleep = (xdif/ms)+0.4

if xdif <= ydif:

fakt = ydif/xdif

ysp = ms

xsp = int(ms / fakt)+1

xysleep = (ydif/ms)+0.4

 

power = stepperx.get_stack_input_voltage()

if lsr == "PD":

dr.set_state(True, True)

time.sleep(0.1)

lcd.write_line(1, 0, "Laser An          ")

lcd.write_line(2, 0, "brennt " + str(x) +" "+ str(y) + "  ")

lcd.write_line(3, 0, "Spannung " + str(power) + " mV ")

 

if lsr == "PU":

lcd.write_line(1, 0, "Laser Aus          ")

lcd.write_line(2, 0, "faehrt " + str(x) +" "+ str(y) + "  ")

lcd.write_line(3, 0, "Spannung " + str(power) + " mV ")

dr.set_state(True, False)

xsp = ms * 8

ysp = ms * 8

xysleep = xysleep / 4

 

print xdif, ydif, x, y, xsp, ysp, xysleep, fakt

stepperx.set_max_velocity(xsp) # Velocity steps/s

steppery.set_max_velocity(ysp) # Velocity steps/s

stepperx.set_target_position(x)

steppery.set_target_position(y)

xur = x

yur = y

time.sleep(xysleep)

dr.set_state(True, False)

time.sleep(0.2)

 

dr.set_state(False, False)

time.sleep(1)

stepperx.set_max_velocity(400) # Velocity 400 steps/s

steppery.set_max_velocity(400) # Velocity 400 steps/s

stepperx.set_target_position(-1090)

steppery.set_target_position(-1090)

lcd.write_line(2, 0, "Ich habe fertig    ")

time.sleep(10)

stepperx.disable()

steppery.disable()

lcd.clear_display()

lcd.backlight_off()

raw_input('Press key to exit\n') # Use input() in Python 3

ipcon.destroy()

 

 

Vor allem an der Umwandlung des Plotfiles in die Einschaltsignale und in die xy Koordinaten habe ich lange getüftelt.

Vielleicht hat da jemand eine elegantere Lösung

 

Sascha

 

Link to comment
Share on other sites

Also von der Genauigkeit her ist das wirklich gut. Wir haben hier einen (60W) Laser Cutter stehen, der ist auch nicht viel genauer! Der Laser ist natürlich ein ganzes Stück besser fokussiert, das würde jetzt hier im Ergebnis den Unterschied machen.

Link to comment
Share on other sites

Also von der Genauigkeit her ist das wirklich gut. Wir haben hier einen (60W) Laser Cutter stehen, der ist auch nicht viel genauer! Der Laser ist natürlich ein ganzes Stück besser fokussiert, das würde jetzt hier im Ergebnis den Unterschied machen.

 

Die Kollimatorlinse kostet auch wahrscheinlich das Hundertfache ;D

Ich will aber noch an der "Verweildauer" bei kleinen Steps arbeiten.

 

 

Sascha

 

Link to comment
Share on other sites

@OT benutze eine Autobatterie :) ist zwar kein Blei Akku aber ähnlich groß ;)

 

So nun aber mal zu dem Projekt. Erzähl doch mal ein paar preisliche Details. Die würden sicherlich nicht nur mich erzählen. Was hast du für die Hardware (ohne TF) denn hingelegt!

Ich kann nur wiederholen, was die anderen gesagt haben. Code kann man immer posten, wenns nur darum geht das man glaubt er sei nicht gut genug. Schließlich kann so noch jemand drüber gucken und vielleicht Sachen verbessern.

 

Also wirklich super! Gratulation!

Link to comment
Share on other sites

Die Laufwerke (wenn man selbst keinen Schrott mehr hat) gibt´s für 13€.

Der Laser kostet so um 25€ + Gehäuse und Linse alles bei http://www.insaneware.de/epages/61714203.sf/de_DE/?ObjectPath=/Shops/61714203/Products/oc300mw.

Holz müsst ihr selber besorgen.

Der Akku ist ein Alter aus meiner USV.

Also, die Kosten halten sich im Rahmen.

 

Sascha

Link to comment
Share on other sites

Wow, wie krass ist das denn? Tolles Projekt.

 

Willst du (die Frage kommt von mir ja immer :-D) es vielleicht in die Wiki stellen? Mit ein paar Bildern und mehr Details?

 

 

Wie geht denn das?

Wie kann man den die Sektion "L" unter Projekte erstellen?

 

Sascha

Link to comment
Share on other sites

Ich glaube das ging irgendwie automagisch. Du musst glaube ich deinem Projekt nur eine Kategorie zuweisen und dann taucht es dort von alleine auf. Ich hab aber auch nciht viel Ahnung von Wiki-Magie ^^

 

Grad mal bei der Wetterstation abgeguckt, ich denke du musst in deinen Artikel nur ganz unten das hier einfügen:

[[Category:Projekte]]

Link to comment
Share on other sites

  • 3 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...