Compostino- Monitor de Composteira com Arduino

De Pontão Nós Digitais
Revisão de 21h38min de 19 de dezembro de 2013 por Chicosimoes (discussão | contribs)
Ir para navegaçãoIr para pesquisar

Usando um sensor de metano, um de temperatura e um de umidade produziremos um painel indicador das condições da composteira.

A meta é produzir dados para a evolução até um sistema de regulação automática de alguns destes fatores para acelerar e otimizar o processo de compostagem.

Para este código rodar precisamos Instalar a biblioteca DHT11

Codigo do Compostino versão 0.1 (8/7/2013)

/*
Compostino = Unidade de monitoramento de composteiras.
inicio em 7/7/2013 durante oficina aberta no veracidade Sao Carlos SP brasil copyleft

Partimos de:

metano in arduino.cc
Created by David Cuartielles
modified 30 Aug 2011
By Tom Igoe

lm35 in arduino.cc
Created by David Cuartielles
modified 30 Aug 2011
By Tom Igoe

*/
#include <dht11.h>
dht11 DHT11;
int dht11pino = 2; // pino digital do sensor dht11
int metanoPino = A0;   // escolha o pino que recebe o sinal do sensor de metano
int calorPino = A1;  // escolha o pino que recebe o sinal do sensor de temperatura
int umidadePino = A2; // escolha o pino que recebe o sinal do sensor de umidade
int ledMetano = 13;      // escolha o pino que acendera o ledMetano
float valorMetano = 0;  //  guarda o valor medido no sensor MQ-4(metano)
float limiteMetano = 600; // valor definido como limiar maximo de metano 
int ledcalormeso = 10;   //ascende pino na temperatura boa para bact mesofilicas
int ledcalortermo = 11;  //ascende pino na temperatura boa para bact termofilicas
int ledcalorfrito = 12;  //ascende pino quando temperatura  muito alta
float valorcalor = 0;    //guarda valor medido sensor LM35(temperatura)
float limitecalor = 70;  //Limite maximo de temperatura
int ledseco = 8;  //ascende pino quando umidade esta baixa. Precisa molhar composteira.
int ledmolhado = 9;  //ascende pino quando umidade esta muito alta. 
float valorumidade = 0; //guarda valor do sensor caseiro (umidade)
float umidademin = 300;  //limite minimo da faixa ideal de umidade
float umidademax = 370;   //limite maximo da faixa ideal de umidade


void setup() {
 // declarando o ledMetano como OUTPUT:
 pinMode(ledMetano, OUTPUT);
 // declarando os ledcalor como OUTPUT:
 pinMode(ledcalormeso, OUTPUT);
 pinMode(ledcalortermo, OUTPUT);
 pinMode(ledcalorfrito, OUTPUT);
 // declarando os ledumidade como OUTPUT:
 pinMode(ledseco, OUTPUT);
 pinMode(ledmolhado, OUTPUT);
 Serial.begin(9600);  
}
void loop() {
 // funçao Metano
 // lendo o valor do sensor:
 valorMetano =analogRead(metanoPino);   
 // liga o ledMetano
   // imprime o resultado no monitor serial:
 Serial.print("Metano igual a: " );                       
 Serial.println(valorMetano); 
 // dependendo do valorMetado acende ou apaga led limiteMetano
 if (valorMetano >= limiteMetano){
   digitalWrite(ledMetano, HIGH);
 }
 else{
   digitalWrite(ledMetano, LOW);
 }


 // funçao temperatura
 valorcalor =(5.0 * analogRead(calorPino) * 100.0) / 1024; 
 // acender o primeiro ledCalor, se temperatura maior que 35
 if (valorcalor > 35) {
   digitalWrite(ledcalormeso, HIGH);  
   digitalWrite(ledcalortermo, LOW);  
   digitalWrite(ledcalorfrito, LOW);  
 }
 // acender primeiro e segundo ledCalor, se temperatura maior que 50 
 if (valorcalor > 50) {              
   digitalWrite(ledcalormeso, HIGH);  
   digitalWrite(ledcalortermo, HIGH);  
   digitalWrite(ledcalorfrito, LOW);  
 }
 // acende primeiro, segundo e terceiro ledCalor, se temperatura maior que 70  
 if (valorcalor > 70) {              
   digitalWrite(ledcalormeso, HIGH);  
   digitalWrite(ledcalortermo, HIGH);  
   digitalWrite(ledcalorfrito, HIGH);  
 }
 // se temperatura menor que 35, primeiro, segundo e terceiro ledcalor desligado
 else {
   digitalWrite(ledcalormeso, LOW);  
   digitalWrite(ledcalortermo, LOW);  
   digitalWrite(ledcalorfrito, LOW); 
 }
 // imprime resultados no monitor serial:
 Serial.print("A temperatura igual a: " );                       
 Serial.println(valorcalor);      
 //funçao umidade
 // lendo o valor do sensor:
 valorumidade =analogRead(umidadePino);
 // umidade menor que 40, significa que esta muito seco, ledseco ligado:
 if (valorumidade < umidademin) {
   digitalWrite(ledseco, HIGH);  
   digitalWrite(ledmolhado, LOW);  
 }
 // umidade maior que 370, significa que esta muito molhado, ledmolhado ligado:
 if (valorumidade > umidademax){
   digitalWrite(ledseco, LOW);  
   digitalWrite(ledmolhado, HIGH);
 }   
 // umidade entre 40 e 370, todos os leds desligado:
 if (valorumidade > umidademin && valorumidade < umidademax) {
   digitalWrite(ledseco, LOW);  
   digitalWrite(ledmolhado, LOW);
 }
 Serial.print("Umidade do composto igual a: " );                       
 Serial.println(valorumidade); 
 // funçao umidade do ar: 
 int chk = DHT11.read(dht11pino);
 Serial.print("umidade do ar: ");
 Serial.println((float)DHT11.humidity, 2);
 Serial.print("Temperatura do ar: ");
 Serial.println((float)DHT11.temperature, 2);
 Serial.println ( );
 delay(3000); 
}


ver: Fermentino