Hola, he visto post que tratan este tema pero también he visto que no reabrir post viejos...por eso este nuevo.
Bueno llevo poco tiempo con arduino,me he mudado y la casa tiene en el salon persianas mecanicas con dos botones uno para bajar y otro subir.
Ya tengo mi arduino con dos relés y un sensor de luz, estoy probando con dos leds a los relés, he conseguido que si detecta luz se encienda un led y si no se activa el otro relé y enciende el otro led.
Tengo un problema, solo quiero que se active cada rele 20 seg aprox, y se desactive por ahora solo consigo que este uno u otro se activen pero siempre uno u otro estan funcionando.
En sensor de luz lo tengo puesto que si detecta 12 o menos se active y baja la persiana.. 25 o mas sube persiana.
Como no se estaba utilizando el comando if pero parece que siempre esta en bucle, he utilizado while y mismo resultado.
ya he comentado que llevo poco tiempo en arduino, el codigo lo tengo en casa pero esto es lo mas parecido que puedo poner ahora.
en el codigo tengo puesto LED subir y bajar, en el montaje tengo dos reles, como funcionan igual para ejemplo nos vale
he quitado los delay, lei que al ejecutar un delay el arduino no hace nada hasta que no termina ese delay
ahora lo que hace es que si detecta una cantidad de luz hace una cosa u otra... pero no para, entonces imaginaros el rele estaria pasando todo el rato electricidad y es como si el boton estuviera pulsado en todo momento.
quiero que cuando por ejemplo, sea de noche baje la persiana 20seg y se pare el rele, cuando se haga de dia y detecte la cantidad de luz programa suba las persianas 20 seg y se pare el rele.
¿algun comando para decirle que pare ese bucle hasta que no detecte el otro cambio de luz?
/*** Included libraries ***/
#include <SoftwareSerial.h>
#include <BitbloqSoftwareSerial.h>
/*** Global variables and function definition ***/
int bajar = 1;
int subir = 2;
int sensor_de_luz_0 = A0;
bqSoftwareSerial puerto_serie_0(0, 1, 9600);
/*** Setup ***/
void setup() {
pinMode(bajar, OUTPUT);
pinMode(subir, OUTPUT);
pinMode(sensor_de_luz_0, INPUT);
}
/*** Loop ***/
void loop() {
puerto_serie_0.println(analogRead(A0));
delay(500);
if (analogRead(A0) >= 25) {
digitalWrite(bajar, HIGH);
} else if (analogRead(A0) <= 12) {
digitalWrite(subir, HIGH);
}
}
no has pensado en poner unos finales de carrera al final de la persiana para que sepas en todo momento cuando llega al final y al principio? En caso contrario.... peudes hacerlo con contadores, o poniendole un tiempo de subida o de bajada a la persiana... pero sin saber del punto desde el que parte..... a mi me parece un poco arriesgado.
hola, por ahora no pondre sensores pero si lo he pensado, el motor se para cuando llega arriba o abajo.
los pondre en un futuro por ejemplo para que no se baje la persiana al estar limpiando.
desde el punto mas alto a persiana bajada totalmente son 23.4seg (bueno hasta donde se para el motor)
partiendo desde arriba y bajando 20seg quedaria bien, subir tarda lo mismo 20seg.
estoy leyendo y leyendo programacion en arduino pero aun no se como hacer ciertas cosas, si detecta luz a mas de 25 suba 20seg y se pare, si detecta menos 12 baje y se pare... no se hacer eso.
mi intencion es que el recorrido siempre sea solo de arriba / abajo / arriba 20seg, aparte quiero poner dos botones que pueda mover la persiana al gusto, pero esto como los sensores no lo hare ahora, primero quiero que la persiana me haga caso y haga lo basico
ya ire investigando lo demas, asi voy aprendiendo no quiero que me hagais todo no tiene emocion
he visto algun manual(que tengo guardado) que mueven la persiana con un mando IR, tambíen lo quiero implementar, pero solo sube o baja si mantienes pulsado el boton del mando IR, esto lo veo facil ya hecho alguna prueba, pero con el sensor de luz no se como.
Hola.
Deberás implementar una variable global en la que almacenes el estado de la persiana.
Entonces, tu condición será compuesta (lo pongo en pseudocódigo pero se entiende):
antes no podía probar en el curro ya en casa he probado el codigo en el arduino
ahora tengo el led de bajar encendido y el de subir apagado, da lo mismo lo que reciba por el sensor de luz que no hace nada