Stap 3: Bouwen - Software
Schets gebruikt
De accelerologger loopt met Arduino, en de code/schets kan worden gevonden hier.
Enkele opmerkingen over de algemene delen van de code:
- De 3 DIP-schakelaars die zijn gecodeerd (#2-4) zijn getrokken-up met de pinnen interne weerstanden. De actie van de schakelopties zijn:
- DIP02: continue lezing. Als de schakelaar uitstaat (pin hoge) wordt de duur van de lezing gedefinieerd door TimeR (tijd van lezing), waarvan de waarde is gedefinieerd in de code. Als de schakelaar brandt (pin laag) de gegevens lezen en schrijven gaat ononderbroken (er is een coderegel waar dit kan worden beperkt, standaard, die ik heb het opzetten van 2 uur).
- DIP03: onderbreekt de lezing. Als de schakelaar (pin hoge uitstaat) de lezing gaat als opgegeven door DIP02. Als de schakelaar brandt (pin laag) de lezen & schrijven stap wordt overgeslagen, maar de timers zijn niet gestopt. Dit zorgt voor een schone stilstand van de lezing in geval van nood.
- DIP04: kalibratie. Als de schakelaar uitstaat (pin hoog) is er een kalibratiefase reeds zijn geïnstalleerd tijdens setup. Als de schakelaar brandt (pin laag) wordt de kalibratie-stap overgeslagen.
- De DIP-switch die is niet gecodeerd (#1) bevoegdheden de Arduino Pro van de batterijen. De uit-stand betekent hier schakelen verbroken (neen-kracht).
- De kalibratiefunctie gewoon gegevens leest en schrijft u deze naar de SD-kaart gedurende een periode die is gedefinieerd in de code (TimeC). Er is geen gebruik in de code van de kalibratieresultaten, het doel is alleen om informatie te verzamelen in een gecontroleerde stadium. Wat aan deze informatie te worden verstrekt, is een kwestie van postprocessing (zie volgende stap).
- De gegevens lezen en schrijven van de frequentie kan worden opgegeven in de code (naam van variabele: frequentie in Hz). Om het aanpassen van de timing is een input vereist: de gemiddelde tijd van lezen en schrijven (TimeDRW), die in mijn ervaring 20-25 ms. de resulterende frequentie is is niet exact, net goed genoeg voor mijn doeleinden.
- De gele LED brandt wanneer de dingen gaan OK (lezen en schrijven), langzaam knippert tijdens voorbereiding (setup) en de voltooiing van de gegevens lezen & schrijven. Als er een probleem met de gegevens (de x-component van de versnelling is -1 of 0), knippert de rode LED voor een korte tijd; Als het probleem betrekking heeft op de SD-kaart, brandt de rode LED. Wanneer er een SD-gerelateerde problemen of de taak is voltooid overschakelt de schets op een rust (ongeldig lus) na voorafgaande kennisgeving aan met de bijbehorende knipperen.
MPU6050 en Software
Met betrekking tot de MPU6050:
- De communicatie met de Raad van bestuur wordt gedaan via de I2C-protocol.
- Ik heb de code bereid byJohn Chi bij http://playground.arduino.cc/Main/MPU-6050gebruikt.
- Jeff Rowberg heeft intensief gewerkt aan bibliotheken en code voor dit apparaat (Zie https://github.com/jrowberg/i2cdevlib en http://www.i2cdevlib.com), maar voor mijn doeleinden vond ik dat Chi's aanpak goed genoeg door de draad bibliotheek was.
- De onbewerkte gegevens gelezen door de MPU6050 is in lokale coördinaten. Als algemene coördinaten nodig zijn, heeft de MPU6050 een extra processor (DMP, Digital Motion Processor) die voor de vereiste berekeningen zorgen kan. Deze DMP heeft ook fout minimalisering mogelijkheden. Toegang tot de resultaten van de DMP kan worden bereikt via de bibliotheken geschreven door Jeff Rowberg.