De Lego Mindstorms RCX slinger |
Datum: Februari 2010
Inleiding:
Jaren geleden ben ik ooit eens met een Lego project bezig geweest om een geinverteerde slinger te bouwen. Daar ben ik halverwege mee gestopt maar laatst realiseerde ik me dat de behaalde resultaten een uitstekend slinger, data logging en data analyse experiment beschrijven. |
Principe:
Een slingerexperiment uitvoeren met de Lego Mindstorms RCX.
Materiaal:
|
|
|
|
Experimentele opstelling:
In eerste instantie heb ik
de opstelling gebouw zoals
in nevenstaande foto's is weergegeven.
|
|
Zoals hierboven getoond heb ik het experiment zoals het op deze pagina beschreven wordt uiteindelijk niet uitgevoerd. Hier wil ik alleen maar de slinger karakteristieken meten, ik heb dus geen motor nodig om de slinger aan te sturen (op te kunnen slingeren), ik heb slechts een motor nodig om de snelheid te meten. De uiteindelijke meetopstelling is dan zoals weergegeven op onderstaande foto. | |
De linkermotor wordt gebruikt als snelheidssensor en is ook gekoppeld aan de rotatiesensor. De weerstand die in het circuit is opgenomen is ook duidelijk te zien. | |
Een gelijkstroommotor in een open circuit produceert een
voltage dat evenredig is met de hoeksnelheid.
Door een van de twee draden in de LEGO connector door te knippen en er een weerstand in op te nemen beschermen we de sensoringang. Het signaal dat een dergelijke versnellingssensor produceert bevat veel ruis. Ontruis het signaal door gebruik te maken van een filter. |
Uitvoering en resultaten:
In nevenstaande filmpje is een experiment in uitvoering te zien. De natuurkunde verteld ons
dat een slinger een stabiele positie heeft waarbij de potentiële energie
minimaal is. Dit is uiteraard de positie waarbij de massa naar beneden
hangt. De lengte van deze slinger is 32 cm. Indien de slinger zich zuiver
mathematisch zou gedragen zou deze een oscillatieperiode hebben van: |
YouTube link: Lego Pendulum |
De massa is echter niet regelmatig gedistribueerd. Om de gereduceerde lengte te bepalen moet men daarom metingen verrichten om de hoeksnelheid te bepalen. Het experiment dat we uitvoeren is een gewone slingerbeweging waarbij we de slinger optillen en weer loslaten. De sensoren registreren dan verschillende waardes die geïnterpreteerd worden om de hoeksnelheid te kunnen berekenen. Voor het registreren van de sensorwaardes maken we gebruik van een klein NQC datalogging programma. |
|
// measuring angle and speed of a pendulum // timer functions in 10 ms intervals # define DATALOG_SIZE 2000 task main() { SetSensorType (SENSOR_1, SENSOR_TYPE_ROTATION); SetSensorType (SENSOR_3, SENSOR_TYPE_TOUCH); SetSensorMode(SENSOR_1, SENSOR_MODE_ROTATION); // rotation SetSensorMode(SENSOR_2, SENSOR_MODE_RAW ); // raw value SelectDisplay(1); // raw value on RCX display CreateDatalog(DATALOG_SIZE); ClearTimer(0); // Set de timer to 0 int i=0; while (i < DATALOG_SIZE) { AddToDatalog(i); // add counter to datalog AddToDatalog(FastTimer(0)); // add time to datalog AddToDatalog(SENSOR_1); // add sensor value to datalog AddToDatalog(SENSOR_2); // add sensor value to datalog i++; } PlaySound(3); // tell us its over } |
|
|
|
Sub
ProcessData() 'Program to convert LEGO datalog values to a more operatable form. ' @ 16/10/2005 by Ruud.Herold 'Notes: 'index = row, column 'Define some variables Dim CounterData As Integer 'counter in processed data sheet Dim CounterRaw As Integer 'counter in Raw data sheet 'Initialize variables CounterRaw = 1 CounterData = 2 'Start of program While Worksheets("rawdata").Cells(CounterRaw, 1).Value <> "" If Worksheets("rawdata").Cells(CounterRaw, 1).Value <> "" Then Worksheets("data").Cells(CounterData, 1).Value = Worksheets("rawdata").Cells(CounterRaw, 2).Value Worksheets("data").Cells(CounterData, 2).Value = Worksheets("rawdata").Cells(CounterRaw + 1, 2).Value Worksheets("data").Cells(CounterData, 3).Value = Worksheets("rawdata").Cells(CounterRaw + 2, 2).Value Worksheets("data").Cells(CounterData, 4).Value = Worksheets("rawdata").Cells(CounterRaw + 3, 2).Value End If CounterRaw = CounterRaw + 4 CounterData = CounterData + 1 Wend End Sub |
|
De data die we
mbv dit programma verzameld hebben analyseren we vervolgens verder in Excel (datalog.xls).
De eerste sensordata die we analyseren
is de data van de rotatiesensor. Het was even puzzelen hoe de meetdata
geïnterpreteerd moest worden. De rotatiesensor is echter aan de slinger gekoppeld via tandwielen. Op de sensor zelf zit een 8 punts tandwiel en op de as van de motor een met 40 punten. De overdrachtsverhouding is dus 1 op 5.
Een volledige rotatie van het kleine tandwiel is 16 counts
van de rotatiesensor. Ik draai de slinger eerst helemaal op naar de bovenste
stand, en laat hem dan los. Van de hoogste naar de laagste stand komt
overeen met een afstand van 180°, daarna klimt de slinger weer omhoog. 180°
komt overeen met 20 tandjes. M.a.w. 20/8 rotaties = 20/8 * 16 counts = 40
counts. Op 40 counts zou dan het diepste punt moeten liggen waarom heen de
slinger op en neer beweegt. Kijken we naar de ruwe meetdata dan klopt dat
aardig. De vertaalslag naar graden maken we als volgt: 180°/40 = 4.5° per
count. Door nu te stellen dat het laagste punt op 0° ligt bereken we de
positie t.o.v. dat punt met de volgende formule: meetwaarde * 4.5 - 180. De
resultaten zijn weergegeven in onderstaande grafiek. |
|
Noteren we nu de nulpunten uit de opgeschoonde grafiek dan kunnen we van daaruit de trillingstijd berekenen. Nemen we dan de laatste waardes uit de serie, waar de hoek dus relatief klein is, dan berekenen we een trillingstijd van 1.11 s. Een waarde die zeer dicht bij de theoretische van 1.135 s ligt. |
|
Een Lego motor is een DC type motor waarbij men
normaliter een spanning over heen zet waarna de as gaat roteren. Dit proces
kan men ook omdraaien, als de as draait wordt er een spanning gegenereerd.
De te sneller de as draait des te meer spanning gegenereerd wordt. De
polariteit van de spanning wordt bepaald door de richting waarin de as
draait, met de klok mee of tegen de klok in. We nemen alleen een weerstand
in de schakeling op om de sensor poort te beschermen. Deze weerstand creëert
een aarde als de tachometer niet draait.
De tachometer geeft vrij nauwkeurig de hoeksnelheid van de slinger weer.
Als we een eerste blik op de meetdata werpen ziet een en ander er redelijk
netjes uit. |
|
|
|
Indien we echter een blik werpen op de 1ste afgeleide van het sensorsignaal dan kunnen we onderstaande grafiek produceren. |
|
|
|
In de 1ste afgeleide zien we een ontzetten ruizig signaal, pieken die daar niet thuishoren. Deze worden veroorzaakt door hoog frequente variaties in de spoel van de motor die ontstaan t.g.v. het sampling proces. Deze variaties kunnen we er uit filteren m.b.v. een zgn infinite response filter: Gemiddelde = (Lopend Gemiddelde + meetwaarde + 511)/3
Hierin is 511 onze eerste meetwaarde. |
|
|
|
Voor de conversie naar rotatie-sensor incrementen per seconde gebruiken we de vergelijking:
|
|
Ook nu kunnen we de ""nulpunten"gebruiken om de trillingstijd berekenen. Wederom vinden we een waarde van 1.11 s. |
|
De berekening van de trillingstijden kunnen we ook weer
grafisch weergeven. In de grafiek kunnen we dan waarnemen dat bij kleinere hoeken de triliingstijd zich min of meer stabiliseert. |
|
|
|
We kunnen ook de dempingsfactor berekenen door van
bovenstaande grafiek steeds de absolute waarde te berekenen hetgeen
resulteert in onderstaande grafiek. |
|
|
|
De dempingsfactor bereken je dan door opeenvolgende de ratio van de toppen te nemen en deze vervolgens te middelen. Op deze manier berekenen we een dempingsfactor van 1.1. Hoe lager deze dempingsfactor des te minder weerstand de slinger ondervindt. | |
Als we de wiskunde bestuderen die betrekking
heeft op de slinger dan is het noodzakelijk om te onderkennen dat we bij
grote hoeken, waar we de vereenvoudiging sin(A) = A niet meer kunnen
toepassen, we te maken hebben met een niet-lineair systeem. Bij de
niet-lineaire systemen is er vaak geen analytische oplossing mogelijk van de
differentiaalvergelijking die het systeem beschrijft. Een fase ruimte is een verzameling van mogelijke toestanden van een analytisch systeem. Een fase ruimte kan eindig zijn (bv bij het opgooien van een muntje hebben we maar twee toetstanden nl kop en munt), telbaar eindig (bv. toestandsvariabelen zijn integers) en ontelbaar oneindig (bv toestandsvariabelen zijn complex). Impliciet wordt hierbij aangenomen dat een bepaalde toestand in de fase ruimte het systeem volledig beschrijft, alles dat we over het systeem moeten weten om de nabije toekomst te kunnen beschrijven is aanwezig. De fase ruimte van een slinger is 2-dimensionaal en bevat de positie (hoek) en snelheid. Volgens Newton kan door het specificeren van deze twee variabelen de daaropvolgende beweging van de slinger beschreven worden. Het fasediagram dat we gemeten hebben wordt weergegeven in onderstaande figuur. |
|
In bovenstaande experiment was de slinger op het einde van de meetperiode nog in beweging. Onderstaande experiment geeft het fase diagram weer van een experiment waarbij een aansturingsmotor in het systeem was opgenomen zoals oorspronkelijk gepland. | |
Conclusies:
|
Literatuur:
|
Relevante websites:
Minder relevante websites:
Opmerkingen:
|
Achtergrondinformatie:
|
16/01/2017