Temperature

pH value

Monday, December 7, 2015

Arduino Codes


#Codes for sensing and uploading data to Thingspeak.com

// include libraries
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #define SensorPin A0
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
//Temperature chip i/o OneWire ds(DS18S20_Pin); // on digital pin 2
// Local Network Settings byte mac []= { 0x9C, 0xA2, 0xDA, 0x0F, 0xAB, 0x6A };// Must be unique on local network, You can find it looking at EthernetShield bottom side (White sticker)
// ThingSpeak Settings char thingSpeakAddress[] = "api.thingspeak.com"; String writeAPIKey = "4HFALLKGZG1JOHED"; // After signing in to Thingspeak you get your own unike API key unsigned long updateThingSpeakInterval = 20000; // Time interval in milliseconds to update ThingSpeak unsigned long SensorReadInterval = 5000; // Time interval in milliseconds to update SensorData
// Variable Setup unsigned long lastConnectionTime = 0; boolean lastConnected = false; int failedCounter = 0; unsigned long lastReadTime = 0; int HIH4030_Pin = A0; //Voltage output from HIH sensor is connected to analog pin A0 long relativeHumidity = 0; long temperature = 0; long dewpoint = 0; float ph_value; float voltage; char buffer[10];
// Initialize Arduino Ethernet Client EthernetClient client;
void setup() { // Start Serial for debugging on the Serial Monitor Serial.begin(9600); // Initializes the ethernet library and network settings on Arduino (call funtion "startethernet") startEthernet(); }
void loop()
{ // Read sensor value according set SersorReadInterval if((millis() - lastReadTime > SensorReadInterval)) { temperature = getTemp(); } voltage=analogRead(SensorPin); voltage=voltage*5/1024; ph_value=-5.8029*voltage+25.5511; // Greate string for transmitting value to Thingspeak String Field1_Value = dtostrf(ph_value, 7,2,buffer); String Field2_Value = String(temperature,DEC); String Field3_Value = String(dewpoint,DEC);
// Print Update = Response to Serial Monitor
// Print Update Response to Serial Monitor if (client.available()) { char c = client.read(); Serial.print(c); }
// Disconnect from ThingSpeak if (!client.connected() && lastConnected) { Serial.println("...disconnected"); Serial.println(); client.stop(); } // Update ThingSpeak if(!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval)) { updateThingSpeak("field1="+Field1_Value+"&field2="+Field2_Value+"&field3="+Field3_Value); } // Check if Arduino Ethernet needs to be restarted if (failedCounter > 3 ) {startEthernet();} lastConnected = client.connected();
}
// FUNCTIONS
///Tähän antureiden funktiot
// Update Thingspeak channel void updateThingSpeak(String tsData) { // Sent REST command to update channel eg."https://api.thingspeak.com/update?api_key=YOUR_CHANNEL_API_KEY&field1=7 "
if (client.connect(thingSpeakAddress, 80)) { client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(tsData.length()); client.print("\n\n");
client.print(tsData); lastConnectionTime = millis(); if (client.connected()) { Serial.println("Connecting to ThingSpeak..."); Serial.println(); failedCounter = 0; } else { failedCounter++; Serial.println("Connection to ThingSpeak failed ("+String(failedCounter, DEC)+")"); Serial.println(); } } else { failedCounter++; Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter, DEC)+")"); Serial.println(); lastConnectionTime = millis(); } }
// Initialize the ethernet library and network settings. void startEthernet() { client.stop();
Serial.println("Connecting Arduino to network..."); Serial.println();
delay(1000); // Connect to network and obtain an IP address using DHCP if (Ethernet.begin(mac) == 0) { Serial.println("DHCP Failed, reset Arduino to try again"); Serial.println(); } else { Serial.println("Arduino connected to network using DHCP"); Serial.println(); } delay(1000); }
float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius
byte data[12]; byte addr[8];
if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; }
if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; }
if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; }
ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; }

No comments:

Post a Comment