Van Arduino naar Exel.
Een Arduino heeft maar weinig geheugencapaciteit dus als je met video, audio of veel data wil werken moet je die ergens anders opslaan. Dat kan met een SD card module. We gaan de kaart hier gebruiken om sensordata van de Arduino op te slaan en vervolgens te importeren in een exel bestand. Er zijn verschillende modellen in omloop. Het is aan te raden om een kwalitatief goede kaart te gebruiken. Deze zijn wel duurder maar het kan veel tijd schelen. De SD card van Adafruit is in ieder geval goed en je kan ook hun uitstekende tutorial gebruiken:
https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial/intro
Hierboven twee verschillende modules. Rechts de wat duurdere van Adafruit voor een micro-sd kaart. Links de module die je voor 1$ kan kopen op ebay. Bij het voorbeeld hieronder is gebruik gemaakt van de goedkope linker module. Deze werkt goed maar bij het testen bleek (in tegenstelling tot de gevonden informatie) dat de 5v van de Arduino naar de 3,3v van de SD module moest. Probeer dus uit wat het beste werkt.
Hierboven een derde (goedkope) module voor een micro sd kaart met rechts het aansluitschema. Let op met welke pin je CS verbindt, hierboven is hij verbonden met pin 4. In de code hieronder wordt pin 10 gebruikt. Zorg ervoor dat de Arduino pin die je bebruikt overeenkomt met de pin in de code (in de regel: int pinCS = 10;). Kijk voor de aansluitingen onder de afbeelding hieronder.
In het bovenstaande schema zijn drie sensoren aangesloten op de analoge pinnen 0, 1 en 2. In dit geval LDR's maar dit kunnen natuurlijk ook allerlei andere sensoren zijn.
De SD module is als volgt aangesloten:
Arduino 5v naar SD VCC (5v op Adafruit) (Op 3,3v bij de SD (niet micro sd) module)
Arduino 10 naar SD CS
Arduino 11 naar SD MOSI
Arduino 12 naar SD MISO
Arduino 13 naar SD SCK
Als alles is aangesloten kan je om te kijken of je aansluitingen goed zijn en of je sd kaart in orde is het SD voorbeeldprogramma CardInfo uploaden (Bestand/Voorbeelden/SD/CardInfo. (Druk op de serial monitor knop)). Je moet wel in de code de chipSelect pin veranderen van 4 naar 10 als Arduino pin 10 verbonden is met CS. Als alles in orde is (je krijgt geen foutmelding en wel je kaart gegevens) kan je het sensordata logging programma uploaden. Je kan het Arduino SD voorbeeld programma Datalogger gebruiken of de onderstaande code copiëren en plakken (deze code is iets eenvoudiger opgeschreven en er is een tijdweergave aan toegevoegd.).
Het (onderstaande) programma werkt als volgt:
In de code worden twee bibliotheken gebruikt die al standaard zijn toegevoegd (hoef je dus niet meer te downloaden) , de SD (voor de SD module) en de SPI bibliotheek voor de seriele communicatie tussen arduino en SD module.
In de 'loop' worden eerst de tijd en de waarden op de analoge pinnen 0,1 en 2 uitgelezen (getallen tussen 0 en 1023) en geprint op de serial monitor (je kan ze daar dus meteen zien).
Daarna wordt met de instructie 'myFile = SD.open("test.txt", FILE_WRITE)' een tekstbestand genaamd 'test.txt' geopend en vervolgens worden daar de waarden naar weggeschreven. Na de waarde van de tijd en de eerste en tweede sensor wordt ook een komma geschreven. Dit is om ervoor te zorgen dat bij het importeren in exel de sensorwaarden hun eigen kolom krijgen.
De tijd is toegevoegd in seconden (millis()/1000) aan de seriele monitor en het tekstbestand (regel 34 en 47 in de code). Zo kan je zien op welk moment (vanaf het starten van het programma) een bepaalde sensor gebeurtenis was. Als je er de werkelijke tijd bij wil hebben moet je een RTC (real time clock) aan de code toevoegen (en ook de hardware natuurlijk) .
Als je genoeg data hebt haal je de SD kaart uit de module en dan kan je het bestand bekijken (in kladblok b.v.).
Om de data in Exel te krijgen ga je in Exel naar:
-Gegevens-
dan: -Externe gegevens ophalen-
dan: -Van tekst-.
Dan zoek je op de SD kaart het bestand en dubbelklik erop.
Laat 'gescheiden' aan staan en klik op volgende.
Vink 'tab' af en vink 'komma' aan. Klik op volgende.
Klik 'standaard' aan. Klik op voltooien.
Klik op OK.
Als het goed is staan dan je sensorwaarden in de eerste drie kolommen van Exel.
Als je hier nog een grafiek van wil maken kan je de kolommen selecteren en gaan naar: -Invoegen-, en dan bij Grafieken : Speidingsdiagram (of -Lijn of vlakdiagram) invoegen.
- Pas het formaat van het grafiekvak aan door met de zijkanten te slepen.
- Pas de weergegeven sensorwaarde aan (minimum en maximum op de verticale as):
Ga met de muis op de as staan en klik met rechts. Vul het gewenste minimum en maximum in.
/* Sensordata sd exel
Sensordata van Arduino naar Exell.
Voorbeeld code voor 3 sensoren.
Kijk ook naar de SD voorbeeld programma's van Arduino.
Zie ook Dejan Nedelkovski, www.HowToMechatronics.com (met RTC)
Bij Arduino uno mosi-11/ miso-12/ sck-13/ cs-10
*/
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 10; // Pin 10 op Arduino Uno
int sensorA = 0;
int sensorB = 1;
int sensorC = 2;
int sensorAwaarde = 0;
int sensorBwaarde = 0;
int sensorCwaarde = 0;
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
if (SD.begin()) { // SD Card Initialisatie
Serial.println("SD card is klaar voor gebruik.");
}
else {
Serial.println("SD card initialisatie mislukt");
return;
}
}
void loop() {
Serial.print (millis()/1000); // schrijf de tijd in seconden op de monitor
Serial.print (",");
sensorAwaarde = analogRead (sensorA);
Serial.print(sensorAwaarde);
Serial.print(",");
sensorBwaarde = analogRead (sensorB);
Serial.print(sensorBwaarde);
Serial.print(",");
sensorCwaarde = analogRead (sensorC);
Serial.println(sensorCwaarde);
myFile = SD.open("test.txt", FILE_WRITE); // open het tekstbestand
if (myFile) {
myFile.print(millis()/1000); // schrijf de tijd in seconden naar het tekst bestand
myFile.print (",");
myFile.print(sensorAwaarde);
myFile.print(",");
myFile.print(sensorBwaarde);
myFile.print(",");
myFile.println(sensorCwaarde);
myFile.close(); // sluit het tekstbestand
}
// print een foutmelding als het bestand niet opent.
else {
Serial.println("fout in openen test.txt");
}
delay(1000);
}