Jump to content

saschaho

Members
  • Gesamte Inhalte

    13
  • Benutzer seit

  • Letzter Besuch

saschaho's Achievements

Newbie

Newbie (1/14)

0

Reputation in der Community

  1. Schließe doch 2 oder 3 Taster über Dioden zusammen, dann hast du noch 4 Möglichkeiten mehr. Zur Not Schottky-Dioden nehmen. Kannst ja dann die Zustände über "and" abfragen. Sascha
  2. Wie geht denn das? Wie kann man den die Sektion "L" unter Projekte erstellen? Sascha
  3. Sorry, meinte das Step Down Power Supply Sascha
  4. 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
  5. Die Kollimatorlinse kostet auch wahrscheinlich das Hundertfache Ich will aber noch an der "Verweildauer" bei kleinen Steps arbeiten. Sascha
  6. @AuronX Der Rahmen um meinen Namen ist genau 38mm. Die Linien des Rahmens haben 1mm Abstand zueinander. Die Positionierung ist wirklich sehr exakt. Sascha
  7. 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( 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( 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
  8. 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]]
  9. @borg Den Sinn hatte ich verstanden. Wenn ich das set jedoch in die def posi(x,y) reinschreibe ändert sich nichts. Schreibe ich es hinter js.register_callback(js.CALLBACK_PRESSED, cb_pressed) bleibt das Proggi im wait stehen. Mit time() geht´s ganz gut. Danke nochmals Sascha
  10. @borg Mit event läuft´s nicht, die Schleife bleibt stehen, aber mit time.sleep(0.1) geht´s jetzt. Das war es also.... Danke für die Hilfe Sascha
  11. @batti Habe die Aufrufe aus der Schleife rausgenommen. .... js.register_callback(js.CALLBACK_ANALOG_VALUE, posi) js.register_callback(js.CALLBACK_PRESSED, cb_pressed) print "ready" while br == 0: dc.set_velocity(sp) # speed servo.set_position(0, st) # Set position print str(sp), str(st) .... Ist aber wie gehabt, der print-Befehl zeigt mir die umgerechneten Joystickwerte aber Motor und Servo reagieren nicht :'(. ???
  12. Die callbacks werden ausgeführt. Mit "print str(sp), str(st)" werden die sich ändernden Werte ja angezeigt.
  13. Hallo Tinkerforge Gemeinde, nachdem ich diese tollen Klötzchen entdeckt hatte, bin ich nun auch Fan geworden und bastle an den ersten Versuchen. Bin jetzt nicht die große Leuchte im Programmieren, aber es geht voran. Jetzt habe ich alledings ein seltsames (für mich) Problem. Ich bastle ein ferngesteuertes Auto mit einigen Features. Hier mal der Phyton-Code in Auszügen: ... from tinkerforge.ip_connection import IPConnection from tinkerforge.brick_master import Master from tinkerforge.bricklet_joystick import Joystick from tinkerforge.brick_dc import DC from tinkerforge.brick_servo import Servo sp = 0 st = 0 br = 0 def posi(x,y): global sp, st sp = int((-32767+y*16)/2) st = int(4095-x*2) def cb_pressed(): global br br = 1 if __name__ == "__main__": ipcon = IPConnection(HOST, PORT) # Create IP connection to brickd dc = DC(UID_DC) # Create device object ipcon.add_device(dc) # Add device to IP connection master = Master(UID) # Create device object ipcon.add_device(master) # Add device to IP connection js = Joystick(UID_JS) # Create device object ipcon.add_device(js) # Add device to IP connection servo = Servo(UID_SERVO) # Create device object ipcon.add_device(servo) # Add device to IP connection js.set_debounce_period(200) js.set_analog_value_callback_period(50) dc.set_pwm_frequency(2000) # Use PWM frequency of 10khz dc.set_drive_mode(1) # use 1 = Drive/Coast instead of 0 = Drive/Brake dc.enable() dc.set_acceleration(65000) # Slow acceleration servo.set_output_voltage(5500) servo.enable(0) print "ready" while br == 0: js.register_callback(js.CALLBACK_ANALOG_VALUE, posi) js.register_callback(js.CALLBACK_PRESSED, cb_pressed) dc.set_velocity(sp) servo.set_position(0, st) print str(sp), str(st) ipcon.destroy() Wobei der Servo und der DC-Brick nicht reagieren. Der print-Befehl zeigt mir beide Variablen an und sie reagieren auch auf den Joystick. Trage ich feste Werte statt z.b. sp ein geht´s ebenfalls. Auch wenn ich die beiden Zeilen dc.set_velocity(sp) servo.set_position(0, st) in die Funktion posi(x,y) schreibe funktioniert es. Will ich aber nicht. Für Hilfe wäre ich dankbar, da ich schon länger an dem Problem tüftle. Sascha
×
×
  • Neu erstellen...