Pages: [1]   Go Down
Author Topic: I need help with datalogger  (Read 1032 times)
0 Members and 1 Guest are viewing this topic.
ND, USA
Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have successfully uploaded a sketch (datalogger,   from arduino/file/ examples/SD/datalogger) onto an Arduino-pro(atmega328, 5v, 16htz). SD card is attached
I need to know how to insert data into the assembly.  What type of data will be accepted (pulses from a Hall Effdect sensor?).

I will appreciate any help and advice,

Patrick

Quote
/*
  SD card datalogger
 
 This example shows how to log data from three analog sensors 
 to an SD card using the SD library.
    
 The circuit:
 * analog sensors on analog ins 0, 1, and 2
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created  24 Nov 2010
 updated 2 Dec 2010
 by Tom Igoe
 
 This example code is in the public domain.
     
 */

#include <SD.h>

// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 4;

void setup()
{
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
}

void loop()
{
  // make a string for assembling the data to log:
  String dataString = "";

  // read three sensors and append to the string:
  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 
}










Logged

Massachusetts, USA
Offline Offline
Tesla Member
***
Karma: 208
Posts: 8854
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Typically you would use dataFile.print(value); to write some text into the file.  Use dataFile.println(value); for the last value on the line.  If you separate the values with commas (dataFile.print(".")smiley-wink you can read the lines of values into a spreadsheet by giving the file extension '.csv' (Comma Separated Values.  If your data might include strings that contain commas, put double-quotes before and after the string so the spreadsheet will know that comma is not a separator.

What kind of stuff did you want to log?
Logged

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

ND, USA
Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

"What kind of stuff did you want to log?"

5 to 8v pulses from a Hall Effect sensor.  The sensor would be activated by magnets spaced round the circumference of a wheel.
I want to count the pulses per second, which would indicate the wheel's rpm.

Thank you
Logged

Massachusetts, USA
Offline Offline
Tesla Member
***
Karma: 208
Posts: 8854
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Probably the easiest way is to connect the pulses to Pin 2 and use the associated interrupt (see: attachInterrupt()) and increment a counter in the interrupt service routine.  In loop() you can use the "Blink Without Delay" example as a model and sample (and reset) the counter every second (1000 milliseconds).  Then just write the value to the log with dataFile.println(value, DEC) which will give you one decimal number per line in the file.
Logged

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 614
Posts: 49343
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
5 to 8v pulses from a Hall Effect sensor.
They better not be anything greater than 5V, or you'll toast the Arduino.

What good would a log file like:
Code:
I got a pulse.
I got a pulse.
I got a pulse.
.
.
.
I got a pulse.
be?

Quote
I want to count the pulses per second, which would indicate the wheel's rpm.
So, count them. Calculate the speed from the count, and (maybe) log that.
Logged

ND, USA
Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thank you. John. smiley
Patrick
Logged

Pages: [1]   Go Up
Jump to: