Monocopter experimenteel ontwerp

Enkelblads helikopter, esdoornzaad, monocopter, roterende vleugel.
Plaats reactie
Gebruikersavatar
luppie
Beheerder
Berichten: 1731
Lid geworden op: do aug 12, 2010 9:29 pm
Locatie: Double-u monkeyfield
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door luppie » vr dec 27, 2013 10:28 pm

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.
Heb je vragen over foto's op het forum of andere privacy gevoelige dingen, stuur dan een pb of email naar mij.

Gebruikersavatar
Erikf
Lid
Berichten: 779
Lid geworden op: za sep 24, 2011 4:41 pm
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door Erikf » za dec 28, 2013 8:41 am

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
Groeten,
Erik

Gebruikersavatar
eric_laermans
Berichten: 93
Lid geworden op: za sep 14, 2013 9:14 am
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door eric_laermans » za dec 28, 2013 11:27 am

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 :) .

Gebruikersavatar
luppie
Beheerder
Berichten: 1731
Lid geworden op: do aug 12, 2010 9:29 pm
Locatie: Double-u monkeyfield
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door luppie » za dec 28, 2013 1:23 pm

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%
Heb je vragen over foto's op het forum of andere privacy gevoelige dingen, stuur dan een pb of email naar mij.

Gebruikersavatar
Jan Jaap
Berichten: 1411
Lid geworden op: vr aug 13, 2010 6:38 pm
Locatie: IJsselmuiden
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door Jan Jaap » zo dec 29, 2013 8:33 am

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.
Groeten JJ. Een niet gevlogen dag is weer voorbij gevlogen

Gebruikersavatar
luppie
Beheerder
Berichten: 1731
Lid geworden op: do aug 12, 2010 9:29 pm
Locatie: Double-u monkeyfield
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door luppie » zo dec 29, 2013 10:03 am

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.
Heb je vragen over foto's op het forum of andere privacy gevoelige dingen, stuur dan een pb of email naar mij.

Gebruikersavatar
luppie
Beheerder
Berichten: 1731
Lid geworden op: do aug 12, 2010 9:29 pm
Locatie: Double-u monkeyfield
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door luppie » zo dec 29, 2013 11:17 pm

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
Heb je vragen over foto's op het forum of andere privacy gevoelige dingen, stuur dan een pb of email naar mij.

Gebruikersavatar
luppie
Beheerder
Berichten: 1731
Lid geworden op: do aug 12, 2010 9:29 pm
Locatie: Double-u monkeyfield
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door luppie » zo dec 29, 2013 11:30 pm

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
Heb je vragen over foto's op het forum of andere privacy gevoelige dingen, stuur dan een pb of email naar mij.

Gebruikersavatar
Erikf
Lid
Berichten: 779
Lid geworden op: za sep 24, 2011 4:41 pm
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door Erikf » ma dec 30, 2013 9:36 am

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:
Groeten,
Erik

Gebruikersavatar
flymax
Lid
Berichten: 1514
Lid geworden op: zo aug 15, 2010 8:36 pm
Contacteer:

Re: Monocopter experimenteel ontwerp

Bericht door flymax » di dec 31, 2013 12:28 pm

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

Plaats reactie