Maqueta de habitación con sensores

estoy intentando solucionar un problema dde este codigo sobre el stepmotor. Lo que quiero que haga es que dependiendo de la temperatura gire para un lado u otro (simulando una persiana). Pero este lo hace en bucle y no se llega a detener.
Os lo dejo a continuación por si alguien puede ayudarme.:wink:

#include <DHT.h>
#include <Stepper.h>
#include <LiquidCrystal.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal lcd(8, 9, 4, 5, 6, 10);

Stepper myStepper(40, 30, 32, 34, 36);

int ventiladorPin = 12;

double fnc_ultrasonic_distance(int _t, int _e){
	unsigned long dur=0;
	digitalWrite(_t, LOW);
	delayMicroseconds(5);
	digitalWrite(_t, HIGH);
	delayMicroseconds(10);
	digitalWrite(_t, LOW);
	dur = pulseIn(_e, HIGH, 18000);
	if(dur==0)return 999.0;
	return (dur/57);
}

void setup() {
  pinMode(ventiladorPin, OUTPUT);

  myStepper.setSpeed(15);
  dht.begin();

  lcd.begin(16, 2);
  lcd.print("Temperatura:");
  lcd.setCursor(0, 1);
  lcd.print("Luz: ");

{
  	pinMode(13, OUTPUT);
	pinMode(11, INPUT);
	pinMode(7, OUTPUT);

}

}

void loop() {
  float temperatura = dht.readTemperature();

  if (temperatura < 24) {
    myStepper.step(20);
  } else {
    myStepper.step(-20);
  }

  if (temperatura < 24) {
    digitalWrite(ventiladorPin, HIGH);
  } 
  else {
    digitalWrite(ventiladorPin, LOW);
  }

  {

  	

  lcd.setCursor(12, 0);
  lcd.print(temperatura, 1);
  lcd.setCursor(5, 1);
  
  delay(1000);


}

if ((fnc_ultrasonic_distance(13,11) < 20)) {
  		digitalWrite(7, HIGH);
  		delay(3000);
      digitalWrite(7, LOW);
  	}
  	else {
  		digitalWrite(7, LOW);
  	}

}

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @nunyezz.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

En la vida real no basta con sensar solamente la temperatura, tienes que saber donde esta la persiana para poder detenerla, normalmente dos contactos, (interruptores o botones), colocados arriba y abajo del recorrido de la persiana.
Dico esto tu if:

 if (temperatura < 24) {
    myStepper.step(20);
  } else {
    myStepper.step(-20);
  }

Ha de ser mas complejo y tener en cuenta esos dos contactos de fin de carrera para detener o no la persiana.
Veo en tu código que anda de por medio un sensor ultrasónico buena idea para sustituir eso dos contactos, me lo apunto no se me había ocurrido, luego tu if para mover la persiana podría quedar algo así:

if (temperatura < 24) {
    while (fnc_ultrasonic_distance(13, 11) > 5) { // creo recordar que 5 es el limite inferior de esos sensores.
      myStepper.step(20);
    }
  } else {
    while (fnc_ultrasonic_distance(13, 11) < 120) { // Persiana de 1,20 mts. de apertura.
      myStepper.step(-20);
    }
  }

Es solo un ejemplo, estudialo, pruebalo, refina tu codigo y nos cuentas.
Saludos.

PERFECTO MUCHAS GRACIAS LO TENDRE EN CUENTA, en teoria el de ultra sonidos es para habrir unas luces al detectar objetos pero tambien seria buena idea la tuya la persiana se mueve mediante la temperatura (como si fuese una casa dependiendo de la temperatura)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.