Compostino- Monitor de Composteira com Arduino
De Pontão Nós Digitais
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.
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);
}