Invoering
In dit artikel bespreken we hoe u een dataloggingproject kunt maken dat de VEX Robot de opdracht geeft gegevens te verzamelen met de VEX Brain en deze op te slaan in een CSV-bestand op de SD-kaart voor gegevensanalyse.
Datalogging is een krachtig hulpmiddel dat we kunnen gebruiken om wetenschappelijk onderzoek te ondersteunen, onze eigen experimenten uit te voeren en specifieke problemen op te lossen. Er zijn verschillende leuke en opwindende taken die we met de VEX Robot kunnen uitvoeren door middel van datalogging. Hier volgen enkele voorbeelden:
- Gegevens verzamelen met de afstandssensor om de snelheid van de robot te berekenen.
- Rijd de robot door het klaslokaal en verzamel gegevens met de optische sensor om lichtveranderingen op verschillende locaties waar te nemen.
- Door de robot mee te nemen op avontuur en GPS-coördinatengegevens op te nemen om een kaart te maken.
Codeervaardigheden die nodig zijn voor het ontwikkelen van een dataloggingproject
- Gebruik verschillende commando's om gegevens te verzamelen met VEX Brain/Sensors en deze toe te voegen aan een datastructuur.
- Schrijf de gegevens naar een bestand met door komma's gescheiden waarden (CSV) op de SD-kaart.
Hardware vereist voor datalogging:
- Een VEX-brein (IQ, V5, EXP)
- Een SD-kaart
- Een sensor of meerdere sensoren (optioneel, afhankelijk van de vereiste gegevens)
Gegevens van de sensor verkrijgen
We kunnen de VEX Robot (IQ, V5, EXP) programmeren om de gegevens van de volgende sensoren vast te leggen:
- Traagheidssensor
- Afstandssensor
- Optische sensor
- Visiesensor
- Rotatiesensor (V5, EXP)
- GPS-sensor (V5)
Opmerking: De VEX IQ (2e generatie) Brain en de VEX EXP Brain hebben een ingebouwde traagheidssensor. Met deze VEX Brains kunnen we de traagheidssensorgegevens verzamelen.
In dit artikel zullen we een dataloggingproject ontwikkelen dat de acceleratiegegevens verzamelt met de VEX IQ Brain (2e generatie) en deze opslaat op een SD-kaart.
Eerst moeten we een kort programma schrijven om metingen te krijgen van de timer en de traagheidssensor die in de VEX IQ Brain (2e generatie) zijn ingebouwd.
- Aan het begin van dit programma moeten we de Python-modules importeren om VEX IQ Brain (2e generatie) te besturen en de gegevens daaruit op te halen. Begin dus met het toevoegen van deze instructies aan het project.
- Voeg vervolgens de code toe om een variabele
numOfDataEntries
te declareren om het aantal gegevensinvoer voor opname op te slaan, declareer een variabelepolling_delay_msec
om de waarde van het tijdsinterval voor het lezen van gegevens op te slaan, en maak een lege stringvariabeledata_buffer
om op te slaan de gegevens die van de sensor worden gelezen. - Omdat we de huidige waarde van de timer zullen gebruiken om de tijdstempel aan de gegevens toe te voegen, moeten we de timerwaarde terugzetten op 0 seconden voordat we beginnen met het verzamelen van gegevens.
- Voordat we de instructie gebruiken die de gegevens van de VEX IQ Brain (2e) ophaalt en de gegevens in de buffer registreert, moeten we deze eerst begrijpen.
De volgende instructie voegt de huidige timerwaarde toe aan dedata_buffer
variabele in een specifiek formaat.Laten we de formaatreeks
“%1.3f”
opsplitsen:- “%”: introduceert de conversiespecificatie.
- “1”: Geeft het minimumaantal cijfers aan dat in de string aanwezig moet zijn.
- “.3”: specificeert het aantal decimalen dat in het opgemaakte getal moet worden opgenomen.
- “f”: geeft aan dat de op te maken waarde een getal met drijvende komma is.
We kunnen dus de notatiereeks “%1.3f” gebruiken om een getal met drijvende komma op te maken met een minimale breedte van 1 cijfer en een nauwkeurigheid van 3 decimalen.
- Nu kunnen we de timer en de versnellingswaarde van de traagheidssensor lezen die is ingebouwd in de VEX IQ Brain (2e generatie) en vervolgens de gegevens toevoegen aan de variabele
data_buffer
in het opgegeven formaat.Opmerking: “\n” is het teken Nieuwe regel. Het geeft aan dat de lijn hier eindigt en het begin van een nieuwe lijn is.
- Om vervolgens een bepaald aantal gegevensinvoer in de variabele
data_buffer
op te nemen, kunnen we eenfor lus
gebruiken om herhaaldelijk de instructies uit te voeren die de gegevens ophalen en de gegevens gedurende een aantal iteraties toe te voegen aan de variabeledata_buffer
. Onze strategie is om de waarde van de variabelenumOfDataEntries
te gebruiken om het aantal iteraties te bepalen.
- Tot nu toe registreert ons programma gegevens zo snel mogelijk. We willen echter gegevens op specifieke tijdsintervallen vastleggen. Daarom kunnen we een
wait()
functie gebruiken in defor-lus
om het programma te pauzeren om het specifieke tijdsinterval tussen twee metingen toe te voegen. We gebruiken de waarde van de variabelepolling_delay_msec
om de waarde van het tijdsinterval te bepalen.
Gefeliciteerd! We hebben het programma voltooid om metingen (de versnellingsgegevens) te verkrijgen van de traagheidssensor die in de VEX Brain is ingebouwd. Vervolgens zullen we onderzoeken hoe u de gegevens naar een CSV-bestand op de SD-kaart kunt schrijven.
De SD-kaart bevestigen aan de VEX Brain
Voordat u de gegevens naar een bestand op een SD-kaart schrijft, plaatst u eerst de SD-kaart in de SD-kaartsleuf van de VEX Brain.
Opmerking: Formatteer de SD-kaart naar FAT32 voor het schrijven van gegevens. We raden u aan SD-kaarten te gebruiken die 32 GB of minder groot zijn.
Om ervoor te zorgen dat het schrijven van gegevens naar een bestand op de SD-kaart onder de juiste omstandigheden kan worden uitgevoerd, moeten we code toevoegen om te controleren of de SD-kaart correct in de VEX IQ Brain (2e generatie) is geplaatst.
- Gebruik de functie
brain.sdcard.is_inserted()
om te controleren of de SD-kaart is geplaatst. Als de SD-kaart niet is geplaatst, geeft u het bijbehorende bericht op het VEX IQ Brain Screen weer en houdt u het programma vast.
Opmerking: debrain.sdcard.is_inserted()
functie retourneert True als er een SD-kaart in de Brain wordt geplaatst.
De gegevens naar een CSV-bestand op de SD-kaart schrijven
Tot nu toe kan ons programma gegevens verzamelen met de VEX IQ Brain (2e generatie). Om het dataloggingproject te voltooien, moeten we de gegevens naar een door komma's gescheiden waardenbestand (CSV) op de SD-kaart schrijven voor toekomstig onderzoek en analyse.
- Wanneer we verschillende soorten gegevens naar een CSV-bestand schrijven, willen we weten welk type gegevens elke kolom bevat. Om dit te doen, kunnen we de CSV-koptekst toevoegen aan de variabele
data_buffer
voordat we gegevens opnemen.
Voeg dus de code toe om een variabelecsvHeaderText
te declareren om de CSV-headertekst op te slaan om de kolomnamen voor het CSV-bestand op te geven en een variabelesd_file_name
te declareren om de naam van het CSV-bestand op te slaan dat op het CSV-bestand moet worden geschreven SD-kaart.
Opmerking: Zorg ervoor dat de headers in dezelfde volgorde staan als de gegevens die zijn opgeslagen in de variabele data_buffer
.
- Voeg vervolgens de CSV-headertekst toe aan de tekenreeks
data_buffer
vóór devoor lus
voor gegevensverzameling.
- Voordat we gegevens naar een bestand op de SD-kaart schrijven, moeten we eerst begrijpen hoe we de functie
brain.sdcard.savefile()
kunnen gebruiken.
Deze instructie schrijft de gegevens die zijn opgeslagen in de variabeledata_buffer
naar een benoemd CSV-bestand op de SD-kaart.
Laten we het even opsplitsen:-
brain.sdcard.savefile(): De functie slaat een byte-array op in een benoemd bestand op de SD-kaart. De functie retourneert het aantal bytes dat naar het bestand is geschreven.
-
sd_file_name: De eerste parameter van de functie. Geeft de naam aan van het bestand dat moet worden geschreven. In dit project wordt de bestandsnaam opgeslagen in de variabele
sd_file_name.
-
bytearray(datat_buffer,'utf-8'): De tweede parameter van de functie. Vertegenwoordigt de bytearray die in het bestand moet worden geschreven.
-
- bytearray(): De methode creëert een veranderlijke bytearray. In deze instructie gebruiken we het om een string naar een bytearray te converteren door de codering op te geven.
- data_buffer: De eerste parameter van de methode. Geeft de bron aan die moet worden geconverteerd naar een bytearray. In dit project zijn de gegevens die zijn opgeslagen in de variabele
data_buffer de bron.
- 'utf-8': De tweede parameter van de methode. Geeft de opgegeven codering aan die wordt gebruikt om de tekenreeks te coderen. De codering is 'utf-8' in deze instructie.
-
-
- Na de
for lus
voor gegevensverzameling gebruikt u de functiebrain.sdcard.savefile()
om de gegevens die zijn opgeslagen in de variabeledata_buffer
naar het CSV-bestand op de SD-kaart te schrijven. Voeg bovendien de code toe om de geretourneerde waarde van de functiebrain.sdcard.savefile()
te controleren om te verifiëren of de gegevens met succes naar het bestand zijn geschreven en geef het bijbehorende bericht weer op het VEX IQ Brain Screen om real- tijd feedback.
Opmerking: De functiebrain.sdcard.savefile()
retourneert het aantal bytes dat naar het bestand is geschreven. In dit project gebruiken we het om de verzamelde gegevens naar een CSV-bestand te schrijven, dus het aantal bytes dat naar het bestand wordt geschreven, moet groter zijn dan nul. Met andere woorden: als de functiebrain.sdcard.savefile()
0 retourneert, kunnen we concluderen dat de gegevens niet met succes naar het bestand zijn geschreven. Anders zijn de gegevens in het bestand geschreven.
Gefeliciteerd! We hebben een dataloggingproject ontwikkeld dat de acceleratiegegevens verzamelt met de VEX IQ Brain (2e generatie) en deze opslaat in een CSV-bestand op de SD-kaart. Vervolgens zullen we onderzoeken hoe u het CSV-bestand kunt openen voor gegevensanalyse.
Het CSV-bestand openen voor gegevensanalyse
Nadat de gegevens naar het CSV-bestand op de SD-kaart zijn geschreven, kunnen we een spreadsheetapplicatie gebruiken om het bestand te openen om de gegevens te lezen en te analyseren.
Opmerking: Twee van de meest gebruikte spreadsheettoepassingen zijn Google Spreadsheets en Microsoft Excel. In dit artikel gebruiken we Google Spreadsheets (webgebaseerd) om het CSV-bestand op de SD-kaart te openen. Het proces voor het gebruik van andere applicaties is vergelijkbaar.
- Verwijder de SD-kaart uit de SD-kaartsleuf van de VEX IQ Brain. Als de computer een ingebouwde Micro SD-kaartsleuf heeft, kunnen we de SD-kaart rechtstreeks in die sleuf plaatsen. Plaats anders de SD-kaart in een SD-kaartadapter en sluit de adapter vervolgens aan op de computer.
- Log in op ons Google-account en open Google Spreadsheets. Maak een nieuw werkblad.
- Open in de spreadsheet het menu “Bestand” , selecteer “Importeren” -> “Uploaden” -> “Bladeren” en kies vervolgens het CSV-bestand op de computer. Na het uploaden van het CSV-bestand klikt u op de knop “Gegevens importeren”. Na het importeren van gegevens klikt u op “Nu openen” om de verzamelde gegevens in het CSV-bestand te bekijken.
- (Optioneel) Een eenvoudige manier om de gegevens te analyseren is door een grafiek te tekenen en vervolgens naar de trends in de gegevens te zoeken. Open in de spreadsheet het menu “Invoegen” en selecteer “Grafiek” om een grafiek te tekenen met behulp van de gegevens in het CSV-bestand. De volgende grafiek is het resultaat van de acceleratiegegevens verzameld met de VEX IQ Brain (2e generatie).
Opmerking: We kunnen de Grafiekeditor gebruiken om een ander grafiektype te selecteren of de grafiek te bewerken op basis van onze behoeften.
Tot nu toe hebben we het dataloggingproject afgerond, waarbij gegevens worden verzameld met de VEX IQ Brain (2e generatie) en deze worden opgeslagen in een CSV-bestand op de SD-kaart. We hebben ook geleerd hoe we het CSV-bestand op de SD-kaart kunnen lezen met Google Spreadsheets en zelfs een grafiek kunnen maken voor verdere analyse. Wat nu? Laten we proberen meer opwindende experimenten te plannen met behulp van de VEX-robot voor datalogging, om te observeren hoe de veranderende omgevingsfactoren verschillende soorten gegevens beïnvloeden en een dieper inzicht te krijgen in de wereld om ons heen.