Components and supplies
Arduino UNO
Project description
Code
Data_Logging on Xively for temperature and ph
arduino
1/*Δημιουργήθηκε προκειμένου να μετράει θερμοκρασία αλλά και ph και να στέλνει τα στοιχεία στο Xively μέσω WiFi*/ 2 3#include <SPI.h> 4#include <WiFi.h> 5#include <HttpClient.h> 6#include <Xively.h> 7 8char ssid[] = ""; // WiFi SSID 9char pass[] = ""; // Password for WiFi SSID 10int keyIndex = 0; // your network key Index number (needed only for WEP) 11 12int status = WL_IDLE_STATUS; 13 14// To API Key του Xively προκειμένου να στείλουμε δεδομένα 15char xivelyKey[] = "It"; 16//Χively feed ID 17#define xivelyFeed 5 18//datastreams (ονομάτα καναλιών του xively 19char PhID[] = "Ph"; 20char TempID[]="Temperature"; 21 22// Pin για θερμοκρασία και για Ph 23#define PhPin A0 24#define TempPin A3 25 26 27// Define the strings for our datastream IDs 28XivelyDatastream datastreams[] = { 29 XivelyDatastream(PhID, strlen(PhID), DATASTREAM_FLOAT), 30 XivelyDatastream(TempID, strlen(TempID), DATASTREAM_FLOAT), 31}; 32// Finally, wrap the datastreams into a feed 33XivelyFeed feed(xivelyFeed, datastreams, 2 /* number of datastreams */); 34 35WiFiClient client; 36XivelyClient xivelyclient(client); 37 38void printWifiStatus() { 39 // To SSID του δικτύου 40 Serial.print("SSID: "); 41 Serial.println(WiFi.SSID()); 42 43 // Η διεύθυνση IP που πήρε η WiFi Shield 44 IPAddress ip = WiFi.localIP(); 45 Serial.print("IP Address: "); 46 Serial.println(ip); 47 48 // Η δύναμη του σήματος 49 long rssi = WiFi.RSSI(); 50 Serial.print("signal strength (RSSI):"); 51 Serial.print(rssi); 52 Serial.println(" dBm \ 53"); 54} 55//Η διαδικασία που καλείται για να επιτευχθεί η σύνδεση με το WiFi δίκτυο 56void connectWiFi() 57{ 58 // Δεν αν υπάρχει σύνδεση με την WiFi shield 59 if (WiFi.status() == WL_NO_SHIELD) 60 { 61 Serial.println("[ERROR] WiFi Shield Not Present"); 62 // Do not continue 63 while (true); 64 } 65 66 // Προσπάθει να γίνει σύνδεση 67 while ( status != WL_CONNECTED) 68 { 69 Serial.print("Attempting Connection - WPA SSID:"); 70 Serial.println(ssid); 71 72 status = WiFi.begin(ssid, pass); 73 } 74 75 // Connection successful 76 Serial.print(" Connection Successful"); 77 Serial.print(""); 78 Serial.println("-----------------------------------------------"); 79 Serial.println(""); 80} 81void setup() { 82 // put your setup code here, to run once: 83 Serial.begin(9600); 84 //pin setup 85 pinMode(PhPin, INPUT); 86 pinMode(TempPin, INPUT); 87 pinMode(13,OUTPUT); 88 Serial.println("Starting single datastream upload to Xively..."); 89 Serial.println(); 90 91 connectWiFi(); 92 printWifiStatus(); 93} 94 95 96void loop() { 97 int getReturn = xivelyclient.get(feed, xivelyKey); //Επικοινωνία με την πλατφόρμα xively 98 if(getReturn > 0){ 99 Serial.println("Ph Datastream"); 100 Serial.println(feed[0]); 101 }else Serial.println("HTTP Error"); 102 103 //Για την μέτρηση του Ph 104 unsigned long int avgValue; //Για την μέση τιμή του αισθητήρα 105 float b; 106 int buf[10],temp; 107 for(int i=0;i<10;i++) //Λήψη 10 δειγμάτων για πιο σωστή μέτρηση 108 { 109 buf[i]=analogRead(PhPin); 110 delay(10); 111 } 112 for(int i=0;i<9;i++) //Ταξινόμηση των δειγμάτων από την μικρότερη προς την μεγαλύτερη 113 { 114 for(int j=i+1;j<10;j++) 115 { 116 if(buf[i]>buf[j]) 117 { 118 temp=buf[i]; 119 buf[i]=buf[j]; 120 buf[j]=temp; 121 } 122 } 123 } 124 avgValue=0; 125 for(int i=2;i<8;i++) //Λήψη της μέσης τιμής από τα 6 δείγματα 126 avgValue+=buf[i]; 127 float phValue=(float)avgValue*5.0/1024/6; //μετατροπή της μέτρησης σε milivolt 128 phValue=3.5*phValue; 129 130 //Για την μέτρηση της θερμοκρασίας 131 int tempReading = analogRead(TempPin); 132 // Μετατροπή σε τάση 133 float voltage = tempReading * 5 / 1024.0; 134 // Μετατροπή σε θερμοκρασία 135 float celsius = (voltage - 0.5) * 100 ; 136 137 datastreams[0].setFloat(phValue); 138 datastreams[1].setFloat(celsius); 139 140 //Εκτύπωση των τιμών 141 Serial.print("Read sensor value "); 142 Serial.println(datastreams[0].getFloat()); 143 Serial.println(datastreams[1].getFloat()); 144 145 //send value to xively 146 Serial.println("Uploading it to Xively"); 147 int ret = xivelyclient.put(feed, xivelyKey); 148 //return message 149 Serial.print("xivelyclient.put returned "); 150 Serial.println(ret); 151 Serial.println(""); 152 153 154 //delay between calls 155 delay(15000); 156}
Downloadable files
Data Logging charts on Xively
Data Logging charts on Xively
Data Logging charts on Xively
Data Logging charts on Xively
Comments
Only logged in users can leave comments
EleftheriaKaragiorgou
0 Followers
•0 Projects
Table of contents
Intro
7
0