Pagina 6 van 10

Re: Monocopter experimenteel ontwerp

Geplaatst: vr dec 27, 2013 10:28 pm
door luppie
Ik heb vandaag weer vooruitgang geboekt met de code.

Het is mij gelukt om het kompas met een snelheid van 5 milliseconden per meting (200Hz) uit te lezen. En mijn rekensnelheid heb ik ook fors omhoog gekregen naar 2 milliseconden per berekening (500Hz). Zo'n berekening is dan het totaalplaatje dus het ophalen van informatie, het rekenen aan die informatie en dan een servo en lampjes aansturen. Met deze snelheden moet ik zeker een werkende code kunnen maken.

Nu begint het moeilijke werk pas echt en dat is om daadwerkelijk een stuurbeweging te calculeren en te sturen.

Re: Monocopter experimenteel ontwerp

Geplaatst: za dec 28, 2013 8:41 am
door Erikf
Je hebt er lekker de gang in. Gaat goed zo.

De volgende stap is lijkt mij juist eenvoudig te beredeneren.
Je wilt op 4 plaatsen de vleugel op een positie hebben: recht vooruit, rechts, recht achteruit en links. Dat zijn de plaatsen waar de vleugel gaat bepalen welke kant het op gaat vliegen.
- Als een servo de juiste stand heeft hoeveel tijd kost het om de vleugel de juiste positie te geven.
- hoeveel tijd kost het voor de servo om de juiste stand te krijgen
- hoeveel tijd kost het om de servo met de puls info te geven.
nu kun je beredeneren op welke positie de vleugel moet zijn om de servo de puls te geven.
Omdat de vleugel 4 keer een positie moet hebben, moet de hele procedure binnen 90 graden van het draaien van de vleugel gebeuren.

Tenminste, zo had ik het in gedachten

Re: Monocopter experimenteel ontwerp

Geplaatst: za dec 28, 2013 11:27 am
door eric_laermans
Heb er ook 's m'n gedachten over laten gaan. 't Kompas geeft de positie door aan het rekencentrum, de ontvanger geeft aan of er een stuurbeweging wordt gegeven en zo ja welke. Stel de beweging op de zender is 'stuur naar rechts' en de monocopter 'tilt' naar voren dan zou je dit kunnen oplossen door de instellingen in het rekencentrum te wijzigen. Immers 'ga vooruit' op de zender veroorzaakt dan een beweging van de monocopter naar links, en 'ga naar links' op de zender veroorzaakt een beweging van de monocopter naar achteren. Volgens mij is het vooral een kwestie van (proefondervindelijk) calibreren. Of denk ik te makkelijk :) .

Re: Monocopter experimenteel ontwerp

Geplaatst: za dec 28, 2013 1:23 pm
door luppie
Je wilt op 4 plaatsen de vleugel op een positie hebben: recht vooruit, rechts, recht achteruit en links.
Met de stuurbeweging "yaw" verdraaid de voorkant en daarmee verdraaid recht vooruit, rechts, recht achteruit en links ook. Ik kan de servo dus niet meer laten sturen op het kompas want de voorkant is immers gedraaid.
wat betreft snelheid van servo en code en wat dat voor invloed heeft op welke kant de monocopter daadwerkelijk op gaat vliegen moet ik inderdaad proefsgewijs uitzoeken. Ik moet dan een vertraging in het aansturen van de servo maken.

ik heb met de volgende code een voorkant gekozen. De voorkant is dan ergens tussen 0 en 359 graden en word veranderd met yawinput van de zender. (commentaar in het engels voor internationale leesbaarheid)

Code: Selecteer alles

    yawinput = ((unYAWIn)-1500); //maakt van 1000 stick links tot 2000 stick rechts (unYAWIn signaal) een getal van -500 tot +500
 
    yaw = (newyaw + yawinput);     // Flightdirection newyaw + yawinput (-500 tm +500)

    newyaw=yaw;  //newyaw is equal to yaw so its vallue is wil be increased by yawinput in next loopcycle.
    
    yaw = map(newyaw, -32767, 32767, 0, 359); // keep yaw within 0 to 359 becouse int are -32767 to 32767.
