Skip navigation

Arduino

3 Posts authored by: dragonboliero

Hello,

 

Today I would like to share with you my second little project. Its an Arduino temperature logger which saves data on micro SD card and thanks to a short Python script it can also send data to Ubidots IOT application. The circuit itself is very simple, in order to complete it all you need is:

 

11 - jumper wires

1 - 4.7K ohm resistor

1 - DS18B20 temperature sensor

1 - SD card reader

1 - Arduino UNO

 

Here's the circuit's schematic:

 

Arduino SD card temperature logger

Here's a video showing how assemble the circuit:

 

Arduino sketch for this project:

#include <OneWire.h> //library for communication with temperature sensor
#include <DallasTemperature.h> //temperature sensor library
#include <SD.h> //sd card reader library available in every Arduino IDE
#include <SPI.h> //library for communication with SD card reader

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

File logs;  // variable responsible for writing to file 
float temp; //variable storing the current temperature
int number = 0; //variable holding the number indicating current entry in csv file

unsigned int hour = 20; //variable storing current hour
unsigned int minute = 45; //variable storing current minute 
unsigned int day = 2; //variable storing current day of the week
unsigned int date = 15; //variable storing current day of the month 
unsigned int month = 12; //variable storing current month
unsigned int year =  2015; //variable storing current year

unsigned int leap_year = 0; //variable for checking whether it's a leap year or not

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  SD.begin(10);
  // Start up the library
  sensors.begin();
} //end of void setup

void loop(void)
{ 
  //checking whether it's leap year or not
  if (year % 4 == 0)
  leap_year = 1;
  else
  leap_year = 0;
  
  
  //changing minutes
  if (minute < 55)
  minute +=5;
  else
  minute = 0;
  
  //changing hour
  if ((minute == 0) && (hour < 24))
  hour++;
  if ((minute == 0) && (hour == 24))
  hour = 0;
  
  //changing day of the week
  if((minute == 0) && (hour == 0) && (day <8))
  day +=1;
  if((minute == 0) && (hour == 0) && (day == 8))
  day = 1;
  
  //changing day of the month  
  //formula for 30 day months
  if ((date < 31) && ( (month == 4) || (month == 6) || (month == 9) || (month == 11)) && (hour == 0) && (minute ==0))
  {
   date++; 
  }
  if ((date == 31) && ( (month == 4) || (month == 6) || (month == 9) || (month == 11)) && (hour == 0) && (minute ==0))
  {
   date = 0;
   month++; 
  }
  
  //formula for February 
  if ( ((date < 29) && (month == 2) && (hour == 0) && (minute == 0) && (leap_year == 0)) || ((date < 30) && (month == 2) && (hour == 0) && (minute == 0) && (leap_year == 1)) )
  {
   date = date +1; 
  }
  if ( (date == 29) && (month == 2) && (hour == 0) && (minute == 0) && (leap_year == 0) || ((date == 30) && (month == 2) && (hour == 0) && (minute == 0) && (leap_year == 1)) )
  {
   date = 0;
   month = 3;
  }
  
  //formula for 31 day months
  if ((date < 32) && ( (month == 1) || (month == 3) || (month ==5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) && (hour == 0) && (minute ==0))
  {
    date++;
  }
  if ((date == 32) && ( (month == 1) || (month == 3) || (month ==5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) && (hour == 0) && (minute ==0))
  {
   date = 1;
   if(month <12)
   month++; 
   else
   month = 1;
  }
  
  
  //changing year
  if( (hour == 0) && (minute == 0) && (date == 1) && (month == 1))
  year++;
  
  
  sensors.requestTemperatures(); // Send the command to get temperatures
  temp =  sensors.getTempCByIndex(0); //assigning sensor's vale to the variable
  Serial.println(temp);
  
  
  logs = SD.open("logs.csv", FILE_WRITE); //assigning file to which we want to write the data
  if(logs) //if opening of the file was successful
  {
    
   if (number == 0)
   logs.println("sep=,"); //we add this line to the file so that excel 2013 and newer software knows that this is coma separated file
   
   //then we write entry number, date and sensor read
   logs.print(number);
   logs.print(",");
   
   logs.print(temp); //finally we add temperature read from sensor
   logs.print(",");
   
   if (hour < 10)
   logs.print("0"); //we add 0 is hour is lower than 10
   logs.print(hour);
   logs.print(":");
   if(minute <10) 
   logs.print("0"); //we add 0 if minute is lower than 10
   logs.print(minute);
   logs.print(" ");
   
   switch(day) //we add day of the week appropriately
   {
    case 1:
     logs.print("Monday");
     break;
    case 2:
     logs.print("Tuesday");
     break;
    case 3:
     logs.print("Wednesday");
     break;
    case 4:
     logs.print("Thursday");
     break;
    case 5:
     logs.print("Friday");
     break;
    case 6:
     logs.print("Saturday");
     break;
    case 7:
     logs.print("Sunday");
     break;
   }
   logs.print(" ");
   logs.print(date);
   logs.print(" ");
   
   switch(month)
   {
    case 1:
     logs.print("January");
     break;
    case 2:
     logs.print("February");
     break;
    case 3:
     logs.print("March");
     break;
    case 4:
     logs.print("April");
     break;
    case 5:
     logs.print("May");
     break;
    case 6:
     logs.print("June");
     break;
    case 7:
     logs.print("July");
     break;
    case 8:
     logs.print("August");
     break;
    case 9:
     logs.print("September");
     break;
    case 10:
     logs.print("October");
     break;
    case 11:
     logs.print("November");
     break;
    case 12:
     logs.print("December");
     break;
   }
   
   logs.print(" ");
   logs.println(year); //printing year to the file
   Serial.println("Saving successful");
   logs.close();//we close and save the file
  }
  logs.flush();
  
  
  delay(300000); // we delay program for 5 minutes and then take another read
  //delay(60000); //for testing purposes 1 minute
  //delay(2000);//for testing purposes 2 seconds
  number = number + 1; // we add 1 to the entry counter
}

 

Python script which allows communication between Arduino and Ubidots application:

from ubidots import ApiClient #importing ubidots api
from time import * #importing standard time library
import serial #importing pyserial library

api = ApiClient ('your_account_key') #key of our ubidots account
ser = serial.Serial('COM6', 9600, timeout = 0) #establishing communication with Arduino serial port

temp_val = api.get_variable('your_variable_key') #ubidots variable's key with which we want to communicate


while True:
    current_temp = ser.readline(6) #reading first 6 characters from serial port
    if ( (current_temp[:1] == '-')or(current_temp[:1] == '1') or (current_temp[:1] == '2') or (current_temp[:1] == '3') or (current_temp[:1] == '4') or (current_temp[:1] == '5') or (current_temp[:1] == '6') or (current_temp[:1] == '7') or (current_temp[:1] == '8') or (current_temp[:1] == '9') ):
            
            float_current_temp = float(current_temp[:5]) #converting value read from the serial port a float
            new_value = temp_temp.save_value({'value':float_current_temp}) #sending value to ubidots
            print ("sending successful")

 

Video explaining Arduino sketch and Python script, as well as providing introduction to Ubidots:

 

Please comment. Any feedback is very valuable for me, especially constructive criticism. If you like what I'm doing you can subscribe my channel on YouTube (https://www.youtube.com/user/W0j45), follow me on Twitter (https://twitter.com/milczarekw) and Instagram (https://www.instagram.com/milczarekw/).

 

Thank you for reading!

Hello guys,

 

I've created a video tutorial about saving and sending Arduino logs via email and Twitter by using Python script and wanted to share it with you. You don't have to know Python to do it, all that is required is changing few variables so that the script can communicate with your email and Twitter accounts. The video includes installation of required software, as well as short code summary. Here's the video:

 

Hello everyone,

 

I'm new here so I'm going to introduce myself. I'm Wojtek and I come from Poland, currently I''m 25 y.o. and I'm just starting my journey with Arduino. In the future I would like to share with you my projects and I hope you can provide some insight and constructive criticism.

 

Ok, so now lets hop into the project itself. It's rather basic because for now I don't have that many parts (just Arduino board, diodes, some resistors, tact switches and photoresistors). The chain uses photoresistor to read the brightness outside (that is why I recommend sticking it to the window or keeping it on the wall outside of it). Direct exposure to sunlight returns a value of ~15 - 25, during overcast day the value rises to 60 and when it gets relatively dark the returned value is ~650. That's why I decided to turn the chain on when the value is higher than 650.

 

You can see bare construction in the video below:

 

That's how it looks in the bowl with Christmas glass balls:

 

Parts required to assemble the chain:

 

1 - Arduino UNO

6 -  LED diodes

1 - photoresistor

6 - 280 ohm resistors (for diodes)

1 - 1K ohm resistor (for photoresistor)

Bunch of cables

 

You can find source code here: https://t.co/7fGqjvEFEq

Schematics are available here: Arduino based Christmas LED chain - Imgur

 

If you like what I'm doing you can follow me on Twitter https://twitter.com/milczarekw and subscribe on YouTube https://www.youtube.com/user/W0j45

 

I really appreciate your attention and I hope you've liked my entry.

 

 

UPDATE!!!

I've added potentiometer and a button to the circuit. Thanks to the potentiometer you can control brightness of the LEDs (they are connected through PWMs so they can act as analog pins), whereas the button controls which program is being used. Previously there was an infinite loop of three programs.

 

Here's a video presenting the new version:

 

Schematics for the upgraded version: https://t.co/D2thcn5300

Source code: https://t.co/ikjVfC38FE

Filter Blog

By date: By tag: