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);
}
}
Tags:
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;
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por