Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Uhlhorn

Pages: [1] 2 3 ... 6
1
Moin,

ist es eigentlich möglich, während einer Bewegung ein neues Ziel zu setzen, so dass der Motor gleich zum neuen Ziel weiterläuft?

Beispiel:
Ich schicke den Motor zur Position 30.000:
Code: [Select]
stepper.set_target_position(30000)
Während er unterwegs ist, ändert sich das Ziel auf 10.000:
Code: [Select]
stepper.set_target_position(10000)
Wenn der Motor noch unter 10.000 war, soll er nun so weiter laufen, als wenn von vorn herein 10.000 das Ziel gewesen wäre, also bei 10.000 mit der angegebenen Verzögerung stoppen.

Wenn der Motor schon zu weit war, soll er mit der angegebenen Verzögerung stoppen und in die andere Richtung auf 10.000 zurück laufen.

Ist das möglich?

Falls nicht: kann das bitte in die API eingebaut werden? Es gäbe eine Menge Anwendungen, wo man das gut gebrauchen könnte.

Im Falle des Umkehrens kann man das ja mit ein paar Zeilen Code selbst erledigen, weil man in diesem Fall ja sowieso halten muss. Aber für den Fall des Weiterlaufens muss man ihn unnötig anhalten um ihn anschließend erneut los laufen zu lassen. Besser wäre es, er könnte das neue Ziel ohne Unterbrechung anlaufen.

2
Ich habe inzwischen einen neuen Sensor bei Euch bestellt. Und auch dieser zeigt völlig falsche Werte an. Auch hier hat die Luftfeuchtigkeit eine Abweichung von etwa 20 % (also ca. 10 Prozentpunkte)! Und auch die Temperatur ist um mehrere Grad daneben!

Die Genauigkeit der Temperatur und der Luftfeuchtigkeit, die Ihr in den technischen Spezifikationen auf Eurer Website angebt, werden nicht mal annähern erreicht!
https://www.tinkerforge.com/de/shop/bricklets/air-quality-bricklet.html

Also, irgend etwas stimmt mit dem Air Quality Bricklets nicht!

Ansonsten bin ich sehr begeistert von Euren Geräten. Ich bestelle immer wieder und wieder bei Euch! :-) (Lob muss ja auch mal sein.)

3
Firmware habe ich schon neu aufgespielt. Und es liefert nur noch einen Nullwert auf allen Kanälen. Die Status-LED lässt sich aber noch einstellen und die Null-Daten fließen auch. Im BrickViewer läuft der rote Strich nach rechts, nachdem man den Graphen gelöscht hat.

Daraus kann man wohl ableiten, dass der Prozessor noch funktioniert, oder?
Dann kommt ja eigentlich nur noch der Sensor, der BME680, infrage.

Vielleicht ist das ja auch nur zufällig zu diesem Zeitpunkt kaputt gegangen. Der Sensor hatte ja schon vorher eine Macke: er hat 35 % Luftfeuchtigkeit angezeigt, während meine beiden anderen Hygrometer 46…47 % anzeigten. Das ist eine Abweichung von fast 20 %, er sollte aber laut Homepage eigentlich nur ±3 % haben.

Ich hatte es mit einem HomeMatic-Sensor und einem mechanischen Hygrometer aus meinem Humidor verglichen.

4
Es ist im Betrieb außer Funktion gegangen. Das Kabel hatte ich gar nicht ab. Und die Pins sind auch alle in Ordnung, ich bin auch nicht so ein Grobmotoriker. ;-)

Ich hatte etwas am Stapel gesteckt und dafür halte ich den Stapel immer mit 2 Fingern fest. Ich drücke dafür den Daumen und Zeigefinger auf die weißen Kontakte des Stapels, damit sich die Bricks nicht voneinander lösen (sind bei mir meistens nur ohne Verschraubung gesteckt). Und dabei hatte ich den Eindruck, das die Bricks etwas weiter zusammengerutscht sind – sie vorher also nicht richtig zusammengesteckt waren.

Möglicherweise wurde also die Elektronik beschädigt. (Ansonsten hat kein weiteres Modul einen Schaden davon getragen, ich habe inzwischen alle betroffenen Module geprüft.)

Ich habe mir heute Nacht mal den Schaltplan genauer angesehen. Der Brick wird mit 5 V und 3,3 V versorgt. Wenn jetzt durch einen schief gesteckten Brick eine Spannung fehlt, könnte es zu einer unzulässigen Spannung an einem Pin des ARM-Prozessors kommen und diesen beschädigen. Allerdings bin ich in die Materie noch nicht tief genug eingestiegen, um das Problem wirklich in aller Gründlichkeit zu erforschen. Das könnte aber das Problem sein.

Jedenfalls sollte der Prozessor mit einer Schutzschaltung versehen werden, dass so etwas nicht passieren kann. Vielleicht kann man das ja für eine Version 2 des Bricklets einplanen. ;-)

5
Moin,

mein Air Quality Bricklet zeigt seit heute nur noch eine Nulllinie an.
Woran kann das liegen?

6
Anfängerfragen und FAQ / Verbesserungsvorschlag, Produktwunsch
« on: March 13, 2019, 22:09:08 »
Produktwunsch: TinkerForge könnte vielleicht ein farbiges HiDPI-Display anbieten, so wie das in diesem USB-Messgerät (siehe Bild).

Oder auch E-Ink-Displays, so wie in den beiden anderen Bildern. So was wäre ziemlich geil! :-)

Bilder: Aliexpress, Waveshare


7
Ah, okay, verstehe. Das ist nachvollziehbar.

Wir können ein Beispiel machen welches diese Funktion implementiert.
Das wäre wohl eine große Hilfe, zumindest für Anfänger wie mich. :-)

Bei kleinen Texten sehen die True-Type-Fonts ziemlich bescheiden aus, wie ich inzwischen sehe. Dafür müsste man dann doch ein HiRes-Displays haben.

Ich muss mal schauen, wie ich das mache. Vielleicht das HDMI-Display – davon kann man aber leider nur eins anschließen. Oder für jeden Wert ein eigenes OLED.

8
Ah, okay. Das ist natürlich ein valides Argument. Dass kann ich einsehen. :-)

Kann man vielleicht nicht nur die Funktion in die API aufnehmen, die auf einen externen True-Type-Font verweist? Also so in der Art:

BrickletLCD128x64.draw_TTCtext(position_x, position_y, font, size, index, encoding, color, text)
(Also angelehnt an PIL.ImageFont.truetype)


Wobei font ein String mit Pfad und Namen der TTC-Datei ist:
font = "Fonts/Menlo.ttc"

So was müsste doch gehen, oder?

Und kann man den Speicher vielleicht auch vergrößern?

9
Ich muss noch die ganzen LC128x64 draw_*()-Funktionen auf das OLED 128x64 portieren.
Ich teste gerade das Display. Bitte nicht so einen Legotext! Das ist ja grausam! Lieber eine schöne Schrift, so, wie ich es hier im OLED gemacht habe. Ich mache Euch auch gerne die Bitmaps dafür. ;-)

10
Ja, werde ich zurücksenden. Kommt die Tage …

Das mit dem Kühlkörper ist jetzt nicht so dramatisch, weil ich den Schrittmotor im Moment nur für einen Zeiger verwende. Ich brauche keine Drehmomente und fahre ihn mit entsprechend geringem Strom.

Kann man ihn nicht mit dem gleichen Kleber wieder ankleben? Ansonsten verwende ich meine Spange und einen Tropfen Wärmeleitpaste.

11
Ich habe die Teile heute erhalten und gleich getestet:

Der neue Stepper läuft nun einwandfrei in allen (getesteten) Variationen, also auch mit dem alten Master. Wollt Ihr den alten Stepper zurück haben, um nach der Ursache zu suchen zu können?

Auch beim neuen Stepper ist der Kühlkörper wieder abgebrochen. Dabei habe ich so aufgepasst ihn möglichst nicht zu berühren. Doch ich bin wohl beim ersten Herausziehen des Steckers doch ganz leicht dagegen gekommen. Jedenfalls war er plötzlich lose.

Der Kleber, mit dem der Kühlkörper befestigt ist, haftet nicht am Aluminium. Vielleicht hilft es, wenn man das Aluminium vorher mit eine Feile oder Sandpapier aufraut, um eine größere Oberfläche zu erhalten?

Egal, ich habe mir eine Haltespange konstruiert (siehe Foto). Falls jemand Interesse daran hat, ich stelle die Fusion-360-Datei oder eine STL gerne zur Verfügung. ;-)

12
Oh, danke schön. :-) Ich werde es gleich testen, wenn es ankommt. Da bin ich auch gespannt. ;-)

13
Mal sehen, ob das funktioniert. :-)

Danke für die CAD-Daten, die sind bei solchen Sachen immer eine große Hilfe!

14
Ich würde erwarten das du auch mit einem […]
ohne den ganzen anderen Code das Problem erzeugen kannst?
Das müsste ich ausprobieren.

Am einfachsten wäre es ja noch wenn irgendein Hardwaredefekt vorliegen würde, aber mir fällt nichts ein was diese Symptome erzeugen könnte.
Ich bin inzwischen am überlegen, ob ich noch einen Silent Stepper und einen Master bestelle, nur um einen einzelnen Hardwaredefekt sicher ausschließen zu können.

