Versnelling bepalen |
Datum: Maart 2009
Inleiding:
Een experiment om eens goed met enkele Lego Mindstorms sensors, maar vooral met de bijbehorende data analyse, aan de slag te gaan. |
Principe:
Het effect van de hellingshoek op de versnelling van een auto te onderzoeken.
Materiaal:
|
|
|
RCX |
Experimentele opstelling:
|
|
Het NQC programma dat we in de RCX laden om de data te verzamelen | |
// Versnelling bepalen // Auto staat op hellende plank. // Op regelmatige afstand gemarkeerd. // Data wordt verzameld met lichtsensor en rotatiesensor. // Max aantal datapunten in RCX = 1000 # define Light SENSOR_1 # define Angle SENSOR_2 # define DATALOG_SIZE 500 task main() { SetSensor(Light,SENSOR_LIGHT); SetSensor(Angle,SENSOR_ROTATION); CreateDatalog(DATALOG_SIZE); ClearTimer(0); // Set de timer to 0 int i=0; // teller while (i < DATALOG_SIZE) { AddToDatalog(FastTimer(0)); // Tijdswaarde aan datalog toevoegen AddToDatalog(Light); // licht waarde toevoegen AddToDatalog(Angle); // rotatie sensor waarde toevoegen i++; } PlaySound(3); // Einde loop bereikt } |
|
De ruwe data wordt opgeslagen in een text file. Deze lezen we vervolgens in in excel en converteren deze mbv een eenvoudige macro naar een handzamer formaat. | |
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 'Convert RCX ms value to s Worksheets("data").Cells(CounterData, 1).Value = Worksheets("rawdata").Cells(CounterRaw, 2).Value / 100 'Copy cell values 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 End If CounterRaw = CounterRaw + 3 CounterData = CounterData + 1 Wend End Sub |
Uitvoering, resultaten en discussie:
De data die we verzameld hebben analyseren we vervolgens m.b.v. een spreadsheet maar ook m.b.v. pen en papier. Ik heb eerst een experiment gedaan om te zien welke dataset gegenereerd wordt en op basis van de analyse van deze dataset de experimenten vervolgens nogmaals netjes uit te voeren. De eerste resultaten zijn weergegeven in onderstaande grafiek waarin de gemeten waardes van de lichtsensor en de rotatiesensor als functie van de tijd zijn weergegeven. |
|
|
Concentreren we ons in eerste instantie op de waardes die de lichtsensor laat zien. Dan zien we een vijftal pieken en een zesde piek waar het wagentje de plank afreed. De pieken representeren het moment waarop het wagentje over een stukje isolatietape heenrijdt. We willen nu het moment bepalen dat het wagentje een bepaalde afstand afgelegd heeft. We worden hier echter met een probleem geconfronteerd. De eerste piek is niet echt een piek maar een balk. Niet echt verrassend aangezien het wagentje op dat moment erg langzaam reed en de lichtsensor dus relatief lang een donkere waarde registreerde. De keuze die nu gemaakt moet worden is welk tijdstip bepalend wordt, het moment dat de lichtsensor in contact komt met de isolatietape of het moment dat deze verlaten wordt. Aangezien de breedte van de isolatie tape steeds hetzelfde is maakt het in principe niet uit welke van de twee we kiezen zolang we vervolgens maar consequent zijn. Indien de tape wel van breedte verschilt kan men het beste het eerste contact moment kiezen en daarom heb ik voor deze methode gekozen. In onderstaande grafiek zijn die momenten aangegeven. |
|
Daarnaast heb ik de methode van de 2de afgeleide toegepast om het tijdstip nog nauwkeuriger te kunnen bepalen. Met de 2de afgeleide bepalen we het moment waarop het grootste verschil gemeten wordt tussen 2 meetwaarden (de 1ste afgeleide is het verschil tussen 2 meetwaarden, de 2de afgeleide is het verschil tussen twee 1ste afgeleiden). Men kan met deze methode onderstaande grafiek creëren. De berekening voor het eerste buigpunt is daarnaast weergegeven. We kunnen deze methode toepassen aangezien het tijdsverschil tussen twee metingen steeds exact hetzelfde is nl 0.02 s. |
|
Passen we dit principe verder toe dan kunnen we voor elk contactmoment nauwkeurig het tijdstip bepalen. Vervolgens normaliseren we deze tijdstippen naar een startmoment waarvoor geldt t=0 het moment waarop de wagen de eerste strip isolatietape passeerde. Daaropvolgend kunnen we snelheid en versnelling, iedere keer als er weer een isolatietape gepasseerd wordt, berekenen hetgeen resulteert in de onderstaande tabel. |
En natuurlijk ook in een grafiek. |
|
Vervolgens gaan we met de waardes van de rotatiesensor aan de slag. Een rotatiesensor telt leest 16 posities per rotatie van de as met een maximale resolutie van 500 rpm. In de firmware is het gekalibreerd om of hoeken of 1/16 de rotaties te meten. In dit geval hebben we steeds 1/16 de van een rotatie gemeten. |
Kijken we nu op de tijdstippen die we hierboven bepaald hebben dan lezen we een waarde 3 af op 0 cm en een waarde 120 op t = 1 m. Het verschil is 117. In totaal heeft het wiel dus 117/16 = 7.31 wiel rotaties. De diameter van een wiel is 4.3 cm. De omtrek van een cirkel is 2.∏.r hetgeen in dit geval overeenkomt met 13.5 cm. Voor 117 tikken komt dit overeen met 98.8 cm een fout van 1.2 %. |
De les die we uit deze eerste analyse trekken is dat het startpunt erg van belang is. Voor de keuzes die gemaakt zijn kan men het beste de lichtsensor vlak voor de bovenste isolatietape zetten. Tevens heb ik het design van de slopebot een beetje aangepast. In bovenstaand experiment had ik de rotatiesensor op een van assen naast het frame zitten. Bij de daaropvolgende experimenten heb ik de rotatiesensor in het midden gezet. |
Na deze eerste
analyse ben ik de experimenten gaan uitvoeren door op twee verschillende
hoogtes het wagentje minimaal twee maal de helling af te laten rijden en het
datalog vervolgens te analyseren. De hoek waaronder de helling staat kunnen
we berekenen mbv de sinus vergelijking. De schuine zijde is 127 cm lang Hoogte 1: rechte zijde = 9.5 cm ; sin a = 9.5/127 --> a = ca. 4 ° Hoogte 2: rechte zijde = 17.5 cm ; sin a = 17.5/127 --> a = ca. 8 ° |
Het resultaat van de experimenten met een helling van 4 ° is in onderstaande grafiek weergegeven. |
|
Het resultaat van de experimenten met een helling van 8 ° is in onderstaande grafiek weergegeven. |
|
Middelen we de resultaten uit en zetten v en a uit tegen de afgelegde afstand dan krijgen we de volgende grafiek. |
|
Bekijken we de afstand die we steeds berekenen met de rotatiesensor en passen we daar een beetje statistiek op toe om standaarddeviatie en betrouwbaarheidsinterval te berekenen dan kunnen we onderstaande tabel opstellen. |
|
Het lijkt er dus op dat de rotatiesensor niet echt een nauwkeurig instrument is om afstanden mee te bepalen, een fout van 2% zit er al snel in. |
Conclusies:
|
Literatuur:
|
Relevante websites:
Opmerkingen:
|
Achtergrondinformatie:
|
12/01/2017