Introduction: Analog-Style Temperature Meter and DataLogger With Intel Edison
In This instructable you will learn how to take data from various sensors and log them on an SD Card, and then display the current temperature on a servo-driven analog style meter. Huge thanks to Intel, Instructables, and Grove for the giveaway!
You Will need:
Intel Edison
Grove Sound Sensor Module
Grove Light Sensor Module
Grove Temperature Sensor Module
Grove Shield
Grove Servo Motor
Micro-USB Cable
MicroSD Card
Step 1: Get Everything Ready
First, ensure that you have installed the Intel/Arduino programming environment. This can be found Here
Ensure that the plastic standoffs included with the Edison are mounted, to prevent shorting solder joints on the bottom of the board.
Step 2: Start Plugging in Components
In this project, I've used ports A0 for the Temperature Sensor, A1 for the Sound Sensor, A2 for the Light Sensor, and D5 for the servo Motor.
Step 3: Create and Plug in the Analog Style Meter
I have simply used cardboard and tape for this project, as I intend to use these parts in other projects. I cut a piece of cardboard with a slot to fit the servo motor vertically. I then plugged the servo motor into Digital 5. If you want, you can easily make the construction more permanent and sturdy by using different materials.
Step 4: Code!
Now, time for the Programming. If you choose to recreate this yourself, you will very likely need to tweak some of the values for this to work for you. The original .ino file is available below for download. I have also intended for the code to be modular, so you can take out bits and pieces to use in your own software if you would like.
#include
#include
#include<SPI.h> <br>#include <SD.h>
int a; float tempcelsius; int B=3975; //B value of the thermistor(Do Not Change!) float resistance; double tempfarenheit = 0; Servo tempservo; int temptoservo = 0;
Loop - The loop is the code which will run repeatedly
//Begin Temperature Code<br> a=analogRead(0); resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor; tempcelsius=1/(log(resistance/10000)/B+1/298.15)-273.15; //convert resistance to Celsius via datasheet ; tempfarenheit=((tempcelsius*9)/5)+31; //OPTIONAL - Convert from Celsius to Farenheit //End Temperature Code
The temperature code shown here is from the Grove Temperature Sensor's Datasheet to determine temperature from the thermistor's resistance.
Data Logging Capabilities
//Begin SD Logging code<br> File dataLog = SD.open("datalog.txt", FILE_WRITE);
if (dataLog) { dataLog.print("Temp: "); dataLog.println(tempfarenheit); dataLog.print("Sound Level: "); dataLog.println(soundLevel); dataLog.print("Light Level: "); dataLog.println(lightLevel); delay(5000); dataLog.close() //End SD Logging Code
This code will dump the current sensor data to a .txt file every 5 seconds. You can change the wait time between dumps if you desire.