Skip to content

Instantly share code, notes, and snippets.

Created September 24, 2016 10:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/bfa6edce1ba02e50800e4c9ee65d56e0 to your computer and use it in GitHub Desktop.
Save anonymous/bfa6edce1ba02e50800e4c9ee65d56e0 to your computer and use it in GitHub Desktop.
// coltivino, last update: september 24th, 2016
#include "DHT.h"
#define DHTPIN A2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <OneWire.h>
OneWire ds(10);
int rel_osm = 2;
int rel_neb = 4;
int sens_lev_wat = A0;
int sens_lev_sun = A1;
int sens_lev_rai = A3;
int sens_lev_soi = A4;
int lev_wat;
int lev_sun;
int lev_rai;
int lev_soi;
int val_lev_wat;
int val_lev_sun;
int val_lev_rai;
int val_lev_soi;
int h;
void setup() {
Serial.begin (9600);
dht.begin();
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
pinMode (12, OUTPUT);
pinMode (rel_osm, OUTPUT);
pinMode (rel_neb, OUTPUT);
pinMode (sens_lev_wat, INPUT);
pinMode (sens_lev_sun, INPUT);
pinMode (sens_lev_rai, INPUT);
pinMode (sens_lev_soi, INPUT);
}
void loop(){
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
lev_wat = analogRead(sens_lev_wat);
val_lev_wat = map(lev_wat, 0, 1023, 0, 100);
lev_sun = analogRead(sens_lev_sun);
val_lev_sun = map(lev_sun, 0, 1023, 0, 100);
lev_rai = analogRead(sens_lev_rai);
val_lev_rai = map(lev_rai, 0, 1023, 0, 100);
lev_soi = analogRead(sens_lev_soi);
val_lev_soi = map(lev_soi, 0, 1023, 100, 0);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (val_lev_sun > 6)
{
if (val_lev_wat < 10)
{
digitalWrite(rel_osm, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW);
}
else
{
digitalWrite(rel_osm,HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW);
}
}
else
{
digitalWrite(rel_osm, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW);
}
delay (5000);
if (val_lev_sun > 6)
{
if (h < 50)
{
digitalWrite(rel_neb, LOW);
}
else
{
digitalWrite(rel_neb,HIGH);
}
}
else
{
digitalWrite(rel_neb, HIGH);
}
delay (5000);
Serial.println("=============================================");
Serial.print("Luce solare: ");
Serial.print(val_lev_sun);
Serial.println("%");
Serial.print("Umidita' relativa: ");
Serial.print(h);
Serial.println(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C ");
Serial.print("Situazione meteo: ");
if (val_lev_rai > 20)
{
Serial.println("tempo sereno");
}
else if (val_lev_rai < 10)
{
Serial.println("temporale");
}
else
{
Serial.println("pioggia");
}
Serial.print("Temperatura del suolo: ");
Serial.print(celsius);
Serial.println("*C");
Serial.print("Umidita' del suolo: ");
Serial.print(val_lev_soi);
Serial.print("% ");
if (val_lev_soi > 80)
{
Serial.println("> OK!");
}
else
{
Serial.println("> INSUFFICIENTE!");
}
Serial.print("Livello dell'acqua: ");
Serial.print(val_lev_wat);
Serial.println(" cm.");
Serial.println("=============================================");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment