Skip to content

Instantly share code, notes, and snippets.

@tashima42
Created February 15, 2019 12:59
Show Gist options
  • Save tashima42/df9a06237c5a08591d6672ce4183f634 to your computer and use it in GitHub Desktop.
Save tashima42/df9a06237c5a08591d6672ce4183f634 to your computer and use it in GitHub Desktop.
/* Codigo feito por Pedro Tashima (@Tashima42)
* Regador e Datta Logger automatico de plantas*/
#include "DHT.h" //biblioteca para o leitor de umidade e temperatura DHT11
#include <DS3231.h> //biblioteca para o relogio RTC
#include <SPI.h> //biblioteca para o SD
#include <SD.h> //biblioteca para o SD
#define pinoDht 9 // PINO digital em que o DT11 esta conectado
#define tipoDht DHT11 // DHT 11
const int chipSelect = 10; //Pino CS do SD
const int pinoChuva = A7; //Pino de entrada analogico do sensor de chuva
const int pinoSolo = A6; //Pino de entrada analogico do sensor de umidade do solo
const int pinoRele = 8; //Pino de Saida do Rele
const int pinoLuz = A3; //Pino de entrada analogico do sensor de Luz
//Hora para desligar e ligar a solenoide
const int ligaHora = 13;
const int ligaMinuto = 37;
const int desligaHora = 13;
const int desligaMinuto = 38;
//Liga a solenoide as 13:37 e desliga as 13:38
//
int valorChuva = 0; //armazena o valor analogico do sensor de chuva
int valorSolo = 0; //armazena o valor analogico do sensor de umidade do solo
int valorLuz = 0; //Armazena o valor analogico do sensor de Luz
DHT dht(pinoDht, tipoDht); //define os pinos para o DHT11
DS3231 rtc(SDA, SCL); //define os pinos para o RTC
Time tempo;
void setup() {
Serial.begin(9600);
Serial.print("Iniciando DHT11 ");
dht.begin(); //inicia o DHT11
rtc.begin(); //inicia o RTC
pinMode(pinoChuva, INPUT);//definindo o pino do sensor de chuva como entrada
pinMode(pinoSolo, INPUT); //definindo o pino do sensor de umidade do solo como entrada
pinMode(pinoRele, OUTPUT);//definindo o pino do rele como saida
Serial.print("Iniciando o cartao SD...");
// Ve se o cartao SD esta presente
if (!SD.begin(chipSelect)) {
Serial.println(" | O cartao SD falhou ou nao esta presente");
return; //nao faz mais nada
}
Serial.println(" | cartao iniciado.");
}
void loop() {
//DHT11
int h = dht.readHumidity(); // le a umidade do ar
int t = dht.readTemperature(); //le a temperatura em celcius
valorChuva = analogRead(pinoChuva); //SENSOR DE CHUVA
valorSolo = analogRead(pinoSolo); //SENSOR DE UMIDADE DO SOLO
valorLuz = analogRead(pinoLuz); //SENSOR DE LUZ
/* if (valorSolo < 200) {
digitalWrite(pinoRele, LOW);
delay(10);
}
else {
digitalWrite(pinoRele, HIGH);
}
*/
File dataFile = SD.open("datalog4.csv", FILE_WRITE); //Cria o arquivo para guardar os dados
//COLOCA OS DADOS NO CARTAO SD
if (dataFile) {
dataFile.print("(");
dataFile.print(rtc.getDateStr()); //data
dataFile.print(")");
dataFile.print("(");
dataFile.print(rtc.getTimeStr()); //hora
dataFile.print(")");
dataFile.print(" , ");
dataFile.print(h); //umidade
dataFile.print(" , ");
dataFile.print(t); //temperatura
dataFile.print(" , ");
dataFile.print(valorChuva); //chuva
dataFile.print(" , ");
dataFile.print(valorSolo); //umidade do solo
dataFile.print(" , ");
dataFile.print(valorLuz);
dataFile.println(" , ");
dataFile.close();
//PARTE DE IMPRESSAO PARA O MONITOR SERIAL
Serial.print("(");
Serial.print(rtc.getDateStr()); //data
Serial.print(")");
Serial.print("(");
Serial.print(rtc.getTimeStr()); //hora
Serial.print(")");
Serial.print(" , ");
//DHT11
//printa a umidade
Serial.print ("Umidade: ");
Serial.print (h);
Serial.print(" %");
Serial.print(" , ");
//printa a temperatura
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C");
Serial.print(" , ");
//SENSOR DE CHUVA
Serial.print("Quantidade de Chuva: ");
Serial.print(valorChuva);
Serial.print(" , ");
Serial.print("Umidade do solo: ");
Serial.print(valorSolo);
Serial.print(" , ");
Serial.print("Luminosidade: ");
Serial.print(valorLuz);
Serial.println(" , ");
//
digitalWrite(pinoRele, HIGH);
delay(60000);
digitalWrite(pinoRele, LOW);
delay(1800000);
}
// if the file isn't open, pop up an error:
else {
Serial.println("erro ao abrir datalog.csv");
}
/* tempo = rtc.getTime();
if (tempo.hour == ligaHora && tempo.min == ligaMinuto) {
digitalWrite(pinoRele, HIGH);
}
else if (tempo.hour == desligaHora && tempo.min == desligaMinuto) {
digitalWrite(pinoRele, LOW);
} */
delay(1000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment