Opensenses: Difference between revisions

From Futuragora Wiki
No edit summary
No edit summary
Line 1: Line 1:
==Codename: opensenses==
==Codename: opensenses==


<pre>
 
OPEN-SENSES: http://www.futuragora.pt/projetos/open-senses/
OPEN-SENSES: http://lab.futuragora.pt/opensenses/


Traduzido do inglês este projecto representa sentidos livres ou abertos. Assenta num modelo código livre e de rapida prototipagem com a apresentação de um produto final que qualquer pessoa possa ligar à sua rede local e começar a coletar informações sensorais. Como base temos sensores de temperatura, humidade, pressão, luminosidade entre outros. Mais avançados poderam ser ligados sensores como tubo Geiser, sensor de gaz butano, de fumo, de ph, de corrente electrica, de entre milhares. Esse milhares de compomentes permitiram criar uma base de dados em tempo real daquilo que se está a passar no mundo, permitindo-nos gerir mais eficientemente os nossos recursos.
Traduzido do inglês este projecto representa sentidos livres ou abertos. Assenta num modelo código livre e de rapida prototipagem com a apresentação de um produto final que qualquer pessoa possa ligar à sua rede local e começar a coletar informações sensorais. Como base temos sensores de temperatura, humidade, pressão, luminosidade entre outros. Mais avançados poderam ser ligados sensores como tubo Geiser, sensor de gaz butano, de fumo, de ph, de corrente electrica, de entre milhares. Esse milhares de compomentes permitiram criar uma base de dados em tempo real daquilo que se está a passar no mundo, permitindo-nos gerir mais eficientemente os nossos recursos.
Este projecto está relacionado com os restantes projectos de automação e arduino. O objectivo é estabelecer uma central de informação que colhe os dados de vários senores remotos. Numa primeira fase pretendeu-se colher os dados dos sensores e inseri-los em bases de dados no servidor. A partir daí os dados foram manipulados e graficamente desmonstrados.   
Este projecto está relacionado com os restantes projectos de automação e arduino. O objectivo é estabelecer uma central de informação que colhe os dados de vários senores remotos. Numa primeira fase pretendeu-se colher os dados dos sensores e inseri-los em bases de dados no servidor. A partir daí os dados foram manipulados e graficamente desmonstrados.   
Protótipos em beta teste: FA_Sensor1 – Lisboa, FA_Sensor4 – Lisboa, FA_Sensor5 – Caparica, FA_Sensor7 – Tomar  
Protótipos em beta teste: FA_Sensor1 – Lisboa, FA_Sensor4 – Lisboa, FA_Sensor5 – Caparica, FA_Sensor7 – Tomar  


Opensenses website:
 
http://opensenses.futuragora.pt/administrator admin 2secret


Thingspeak:
Thingspeak:
    https://thingspeak.com/channels/51826/private_show
https://thingspeak.com/channels/51826/private_show
     samuelroalndo
     samuelroalndo
    https://thingspeak.com/users/sign_in
https://thingspeak.com/users/sign_in


php code (fasensor) add.php:  
==PHP Code Arduino Mysql==
php code (fasensor) add.php:
<pre>
<?php  
<?php  
     include("conec.php");  
     include("conec.php");  
Line 29: Line 32:
mysql_query ("insert into light (timestamp,light)  values ('$timestamp',  '".$_REQUEST["light"]."')");  
mysql_query ("insert into light (timestamp,light)  values ('$timestamp',  '".$_REQUEST["light"]."')");  
?>  
?>  
</pre>


Arduino code:  
Arduino code:  
Line 40: Line 44:
user: arduino  
user: arduino  
pass: jacquefresco  
pass: jacquefresco  
 
 
 
OpenSenses:
    http://dev.futuragora.pt/~dev/opensenses
       
Mudei o FASENSOR! todas as tabelas o campo timestamp de varchar para datetime
Mudei o FASENSOR! todas as tabelas o campo timestamp de varchar para datetime


Line 107: Line 106:
Agora: http://dev.futuragora.pt:89/sensorcentral/fasensor5/last_values.php
Agora: http://dev.futuragora.pt:89/sensorcentral/fasensor5/last_values.php


php code (fasensor) add.php:
<?php
    include("conec.php");
    $link=Conection();
    $timestamp=date('Y-m-d H:i:s');
mysql_query("insert into temperature (timestamp,temperature)  values  ('$timestamp', '".$_REQUEST["temperature"]."')");
mysql_query ("insert into pressure (timestamp,pressure)  values  ('$timestamp', '".$_REQUEST["pressure"]."')");
mysql_query ("insert into humidity (timestamp,humidity)  values  ('$timestamp', '".$_REQUEST["humidity"]."')");
mysql_query ("insert into temperature2 (timestamp,temperature2)  values  ('$timestamp', '".$_REQUEST["temperature2"]."')");
mysql_query ("insert into dew (timestamp,dew)  values ('$timestamp',  '".$_REQUEST["dew"]."')");
mysql_query ("insert into light (timestamp,light)  values ('$timestamp',  '".$_REQUEST["light"]."')");
?>
Arduino code:
https://code.google.com/p/arduino-hub/source/browse/trunk/sketches/FA_Sensor1_Zeta_O/FA_Sensor1_Zeta_O.ino
China Power:
http://dev.futuragora.pt/~dev/chinapower/dbwrite.php?A4=33&D0=010101&D1=01123
base de dados: ccbs_china
http://dev.futuragora.pt/phpmyadmin/
user: arduino
pass: jacquefresco
       




Line 146: Line 114:
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa
leafpad ~/.ssh/id_rsa.pub
leafpad ~/.ssh/id_rsa.pub




Line 152: Line 119:
Clone: git clone git@github.com:roltel/arduino-hub.git
Clone: git clone git@github.com:roltel/arduino-hub.git
https://help.github.com/articles/generating-ssh-keys/#step-4-add-your-ssh-key-to-your-account
https://help.github.com/articles/generating-ssh-keys/#step-4-add-your-ssh-key-to-your-account





Revision as of 20:02, 29 June 2018

Codename: opensenses

OPEN-SENSES: http://lab.futuragora.pt/opensenses/

Traduzido do inglês este projecto representa sentidos livres ou abertos. Assenta num modelo código livre e de rapida prototipagem com a apresentação de um produto final que qualquer pessoa possa ligar à sua rede local e começar a coletar informações sensorais. Como base temos sensores de temperatura, humidade, pressão, luminosidade entre outros. Mais avançados poderam ser ligados sensores como tubo Geiser, sensor de gaz butano, de fumo, de ph, de corrente electrica, de entre milhares. Esse milhares de compomentes permitiram criar uma base de dados em tempo real daquilo que se está a passar no mundo, permitindo-nos gerir mais eficientemente os nossos recursos.

Este projecto está relacionado com os restantes projectos de automação e arduino. O objectivo é estabelecer uma central de informação que colhe os dados de vários senores remotos. Numa primeira fase pretendeu-se colher os dados dos sensores e inseri-los em bases de dados no servidor. A partir daí os dados foram manipulados e graficamente desmonstrados.

Protótipos em beta teste: FA_Sensor1 – Lisboa, FA_Sensor4 – Lisboa, FA_Sensor5 – Caparica, FA_Sensor7 – Tomar


Thingspeak: https://thingspeak.com/channels/51826/private_show

   samuelroalndo

https://thingspeak.com/users/sign_in

PHP Code Arduino Mysql

php code (fasensor) add.php:

 
<?php 
    include("conec.php"); 
    $link=Conection(); 
    $timestamp=date('Y-m-d H:i:s'); 

mysql_query("insert into temperature (timestamp,temperature)  values  ('$timestamp', '".$_REQUEST["temperature"]."')"); 
mysql_query ("insert into pressure (timestamp,pressure)  values  ('$timestamp', '".$_REQUEST["pressure"]."')"); 
mysql_query ("insert into humidity (timestamp,humidity)  values  ('$timestamp', '".$_REQUEST["humidity"]."')"); 
mysql_query ("insert into temperature2 (timestamp,temperature2)  values  ('$timestamp', '".$_REQUEST["temperature2"]."')"); 
mysql_query ("insert into dew (timestamp,dew)  values ('$timestamp',  '".$_REQUEST["dew"]."')"); 
mysql_query ("insert into light (timestamp,light)  values ('$timestamp',  '".$_REQUEST["light"]."')"); 
?> 

Arduino code: https://code.google.com/p/arduino-hub/source/browse/trunk/sketches/FA_Sensor1_Zeta_O/FA_Sensor1_Zeta_O.ino


China Power: http://dev.futuragora.pt/~dev/chinapower/dbwrite.php?A4=33&D0=010101&D1=01123 base de dados: ccbs_china http://dev.futuragora.pt/phpmyadmin/ user: arduino pass: jacquefresco

Mudei o FASENSOR! todas as tabelas o campo timestamp de varchar para datetime

OPEN-SENSES: http://www.futuragora.pt/projetos/open-senses/

http://opensenses.futuragora.pt OPENSENSES

OpenSenses: http://dev.futuragora.pt/~dev/opensenses

FA Sensor1

Projecto: http://www.futuragora.pt/projetos/open-senses/fa_sensor1/ Página: http://dev.futuragora.pt:89/sensorcentral/fasensor1/ Local: Lisboa Sensores: Humidade, Pressão, Temperatura, Temperatura2, Luminosidade. Descrição: O FA_Sensor1 é o primeiro prototipo do projecto Open Senses. O Open Senses representa a conjugação dos projectos de automação relacionados com a central meteo DIY, recolha de dados sensorais e a sua compilação num servidor de bases de dados. Esses dados constituiem os olhos e sentidos da investigação. Projecto FA Sensor 1 na Futuragora

Chart ( Grafico): http://dev.futuragora.pt:89/sensorcentral/fasensor1/graph_temp.php Last 10: http://dev.futuragora.pt:89/sensorcentral/fasensor1/last10.php Agora: http://dev.futuragora.pt:89/sensorcentral/fasensor1/last_values.php


FA Sensor4 - MS05 Projecto: http://www.futuragora.pt/projetos/open-senses/fa_sensor4/ Página: http://dev.futuragora.pt/sensorcentral/fasensor4/ Graficos: https://thingspeak.com/channels/53957/ Public view: https://thingspeak.com/channels/53957/ Viewing Data: https://api.thingspeak.com/channels/53957/feed.json?key=T2UVSSH5O3AVYJ8T

Local: Olaias Sensores: Humidade, Pressão, Temperatura Latitude: Longitude: Descrição: O FA_Sensor4 é o segundo prototipo funcional do projecto OpenSenses. O Open Senses representa a conjugação dos projectos de automação relacionados com a central meteo DIY, recolha de dados sensorais e a sua compilação num servidor de bases de dados. Esses dados constituiem os olhos e sentidos da investigação. Projecto FA Sensor 1 na Futuragora

Chart ( Grafico): http://dev.futuragora.pt:89/sensorcentral/fasensor4/graph_temp.php Last 10: http://dev.futuragora.pt:89/sensorcentral/fasensor4/last10.php Agora: http://dev.futuragora.pt:89/sensorcentral/fasensor4/last_values.php


FA Sensor5

Projecto: http://www.futuragora.pt/projetos/open-senses/fa_sensor5/ Página: http://dev.futuragora.pt:89/sensorcentral/fasensor5/ Graficos / https://thingspeak.com/channels/51826 API http://api.thingspeak.com/channels/51826/feed.json?key=CIFMMGYWGU9HZ894 CIFMMGYWGU9HZ894 roltel@roltel.net samuelrolando

Local: Lisboa Sensores: Humidade, Pressão, Temperatura

Descrição: O FA_Sensor1 é o primeiro prototipo do projecto Open Senses. O Open Senses representa a conjugação dos projectos de automação relacionados com a central meteo DIY, recolha de dados sensorais e a sua compilação num servidor de bases de dados. Esses dados constituiem os olhos e sentidos da investigação. Projecto FA Sensor 1 na Futuragora

Chart (Gráfico): http://dev.futuragora.pt:89/sensorcentral/fasensor5/graph_temp.php Last 10: http://dev.futuragora.pt:89/sensorcentral/fasensor5/last10.php Agora: http://dev.futuragora.pt:89/sensorcentral/fasensor5/last_values.php


GITHUB - Arduino HUB Lib and Sketches: add user config to git: git config --global user.email "roltel@roltel.net" ssh-keygen -t rsa -b 4096 -C "roltel@roltel.net" eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa leafpad ~/.ssh/id_rsa.pub


Clone: git clone git@github.com:roltel/arduino-hub.git https://help.github.com/articles/generating-ssh-keys/#step-4-add-your-ssh-key-to-your-account


Mudei o FASENSOR! todas as tabelas o campo timestamp de varchar para datetime

// This sketch uses a DHT11 sensor to report temperature, humidity and dew point data to http://www.thingspeak.com. // https://github.com/roltel/arduino-hub/blob/master/sketches/DHT11_Sensor_Read/DHT11_Sensor_Read.ino // Sketch tested with an Arduino Uno, a HanRun Ethernet shield and a DHT11 temperature and humidity sensor. // // See http://playground.arduino.cc/main/DHT11Lib for the origins of the temperature, humidity and dew point functions.

  1. include <Adafruit_BMP085.h>
  2. include <dht11.h>
  3. include <SPI.h>
  4. include <Ethernet.h>

Adafruit_BMP085 bmp; // ThingSpeak Settings char thingSpeakAddress[] = "api.thingspeak.com"; String writeAPIKey = "CIFMMGYWGU9HZ894"; // Add your Thingspeak API key here - mudar a key EthernetClient client; // Temperature sensor settings dht11 DHT11;

  1. define DHT11PIN A2

const int ONE_MINUTE = 60 * 1000; int status; int failedConnectionAttempCounter; //Rounds down (via intermediary integer conversion truncation) //See : http://lordvon64.blogspot.co.uk/2012/01/simple-arduino-double-to-string.html String dblToString(double input, int decimalPlaces) { if( decimalPlaces != 0) { String string = String((int)(input*pow(10,decimalPlaces))); if(abs(input) < 1) { if(input > 0) { string = "0" + string; } else if(input < 0) { string = string.substring(0,1) + "0" + string.substring(1); } } return string.substring(0,string.length()-decimalPlaces) + "." + string.substring(string.length() - decimalPlaces); } else { return String((int)input); } } // dewPoint function NOAA // reference: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); } void setup() { Serial.begin(57600); Serial.println("DHT11 Temperature Sensor Program"); Serial.print("DHT11 library version: "); Serial.println(DHT11LIB_VERSION); Serial.println(); connectToInternet(); } void connectToInternet() { if (client.connected()) { client.stop(); } Serial.println("Connecting to the internet via ethernet..."); // the media access control (ethernet hardware) address for the shield // Leave this as is if your MAC address is not labelled on your ethernet shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); // no point in carrying on, so do nothing forevermore for(;;){

} } Serial.println(Ethernet.localIP()); } void loop() { Serial.println("\n"); int dht11ReadingStatus = DHT11.read(DHT11PIN); Serial.print("Reading sensor..."); switch (dht11ReadingStatus) { case DHTLIB_OK: Serial.println("Success!"); break; case DHTLIB_ERROR_CHECKSUM: Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: Serial.println("Timeout error"); break; default: Serial.println("Unknown error"); break; } double dewPointCelcius = dewPoint(DHT11.temperature, DHT11.humidity); ReportTemperatureToSerialOut(DHT11.temperature, DHT11.humidity, dewPointCelcius); ReportTemperatureToThingspeak(DHT11.temperature, DHT11.humidity, dewPointCelcius); } void ReportTemperatureToSerialOut(int temperature, int humidity, double dewPointCelcius) { Serial.print("Temperature (oC): "); Serial.println((float)temperature, 2); Serial.print("Humidity (%): "); Serial.println((float)humidity, 2); Serial.print("Dew Point (oC): "); Serial.println(dewPointCelcius); } void ReportTemperatureToThingspeak(int temperature, int humidity, double dewPoint) { // Use short field names i.e. 1 instead of field1 String fields = "1=" + String(temperature, DEC); fields += "&2=" + String(humidity, DEC); fields += "&3=" + dblToString(dewPoint, 2); Serial.println(fields); if (client.connect(thingSpeakAddress, 80)) { Serial.println("Connected to thingspeak.com"); // Create HTTP POST Data 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(fields.length()); client.print("\n\n"); client.print(fields); Serial.print(fields); Serial.print("\n"); Serial.println("Fields sent sent to www.thingspeak.com"); //delay(ONE_MINUTE); delay (59000); } else { Serial.println("Connection to thingSpeak Failed"); Serial.println(); failedConnectionAttempCounter++; // Re-start the ethernet connection after three failed connection attempts if (failedConnectionAttempCounter > 3 ) { Serial.println("Re-starting the ethernet connection..."); connectToInternet(); failedConnectionAttempCounter = 0; } } }




cript,applet, frame


Codigo:

   #include <Wire.h>
  1. include <dht11.h>
  2. include <Adafruit_BMP085.h>
  3. include <SPI.h>
  4. include <Ethernet.h>

Adafruit_BMP085 bmp; // ThingSpeak Settings char thingSpeakAddress[] = "api.thingspeak.com"; String writeAPIKey = "N8XZBP88WGR87TDD"; // Add your Thingspeak API key here EthernetClient client; // Temperature sensor settings dht11 DHT11;

  1. define DHT11PIN A2

const int ONE_MINUTE = 60 * 1000; int status; int failedConnectionAttempCounter;

//Rounds down (via intermediary integer conversion truncation) //See : http://lordvon64.blogspot.co.uk/2012/01/simple-arduino-double-to-string.html String dblToString(double input, int decimalPlaces) {

 if ( decimalPlaces != 0)
 {
   String string = String((int)(input * pow(10, decimalPlaces)));
   if (abs(input) < 1)
   {
     if (input > 0)
     {
       string = "0" + string;
     }
     else if (input < 0)
     {
       string = string.substring(0, 1) + "0" + string.substring(1);
     }
   }
   return string.substring(0, string.length() - decimalPlaces) + "." + string.substring(string.length() - decimalPlaces);
 }
 else
 {
   return String((int)input);
 }

}

// dewPoint function NOAA // reference: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) {

 double A0 = 373.15 / (273.15 + celsius);
 double SUM = -7.90298 * (A0 - 1);
 SUM += 5.02808 * log10(A0);
 SUM += -1.3816e-7 * (pow(10, (11.344 * (1 - 1 / A0))) - 1) ;
 SUM += 8.1328e-3 * (pow(10, (-3.49149 * (A0 - 1))) - 1) ;
 SUM += log10(1013.246);
 double VP = pow(10, SUM - 3) * humidity;
 double T = log(VP / 0.61078); // temp var
 return (241.88 * T) / (17.558 - T);

}

void setup() {

 Serial.begin(9600);
 Serial.println("DHT11 Temperature Sensor Program");
 Serial.print("DHT11 library version: ");
 Serial.println(DHT11LIB_VERSION);
 Serial.println();
 if (!bmp.begin()) {
 Serial.println("Could not find a valid BMP085 sensor, check wiring!");
 while (1) {}
 }
 connectToInternet();

}

void connectToInternet() {

 if (client.connected())
 {
   client.stop();
 }
 Serial.println("Connecting to the internet via ethernet...");
 // the media access control (ethernet hardware) address for the shield
 // Leave this as is if your MAC address is not labelled on your ethernet shield
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xAD, 0xED };
 if (Ethernet.begin(mac) == 0) {
   Serial.println("Failed to configure Ethernet using DHCP");
   // no point in carrying on, so do nothing forevermore
   for (;;) {
     ;
   }
 }
 Serial.println(Ethernet.localIP());

} void loop() {

 Serial.println("\n");
 int dht11ReadingStatus = DHT11.read(DHT11PIN);
 Serial.print("Reading sensor...");
 switch (dht11ReadingStatus)
 {
   case DHTLIB_OK:
     Serial.println("DHT Success!");
     break;
   case DHTLIB_ERROR_CHECKSUM:
     Serial.println("DHT Checksum error");
     break;
   case DHTLIB_ERROR_TIMEOUT:
     Serial.println("DHT Timeout error");
     break;
   default:
     Serial.println("DHT Unknown error");
     break;
 }
 double dewPointCelcius = dewPoint(DHT11.temperature, DHT11.humidity);
 ReportTemperatureToSerialOut(DHT11.temperature, DHT11.humidity, dewPointCelcius);
 ReportTemperatureToThingspeak(DHT11.temperature, DHT11.humidity, dewPointCelcius);

}

void ReportTemperatureToSerialOut(int temperature, int humidity, double dewPointCelcius) {

 Serial.print("Temperature (oC): ");
 Serial.println((float)temperature, 2);
 Serial.print("Humidity (%): ");
 Serial.println((float)humidity, 2);
 Serial.print("Dew Point (oC): ");
 Serial.println(dewPointCelcius);
 Serial.print("Pressure (bar???): ");
 Serial.println(bmp.readPressure());
 

}

void ReportTemperatureToThingspeak(int temperature, int humidity, double dewPoint) {

 // Use short field names i.e. 1 instead of field1
 String fields = "1=" + String(temperature, DEC);
 fields += "&2=" + String(humidity, DEC);
 fields += "&3=" + dblToString(dewPoint, 2);
 fields += "&4=" + String(bmp.readPressure(), DEC);
 Serial.println(fields);
 if (client.connect(thingSpeakAddress, 80))
 {
   Serial.println("Connected to thingspeak.com");
   // Create HTTP POST Data
   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(fields.length());
   client.print("\n\n");
   client.print(fields);
   Serial.print(fields);
   Serial.print("\n");
   Serial.println("Fields sent sent to www.thingspeak.com");
   //delay(ONE_MINUTE);
   delay (59000);
 }
 else
 {
   Serial.println("Connection to thingSpeak Failed");
   Serial.println();
   failedConnectionAttempCounter++;
   // Re-start the ethernet connection after three failed connection attempts
   if (failedConnectionAttempCounter > 3 )
   {
     Serial.println("Re-starting the ethernet connection...");
     connectToInternet();
     failedConnectionAttempCounter = 0;
   }
 }

}

Sub-Projectos

FASensor2 Monitor de Temperatura, Humidade, Pressão e outros dados metereológicos.