Olá pessoal

Estou desenvolvendo um projeto mas estou com uma certa dificuldade. Estou utilizando um sensor de umidade e temperatura (DHT11) e um motor de passo. Preciso que quando valor for > que determinada temperatura ele aciona o motor de passo no sentido horário, se ele ja estiver acionado e a temperatura continuar acima do valor determinado ele continue parado e se a temperatura ficar abaixo do valor selecionado ele deverá rodar a mesma quantidade para o sentido anti-horário.

O problema que estou tendo, é como que faço para que ele verifique, por exemplo se ele ja rodou no horário ou no anti-horário. Porque esta acontecendo, por exemplo, defini a temperatura como maior que 34 °C, só que ele faz a varredura e detectando que esta acima de 34 ele gira no sentido horário, abrindo no caso uma janela, mas quando ele faz a varredura novamente, se ainda estiver acima de 34 ele gira de novo, e assim sucessivamente. 

Segue o código que estou trabalhando, se alguém puder ajudar nesta questão...

#include <dht11.h>
#include <Stepper.h> // Incluir Biblioteca 'Stepper'
dht11 sensor;

Stepper myStepper(300, 32, 34, 33, 35);
Stepper HIGHT =
void setup() {

Serial.begin(9600);

}

void loop() {

Serial.print("Lendo sensor: ");
int chk = sensor.read(52);
switch(chk) {
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Erro no checksum");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Tempo esgotado");
break;
default:
Serial.println("Erro desconhecido");
}
Serial.print("Umidade (%): ");
Serial.println((float)sensor.humidity, 2);
Serial.print("Temperatura (Celsius): ");
Serial.println((float)sensor.temperature, 2);
delay(2000);

if (sensor.temperature > 34){
myStepper.setSpeed(60); // Ajusta a velocidade, este valor pode ser mudado
myStepper.step(14000); // Numero de passos, sentido horário
delay(500);
}
}

 

Exibições: 677

Responder esta

Respostas a este tópico

Usa uma flag cara... se a temp. passou de 34ºC seta essa flag pra "1", por exemplo. Se a temp. continua >= que 34ºC a flag continua em "1" e o motor não gira. Se a temp. passar para < 34ºC a flag é setada para "0" e o motor gira. Sacou? O motor irá girar apenas nas transições de "0" pra "1" e vice-versa.

Obrigado pela resposta Lucas, mas não manjo muito de programação, como definiria isto para o arduino?

Pensei numa lógica assim:

// defina variáveis globais que recebam a temperatura atual e as flags, por exemplo:

float temp;
boolean flag; // cria uma variável tipo boolean
boolean aux;

void setup()
{
// faça o primeiro teste aqui
if (temp < 34 )
{
flag = 0;
// códigos para girar para o lado onde temp < 34ºC
}
else
{
flag = 1;
// códigos para girar para o lado onde temp > 34ºC
}
}

void loop()
{

if (temp < 34) aux = 0;
else aux = 1;
flag = flag ^ aux; // operação binária XOR
if (flag == 1 && aux == 1)
{
flag = 1;
// códigos para girar para o lado onde temp > 34ºC
}
else if (flag == 1 && aux == 0)
{
flag = 0;
// códigos para girar para o lado onde temp < 34ºC
}
}

 

Lucas

Funcionou certinho.. 

Valew mesmo

Só está com erro de lógica, mas dá pra arrumar fácil:

// defina variáveis globais que recebam a temperatura atual e as flags, por exemplo:

float temp;
boolean flag; // cria uma variável tipo boolean
boolean aux;

void setup()
{

// ler a temperatura
// faça o primeiro teste aqui
if (temp < 34 )
{
flag = 0;
// códigos para girar para o lado onde temp < 34ºC
}
else
{
flag = 1;
// códigos para girar para o lado onde temp > 34ºC
}
}

void loop()
{

// ler a temperatura

if (temp < 34) aux = 0;
else aux = 1;
flag = flag ^ aux; // operação binária XOR
if (flag == 1 && aux == 1)
{
// códigos para girar para o lado onde temp > 34ºC
}
else if (flag == 1 && aux == 0)
{
// códigos para girar para o lado onde temp < 34ºC
}

if (aux == 1) flag = 1;
else flag = 0;
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço