annuncio

Comprimi
Ancora nessun annuncio.

Build log quadricottero

Comprimi
X
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • #16
    Originariamente inviato da Katana13 Visualizza il messaggio
    Salve a tutti! mi sono appassionato a questo thread, sto per completare il mio secondo multikopter, questa vota con 4 motori, finora ho usato solo 3 DT 750, e devo dire con soddisfazione.
    Dopo l'ultimo crash ho piegato tutti gli alberi, i cuscinetti erano già da cambiare.. quindi mi sono chiesto se è meglio comprare un'altro motore e aggiustare i 3 rimanenti oppure cambiare tutti e 4 i motori con qualcosa di diverso.

    La mia scelta la vorrei basare solo su dati tecnici oggettivi, e l'unico dato utile, oltre alla qualità costruttiva del motore è l'efficenza, nel dettaglio:
    Qualcuno ha mai provato a montare un 10x4.7 APC oppure un 11X4.7 APC e misurare gli Ampere con una lipo da 3 celle e una spinta statica sui 400 gr?

    Grazie
    Certo , sempre fatto.
    Il primo tricottero mio pesava 1250 grammi, quindi 415 grammi x motore.
    Con le 10x4,7 GWS (arancioni) il consumo era di 4,3A per motore in hovering. Totale 12,9 A.

    Commenta


    • #17
      Originariamente inviato da pragamichele Visualizza il messaggio
      marc:
      200 ore di volo!!!!!!!!!!!!!!!!!!!!!!!
      dalle mie parti si dice: "piìsa pi' curt"
      credo che il significato si capisca

      sarebbero qualcosa come 1200 scariche di batteria...
      e 1h/g costante negli ultimi 4mesi...
      quota, velocità, idee: averne sempre almeno due

      Commenta


      • #18
        Originariamente inviato da blinking Visualizza il messaggio
        dalle mie parti si dice: "piìsa pi' curt"
        credo che il significato si capisca

        sarebbero qualcosa come 1200 scariche di batteria...
        e 1h/g costante negli ultimi 4mesi...
        Sul trico ho usato ben 5 pacchi di batterie cariche per volta, ho fatto anche 4 ore di volo al giorno per imparare, così si fà presto a raggiungere le 200 ore.
        Sai, la novità... ora faccio una mezz'ora al giorno la sera con 3 pacchi, se non c'è troppo vento.

        Commenta


        • #19
          Originariamente inviato da mikenet76 Visualizza il messaggio
          io non ho mai dato corrente ad un dt750 uscito dalla scatola quindi non ho idea del rumore che fanno i cuscinetti originali, anzi, non so neanche se quei motori girano.

          Qui:
          RC Groups - View Single Post - hexTronik DT750 Brushless Outrunner 750kv
          puoi capire le prestazioni del dt750 riavvolto.
          Io ho acquistato i motori, 10, filo per riavvolgerlo e cuscinetti (0.70 sterline, capirai)
          ciao
          leggendo la discussione su rcgroups sembra che le prestazioni del motore non cambino poi molto con il riavvolgimento.

          ti metto la pulce nell'orecchio, visto che li hai prima o poi potresti provere 3 motori originali al posto dei riavvolti da te.
          quota, velocità, idee: averne sempre almeno due

          Commenta


          • #20
            bhè ormai i motori ce li ho da un bel pezzo e me li tengo... Alla fine ho fatto i bracci lunghi un metro in totale 1 metro e 15 se no erro (o era 30?!?!). I motori sono montati a 5/6 cm dalla fine del braccio.


            Ho pure già montato i motori, tra motore e braccio un gommino spesso 2cm duro di quelli per l'idraulica, mentre tra bullone e braccio un classico gommino per viti che però non sembra servire a molto... In oltre ho lasciato lo spazio sotto il motore o l'albero strisciava, poichè sporge di pochissimo... ho usato solo 2 bulloni per motore



            domani metto in squadra i motori e faccio magari una prova se girano senza limitazioni e vibrazioni.

            p.s. scusate la qualità delle foto ma avevo dietro solo il cellulare
            File allegati

            Commenta


            • #21
              altra giornata produttiva oggi...
              "raddrizzati" i motori e cambiati tutti i bulloni da normali a autobloccanti.
              Installato anche il "carrello": trattasi di 4 strisce di pvc flessibile, fissati con 2 viti alle estremità in modo che formino una U... sistema molto leggero e ribalzoso
              Ora i mostriciattolo è a casa per l'installazione dell'elettronica
              DIMENSIONI:
              130 CM di diametro
              115 CM da motore a motore opposto
              PESO:
              1020 grammi struttura+ motori

              foto del mezzo:


              particolare del "carrello", più facile da capire che da spiegare
              File allegati

              Commenta


              • #22
                E' enorme, pesantissimo già 'a vuoto' e con i motori piccolissimi... perchè? Come fai a portarti in giro un mostro del genere?
                Peseranno più i cavi di tutto il resto...
                Johnny
                (GTE - Torino)
                Out of sight, NOT out of mind.

                Commenta


                • #23
                  per portarlo in giro non c'è problema, entra tranquillo nel bagagliaio.. i moori saran piccoli ma spingono :-)
                  Il peso della struttura era preventivato proprio per quella cifra, e per i cavi hai ragione, pesano quasi mezzo chilo ma hanno una guaina intorno (sto usando quelli da elettricista) che andrà rimossa, credo che peseranno sui 200 grammi.
                  Questo mi lascia con un payload senza problemi di oltre mezzo chilo, e un payload totale di 2 kg(su 4kg che i motori riescono a sollevare)

                  ps. ad accorciarlo si fa sempre in tempo

                  Commenta


                  • #24
                    Non voglio smontarti, ma sei partito con dimensioni eccessive.

                    Se non ti fidi di quello che diciamo qui, dai una occhiata su altri forum internazionalie e osserva che dimensioni hanno mediamente i quadricotteri.

                    Semplicemente guardandoli quei motori non credo che possano tirare un granche'.

                    Non e' vero quello che dicono certe volte le donne, in questo caso e per gli outrunner le dimensioni contano.

                    Inoltre maggior larghezza, vorra' forse dire in qualche caso maggiore stabilita', ma quando poi lo imbardi riprenderlo non sara' un gioco da ragazzi.

                    Se proprio non vuoi fare il classico 40 cm di braccio, fallo almeno di 50 cm, ma non eccedere.


                    Ultima questione sul peso, non si puo' ignorare!

                    Tutto quello che e' in piu' da portare a spasso incidera' negativamente sul funzionamento di tutto il sistema, sara' piu' lento, consumera' di piu', si rompera' maggiormente quando cadra' ecc.

                    Commenta


                    • #25
                      i motori in se non sono poi piccoli, sono i DT750 che tirano anche 1kg l'uno, il problema è il telaio che è enorme, e di conseguenza pesante.
                      Io ho voluto provare a fare un telaio quadrato con lato di 70cm ed è già enorme per questa classe di motori, risulta 1kg in allestimento base (no camere, fpv) e senza batteria e carrello, ed è già considerabile pesante, tanto che ne ho subito iniziato uno più piccolo.
                      40cm per ogni braccio sono una misura già più che sufficiente, basta anche una sezione inferiore ma ormai hai già quella, prova a dargli solo un'accorciata.
                      Controlla anche quanto pesano le striscie di plastica usate come carrello, mi pare che non siano affatto leggere.
                      quota, velocità, idee: averne sempre almeno due

                      Commenta


                      • #26
                        ok, ammetto di essermi fatto prendere dalla mania di grandezza, ma ormai ho deciso di dare una possibilità al mezzo, se mi schianto tornerò a casa con le piume nel sacco (fortunatamente vicino casa c'è un campetto da calcio con le reti in ferro, ottime per testare il mezzo senza rischio di far male a qualcuno, anche se qualcosa andasse storto)

                        tra l'altro con gli scarti della struttura di questo mezzo potrei farmi un 70cm di braccio, così da confrontare il comportamento dei due mezzi, semplicemente spostando motori e elettronica da uno all'altro.

                        Per quanto riguarda i motori & peso, preso dalla smania ho fatto un piccolo test (non si vede ma mi ero nascosto dietro il letto ) di hovering con un motore solo: Firrst test quadricopter on Vimeo
                        Il gas era a 3/4, quindi credo che con 4 motori (se il calcolo è lineare) basti circa 1/4 di gas per sollevarsi.

                        Commenta


                        • #27
                          Originariamente inviato da elettro Visualizza il messaggio
                          Per quanto riguarda i motori & peso, preso dalla smania ho fatto un piccolo test (non si vede ma mi ero nascosto dietro il letto ) di hovering con un motore solo: Firrst test quadricopter on Vimeo
                          Il gas era a 3/4, quindi credo che con 4 motori (se il calcolo è lineare) basti circa 1/4 di gas per sollevarsi.
                          Hai sollevato solo mezzo quadricottero e con un braccio di leva molto vantaggioso...quando poi monterai tutto vedrai che per stare in hovering con un mezzo così pesante sarai ben oltre 1/2 gas.
                          Con quali eliche intendi usarlo, a quante celle?

                          Per dimensionare questi mezzi, fare i calcoli basandosi sulla spinta massima di un motore è da matti, perchè in genere quando l'assorbimento è alto l'efficienza è bassa, quindi ti ritroveresti un mezzo che consuma moltissimo.
                          Inoltre non userai mai il motore al massimo, neanche nelle salite veloci, perchè devi sempre conservare un po' di comando per poter controllare l'assetto.

                          Se vuoi un mezzo performante, devi far lavorare quanto più possibile i motori nella loro zona di massima efficienza, quindi ti conviene dimensionarli perchè ti consentano l'hovering con il minor assorbimento possibile e una buona spinta già a carichi parzializzati per un volato veloce...
                          Johnny
                          (GTE - Torino)
                          Out of sight, NOT out of mind.

                          Commenta


                          • #28
                            jhoexp tutti i componenti sono nel primo post

                            Visto che devo ancora finire di dissaldare e trovare un modo per tener ben fissi i giroscopi, e non avevo di meglio da fare, ho scritto (la parte input è più o meno presa dal baronpilot) un pò di codice che funziona solo con arduino e una radio.
                            Più che altro l'ho fatto per vedere se tutti i collegamenti erano funzionali, ma col bel tempo un voletto proverei a farlo..

                            i collegamenti sono:
                            Input dalla radio (solo 4 canali)
                            digitalPin2 = potenza motori, digitalPin 4 = pitch, digitalPin 5 = roll, digitalPin 6 = yaw
                            Output ai motori:
                            digitalPin3=avanti, digitalPin 9 = sx, digitalPin 10 = dx, digitalPin 11 = dietro

                            come procedere: radio accesa al minimo, accendere il tutto, aspettare che la luce fissa si spenga (contemporaneamente si armano gli ESC), volare a luce lampeggiante.

                            Non è ancora stato testato, potrebbe aver bisogno di settare il valore ROLL_PITCH_YAW_WEIGHT, da aumentare per avere meno sensibilità dei comandi (magari metto un potenziometro...)

                            Se la radio tramette valori fuori range (led acceso quasi fisso, lampegga ogni tanto per pochissimo) o perde il segnale(led acceso fisso), i motori perdono gradualmente i potenza e si spengono in circa un paio di secondi (forse troppo velocemente, ma piuttosto che far volare un coso impazzito...)

                            quando volate potete commentare nel loop() la chiamata a calculateLoopDuraton(), il led non lampeggerà più, ma il micro non effettuerà tutte le Serial che rubano un sacco di cpu.
                            Non che ce ne sia effettivamente bisogno, un loop viene completato in media in 15 microsecondi
                            Ultima modifica di elettro; 01 novembre 10, 14:39.

                            Commenta


                            • #29
                              ecco il codice:

                              Main.pde
                              codice:
                              #include "InputPin.h"
                              
                              #define MIN_RADIO_VALUE 900
                              #define MAX_RADIO_VALUE 2000
                              
                              
                              /*
                              pin3 = motor0
                              pin9 = motor1
                              pin10 = motor2
                              pin11 = motor3
                              
                              ^up
                                  motor0
                              motor1 + motor2
                                  motor3
                                  
                              
                              */
                              
                              //void setMid();
                              
                              unsigned long time;
                              unsigned long midChannel[4];
                              long motorPower[4];
                              
                              InputPin inputs;
                              
                              unsigned long lastInputChannelValue[4];
                              
                              void setup(){
                                Serial.begin(57600);
                                time = micros();
                                
                                for (int i=0; i < 4; i++){
                                    lastInputChannelValue[i]=0;
                                }
                                setMid();
                              }
                              
                              void setMid(){
                                //calculate the mid of the RX
                                pinMode(13, OUTPUT);
                                digitalWrite(13, HIGH);
                                for (int a=0; a < 1000;a++){
                                  while ( !inputs.getAndSetFalseHasChanged() ) {
                                    //wait until new data is readed
                                  }
                                  if (a==0){
                                    midChannel[0]=inputs.getDuration(0);
                                    midChannel[1]=inputs.getDuration(1);
                                    midChannel[2]=inputs.getDuration(2);
                                    midChannel[3]=inputs.getDuration(3);
                                  }else{
                                    midChannel[0]=( midChannel[0]+inputs.getDuration(0) )/2;
                                    midChannel[1]=( midChannel[1]+inputs.getDuration(1) )/2;
                                    midChannel[2]=( midChannel[2]+inputs.getDuration(2) )/2;
                                    midChannel[3]=( midChannel[3]+inputs.getDuration(3) )/2;
                                  }
                                }
                                
                                digitalWrite(13, LOW);
                              }
                              
                              
                              unsigned long desiredMotorPower=MIN_RADIO_VALUE;
                              int ROLL_PITCH_YAW_WEIGHT = 4;
                              int volteErrSignalNotInRange=0;
                              int volteErrSignalLost=0;
                              int MAXDIFF=20;
                              boolean diff;
                              byte cont;
                              
                              void loop(){
                                desiredMotorPower = inputs.getDuration(0);
                                diff=false;
                                
                                if ( inputs.getAndSetFalseHasChanged() ){
                                  volteErrSignalLost=0;
                                  for (cont = 0; cont < 4; cont++){
                                    if ( (inputs.getDuration(cont)-lastInputChannelValue[cont])>MAXDIFF )
                                      diff=true;
                                  }
                                  if (diff){  //if there is enought difference
                                    if ( (desiredMotorPower >= MIN_RADIO_VALUE) && (desiredMotorPower <= MAX_RADIO_VALUE) ){ //if engine input is valid
                                      volteErrSignalNotInRange=0;
                                      long a = ( (long)inputs.getDuration(1) -(long)midChannel[1] )/ROLL_PITCH_YAW_WEIGHT; //PITCH
                              //Serial.print("a:");
                              //Serial.println(a);
                              
                                      long b = ( (long)inputs.getDuration(2) -(long)midChannel[2] )/ROLL_PITCH_YAW_WEIGHT; //ROLL
                              //Serial.print("b:");
                              //Serial.println(b);
                              
                                      long c = ( (long)inputs.getDuration(3) -(long)midChannel[3] )/ROLL_PITCH_YAW_WEIGHT; //YAW
                              //Serial.print("c:");
                              //Serial.println(c);
                              
                                      motorPower[0] = constrain( map(desiredMotorPower+a+c, 0, MAX_RADIO_VALUE, 0, 200), 0, 200);
                                      analogWrite(  3, motorPower[0] );
                              
                                      motorPower[1] = constrain( map(desiredMotorPower-b-c, 0, MAX_RADIO_VALUE, 0, 200), 0, 200);
                                      analogWrite(  9, motorPower[1] );
                              
                                      motorPower[2] = constrain( map(desiredMotorPower+b-c, 0, MAX_RADIO_VALUE, 0, 200), 0, 200);
                                      analogWrite(  10, motorPower[2] );
                              
                                      motorPower[3] = constrain( map(desiredMotorPower-a+c, 0, MAX_RADIO_VALUE, 0, 200), 0, 200);
                                      analogWrite(  11, motorPower[3] );
                              
                                      for (cont = 0; cont < 4; cont++){
                                        lastInputChannelValue[cont]=inputs.getDuration(cont);
                                      }
                                    }else{
                                      if (volteErrSignalNotInRange>1){
                                        digitalWrite(13, HIGH);
                                        Serial.println("Error, radio signal not in range!");
                                        //slowly turn down engine
                                        if (motorPower[0]>0)
                                          motorPower[0]--;
                                        if (motorPower[1]>0)
                                          motorPower[1]--;
                                        if (motorPower[2]>0)
                                          motorPower[2]--;
                                        if (motorPower[3]>0)
                                          motorPower[3]--;
                                        analogWrite(  3, motorPower[0] );
                                        analogWrite(  9, motorPower[1] );
                                        analogWrite(  10, motorPower[2] );
                                        analogWrite(  11, motorPower[3] );
                                      }else{
                                        volteErrSignalNotInRange++;
                                      }
                                    }
                                  }
                                }else{
                                  if (volteErrSignalLost>1000){
                                    digitalWrite(13, HIGH);
                                    Serial.println("Error, radio signal lost!");
                                    //slowly turn down engine
                                    if (motorPower[0]>0)
                                      motorPower[0]--;
                                    if (motorPower[1]>0)
                                      motorPower[1]--;
                                    if (motorPower[2]>0)
                                      motorPower[2]--;
                                    if (motorPower[3]>0)
                                      motorPower[3]--;
                                    analogWrite(  3, motorPower[0] );
                                    analogWrite(  9, motorPower[1] );
                                    analogWrite(  10, motorPower[2] );
                                    analogWrite(  11, motorPower[3] );
                                  }else{
                                    volteErrSignalLost++;
                                  }
                                }
                                
                                calculateLoopDuraton();
                              
                              }
                              
                              int volte=0;
                              unsigned long midTime=0;
                              boolean led = false;
                              void calculateLoopDuraton(){
                                
                                if (midTime!=0)
                                  midTime = (midTime+micros() - time)/2;
                                else
                                  midTime = (micros() - time);
                                  
                                time = micros();
                                volte++;
                                if (volte>=15000){
                                  digitalWrite(13, led);
                                  led = !led;
                                  Serial.print("time 1 loop in micros:");
                                  Serial.println(midTime);
                              //    Serial.println(F_CPU);
                                  volte = 0;
                                
                                  Serial.println("input:");
                                  for (int i =0; i < 4; i++){
                                    Serial.print(i);
                                    Serial.print(":");
                                    Serial.println( inputs.getDuration(i) );
                                  }
                                  Serial.print("Mid0:");
                                  Serial.println(midChannel[0] );
                                  Serial.print("Mid1:");
                                  Serial.println( midChannel[1] );
                                  Serial.print("Mid2:");
                                  Serial.println( midChannel[2] );
                                  Serial.print("Mid3:");
                                  Serial.println( midChannel[3] );
                                  
                                  Serial.print("DesiredPower:");
                                  Serial.println( desiredMotorPower );
                                  
                                  Serial.print("Mot0:");
                                  Serial.println( motorPower[0] );
                                  
                                  Serial.print("Mot1:");
                                  Serial.println( motorPower[1] );
                                  
                                  Serial.print("Mot2:");
                                  Serial.println( motorPower[2] );
                                  
                                  Serial.print("Mot3:");
                                  Serial.println( motorPower[3] );
                                    
                                }
                                
                              }
                              InputPin.cpp
                              codice:
                              #include "InputPin.h"
                              
                              /*
                              Let You read digital pin 2,4,5,6,7
                              FROM BIRONPILOTV59, tnx to ciskje
                              */
                              
                              #define MAXUNSIGNEDLONGCVALUE 4294967295
                              #define MASKPCINT0 (1<<2)
                              #define MASKPCINT1 (1<<4)
                              #define MASKPCINT2 (1<<5)
                              #define MASKPCINT3 (1<<6)
                              
                              InputPin::InputPin(){
                                pinMode(2, INPUT); // 3 is used for esc
                                pinMode(4, INPUT);
                                pinMode(5, INPUT);
                                pinMode(6, INPUT);
                                // interrupt on pin change PCINT2
                                PCICR |= (1 << PCIE2);
                              
                                PCMSK2 = (1 << PCINT18) | // pin2
                                (1 << PCINT20) | // pin4
                                (1 << PCINT21) | // pin5
                                (1 << PCINT22); // pin6
                              }
                              
                              //putted here because interrupt dosn't want it in .h
                              unsigned long _startIn[4];
                              unsigned long _rawIn[4];
                              unsigned long _time;
                              byte _oldbit, _newbit, _changed;
                              boolean _hasChanged=false;
                              
                              ISR(PCINT2_vect) {
                                _time=micros();
                                
                                _newbit=PIND;
                                _changed=_newbit^_oldbit;
                                
                                if (_changed&MASKPCINT0){
                              
                                  if (_newbit&MASKPCINT0) {
                                    _startIn[0]=_time;
                                  }else{
                                    _rawIn[0]=_time-_startIn[0];
                                  }
                                }
                              
                                if (_changed&MASKPCINT1)
                                  if (_newbit&MASKPCINT1) 
                                    _startIn[1]=_time;
                                  else 
                                    _rawIn[1]=_time-_startIn[1];
                              
                                if (_changed&MASKPCINT2)
                                  if (_newbit&MASKPCINT2) 
                                    _startIn[2]=_time;
                                  else 
                                    _rawIn[2]=_time-_startIn[2];
                              
                                if (_changed&MASKPCINT3)
                                  if (_newbit&MASKPCINT3) 
                                    _startIn[3]=_time;
                                  else 
                                    _rawIn[3]=_time-_startIn[3];
                                    
                                _hasChanged=true;
                                _oldbit=_newbit;
                              //  blockedRX=0;
                              }
                              
                              bool InputPin::getAndSetFalseHasChanged(){
                                bool temp = _hasChanged;
                                _hasChanged = false;
                                return temp;
                              }
                              
                              int InputPin::getDuration(int i){
                               // Serial.print("ok:");
                              //  Serial.print(rawIn[i]);
                                //      Serial.println(rawIn[0]);
                                    // Serial.print("okIND2:");
                                      //Serial.println(rawIn, BIN);
                                return _rawIn[i];
                              }
                              InputPin.h
                              codice:
                              #ifndef InputPin_h
                              #define InputPin_h
                              
                              
                              #include "WProgram.h"
                              
                              class InputPin{
                                
                                public:
                                  InputPin();
                                  int getDuration(int i);
                                  bool getAndSetFalseHasChanged();
                                private:
                              };
                              #endif

                              Commenta


                              • #30
                                ok, ho fatto un piccolo tentativo di hovering.
                                dico tentativo perchè si stava alzando ma con i motore al massimo, a quanto pare mi son discostato troppo dalle 11x47.(uso 9x5 tripala)
                                quindi a giorni gli sego le braccia direi che un 10 cm per braccio dovrebbero bastare...
                                chissà, magari nel frattempo smette di pivere e posso iniziare a scavare qualche buco

                                Commenta

                                Sto operando...
                                X