Von dem ganzen Umgestecke ist mir jetzt auch noch der Kühlkörper abgegangen. :-( Kann man den mit irgend etwas wieder ankleben? Ansonsten nehme ich Wärmeleitpaste für Prozessoren und eine mit dem 3D-Drucker gedruckten Haltespange. Das müsste ja auch funktionieren.

15
Auch mit 30 Sekunden ändert sich nichts daran. Ich habe jetzt zusammen mit dem Silent Stepper und dem Master (sonst nichts) dieses Programm benutzt:
Code: [Select]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# python 3

HOST = "localhost"
PORT = 4223
UID_r = "Ehv" # Change XYZ to the UID of your Rotary Encoder Bricklet 2.0
UID_s = "5VH7xb" # Change XXYYZZ to the UID of your Silent Stepper Brick


from tinkerforge.ip_connection import IPConnection
from tinkerforge.brick_silent_stepper import BrickSilentStepper

from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_rotary_encoder_v2 import BrickletRotaryEncoderV2

from random import *
import time

alt = 0
Zeitpunkt = time.time() + 10.1
ZeitDiff = time.time() - Zeitpunkt

if __name__ == "__main__":
    ipcon = IPConnection() # Create IP connection
    re = BrickletRotaryEncoderV2(UID_r, ipcon) # Create device object
    ss = BrickSilentStepper(UID_s, ipcon) # Create device object

    ipcon.connect(HOST, PORT) # Connect to brickd
    ipcon.set_timeout(30)
    # Don't use device before ipcon is connected

    ss.set_motor_current(850)  # 800mA
    ss.set_minimum_voltage(6000)
    ss.set_step_configuration(ss.STEP_RESOLUTION_64, True)  # 1/8 steps (interpolated)
    ss.set_max_velocity(4000)  # Velocity 2000 steps/s

    # Slow acceleration (500 steps/s^2),
    # Fast deacceleration (5000 steps/s^2)
    ss.set_speed_ramping(1000, 1000)

    ss.set_basic_configuration(1, 250, 10, 1000, 65535, 65534, 65535, 1)
    #ss.set_basic_configuration(1, 250, 10, 1000, 65535, 65536, 65536, 1)

    while 1:
        # Get current count without reset
        #count = re.get_count(False)

        Schritte = round(random()*100000)+10000
        Richtung = round(random())
        Zeit = round(random()*30+1,1)
        Geschwindigkeit = round(random()*40000)+15000
        Beschleunigung = round(random()*40000)+10000

        if ZeitDiff <= 0:
            if Richtung == 1: # Rechts drehen
                ss.full_brake()
                ss.enable()  # Enable motor power

                print("Schritte: " + str(Schritte))
                if Richtung == 1:
                    print("Richtung: rechts")
                else:
                    print("Richtung: links")
                print("Zeit:     " + str(Zeit))
                print("Geschwindigkeit: " + str(Geschwindigkeit))
                print("Beschleunigung: " + str(Beschleunigung) + "\n")

                ss.set_speed_ramping(Beschleunigung, Beschleunigung)
                ss.set_max_velocity(Geschwindigkeit)
                ss.set_steps(Schritte)  # Drive „Schritte“ steps forward
                Zeitpunkt = time.time()+Zeit

            if Richtung == 0: # Links drehen
                ss.full_brake()
                ss.enable()  # Enable motor power

                print("Schritte: " + str(Schritte))
                if Richtung == 1:
                    print("Richtung: rechts")
                else:
                    print("Richtung: links")
                print("Zeit:     " + str(Zeit))
                print("Geschwindigkeit: " + str(Geschwindigkeit))
                print("Beschleunigung: " + str(Beschleunigung) + "\n")

                ss.set_speed_ramping(Beschleunigung, Beschleunigung)
                ss.set_max_velocity(Geschwindigkeit)
                ss.set_steps(-Schritte)  # Drive „Schritte“ steps backward
                Zeitpunkt = time.time()+Zeit

        ZeitDiff = Zeitpunkt-time.time()
        #print("ZeitDiff: "+str(ZeitDiff))
        #print(" ")

        if ss.get_current_velocity() == 0:
                ss.disable()
                ZeitDiff = -1


    input("Press key to exit\n") # Use input() in Python 3
    ss.disable()
    ipcon.disconnect()

Herausgekommen ist nach einer erfolgreichen Bewegung diese Fehlermeldung: Siehe Screenshot.

Mit dem BrickViewer 2.4.0 beta2 hängt es sich genau so auf. Das Brick kommuniziert nicht mehr mit dem BrickViewer, aber der Motor läuft unverändert weiter.

Pages: [1] 2 3 ... 6