Jump to content

jan

Members
  • Gesamte Inhalte

    500
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    2

Posts erstellt von jan

  1. Hallo,

    2,7V heißt 2,7V. Bitte ein passendes Netzteil wählen. Warum nimmst du nicht ein 12V-Schrittmotor, weniger Spannung und Strom geht immer.
    Manchmal kann auch im Controller einer Spannung eingestellt werden.

    Der "TB6560A-Controller" kann von 10-35V.

    Das "Spiel" ist mit 0,36° angegeben. Wenn du weniger Spiel benötigst, dann eine größere Untersetzung. Ich habe 50:1 genommen. Da gibt es Null Spiel. Aber ja, die Spannung des Riemens hat immer mehr Spiel als der Schrittmotor, da er sich immer leicht durchdrücken / dehnen lässt.

    VG Jan

  2. #!/usr/bin/env python
    # -*- coding: utf-8 -*-  
    
    HOST = "localhost"
    PORT = 4223
    uid_io16 = 'xxx';
    
    import time
    
    from tinkerforge.ip_connection import IPConnection
    from tinkerforge.bricklet_io16 import IO16
    
    i2c_io16_port='a'
    #SCL = Port0
    scl_port=0
    #SDA = Port1
    sda_port=1
    
    #Adresse: 01110000 bis 01110111
    
    def PortWert(bitstring=0, port=0):
        #ermittelt den Wert eines(!) Input-Ports anhand der kompletten Bitmaske
        wert =bitstring & (1<<port)
        wert =wert>>port
        return wert
    
    def send_start():
        #Start: SDA und SCL = high, SCL geht auf low
        io.set_port(i2c_io16_port,(1 << scl_port) | (1 << sda_port))
        io.set_port(i2c_io16_port,(1 << scl_port) | (0 << sda_port))
        io.set_port(i2c_io16_port,(0 << scl_port) | (0 << sda_port))        
        #Start Ende
        
    def send_stop():
        #Stop: SDA und SCL = high, SCL geht auf low
        io.set_port(i2c_io16_port,(1 << scl_port) | (0 << sda_port))
        io.set_port(i2c_io16_port,(1 << scl_port) | (1 << sda_port))
        #Stop Ende
        
    def send_ack():
        #Acknowledge
        io.set_port(i2c_io16_port,(1 << scl_port) | (1 << sda_port))
        io.set_port(i2c_io16_port,(0 << scl_port) | (0 << sda_port))        
        #Acknowledge Ende
    
    def send_dat(daten):
        #Daten
        for i in range(7,-1,-1): 
            #Bit
            io.set_port(i2c_io16_port,(1 << scl_port) | (PortWert(daten, i) << sda_port))
            io.set_port(i2c_io16_port,(0 << scl_port) | (0 << sda_port))
            #Daten Ende                
        send_ack()
    
    if __name__ == "__main__":
        ipcon = IPConnection() # Create IP connection
        io = IO16(uid_io16, ipcon) # Create device object
        ipcon.connect(HOST, PORT) # Connect to brickd   
        # Don't use device before it is added to a connection
        
        #Ports als Ausgang definieren und erstmal low
        io.set_port_configuration(i2c_io16_port, (1 << scl_port) | (1 << sda_port), 'o', False)
        
        send_start()   
        #Adresse 1110000r/w (r/w=1 für Write) ===> Adresse: 0b11100001
        send_dat(0b11100001)    
        #send_dat(0xD9)          #TestMode
        send_dat(0x21)          #turn on oscillator
        send_dat(0x7F)
        send_dat(0b11101111)    #Display volle Helligkeit
        send_stop()
        
        pause=0.05
        #time.sleep(pause)
    
        ipcon.disconnect()

    Das ist der Code von damals mit python. SDA und SCL werden einfach als Ausgang am IO bedient.

    Der Code müsste noch angepasst werden: neues IO-Bricklet, Adresse, etc...

  3. Heute möchte ich euch ein neues Projekt vorstellen. Es dient zur automatischen Ansteuerung eines Drehtellers für Photogrammetrie-Aufnahmen.

    Ziel war es:

    • mind. 80kg Last tragen
    • präzise Ansteuerung
    • einbinden in Workflow

    Der Tisch wurde aus Stabilitätsgründen aus 40x40-Aluprofilen gebaut. Der Drehteller (2mm Aluminium) wird von 20x20-Aluprofilen gestützt. Als Antrieb wird ein Schrittmotor mit anschließender 50:1 Untersetzung verwendet. Der Riemen liefert noch einmal eine Untersetzung von 72:14.

    Für den Schrittmotor wird der "alte" Stepper-Brick verwendet, weil damit einfach höhere Stromstärken (2,2A) möglich sind. Dazu kommen 36V.
    Auf den Brick ist ein Lüfter montiert, der softwareseitig mit anspringt, sobald der Stepper "enable" erhält. Dies ist auch notwendig.

    Die Winkelauflösung beträgt somit 0,042' (Bogenminute) oder 2,5'' (Bogensekunde). Selbst nach mehreren Drehungen ist optisch kein Schrittverlust bemerkbar. Und Bilder - aufgenommen in verschiedenen Umdrehungen - liegen perfekt übereinander.

    Die Steuerung übernimmt der gute alte RED-Brick mittels python-Script. Auf dem Bild ist noch das erste Interface zusehen: Start- und Stoppknopf, Einstellungen (Rotary Encoder) für Bildanzahl und Pause in Millisekunden, sowie manuell "drehen" (vor- und rückwärts).

    Nachdem mehrere Änderungen an der Steuerung durchgeführt werden sollten, wurde sich entschieden, nicht noch mehr "bunte Knöpfchen" zu ergänzen, sondern auf das 128x64-LCD-Bricklet mit Touch zu setzen. Es können nun "Einstellungen" direkt vorgenommen werden, ohne jedes Mal den Quellcode anzufassen. Hinzugekommen ist noch das "Dauerdrehen mit variablen Geschwindigkeiten". Außerdem spart es wieder einen Master-Brick ein. Achja, der Distanzsensor dient dafür, dass man den Abstand Kamera <-> Objekt bequem messen kann.

    Da noch genug "Tabs" auf dem Display übrig sind, können noch weitere zukünftige Funktionen / Einstellungen implementiert werden.

    Das Industrial Quad Relay Bricklet löst direkt die Kamera aus (Port 0 => True --> Focus; Port 0 und 1 => True --> Shutter). Somit können x Bilder je Umdrehung aufgenommen, Kamera neu positioniert und erneut aufgenommen werden.

    Video Display

    Video 2

    Die ersten Resultate könnt ihr hier sehen: sketchfab

    Mein Favorit ist bis jetzt die Blaubeere. Die angegebenen 432 Einzelaufnahmen setzen sich noch einmal jeweils aus einem Fotostacking über je 7 Bilder zusammen. Größere Objekte sind bereits geplant.

    Display v1.0.jpg

    untendrunter.jpg

    • Like 1
  4. Kann man an den Isolator Bricklet jeweils ein 2Meter-Kabel stecken oder ist die Gesamtlänge auf 2m beschränkt?

    Kann ich am Ausgang des Isolator Bricklet ein 7p-10p-Kabel anschließen und ein dann "altes" Bricklet anschließen? Geht anscheinend nicht. Habe ich getestet.

    Danke

  5. Hallo,

    für das Rotary Encoder Bricklet wünsche ich mir eine rp.set_count(position int). Dies würde vieles vereinfachen. Beim Stepper Bricklet ist diese Funktion eine riesige Hilfe (BrickletSilentStepperV2.set_current_position(position)).

    Das Rotary Encoder Bricklet könnte ich dann einfacher für eine Menü-Navigation verwenden, gerade weil nach oben hin dann einfach gesagt werden kann

    if rp.get_count()>10: rp.set_count(10)

    Vielen Dank

    Jan

  6. Was ich mir noch als ein sehr universelles und notwendiges Bricklet wünsche, wäre eins an dem I2C und/oder SPI herausgeführt ist. Wie das One Wire Bricklet-Bricklet.

    Dann könnte man einfache Sensoren oder auch Displays direkt anschließen und verarbeiten.

    Noch eine praktische Bibliothek dazu und Tinkerforge ist wieder um viele nutzbare externe Sensoren und Displays "reicher".

  7. Hi Tipsy,

    zu 1.) die Stapel können nur mit PoE versorgt werden. NICHT selber einen anderen Stapel versorgen. Es ist immer ein PoE-Switch (oder Injektor) notwendig.

    zu. 2.) du kannst so viele Stapel mit PoE an einen PoE-Switch anschließen, wie dieser PoE-Ports hat. Die Leistung des Switches sollte immer ausreichen.

    zu. 3.) man kann bestimmt mit zwei RED-Bricks und Ethernet-Extension zwei Stapel mit Netzwerkkabel verbinden. Da muss aber bestimmt noch etwas in Linux konfigueriert werden. Mehrere Stapel können mit WLan verbunden werden. Einer ist dann der Access-Point die anderen die Clients.

    zu. 4.) Die Leitungslängen sind durch die Netzwerkspezifikationen vorgegeben: ca. 100m. Bei PoE definitiv weniger.

     

    Viele Grüße

    Jan

×
×
  • Neu erstellen...