Fasensor: Difference between revisions
From Futuragora Wiki
No edit summary |
|||
(5 intermediate revisions by the same user not shown) | |||
Line 19: | Line 19: | ||
<html><img src="https://futuragora.pt/wiki/images/Fasensor_bb.jpg" alt="Be the change!" align="center" height="400" ></html> | <html><img src="https://futuragora.pt/wiki/images/Fasensor_bb.jpg" alt="Be the change!" align="center" height="400" ></html> | ||
==Fasensor Code== | |||
<pre> | |||
//FA Sensor 2 V2.0.1 4/8/2018 msantos 13/08/2018 reset | |||
#include <avr/wdt.h> | |||
#include <Wire.h> | |||
#include <Adafruit_BMP085.h> | |||
#include "DHT.h" | |||
#include <SPI.h> | |||
#include <Ethernet.h> | |||
#define DHTPIN A1// what digital pin we're connected to | |||
// Uncomment whatever type you're using! | |||
//#define DHTTYPE DHT11 // DHT 11 | |||
#define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 | |||
// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!) | |||
// Connect GND to Ground | |||
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5 | |||
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4 | |||
// EOC is not used, it signifies an end of conversion | |||
// XCLR is a reset pin, also not used here | |||
DHT dht(DHTPIN, DHTTYPE); | |||
Adafruit_BMP085 bmp; | |||
// Enter a MAC address for your controller below. | |||
byte mac[] = { 0xFE, 0xED, 0xCE, 0xEF, 0xCE, 0xED }; | |||
//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) | |||
char server[] = "api.thingspeak.com"; | |||
// Set the static IP address to use if the DHCP fails to assign | |||
IPAddress ip(192,168,1,110); | |||
// Initialize the Ethernet client library | |||
// with the IP address and port of the server | |||
// that you want to connect to (port 80 is default for HTTP): | |||
EthernetClient client; | |||
unsigned long LastTimeRun = 0; // Last time inverter analysis has run | |||
/// const int BatVoltagePin = A0; | |||
///float BatVoltage ; | |||
///int Namostras = 10; // number of samples | |||
///int VPinMedio; | |||
void setup() { | |||
Serial.begin(9600); | |||
Serial.println(F("FA Sensor serial at 9600")); | |||
Serial.println(F("created by futuragora.pt")); | |||
Serial.println(""); | |||
if (!bmp.begin()) { | |||
Serial.println(F("Could not find a valid BMP085 sensor, check wiring!")); | |||
while (1) {} | |||
} | |||
while (!Serial) { | |||
; // wait for serial port to connect. Needed for Leonardo only | |||
} | |||
if (Ethernet.begin(mac) == 0) { | |||
Serial.println(F("Failed to configure Ethernet using DHCP")); | |||
// no point in carrying on, so do nothing forevermore: | |||
// try to congifure using IP address instead of DHCP: | |||
Ethernet.begin(mac, ip); | |||
} | |||
delay(1000); // give the Ethernet shield a second to initialize: | |||
Serial.println(F("Testing IP connection...")); | |||
// if you get a connection, report back via serial: | |||
if (client.connect(server, 80)) { | |||
Serial.println("Conection test: OK"); | |||
Serial.println("Disconnecting."); | |||
client.stop(); | |||
} | |||
else { | |||
Serial.println("connection failed"); // kf you didn't get a connection to the server: | |||
} | |||
dht.begin(); | |||
} | |||
void loop() | |||
{ | |||
if ((LastTimeRun + 360000) < millis()) | |||
{ // Main routine running each 60 seconds | |||
LastTimeRun = millis(); | |||
float h = dht.readHumidity(); | |||
{ | |||
if (client.connect(server, 80)) { | |||
// sendig data to server | |||
Serial.println(F("")); | |||
Serial.println(F("-----------------------------")); | |||
Serial.print(F("Connected: ")); | |||
Serial.println(Ethernet.localIP()); | |||
Serial.println(F("Sending to ... FASensor1 ")); | |||
Serial.println(F("")); | |||
client.print("GET https://api.thingspeak.com/update?api_key=TESTKEY&"); | |||
client.print("field1="); | |||
client.print(bmp.readTemperature()); | |||
client.print("&&"); | |||
client.print("field2="); | |||
client.print(bmp.readPressure()); | |||
client.print("&&"); | |||
client.print("field3="); | |||
client.print(dht.readHumidity()); | |||
/// client.print("&&"); | |||
/// client.print("field4="); | |||
/// client.print(12.4); | |||
client.println(); | |||
client.println(); | |||
client.stop(); | |||
Serial.print(F("Temperature = ")); | |||
Serial.print(bmp.readTemperature()); | |||
Serial.println(F(" oC ")); | |||
Serial.print(F("Pressure = ")); | |||
Serial.print(bmp.readPressure()); | |||
Serial.println(F(" ")); | |||
Serial.print(F("Humidity = ")); | |||
Serial.print(dht.readHumidity()); | |||
Serial.println(F(" ")); | |||
Serial.println(F("")); | |||
Serial.println(F("Finish sending, disconnecting.")); | |||
Serial.println(F("-----------------------------")); | |||
Serial.println(F(" ")); | |||
} | |||
else { | |||
Serial.println(F("connection failed")); | |||
} | |||
} | |||
} | |||
} | |||
</pre> | |||
==Code Test sensors== | ==Code Test sensors== | ||
Line 212: | Line 341: | ||
== | ==Rasberry== | ||
<pre> | |||
echo "FASensor IoT" | |||
fa21t=$(/home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 11 4 | awk '$1 {print $1}' | awk '$1 {print $1}' RS="Temp=" | awk '$1 {print $1}' RS="*") | |||
echo "Temperatura: "$fa21t | |||
export fa21t=$fa21t | |||
sleep 4 | |||
fa21h=$(/home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 11 4 | awk '$1 {print $2}' | awk '$1 {print $1}' RS="Humidity=" | awk '$1 {print $1}' RS="%" | awk -F '.' '{print $1}') | |||
echo "Humidade: "$fa21h | |||
export fa21h=$fa21h | |||
report21="FAS21: "$fa21t" C | Humidade: "$fa21h"%" | |||
export report21=$report21 | |||
echo $report21 | |||
python ./fasensor21irc.py | |||
sleep 1 | |||
curl -i -H "Accept: application/json" -H "Content-Type: application/json" 'https://futuragora.pt/futurai/opensenses/fasensor21/getaasdasdsenasddax.php?hum='$fa21h'&temp='$fa21t'' | |||
</pre> | |||
==Libraries== | ==Libraries== | ||
Line 218: | Line 368: | ||
https://github.com/adafruit/Adafruit_Sensor | https://github.com/adafruit/Adafruit_Sensor | ||
https://github.com/roltel/arduino-hub/tree/master/libraries/Adafruit_BMP085 | |||
Arduino Hub - https://github.com/roltel/arduino-hub | |||
==PHP Code Arduino Mysql== | ==PHP Code Arduino Mysql== |
Latest revision as of 14:28, 18 September 2019
Fasensor é um sensor montado a partir de um arduino, com sensor de temperatura, humidade e pressão atmosférica. Pode consultar o projecto em:
Dados recolhidos: Temperatura, Humidade, Pressão Atmosférica
Componentes
Arduino ethernet
BMP085
DHT11
Fasensor Code
//FA Sensor 2 V2.0.1 4/8/2018 msantos 13/08/2018 reset #include <avr/wdt.h> #include <Wire.h> #include <Adafruit_BMP085.h> #include "DHT.h" #include <SPI.h> #include <Ethernet.h> #define DHTPIN A1// what digital pin we're connected to // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 // Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!) // Connect GND to Ground // Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5 // Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4 // EOC is not used, it signifies an end of conversion // XCLR is a reset pin, also not used here DHT dht(DHTPIN, DHTTYPE); Adafruit_BMP085 bmp; // Enter a MAC address for your controller below. byte mac[] = { 0xFE, 0xED, 0xCE, 0xEF, 0xCE, 0xED }; //IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) char server[] = "api.thingspeak.com"; // Set the static IP address to use if the DHCP fails to assign IPAddress ip(192,168,1,110); // Initialize the Ethernet client library // with the IP address and port of the server // that you want to connect to (port 80 is default for HTTP): EthernetClient client; unsigned long LastTimeRun = 0; // Last time inverter analysis has run /// const int BatVoltagePin = A0; ///float BatVoltage ; ///int Namostras = 10; // number of samples ///int VPinMedio; void setup() { Serial.begin(9600); Serial.println(F("FA Sensor serial at 9600")); Serial.println(F("created by futuragora.pt")); Serial.println(""); if (!bmp.begin()) { Serial.println(F("Could not find a valid BMP085 sensor, check wiring!")); while (1) {} } while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } if (Ethernet.begin(mac) == 0) { Serial.println(F("Failed to configure Ethernet using DHCP")); // no point in carrying on, so do nothing forevermore: // try to congifure using IP address instead of DHCP: Ethernet.begin(mac, ip); } delay(1000); // give the Ethernet shield a second to initialize: Serial.println(F("Testing IP connection...")); // if you get a connection, report back via serial: if (client.connect(server, 80)) { Serial.println("Conection test: OK"); Serial.println("Disconnecting."); client.stop(); } else { Serial.println("connection failed"); // kf you didn't get a connection to the server: } dht.begin(); } void loop() { if ((LastTimeRun + 360000) < millis()) { // Main routine running each 60 seconds LastTimeRun = millis(); float h = dht.readHumidity(); { if (client.connect(server, 80)) { // sendig data to server Serial.println(F("")); Serial.println(F("-----------------------------")); Serial.print(F("Connected: ")); Serial.println(Ethernet.localIP()); Serial.println(F("Sending to ... FASensor1 ")); Serial.println(F("")); client.print("GET https://api.thingspeak.com/update?api_key=TESTKEY&"); client.print("field1="); client.print(bmp.readTemperature()); client.print("&&"); client.print("field2="); client.print(bmp.readPressure()); client.print("&&"); client.print("field3="); client.print(dht.readHumidity()); /// client.print("&&"); /// client.print("field4="); /// client.print(12.4); client.println(); client.println(); client.stop(); Serial.print(F("Temperature = ")); Serial.print(bmp.readTemperature()); Serial.println(F(" oC ")); Serial.print(F("Pressure = ")); Serial.print(bmp.readPressure()); Serial.println(F(" ")); Serial.print(F("Humidity = ")); Serial.print(dht.readHumidity()); Serial.println(F(" ")); Serial.println(F("")); Serial.println(F("Finish sending, disconnecting.")); Serial.println(F("-----------------------------")); Serial.println(F(" ")); } else { Serial.println(F("connection failed")); } } } }
Code Test sensors
#include <Wire.h> #include <Adafruit_BMP085.h> /*************************************************** This is an example for the BMP085 Barometric Pressure & Temp Sensor Designed specifically to work with the Adafruit BMP085 Breakout ----> https://www.adafruit.com/products/391 These displays use I2C to communicate, 2 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include "DHT.h" #define DHTPIN A1 // what digital pin we're connected to // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 // Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!) // Connect GND to Ground // Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5 // Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4 // EOC is not used, it signifies an end of conversion // XCLR is a reset pin, also not used here DHT dht(DHTPIN, DHTTYPE); Adafruit_BMP085 bmp; double Fahrenheit(double celsius) { return 1.8 * celsius + 32; } // fast integer version with rounding //int Celcius2Fahrenheit(int celcius) //{ // return (celsius * 18 + 5)/10 + 32; //} //Celsius to Kelvin conversion double Kelvin(double celsius) { return celsius + 273.15; } // dewPoint function NOAA // reference (1) : http://wahiduddin.net/calc/density_algorithms.htm // reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm // double dewPoint(double celsius, double humidity) { // (1) Saturation Vapor Pressure = ESGG(T) double RATIO = 373.15 / (273.15 + celsius); double RHS = -7.90298 * (RATIO - 1); RHS += 5.02808 * log10(RATIO); RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ; RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ; RHS += log10(1013.246); // factor -3 is to adjust units - Vapor Pressure SVP * humidity double VP = pow(10, RHS - 3) * humidity; // (2) DEWPOINT = F(Vapor Pressure) double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558 - T); } // delta max = 0.6544 wrt dewPoint() // 6.9 x faster than dewPoint() // reference: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity*0.01); double Td = (b * temp) / (a - temp); return Td; } void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Could not find a valid BMP085 sensor, check wiring!"); while (1) {} } } void loop() { Serial.print("Humidity = "); Serial.print(dht.readHumidity()); Serial.println(" *H"); Serial.print("Temperature = "); Serial.print(bmp.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bmp.readPressure()); Serial.println(" Pa"); // Calculate altitude assuming 'standard' barometric // pressure of 1013.25 millibar = 101325 Pascal Serial.print("Altitude = "); Serial.print(bmp.readAltitude()); Serial.println(" meters"); // you can get a more precise measurement of altitude // if you know the current sea level pressure which will // vary with weather and such. If it is 1015 millibars // that is equal to 101500 Pascals. Serial.print("Real altitude = "); Serial.print(bmp.readAltitude(101500)); Serial.println(" meters"); Serial.println(); delay(5000); }
PHP and Mysql
Create a database with three tables: temperature, humidity, pressure. Use the following code:
CREATE TABLE `fasensor7`.`temperature` ( `id` INT( 255 ) NOT NULL AUTO_INCREMENT , `timestamp` VARCHAR( 255 ) NOT NULL , `temperature` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ; CREATE TABLE `fasensor7`.`pressure` ( `id` INT( 255 ) NOT NULL AUTO_INCREMENT , `timestamp` VARCHAR( 255 ) NOT NULL , `pressure` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ; CREATE TABLE `fasensor7`.`humidity` ( `id` INT( 255 ) NOT NULL AUTO_INCREMENT , `timestamp` VARCHAR( 255 ) NOT NULL , `temperature` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ; CREATE TABLE `fasensor7`.`light` ( `id` INT( 255 ) NOT NULL AUTO_INCREMENT , `timestamp` VARCHAR( 255 ) NOT NULL , `pressure` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ;
Add 2 files to your server: connect.php and 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"]."')"); ?>
Rasberry
echo "FASensor IoT" fa21t=$(/home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 11 4 | awk '$1 {print $1}' | awk '$1 {print $1}' RS="Temp=" | awk '$1 {print $1}' RS="*") echo "Temperatura: "$fa21t export fa21t=$fa21t sleep 4 fa21h=$(/home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 11 4 | awk '$1 {print $2}' | awk '$1 {print $1}' RS="Humidity=" | awk '$1 {print $1}' RS="%" | awk -F '.' '{print $1}') echo "Humidade: "$fa21h export fa21h=$fa21h report21="FAS21: "$fa21t" C | Humidade: "$fa21h"%" export report21=$report21 echo $report21 python ./fasensor21irc.py sleep 1 curl -i -H "Accept: application/json" -H "Content-Type: application/json" 'https://futuragora.pt/futurai/opensenses/fasensor21/getaasdasdsenasddax.php?hum='$fa21h'&temp='$fa21t''
Libraries
https://github.com/adafruit/Adafruit_Sensor
https://github.com/roltel/arduino-hub/tree/master/libraries/Adafruit_BMP085
Arduino Hub - https://github.com/roltel/arduino-hub
PHP Code Arduino Mysql
Create Table: