- 3D-Druck Einstieg und Tipps         
Seite 5 von 6 ErsteErste ... 3456 LetzteLetzte
Ergebnis 41 bis 50 von 51

Thema: Rechenkette? / Winkelberechnung mit Cosinus?

  1. #41
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Bammel,

    1. freut mich und ich werd dann noch ein Bier auf das Wohl deines Roboters trinken.

    2. versteh ich nicht, könntest du das vielleich aufmalen?

    grüsse,
    Hannes

  2. #42
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    bild...

    könnte mir nur vorstellen das das ganze mit den katheten und hyputinosen zusammen hängt das sich das vllt verschiebt.

    was ich nochmal testen wollte ein poti zum einstellen der abstände einzubinden. so kann ich sehen wann sich welcher winkel wie verhält.

    edit: hab mal ein poti eingebaut. um den abstand verändern zu können und dann live zu beobachten was passiert. für die höhe soll auchnoch eins eingebaut werden. aber das kommt morgen. erstmal ist es schon sehr geil zu sehen das die idee hinter dem ganzen so funktioniert wie ich es mir erhofft habe.

    zu dem problem: erste erkenntnis: bei einer höhe von 50 geht der knie-winkel nie kleiner als 90°. kann es daran liegen das dann die seitenbezeichnungen nicht mehr passen. den c ist ja immer die hypotinuse und die ist ja iemmr die längste seite im dreieck. oder irre ich mich? wenn das so ist wie kann ich das umsetzten das es mir keine probleme bereitet? erste idee von mir wäre ne abfrage zu machen wenn der winkel kleiner als 90° ist, die größenverhältnisse zu tauschen und neu zu berechnen so das es wieder hinkommt.

    gute nacht
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fehlstellung.jpg  

  3. #43
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Ah,

    das ist kein Problem, das macht der Hund vom Nachbarn auch immer. Das ist ein natürliches Bedürfnis.

    Nein im Ernst: Dis wird dann 114 und der Kniewinkel 95°.
    Welcher Code produziert denn diesen Fehler. Ich will nicht im alten Code von früher herumsuchen, du hast den ja inzwischen geändert.

    Die veränderte Höhe ändert nichts daran, dass DIS die Hypothenuse im blauen Dreieck ist , und dass das Beindreieck ein allgemeines Dreieck ist. Es brauchen keine Bezeichnungen verändert werden.

    grüsse,
    Hannes

  4. #44
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    habs nochmal genau durchgeschaut bei folgenden daten geht das bein hoch:
    Hoehe = 50
    Abstand = 97

    bei abstand = 98 bleibt es noch unten und verhält sich so wie es soll

    code ist folgender:
    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 19200
    $framesize = 64
    $swstack = 64
    $hwstack = 64
    Config Timer1 = Timer , Prescale = 1                        'timer für Servos
    Enable Timer1
    Timer1 = 56320
    Config Portc = Output
    Portc.2 = 0                                                 'hier hängt servo1
    Portc.3 = 0                                                 'hier hängt servo2
    Portc.4 = 0                                                 'hier hängt servo3
    Portc.5 = 0                                                 'hier hängt servo4
    
    Config Pinc.0 = Input                                       ' Port C.0 Ausgang
    Config Pinc.1 = Input
    
    On Timer1 Servoirq                                          'servo
    
    Config Adc = Single , Prescaler = 64 , Reference = Avcc
    
    Start Adc
    
    Enable Interrupts
    
    Declare Sub Berechnung
    
    Dim Kanal As Byte
    Dim Servo(4) As Word                                        'links: 63200, mitte 60000, rechts 56800
    
    Dim Hoehe As Byte
    Dim Abstand As Byte
    
    Dim Wert1_a As Single
    Dim Wert1_b As Word
    
    Dim Hoehe_q As Word
    Dim Abstand_q As Word
    Dim Dis_q As Word
    Dim Dis As Byte
    
    
    Dim Knie_wi As Byte
    Dim Kniea As Word
    Dim Knieb As Word
    
    Dim Knie_zw_a As Word
    Dim Knie_zw_b As Word
    Dim Knie_zw_c As Word
    Dim Knie_zw_d As Integer
    Dim Knie_zw_e As Single
    Dim Knie_zw_wi As Single
    
    Dim Hufta_zw_a As Single
    Dim Hufta_zw_b As Single
    Dim Hufta_wi As Byte
    
    Dim Huftb_zw_a As Word
    Dim Huftb_zw_b As Word
    Dim Huftb_zw_c As Word
    Dim Huftb_zw_d As Integer
    Dim Huftb_zw_e As Single
    Dim Huftb_zw_wi As Single
    Dim Huftb_wi As Byte
    
    Dim Huft_wi As Byte
    Dim Hufta As Word
    Dim Huftb As Word
    
    
    Const Oberschenkel = 67
    Const Unterschenkel = 87
    Const Oberschenkel_q = 4489
    Const Unterschenkel_q = 7569
    
    
    Hoehe = 50
    Abstand = 100
    Call Berechnung
    Servo(3) = 60000
    Servo(4) = 60000
    Wait 3
    
    Do
    
    Wert1_b = Getadc(0)
    Waitus 50
    
    Wert1_a = 150 / 1024
    Abstand = Wert1_a * Wert1_b
    
    Call Berechnung
    
    
    Loop
    
    Servoirq:
    If Kanal = 0 Then
       If Portc.2 = 0 Then                                      'wenn port low
          Timer1 = Servo(1)                                     'dann timer auf entsprechende verzögerung
          Portc.2 = 1                                           'und port anschalten
       Else                                                     'das hier passiert erst bei dem darauf folgenden interrupt
          Portc.2 = 0                                           'dann port wieder ausschalten
          Incr Kanal                                            'und den nächsten kanal bearbeiten
       End If
    End If
    If Kanal = 1 Then
       If Portc.3 = 0 Then
          Timer1 = Servo(2)
          Portc.3 = 1
       Else
          Portc.3 = 0
          Incr Kanal
       End If
    End If
    If Kanal = 2 Then
       If Portc.4 = 0 Then
          Timer1 = Servo(3)
          Portc.4 = 1
       Else
          Portc.4 = 0
          Incr Kanal
       End If
    End If
    If Kanal = 3 Then
       If Portc.5 = 0 Then
          Timer1 = Servo(4)
          Portc.5 = 1
       Else
          Portc.5 = 0
          Incr Kanal
       End If
    End If
    
    If Kanal = 4 Then
      Timer1 = 21300                                            '54016  eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
      Kanal = 0
    End If
    Return
    
    '------------------------------------------
    
    Sub Berechnung
    
    If Hoehe > 110 Then Hoehe = 110
    If Abstand < 37 Then Abstand = 37
    Hoehe_q = Hoehe * Hoehe
    Abstand_q = Abstand * Abstand
    Dis_q = Hoehe_q + Abstand_q
    Dis = Sqr(dis_q)
    
    
    '-------------- Knie ----------------------
    
    Knie_zw_a = Dis_q - Unterschenkel_q
    Knie_zw_b = Knie_zw_a - Oberschenkel_q
    
    Knie_zw_c = Unterschenkel * Oberschenkel
    Knie_zw_d = -2 * Knie_zw_c
    
    Knie_zw_e = Knie_zw_b / Knie_zw_d
    Knie_zw_wi = Acos(knie_zw_e)
    
    Knie_wi = Rad2deg(knie_zw_wi)
    
    If Knie_wi < 45 Then Knie_wi = 45
    If Knie_wi > 180 Then Knie_wi = 180
    Kniea = 6400 / 180
    Knieb = Kniea * Knie_wi
    Servo(2) = 63200 - Knieb
    
    '-------------- Hüfte a ---------------------
    
    Hufta_zw_a = Hoehe / Dis
    Hufta_zw_b = Acos(hufta_zw_a)
    
    Hufta_wi = Rad2deg(hufta_zw_b)
    
    '-------------- Hüfte b ---------------------     alpha = acos((ober² + dis² - unter²)/(2·ober·dis))
                                                     'alpha = acos((ober² - unter² - dis²) / (-2 * ober * dis))
    
    Huftb_zw_a = Oberschenkel_q + Dis_q
    Huftb_zw_b = Huftb_zw_a - Unterschenkel_q
    
    Huftb_zw_c = Oberschenkel * Dis
    Huftb_zw_d = 2 * Huftb_zw_c
    
    Huftb_zw_e = Huftb_zw_b / Huftb_zw_d
    Huftb_zw_wi = Acos(huftb_zw_e)
    
    Huftb_wi = Rad2deg(huftb_zw_wi)
    
    
    Huft_wi = Hufta_wi + Huftb_wi
    
    If Huft_wi < 55 Then Huft_wi = 55
    If Huft_wi > 180 Then Huft_wi = 180
    Hufta = 6400 / 180
    Huftb = Hufta * Huft_wi
    Servo(1) = 56800 + Huftb
    
    Print "----------------------------------"
    Print
    Print "Knie_wi       " ; Knie_wi
    Print
    Print "Abstand       " ; Abstand
    Print "adc           " ; Wert1_b
    Print "huft_wi       " ; Huft_wi
    Print
    
    
    End Sub
    
    End
    EDIT: hab gerade noch ein poti für die höhe eingebaut. und ich muss feststellen sobald der kniewinkel kleiner als 90° werden würde geht das bein in fehlstellung. aber ich glauber nur der unterschenkel. dieser stellt sich dann immer in den 180° winkel

    mfg bammel

  5. #45
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Hallo,

    der Code, den du gepostet hast, hat der den Fehler produziert? Da ist ja hoehe 50, Abstand 100. Wenn das nicht exakt der Code ist, der den Fehler produziert hat, dann tu ich mit kein Kreuzkompilieren an.

    Aber andere Frage: Was ist denn der Argumentbereich und der Wertebereich der Ergebnisse von Bascom acos?
    Wenn ich mit hoehe 80 Abstand 97 rechne, dann ist das Ergebnis acos(+.015) = 89°. Teste doch in Bascom acos(+.015), ob das dort auch so ist.

    grüsse,
    Hannes

  6. #46
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    ja der code ist der!!! ja die hoehe und abstand sind erstaml an anfang gegeben dann wird nurnoch der abstand durch das poti (AD-Wandler) verändert!


    EDIT:
    änderunegn in der knieberechnung:
    Code:
    '-------------- Knie ----------------------
    
    Knie_zw_e = 0.015
    Knie_zw_wi = Acos(knie_zw_e)
    
    Knie_wi = Rad2deg(knie_zw_wi)
    
    If Knie_wi < 45 Then Knie_wi = 45
    If Knie_wi > 180 Then Knie_wi = 180
    Kniea = 6400 / 180
    Knieb = Kniea * Knie_wi
    Servo(2) = 63200 - Knieb
    das ergebnis ist dann wie es sein sollte 89°

  7. #47
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    OK, das kann ich ohne Hardware nicht nachvollziehen. Macht nix.

    Was ergibt in Bascom acos(+.015) ? Und was ergibt die Umrechnung genau davon in Grad?

    Hannes

  8. #48
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    siehe edit im vorherigen post

    edit: was mir grade einfällt gibt es nicht ein programm (simulation??) in der ich das ganze auch virtuel machen könnte um es mal bildlich zu haben. sowas könnte ich mir dann leichter vorstellen. udn evtl so auch schneller fehler finden.

  9. #49
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Aha,

    da steht ja inzwischen was: und es liegt also nicht am Bascom.
    Inzwischen hab ich deinen Code durchgesehen, und ich finde keinen Fehler. Da kann ich nur empfehlen, nach jeder Zeile einen Test - Print befehl zu schreiben, und mit dem Taschenrechner mitrechnen, bis es abweicht. Wahrscheinlich steht irgendwo etwas anderes als beabsichtigt und beim Lesen sehen wir immer das was beabsichtigt war.

    wünsche viel Erfolg und
    grüsse,
    Hannes

  10. #50
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    okay werde also alles aml gründlich durchforsten.. nun geh ich aber erstmal ins kino. star trek schaun

    werde mich dann morgen mal dran machen.

    mfg Bammel

Seite 5 von 6 ErsteErste ... 3456 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test