Ik heb met de volgende code een ledje laten branden wanneer de vleugeltip voorbij mijn gekozen voorkant draait. De gekozen voorkant word continu vergeleken met het kompas en wanneer ze gelijk zijn aan elkaar (+-10 graden) mag het ledje aan.

Code: Selecteer alles

if (headingDegrees >= yawmin && headingDegrees <= yawplus) //is heading between yawmin and yawplus??
    
  {digitalWrite (13, HIGH); // Then LED ON
  }
  else
  {digitalWrite (13, LOW); //else LED OFF
  }
hier weer het plaatje wat yawmin en yawplus inhoudt.
Afbeelding

Ik heb iets nodig dat de stuurbeweging doet in de tijd van één rondje dus als eerste moet ik weten hoe lang een rondje duurt.

Code: Selecteer alles

if (headingDegrees >= yawmin && headingDegrees <= yawplus) //is heading between yawmin and yawplus??
    
  {
   cyclestart =millis();    //start couting cyclespeed
   cyclespeed = cyclestop; //cyclespeed needs the vallue cyclestop has at this piont in loop
  }
     
  if ((headingDegrees >= yawmin && headingDegrees <= yawplus)-1) //is heading between yawmin and yawplus MINUS 1°!!
    
    cyclestop =(millis()-cyclestart); //stop counting cyclespeed
cyclespeed heeft nu dus de tijd dat één rondje duurt 8-)


Cyclespeed begint altijd met tellen wanneer de voorkant voorbij komt ik kan dus de stuurbewegingen nick en roll afleiden van dit getal.

In één rondje word mijn kompas ongeveer maximaal 40x vernieuwd het heeft dus geen zin iets te maken wat vaker vernieuwd.

ik deel dan mijn cyclespeed op in 40 stukjes en ik moet dit ook gaan doen met mijn signaal nick en roll.

Code: Selecteer alles

cyclepart = (cyclespeed/40);
  
  nickpart = (unNICKIn-1500); (nog even delen door 40)
  
  rollpart = (unROLLIn-1500);(nog even delen door 40)
Ik kan nu aan elk deeltje van mijn cyclespeed gaan vertellen hoeveel procent van nick en roll ze krijgen toegewezen.
Dus wanneer het eerste deeltje van cyclespeed actief is moet daar nick 100% invloed krijgen en roll 0%. wanneer de monocopter 90 verder is gedraaid dus 10 cyclespeed deeltjes verder moet roll 100% invloed hebben en nick 0%

Re: Monocopter experimenteel ontwerp

Geplaatst: zo dec 29, 2013 8:33 am
door Jan Jaap
Luppie schreef:
Ik heb met de volgende code een ledje laten branden wanneer de vleugeltip voorbij mijn gekozen voorkant draait. De gekozen voorkant word continu vergeleken met het kompas en wanneer ze gelijk zijn aan elkaar (+-10 graden) mag het ledje aan.
Als ik dit goed begrijp krijg je dus een knipperend lampje wat de voorkant aangeeft?
Afhankelijk van de draaisnelheid: stel 3 tot 5x per seconde, krijg je dus een knipperend lampje van 3 tot 5Hz. Dat lijkt me niet goed zichtbaar.

Re: Monocopter experimenteel ontwerp

Geplaatst: zo dec 29, 2013 10:03 am
door luppie
Klopt JJ het lampje brand nu ook maar 20 graden van de 360 graden en wanneer hij 5 rondjes per seconde doet brandt het lampje iets meer dan 0,01 seconde per keer :shock: . Gelukkig kan ik dat allemaal instellen dus we zullen zien.

Re: Monocopter experimenteel ontwerp

Geplaatst: zo dec 29, 2013 11:17 pm
door luppie
Na twee middagen en avonden woest programmeren ben ik weer een mooi stukje verder gekomen. Ik denk zelfs dat het einde in zicht komt want ik heb een mogelijke oplossing voor het sturen in een richting verzonnen al moet dit natuurlijk wel getest worden.

Ik meet dus hoe lang een rondje duurt. Het is een soort stopwatch die na elk rondje opnieuw begint met tellen. De waarde die ik dan krijg bewaar ik en deel ik in 40 stukjes. Ik heb nu dus 1/40 ste deeltje van de totale omwenteling.

Code: Selecteer alles

cyclepart = (cyclespeed/40);
Ik heb nu 40 formules gemaakt met elk zijn eigen stukje van de omwenteling door dat deeltje te vermenigvuldigen met de plaats binnen de omwenteling. Wanneer bijvoorbeeld deeltje x 20 overeenkomt met de stopwatch die dan loopt is mijn omwenteling precies op de helft aangekomen.

Bij elke berekening van waar we zijn in de omwenteling heb ik verteld wat de servo van nick en roll op dat moment moeten doen. Als voorbeeld hier 3 van de 40 berekeningen.

Code: Selecteer alles

 if (cyclecounter==0)//start of the cycle.This is the first cyclepart
 { rollcycle = rollinneg; //rollinput-negatif has 100% effect
   nickcycle = nickinput-450; // nickinput has 10% effect
 }
 
 if ((int (cyclepart*1))==cyclecounter) //the second cyclepart
 { rollcycle = rollinneg-50; //rollinput-negatif has 90% effect
   nickcycle = (nickinput-400); //nickinput has 20% effect
 }
 
 if ((int (cyclepart*2))==cyclecounter) //the 3rd cyclepart
 { rollcycle = rollinneg-100; //rollinput-negatif has 80% effect
   nickcycle = (nickinput-350); //nickinput has 30% effect
 }
Om de code te begrijpen moet je weten dat ik de signalen van de zender heb omgebouwd tot:
-500 stick links
0 stick midden
+500 stick recht

En omdat bijvoorbeeld stick rechts (roll rechts) twee verschillende bewegingen van de servo moet veroorzaken in één omwenteling (namelijk naar beneden in de richting waar we heen willen en naar boven in de tegenovergestelde richting). Moet het signaal -500 tm +500 omgedraaid worden.

Code: Selecteer alles

nickinneg = map(nickinput, -500, 500, 500, -500); // the inverse of rollinput needed for rollcycle front side
    rollinneg = map(rollinput, -500, 500, 500, -500);  // the inverse of nickinput needed for nickcycle left side
Hier een print van de 40 berekeningen dat laat zien wanneer elk stukje servo uitslag mag plaatsvinden
165.00 <de totale draaitijd
0,4,8,12,16,20,24,28,33,37,41,45,49,53,57,61,66,70,74,78,82,86,90,94,99,103,107,111,115,119,123,127,132,136,140,144,148,152,156,160, <40 punten binnen de totale draaitijd
Of dit gaat werken? geen idee...

De hele code is inmiddels 786 regels lang :shock: niet slecht voor een eerste projectje

Re: Monocopter experimenteel ontwerp

Geplaatst: zo dec 29, 2013 11:30 pm
door luppie
Ik heb trouwens nog gezocht naar code dat gerelateerd is aan het volgende:

Afbeelding

of Night Blades op helicopters..
http://youtu.be/5J52MLXXUy4

Ze laten ook een bepaalde volgorde van dingen gebeuren binnen een omwenteling maar geen idee hoe... :x

Re: Monocopter experimenteel ontwerp

Geplaatst: ma dec 30, 2013 9:36 am
door Erikf
Jammer dat de eerst volgende indoor avond pas in Februari is..... of zou in het clubhuis ruimte genoeg zijn voor een maiden ;)

Ik zie dat je de volgende uitdaging ook al hebt gevonden......in donker plaatjes maken met een rotorblad :mrgreen:

Re: Monocopter experimenteel ontwerp

Geplaatst: di dec 31, 2013 12:28 pm
door flymax
Luppie schreef: Ze laten ook een bepaalde volgorde van dingen gebeuren binnen een omwenteling maar geen idee hoe... :x
Johannes, dat dit allemaal binnen 1 omwenteling gebeurt is een veronderstelling die niet perse juist hoeft te zijn. Het menselijk oog is zo traag dat het ook zo maar kan zijn dat het meerdere omwentelingen zijn.

Bovendien is het voordeel dat zij 1 vast punt kunnen kiezen, terwijl jij ook nog eens een wisselende orientatie hebt.

Al met al blijf ik vol bewondering je doorzettingsvermogen volgen!!
Max