• Welcome to LusoRobótica - Robótica em Português.
 

Estufa Autmatizada com Arduino

Started by Leandro Beatto, 04 de April de 2011, 23:39

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Leandro Beatto

Galera
boa noite

Alguem poderia me ajudar??
Estou automatizando uma estufa com uma placa Arduino, o procedimento é o seguinte;

inicia com 80 graus e permanece durante 2horas;
depois com 100 graus e permanece durante 4horas;
e por fim com 40 graus permancendo por 1hora
e
fim.

Minha duvida é como permancer o loop durante o tempo determinado e dps pular para o outro programa???

se alguem puder me ajudar eu agradeço

Obrigado

Leandro Beatto.




xiserre

Podes fazer com um rtc, ou entao com delays.. mas provavelmente tens de fazer muitos incrementos ate passar esse tempo todo. nao sei quanto tempo podes fazer delay de uma vez so

metRo_

#include <MsTimer2.h>

void count() {
  timecount++;
}

void setup() {
  volatile uint16_t timecount=0;
 
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
 
  MsTimer2::set(1000, count);
  MsTimer2::start();
}

void loop() {
  //2horas*60minutos*60segundos=7200
  if(timecount>=7200){
    digitalWrite(13, LOW);
    timecount=0; 
  }
}


Algo deste género deve fazer o que queres.

senso

O delay do Arduino aceita um unsigned int se não me engano, logo podes fazer delays de até 65535 mili-segundos, o que dá cerca de 65 segundos.
Mas ficar a queimar horas num delay é um erro, o programa deve ir contando o tempo e SEM bloquear a execução deve continuar a ler os sensores e essas coisas todas, porque se lhe metes um delay ele fica ali parado a fazer nops.
Avr fanboy

Leandro Beatto

Obrigado pela ajuda.!!

O progama que iniciei é assim;

int rele = 9;
int SENSOR = 0;
float D = 0;
float T = 0;
float L = 61.38;


void setup(){
  Serial.begin(9600);
  Serial.println("Lendo Temperatura...");
  pinMode (9, OUTPUT);
}
void loop(){
  D = analogRead(SENSOR);
 
  T = (D * 5 * 100)/1023;
 
  Serial.print(T);
  Serial.println(" C");
  delay(3000);
 
{
  if(analogRead(SENSOR)<L){
  digitalWrite(rele, HIGH);
  }
  else
  if(analogRead(SENSOR)>=L){
    digitalWrite(rele, LOW);
  }
}
}



mas, preciso encaixar alguma coisa que possa fazer o procedimento do tempo..

senso

O exemplo do metro é bom para isso, usando a biblioteca MsTimer.
Só uma coisa, o analogWrite retorna um valor inteiro, usar floats só ocupa mais memória sem ganhar nada com isso.
Avr fanboy

Leandro Beatto

OK.

é pq não expliquei o precedimento direito, não ficará somente no tempo, o Arduino irá ler o sensor mantendo a temperatura entre uma determinado faixa durante um determinado tempo.

e tb estou tentando fazer os testes com o programa enviado por o metRo, mas, está dando erro no compilar;
#include <MsTimer2.h>  erro:Nenhum arquivo ou diretório

este library não tem no programa para importar, será que é isso?? qual procedimento que eu faço??

Att. Leandro

senso

Tens que fazer o download da biblioteca primeiro
Avr fanboy

Leandro Beatto

Ok.

instalei na biclioteca, mas continua o erro anexo

timecount++;  erro:sketch_apr05a:15: error: 'timecount' was not declared in this scope

senso

Isso é porque o timecount não foi declarado como uma variavel.

#include <MsTimer2.h>

volatile uint16_t timecount = 0;

void count() {
  timecount++;
}

void setup() {
  volatile uint16_t timecount=0;

  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);

  MsTimer2::set(1000, count);
  MsTimer2::start();
}

void loop() {
  //2horas*60minutos*60segundos=7200
  if(timecount>=7200){
    digitalWrite(13, LOW);
    timecount=0;
  }
}


Assim já deve compilar.
Avr fanboy