- SF800 Solar Speicher Tutorial         
Seite 35 von 136 ErsteErste ... 2533343536374585135 ... LetzteLetzte
Ergebnis 341 bis 350 von 3542

Thema: Willas Shrediquette Tricopter / Quadrocopter / Hexacopter

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Die Frage ist ob man wirklich 2mal Hardware UART braucht. Über das Funkmodul werden extrem wenig Daten übertragen, 9600 baud reicht auch dicke... Ist denn software UART so anfällig/ Ressourcen-raubend?
    Obs Resourcen-raubend ist weiß ich garnicht. Ich glaube in Bascom gibt es sogar schon befehle für sowas. nur wenns doch pinkompatibe ist!? zumindestens könnte man es evtl. im layout berücksichtigen.

    Mein Funkmodul welches ist habe läuft nur mit 19200 baud, aber denke selbst das sollte machbar sein.

    Evtl müsste man die ganze Platine auf einen Podest bauen der dann ein gutes Stückchen über der Propellerebene ist. Wenigstens bei meinem Micro-Tricopter müsste das wohl so sein, denn da ist echt wenig Platz zwischen den Propellern und wahrscheinlich überall ziemlich hohe Strömungsgeschwindigkeiten.
    Nen Podest wäre sicherlich schon alleine für den kompass angebracht. der sollte ja auch möglichst weit weg von den anderen komponenten wie z.b. motoren gelagert werden. nur müsste man den drucksensor trotzdem windschützen (flugwind) aber da würde ja eine kleine haube reichen.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    23.04.2007
    Ort
    stuttgart
    Beiträge
    1.127
    kk.. melde mich sobald ich was zusatndegebraucht habe...

    zu dem Luftdrucksensor, das mit dem wind ist kein Problem.. habe den bei meinem copter in ein Stück schaumstoff gesteckt und zum Test in den Luftstrom gehalten, da ändert sich nichts am Druck...
    meine projekte: robotik.dyyyh

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    Wenn da Staudruck an der Messöffnung entsteht ist es sicherlich ein Problem...
    Hier mal ein Bild meiner auf-die-schnelle-lochrasterversion (ca. 50x50mm):

    Nicht schön, dafür groß und zum Testen okay :-D
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken dsc01959.jpg  
    Viele Grüße, William
    -> http://william.thielicke.org/

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    23.04.2007
    Ort
    stuttgart
    Beiträge
    1.127
    Ja, staudruck auf die die Messöffnung darf nicht sein, auch keine Vorbeiströmung wegen Sog, aber wenn da bischen Schaumstoff/Mosgummi davor ist funktioniert es ohne Probleme...

    sieht doch schon ganz nett aus..
    meine projekte: robotik.dyyyh

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Hey William,

    sag mal weist du oder könntest du mal messen was die elektronik, außer motoren, an strom zieht? bin am überlegen ob man nicht einen kleinen 5Volt schaltregler aufbaut und die 3,3Volt von einem festspannungsregler der an dem schaltregler hängt erzeugt. denke das sollte effizienter sein!?

    ich will auch mal versuche deine platine so umzuändern das man auch ohne arduino hinkommt. also das man die bauteile selber bestücken kann. spart sicher nochmal ein paar gramm. soll aber trotzdem noch so sein dass, das arduino aufgesetzt werden kann.

    EDIT:
    ich habe gerade mal nen bisl rum gesurft und auf sparkfun habe ich auch den drucksensor gefunden. mit breakout board und ohne. ohne soll der sensor knapp 9Dollar kosten und lötbar ist dieser auchnoch. evtl könnte goara auf seinem PCB layout dies auchnoch berücksichtigen das man ihn evtl so auflötet.

    gruß, Bammel

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    Hi Sven,
    ich glaube die Schaltung der Tricopterplatine zieht ca. 50mA. Hängt aber stark davon ab was man für einen Empfänger benutzt. Bei den Platinenänderungen/ Sensoränderungen denk aber da dran, dass das ganze so aufgebaut ist, weil ich den Nachbau so einfach wie möglich machen wollte. Klaro könnte ich einfach einen Mega328p auf die Platine setzen, aber es gibt viele Menschen die TQFP-löten scheuen. Außerdem ist die Benutzung eines Bootloaders einfach sehr praktisch und simpel. Viele Leute die den Tricopter nachbauen haben keine Ahnung von Elektronik, aber wenn man meine Anleitung liest, und die Komponenten benutzt die ich vorschlage, braucht man auch keine Ahnung zu haben. Je spezieller und komplizierter der Aufbau/ das Löten wird, desto weniger interessant wird mein Tricopter.
    Für eure eigenen Weiterentwicklungen könnt ihr natürlich machen was ihr wollt, aber wenn es für potentielle Nachbauer verwendbar sein soll, muss alles so einfach wie möglich sein
    Viele Grüße, William
    -> http://william.thielicke.org/

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Ja ich habe mir eben noch viele gedanken gemacht und die layouts angesehen. und bin doch zum entschluss gekommen der copter erstmal so nach deinen komponenten aufzubauen. den so funktioniert es schließlich. ich werde auch nicht den dreiachs-acc benutzen sondern den von dir verwendeten zweiachs. da dieser ja mit 5 volt betrieben werden kann.

    zudem hätten wir dann von der elektronik einen identischen copter mit dem man zusammen weiterentwickeln kann.

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    Ich habe mal mit dem GPS angefangen. Viel Zeit hatte ich allerdings noch nicht. Her der Code, der mir die Koordinaten per Funk auf den Laptop sendet:
    Code:
    '===CHIP SETTINGS===
    $regfile = "m328pdef.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    $baud = 38400
    
    
    Dim Serialdata As String * 120
    Dim Newval As Bit
    Dim State As Byte
    
    Dim Gpgga(12) As String * 10
    Dim Splitcounter As Byte
    
    Config Input0 = Crlf , Echo = Crlf
    Config Serialin = Buffered , Size = 120 , Bytematch = 10
    Config Serialout = Buffered , Size = 120
    
    Config Pinb.5 = Output
    
    Clear Serialin
     Waitms 1000
    Print "go"
    
    
    Enable Interrupts
    
    Do
       If Newval = 1 Then
          Reset Newval
          If Left(serialdata , 6) = "$GPGGA" Then
             Splitcounter = Split(serialdata , Gpgga(1) , ",")
          Toggle Portb.5
          End If
    
          Print Gpgga(3) ; " - " ; Gpgga(4) ; " , " ; Gpgga(5) ; " - " ; Gpgga(6) ; " quality:" ; Gpgga(7) ; " satellites: " ; Gpgga(8)
    
          State = Val(gpgga(7))
          If State = 1 Then
            Portb.5 = 1
          End If
    
       End If
    Loop
    
    Serial0charmatch:
    
    Input Serialdata , Noecho               ' , Noecho
    Newval = 1
    
    
    Return

    Ich möchte als nächstes gerne eine feste Koordinate einstellen, und dann die Differenz (in metern) der gemessenen GPS position zur voreingestellten Position berechnen. Damit möchte ich herausfinden wie genau die Messungen überhaupt sind.

    Es wäre gut wenn jeder der mitarbeitet seine Fortschritte postet damit keine Arbeit doppelt gemacht wird...
    Viele Grüße, William
    -> http://william.thielicke.org/

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    Jetzt habe ich auch den HMC6352 Kompass getestet (code aus dem Mood pill projekt):
    Code:
    '===CHIP SETTINGS===
    $regfile = "m328pdef.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    $baud = 38400                                                ' use a low baudrate, if you use internal RC-clock
    
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
    
    Waitms 1000                                                 ' give Compass some time to stabilize
    
    ' I2C-Slave-Address of the HMC6352 Digital Compass Module and Configuration values
    Const Compass_address = &H42
    Dim Compass_w_array(3) As Byte
    Compass_w_array(1) = &H47                                   ' "G"-Command: write to RAM
    Compass_w_array(2) = &H74                                   ' RAM Address H74: Operational Mode
    Compass_w_array(3) = &B01110000                             ' 20Hz, Set/Reset=yes, Standby mode
    
    ' Compass value read variables
    Dim Compass_r_array(2) As Byte                              ' Byte array for the two bytes of heading value
    Dim Compass_value As Word At Compass_r_array(1) Overlay     ' WORD variable for the heading value
    
    Config Scl = Portc.5                                        ' we need to provide the SCL pin name
    Config Sda = Portc.4                                        ' we need to provide the SDA pin name
    
    I2cinit                                                     ' we need to set the pins in the proper state
    
    'use a bps rate lower than 100000, if your µC-clock-speed is
    'below approx. 4 MHz
    Config Twi = 100000                                         ' wanted clock frequency
    'will set TWBR and TWSR
    'Twbr = 32                                                   'bit rate register
    'Twsr = 0                                                    ' pre scaler bits
    
    Waitms 50
    
    I2csend Compass_address , Compass_w_array(1) , 3            ' set Compass Configuration
    
    Waitms 100
    
    Do
       Compass_w_array(1) = &H41                                ' Command "A": Read heading value
       I2csend Compass_address , Compass_w_array(1) , 1         ' send to HMC6352
       Waitms 7
       I2creceive Compass_address , Compass_r_array(1) , 0 , 2  ' receive the two heading bytes MSB first
       Swap Compass_r_array(1) , Compass_r_array(2)             ' swap MSB and LSB bytes to be read as WORD variable
       Print Compass_value
       Waitms 10
    Loop
    Funktioniert sehr schön.

    Außerdem habe ich hier noch Code vom BMP085 Drucksensor, ich frage grad mal den Autor ob sein Code so auch veröffentlicht werden darf.
    Viele Grüße, William
    -> http://william.thielicke.org/

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    Der Code für den Drucksensor (noch nicht getestet), von http://www.kh-gps.de/

    Code:
    'BMP085_8_lcd2a_t       86% belegt    OK am 25.3.2010
    
    '###############################################################################
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    $hwstack = 64
    $swstack = 64
    $framesize = 64
    $sim
    
    '###############################################################################
    'Byte = 0 to 255
    'Word = 0 to 65535
    'Integer = -32768 to 32767
    'Long = -214783648 to 2147483647
    'Single = 1.5 x 10^-45 to 3.4 x 10^38
    'Double = 5.0 x 10^-324 to 1.7 x 10^38
    
    Dim Ac1 As Single
    Dim Ac2 As Single
    Dim Ac3 As Single
    Dim Ac4 As Long
    Dim Ac5 As Long
    Dim Ac6 As Long
    
    Dim B1 As Single
    Dim B2 As Single
    Dim B3 As Long
    Dim B4 As Long
    Dim B4a As Single
    Dim B5 As Single
    Dim B6 As Single
    Dim B7 As Long
    
    Dim Mb As Single
    Dim Mc As Single
    Dim Md As Single
    
    Dim Ut As Long
    Dim Up As Long
    
    Dim X1 As Single
    Dim X2 As Single
    Dim X3 As Single
    
    Dim Zwr1 As Single
    Dim Zwr2 As Single
    Dim Zwr3 As Single
    Dim Zwr4 As Single
    
    Dim T As Single
    Dim T_str As String * 4
    Dim P As Single
    Dim P2 As Single
    
    Dim Po As Single
    Dim A As Single
    Dim A2 As Word
    
    Dim Adres As Byte
    Dim Value As Byte
    Dim Result As Integer
    
    Dim Hi As Long
    Dim Lo As Long
    Dim Xlo As Long
    
    Config Scl = Portb.1
    Config Sda = Portb.0
    I2cinit
    
    Config Portb.6 = Output
    Config Portb.7 = Output
    Portb = &B11000000
    
    Dim N As Byte
    N = 1
    Do
    Portb.6 = 1
    Portb.7 = 0
    Waitms 50
    Portb.6 = 0
    Portb.7 = 1
    Waitms 50
    N = N + 1
    Loop Until N = 20
    
    Declare Sub Write_bmp(byval Adres As Byte , Byval Value As Byte)
    Declare Sub Read_bmp(byval Adres As Byte , Value As Byte)
    Declare Sub Read_reg
    
    Const Addressw = &B11101110                                 'slave write address
    Const Addressr = &B11101111                                 'slave read address
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Cls
    Cursor Off
    
    Locate 1 , 1
    Lcd " BMP085-DECODER "
    Locate 2 , 1
    Lcd "(C)2010 KHH V1.2"
    Wait 3
    
    'hole Kalibrierungsdaten
    '-------------------------------------------------------------------------------
    Adres = &HAA                                                'Startadresse calibration data
    
    'Do
    Waitms 50
    Call Read_reg
    Ac1 = Result
    'Print "AC1= " ; Ac1
    Call Read_reg
    Ac2 = Result
    'Print "AC2= " ; Ac2
    Call Read_reg
    Ac3 = Result
    'Print "AC3= " ; Ac3
    Call Read_reg
    Ac4 = Result
    'Print "AC4= " ; Ac4
    Call Read_reg
    Ac5 = Result
    'Print "AC5= " ; Ac5
    Call Read_reg
    Ac6 = Result
    'Print "AC6= " ; Ac6
    Call Read_reg
    B1 = Result
    'Print "B1=  " ; B1
    Call Read_reg
    B2 = Result
    'Print "B2=  " ; B2
    Call Read_reg
    Mb = Result
    'Print "MB=  " ; Mb
    Call Read_reg
    Mc = Result
    'Print "MC=  " ; Mc
    Call Read_reg
    Md = Result
    'Print "MD=  " ; Md
    'Print
    
    Dim Xx As Byte
    Xx = 1
    
    Do
    Waitms 100
    'hole Rohdaten Temperatur
    '-------------------------------------------------------------------------------
    Call Write_bmp(&Hf4 , &H2E)
    Waitms 5
    Call Read_bmp(&Hf6 , Value)                                 'read it back
    Hi = Value * 256
    Call Read_bmp(&Hf7 , Value)                                 'read it back
    Ut = Hi + Value
    'Print "UT=  " ; Ut
    'Print
    
    Waitms 100
    'hole Rohdaten Luftdruck
    '-------------------------------------------------------------------------------
    Call Write_bmp(&Hf4 , &H34)
    Waitms 40
    Call Read_bmp(&Hf6 , Value)                                 'read it back
    Hi = Value * 256
    Call Read_bmp(&Hf7 , Value)                                 'read it back
    Up = Hi + Value
    'Print "UP=  " ; Up
    'Print
    
    'Testwerte
    '------------------------------------------------------
    Ac1 = 408
    Ac2 = -72
    Ac3 = -14383
    Ac4 = 32741
    Ac5 = 32757
    Ac6 = 23153
    B1 = 6190
    B2 = 4
    Mb = -32768
    Mc = -8711
    Md = 2868
    
    Ut = 27898                                                  'Temperatur
    Up = 23843                                                  'Pressure
    
    'kalkuliere tatsaechliche Temperatur
    '-------------------------------------------------------------------------------
    Zwr1 = Ut - Ac6
    Zwr2 = 2 ^ 15
    Zwr2 = Ac5 / Zwr2
    X1 = Zwr1 * Zwr2
    Print "X1=  " ; X1
    
    Zwr1 = 2 ^ 11
    Zwr2 = Mc * Zwr1
    Zwr3 = X1 + Md
    X2 = Zwr2 / Zwr3
    Print "X2=  " ; X2
    
    B5 = X1 + X2
    Print "B5=  " ; B5
    
    T = B5 + 8
    Zwr3 = 2 ^ 4
    T = T / Zwr3
    T = T / 10
    T_str = Str(t)
    T_str = Left(t_str , 4)
    Print "T=   " ; T_str ; " C"
    Print
    
    'kalkuliere tatsaechlichen Luftdruck
    '-------------------------------------------------------------------------------
    B6 = B5 - 4000
    Print "B6=  " ; B6
    
    Zwr1 = 2 ^ 11
    Zwr2 = 2 ^ 12
    Zwr3 = B6 / Zwr2
    Zwr3 = B6 * Zwr3
    Zwr4 = B2 * Zwr3
    X1 = Zwr4 / Zwr1
    Print "X1=  " ; X1
    
    Zwr1 = 2 ^ 11
    Zwr2 = B6 / Zwr1
    X2 = Ac2 * Zwr2
    Print "X2=  " ; X2
    
    X3 = X1 + X2
    Print "X3=  " ; X3
    
    Zwr1 = Ac1 * 4
    Zwr1 = Zwr1 + X3
    Zwr1 = Zwr1 + 2
    
    If Xx = 1 Then B3 = Zwr1 * 4                                '681
    If Xx = 2 Then B3 = Zwr1 * 2                                '1006
    If Xx = 3 Then B3 = Zwr1                                    '142
    If Xx = 4 Then B3 = Zwr1 / 2                                '720
    If Xx = 5 Then B3 = Zwr1 / 4                                '1010(orig)
    Print "B3=  " ; B3
    
    Zwr1 = 2 ^ 13
    Zwr2 = B6 / Zwr1
    X1 = Ac3 * Zwr2
    'Print X1
    'X1 = Abs(x1)
    Print "X1=  " ; X1
    
    Zwr1 = 2 ^ 12
    Zwr2 = 2 ^ 16
    Zwr3 = B6 / Zwr1
    Zwr3 = B6 * Zwr3
    Zwr4 = B1 * Zwr3
    X2 = Zwr4 / Zwr2
    Print "X2=  " ; X2
    
    X3 = X1 + X2
    X3 = X3 + 2
    X3 = X3 / 4
    Print "X3=  " ; X3
    
    Zwr1 = X3 + 32768
    Zwr2 = 2 ^ 15
    Zwr3 = Zwr1 / Zwr2
    'Print "Zwr3= " ; Zwr3
    'Print "Ac4 = " ; Ac4
    
    B4a = Ac4 * Zwr3
    B4 = Abs(b4a)
    Print "B4=  " ; B4a
    
    B7 = Up - B3
    Dim B7a As Long
    B7a = B7 * 50000
    Print "B7=  " ; B7a
    
    Zwr1 = B7a * 2
    Zwr1 = Zwr1 / B4
    Zwr2 = B7a / B4
    Zwr2 = Zwr2 * 2
    If B7a < &H8000000 Then P = Zwr1 Else P = Zwr2
    Print "P=   " ; P
    
    Zwr1 = 2 ^ 8
    Zwr2 = P / Zwr1
    X1 = Zwr2 * Zwr2
    Print "X1=  " ; X1
    
    Zwr1 = 2 ^ 16
    X1 = X1 * 3028
    X1 = X1 / Zwr1
    X1 = Abs(x1)
    Print "X1=  " ; X1
    
    Zwr1 = -7357 * P
    Zwr2 = 2 ^ 16
    X2 = Zwr1 / Zwr2
    Print "X2=  " ; X2
    Print
    
    Zwr1 = X1 + X2
    Zwr1 = Zwr1 + 3791
    Zwr2 = 2 ^ 4
    Zwr1 = Zwr1 / Zwr2
    P = P + Zwr1
    Print "P=   " ; P ; "Pa"
    P = P / 100
    
    Print "XX= " ; Xx
    
    Dim P_str As String * 8
    P_str = Fusing(p , "#.##")
    Print "P=   " ; P_str ; "hPa"
    
    'kalkuliere Hoehenwerte
    '-------------------------------------------------------------------------------
    Po = 1013.25                                                'Pressure auf Seepegel
    
    Zwr1 = 1 / 5.255
    Zwr2 = P / Po
    Zwr3 = Zwr2 ^ Zwr1
    Zwr4 = 1 - Zwr3
    A = 44330 * Zwr4
    A2 = Int(a)
    Print "A=   " ; A2 ; "m"
    Print
    
    'LCD-Ausgabe
    '-------------------------------------------------------------------------------
    Cls
    Locate 1 , 7
    Lcd P_str ; "hPa"
    
    Locate 1 , 1
    Lcd Up
    
    Locate 2 , 1
    Lcd A2 ; "m"
    
    Locate 2 , 11
    Lcd T_str ; Chr(223) ; "C"
    
    'Wait 2
    
    Xx = Xx + 1
    If Xx = 6 Then Xx = 1
    
    Loop
    End
    
    '------------------------------------------------------------
    Sub Read_reg
    Call Read_bmp(adres , Value)
    Hi = Value * 256
    Adres = Adres + 1
    Call Read_bmp(adres , Value)
    Result = Hi + Value
    Adres = Adres + 1
    End Sub
    
    '----------------------------------------------------------
    Sub Write_bmp(byval Adres As Byte , Byval Value As Byte)
    I2cstart                                                    'start condition
    I2cwbyte Addressw                                           'slave address
    I2cwbyte Adres                                              'address of register
    I2cwbyte Value                                              'value to write
    I2cstop                                                     'stop condition
    Waitms 10                                                   'wait for 10 milliseconds
    End Sub
    
    '----------------------------------------------------------
    Sub Read_bmp(byval Adres As Byte , Value As Byte)
    I2cstart                                                    'generate start
    I2cwbyte Addressw                                           'slave address
    I2cwbyte Adres                                              'address of register
    I2cstart                                                    'repeated start
    I2cwbyte Addressr                                           'slave address (read)
    I2crbyte Value , Nack                                       'read byte
    I2cstop                                                     'generate stop
    Waitms 10
    End Sub
    Viele Grüße, William
    -> http://william.thielicke.org/

Seite 35 von 136 ErsteErste ... 2533343536374585135 ... LetzteLetzte

Stichworte

Berechtigungen

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

12V Akku bauen