| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Get control of your email attachments. Connect all your Gmail accounts and in less than 2 minutes, Dokkio will automatically organize your file attachments. You can also connect Dokkio to Drive, Dropbox, and Slack. Sign up for free.

View
 

Launchable Data-logger

This version was saved 5 years, 5 months ago View current version     Page history
Saved by James Dunn
on February 4, 2015 at 9:12:20 am
 

$10 Datalogger using Arduino Micro-controller

 

Enclosed: All the Arduino datalogger code, parts list, and vendor information; followed by video tutorials that lead 15 activities.

 

A datalogger is an instrument that records signal levels from sensors to record what happens without a human needing to be present.  Examples include:

 

  • Long duration changes that make being present impractical, such as monitoring the change in temperature (house, vehicle, body during exercise...) every 5 minutes for a week and then analyzing what actually happens versus what we perceive.
  • Short duration changes where events happen too quickly to record manually, such as monitoring static voltage build up on a metal surface during a rocket launch, the different lap times during a race as contestants cross the finish line at almost the same time, and other short time intervals.
  • Monitoring changes in hazardous conditions like the pressure and temperature at deep place under the ocean, or near an active volcano...

 

The enclosed datalogger is self-contained and is small enough to launch in a large hobby type Estes Rocket called the Leviathan with a G80 rocket engine.  This provides the students with the opportunity to repeatedly conceive, model, design, build, implement, test, and analyze projects in teams of three.  NASA provides some funding to schools who desire to participate in a NASA launch program.

 

The same Datalogger Payload can be built and launched in robotic land based vehicles.  The SIPI Mars Yard is a program that provides High School students in science and math courses with actual robots in a simulated Mars Environment where the students can manipulate the robots from their classroom; in a manner very similar to how NASA controls the actual Mars Rovers.  The practiced experience in learning to code the Arduino, provides logical tools to learn how to program the robots.   ai-testem-resources.com

 

Scientists and Engineers often use similar tools like a datalogger to perform their activities more effectively.  Like the datalogger, coding software is similarly a common tool used.  Coding provides a means of telling a computing system the who, what, when, where, why, and how signals and data are to be manipulated to provide useful results not otherwise easily attainable.

 

Learning to Efficiently Teach Yourself

 

Building a Career Pathway

 

 

Arduino Parts List

 

Parts Required:

 

 

Note:  If your Arduino Uno datalogger works fine on USB power, but fails when on battery or external power, change the value of R12 from 1k to 10k.  A known feedback condition may be corrupting the initialization process.  Schematic

 

The following is the wiring diagram for connecting the SD Card Board to the Arduino

 


 

Enclosed below are video tutorials that allow for understanding the code to create a datalogger.  Many micro-SD card shields exist for as little as about $1.50 (USD).  The video tutorial uses a different version.  The exact code follows below for the SD card used here.  SD card shields (circuit boards) and SD memory cards.

 

 


As instructors, you can choose whether to teach coding, just assemble the datalogger and use the provided code, or some combination.

Recommendation if teaching coding: teach how to set up small amounts of code and check usefulness, save incremental versions, and add tested code in pieces.  Back up incremental accomplishments.  That way one problem is being solved at a time, and not working on 10 simultaneous problems; usually syntax errors or not understanding the format provided when libraries are included.

Use // to comment out code that is working, to debug code

Use /*   and the mating */ to comment out an entire section of multiple lines of code


When starting from scratch, there are four layers of coding:

 

  1. Details, objectives, correlations, description of sequences, anticipated restrictions, and risks all written in English;
  2. Flow Chart (when starting from a default state) and/or State Diagram (when starting from a previous state) to reflect written English;
  3. Pseudo-code (ends up representing comments in code); &
  4. Syntax Correct code (often typed on next line after //pseudo code) 

 

followed by:

  • entering code
  • testing, and
  • debugging


 

All tutorials are added for completeness.  But the main tutorials for the datalogger are: start with 11, then 1, 3, 6, 7, 8, & repeat 11

In one class period (or homework assignment) the students can read through everything needed to make a datalogger.  With 10% expected uptake.  Hands-on practiced experience is needed to correlate the conveyed information effectively.

 

Notice the Actual Code provided below deviates somewhat from that in the tutorials.  The code below works as-is, so no learning occurs related to coding.

 

An important aspect is to as much as practical, have the students learn "how" to solve their own problems.  The act of getting practiced experience in problem solving better prepares them for actual life experiences.


The students can then at your option write and implement code based upon tutorials, or just build the datalogger and explore other class efforts.

 


For explanations:
SD.h library reference
http://arduino.cc/en/Reference/SD       (serial interface with SD card)
Wire.h library reference
http://arduino.cc/en/Reference/wire  (I2C temp sensors)

Tutorials at times use a software called "Processing".  The more advanced code editor for Arduino; free from

 

     https://www.processing.org/download/
     select "no donation" to download

 

"Processing" code (Arduino code is based on Processing code) uses .pde file extensions and contains the code in text format.  In most cases, if not all, the Arduino user interface is more reliable and easier to use.

Each of the Video tutorials has a related download page for the related code, to minimize making typos.

"Arduino" automatically includes libraries, while "Processing" requires "Import" of every library used.
 

Arduino Free Software Downloads: www.Arduino.cc ; all parts can be purchased on eBay (<$15 total)

 

Tutorial 01 for Arduino: Getting Acquainted with Arduino

http://www.youtube.com/watch?v=fCxzA9_kg6s

 

Tutorial 02 for Arduino: Buttons, PWM, and Functions

http://www.youtube.com/watch?v=_LCCGFSMOr4

 

Tutorial 03 for Arduino: Electrical Engineering Basics

http://www.youtube.com/watch?v=abWCy_aOSwY

 

Tutorial 04 for Arduino: Analog Inputs

http://www.youtube.com/watch?v=js4TK0U848I

 

Tutorial 05 for Arduino: Motors and Transistors

http://www.youtube.com/watch?v=5bHPKU4ybHY

 

Tutorial 06 for Arduino: Serial Communication and Processing

http://www.youtube.com/watch?v=g0pSfyXOXj8

 

Tutorial 07 for Arduino: I2C Communication and Processing

http://www.youtube.com/watch?v=GJX0BRUagCg

 

Tutorial 08 for Arduino: SPI Interfaces

http://www.youtube.com/watch?v=1nO2SSExEnQ

 

Tutorial 09 for Arduino: Wireless Communication

http://www.youtube.com/watch?v=vKVNmA8C6m8

 

Tutorial 10 for Arduino: Interrupts and Hardware Debouncing

http://www.youtube.com/watch?v=CRJUdf5TTQQ

 

Tutorial 11 for Arduino: SD Cards and Datalogging

http://www.youtube.com/watch?v=5v5A3j7Rrco

 

Tutorial 12 for Arduino: RFID Card Reading

http://www.youtube.com/watch?v=gIlSLwcbeTU

 

Tutorial 13 for Arduino: Liquid Crystal Displays (LCDs)

http://www.youtube.com/watch?v=oIiDseJO4dM

 

Tutorial 14 for Arduino: Holiday Lights and Sounds Spectacular!

http://www.youtube.com/watch?v=CoG_Czyr7z0

 

Tutorial 15 for Arduino: GPS Tracking

http://www.youtube.com/watch?v=TtZEZYQG0xk

 

altwretutorials

 

Tutorial 16 for Arduino: Making a DMX controlled application (studio lighting - plus)

https://www.youtube.com/watch?v=hl-HUa5BOPM

 

Tutorial 17 for Arduino: Decoding DMX part 2

https://www.youtube.com/watch?v=uVcDNvNo0sg

 

Tutorial 18 for Arduino: Decoding DMX part 3

https://www.youtube.com/watch?v=uVcDNvNo0sg

 

 

 

 

Actual Code to Use with specified Catalex SD Card Adapter

Arduino to SD Card Adapter wiring connections

 

//Program by Jeremy Blum
//www.jeremyblum.com
//SD Card Demonstration
//Some code from public domain work by Tom Igoe
//Code modified by James Dunn

//  excessive Serial Monitor statements included so user can follow code execution; this slows down operations

//  the version with Serial Monitor statements removed records data much faster

 

#include <SD.h>         //SD Card Library

#include <Wire.h>       //I2C Library

 

//SPI SD Card Pins

  //MOSI = Pin 11

  //MISO = Pin 12

  //SCLK = PIN 13

  int CS_pin = 10;

  int pow_pin = 8;

 

//I2C Temperature Pins

  //SDA = Analog Pin 4

  //SCL = Analog Pin 5

 

//IR Distance Sensor Pins

  int IR1_pin = 2;

  int IR2_pin = 3;

 

//Light Sensor Pins

  int light_pin = 1;

 

float refresh_rate = 0.0;  //Dataloger Refresh Rate

int temp_address = 72;     //Address of the I2C Temp Sensor

long id = 1;                //Use this to store the id # of our reading.

 

void setup()

{

  Wire.begin();

  Serial.begin(9600);

  Serial.println("serial set at 9600 baud");

 

  //CS Pin is an output

  pinMode(CS_pin, OUTPUT);

  Serial.println("CS_pin set as OUTPUT");

 

  //SD Card will Draw Power from Pin 8, so set it high

  pinMode(pow_pin, OUTPUT);  

  digitalWrite(pow_pin, HIGH);

  Serial.println("pow-pin 8 set as OUTPUT and HIGH");

 

  //Initialize SD Card with CS_pin = 10

  if (!SD.begin(CS_pin))

  {

      Serial.println("Card Failure - CS_pin 10 no signal");

      return;

  }

  Serial.println("Card Ready - Signal on CS_pin 10");

 

  SD.remove("COMMANDS.txt");

 

  //Create configuration file COMMANDS.txt

  File commandFile = SD.open("COMMANDS.txt", FILE_WRITE);

  commandFile.write(50);

  commandFile.close();

 

  //Read the Configuration information (COMMANDS.txt)

  commandFile = SD.open("COMMANDS.txt", FILE_READ);

  if (commandFile)

  {

    Serial.println("Read from COMMANDS File");

 

    float decade = pow(10, (commandFile.available() - 1));

    while(commandFile.available())

    {

      float temp = (commandFile.read() - '0');

      refresh_rate = temp*decade+refresh_rate;

      decade = decade/10;

    }

    Serial.print("Refresh Rate = ");

    Serial.print(refresh_rate);

    Serial.println("ms");

 

  }

  else

  {

    Serial.println("Could not read command file.");

    return;

  }

  commandFile.close();

  Serial.println("close command file");

 

  //Write Log File Header

  File logFile = SD.open("LOG.csv", FILE_WRITE);

  Serial.println("opened LOG.csv file");

 

  if (logFile)

  {

    logFile.println(", , , ,"); //Just a leading blank line, in-case there is previous data

    String header = "ID, Light, Temp, IR1, IR2";

    logFile.println(header);

    Serial.println("wrote this header to LOG.csv: ");

 

    Serial.println(header);

  }

  else

  {

    Serial.println("Couldn't open LOG.csv file");

  }

 

}

 

void loop()

{

  //Check Light Level

  int light_level = analogRead(light_pin);

 

 /* uncomment this section if using related temperature IC chips 

  //Read Temperature

  Wire.beginTransmission(temp_address); //Start talking

  Wire.write(0);//Ask for Register zero

  Wire.endTransmission(); //Complete Transmission

  Wire.requestFrom(temp_address, 1); //Request 1 Byte

  while(Wire.available() == 0); //wait for response

  int temp_c = Wire.read(); // Get the temp

  int temp_f = round(temp_c*9.0/5.0 +32.0);  //Convert from Celcius to Fahrenheit

  */

    int temp_f = round(32.0); // delete this line if using related temperature IC chips

 

  //Read Distances

  int IR1_val = analogRead(IR1_pin);

  int IR2_val = analogRead(IR2_pin);

 

  //Create Data string for storing to SD card

  //using CSV Format  

  String dataString = String(id) + ", " + String(light_level) + ", " + String(temp_f) + ", " + String(IR1_val) + ", " + String(IR2_val); 

 

  //Open a file to write to

  //Only one file can be open at a time

  File logFile = SD.open("LOG.csv", FILE_WRITE);

  if (logFile)

  {

    logFile.println(dataString);

 

    Serial.println(dataString);

  }

  else

  {

    Serial.println("Couldn't open log file");

  }

  logFile.close();

 

  //Increment ID number

  id++;

 

  delay(refresh_rate);

 

 

 

 

}

 

 

Comments (0)

You don't have permission to comment on this page.