This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Proyecto Temporizador Insoladora
#1
Bueno, para comenzar, disponemos principalmente de un Arduino Nano y un LCD, 4 botones, uno sera de UP, otro DOWN, otro Start, y otro Stop, tambien dispondremos de un buzzer, y la placa de control para un rele con el arduino.

Queremos realizar lo siguiente, al inicializar, tenemos un menu, que no pedira introducir un tiempo, este tiempo podremos ampliarle de 10seg en 10 seg, cada pulsacion sumaremos 10seg, cuando pasemos de 60seg, sumamos un minuto y volvemos a 0 segundos.

En principio mi idea para realizar esta parte, con algo al estilo:

Código:
do
{
    if (SWITCH_UP == HIGH)//Si pulsamos UP
    {
        seg=seg+10 //Sumamos 10 segundos
        if (seg>60) //Si los segundos pasan de 60
        {
            minu=minu+1 //Sumamos un minuto
            seg=0 //Ponemos los segundos de nuevo a cero
        }
    }
    if (SWITCH_DOWN == HIGH) //Si pulsamos DOWN
    {
        seg=seg-10 //Restamos 10 segundos
        if (seg<0) //Si los segundos bajan de cero
        {
            minu=minu-1 //Restamos un minuto
            seg=50 // Ponemos los segundos a 50
            if (minu<0) //Si los minutos bajan de cero, ponemos a cero de nuevo, ya que no hay tiempo negativo
            minu=0
        }

    }
}while (SWITCH_START ¡= HIGH) //No pasamos de este menu hasta que pulsemos START

[Imagen: av8p.jpg]

*Pueden existir errores de sintaxis en el codigo y se que faltan cosas, solo para que os agais una idea de como pretendia hacerlo

Yo he programado en MATLAB bastante y me viene la siguiente duda, el while del final se ejecutara si no estamos pulsando ningun boton y de repente pulsamos start? o seria necesario realizar alguna interrupcion, o similares?

Es algo que e echo sobre la marcha, pero para resolverme algunas dudas me vale por ahora, todo esto esta claro declarando variables, que seria n INT, y mostrando estos datos por el LCD.

Tras este menu, si le damos a start, grabariamos los datos en la EEPROM, tema que por ahora no me voy a meter, y la cuenta atras la realizariamos con un FOR, para poder ir mostrando por pantalla la cuenta atras, la otra duda que e surge es, si yo pulso el boton STOP, yo quiero, que me muestre por pantalla un mensaje de "PARADO", y vuelva al menu inicial, el tema es, meto un if, en mitad del bucle for que me verifique a cada cuenta si se a pulsado el boto STOP, o todo esto es necesario realizarlo con interrupciones?

Por ahora son dudas que me surgen, y que no puedo comprobar ya que no tengo por ahora el arduino

Muchas Gracias.
  Responder
#2
Justo hoy estaba pensando como iria el tema de las interupciones en los arduino/atmega.
Es necesario grabar el valor en la eeprom?? Solo he estudiado los pics y alli usaba los timers
  Responder
#3
cansi22 escribió:Justo hoy estaba pensando como iria el tema de las interupciones en los arduino/atmega.
Es necesario grabar el valor en la eeprom?? Solo he estudiado los pics y alli usaba los timers

Yo he estado leyendo un poco sobre ello y creo que se guarda en la RAM, hay que andarse con ojo, porque puede ralentizar el codigo, de todas formas, nose si podre implementar lo que pretendo sin ellos, no estoy seguro....
  Responder
#4
Así a ojo la idea esta bien, pero tendrás que ir mostrando el valor de las variables de tiempo para saber cuanto llevas acumulado, por lo demás no veo nada ahora.

Y para las interrupciones no es necesario guardar el valor en la eprom, estoy casí seguro pero no te lo confirmo. Por que dices que no vas a poder implementarlo sin interrupciones?
  Responder
#5
Ait0r escribió:Así a ojo la idea esta bien, pero tendrás que ir mostrando el valor de las variables de tiempo para saber cuanto llevas acumulado, por lo demás no veo nada ahora.

Y para las interrupciones no es necesario guardar el valor en la eprom, estoy casí seguro pero no te lo confirmo. Por que dices que no vas a poder implementarlo sin interrupciones?


Nono, si no hace falta guardar los valores en la EEPROM cuando vas a hacer interrupciones, se guardan en la RAM juraria.

Os dejo un articulo:

http://fuenteabierta.teubi.co/2012/12/ma...duino.html


Decia lo de las interrupciones, porque imagino que no tendre problema porque ejecuta el codigo a una velocidad bastante rapida, el tema seria, si esta ejecutando una linea, en la que no esta la sentencia que verifica si la entrada del pulsador es 1, y nosotros tenemos el boton pulsado, entonces omitiria este estimulo externo, nose si se me entiende, pero si esto sucediera, seria necesario el uso de interrupciones que verifiquen variables en todo momento...

No tengo mucha idea aun de programar arduino, por eso decia que me gustaria si se puede hacerlo sin interrupciones, porque con las sintaxis basica estoy bastante familiarizado, pero ya meterme en interrupciones...nunca lo hice.


Por cierto, en el codigo, tengo que cambiar el limite superior para que sume un minuto a >50, ya que asi cuando vayamos a pasar a 60 seg, este no se mostrara.
  Responder
#6
Entiendo lo de las interrupciones, en teoría el programa permanece en el bucle hasta que no pulsas start, por lo que siempre esta leyendo la entrada del pulsador, también entendiendo que una vez configurado el tiempo ya no lo cambias. Otra cosa que se me ocurre es que podrías usar subfunciones, una para la configuración del tiempo y otra para la insolación. Ve probando con el monitor serial y vas viendo los resultados para contarnos.
  Responder
#7
Por supuesto, ire poniendo por aqui los avances en cuanto me llege el arduino! Veremos aver como va el asunto, estoy deseando pelearme ya con ello

Enviado desde mi Nexus 4 usando Tapatalk 2
  Responder
#8
Me han comentado, que es mejor emplear la funcion:

millis()

para el conteo de los segundos, dado que a veces los delays, dan problemas, retrasos y paran todo lo que se encuentre en ejecucion mientras se encuentran activos....

Ir realizar bucles hasta que millis() avance 1000 entonces pasara un segundo. Al parecer es mas preciso que emplear delays.
  Responder
#9
supongo que habras tenido en cuenta que necesitas hacer el debounce de las teclas para eliminar el rebote del pulsador,
hay muchas librerias para eso, tambien para cronometrar.
si usas delay tendras problemas, cuando esta en funcionamiento no hace otra cosa que esperar, ni te escaneara el teclado, ni actualizara el lcd, etc.

con millis es muy facil, un esquema seria:

millisalcomienzo=millis

si millis>=millisalcomienzo+tiempodecronometrado
hacer lo que sea al acabar el tiempo.
yo lo que hago para usar las menos teclas posibles es hacer que cada tecla tenga una funcion distinta en cada pantalla, las pongo debajo del display y en el renglon de abajo pongo una leyenda con lo que es cada tecla, como hacen los cajeros automaticos.

te sugiero esta combinacion:
pantalla ajuste del tiempo:
tecla 1 +
tecla 2 -
tecla 3 x10 (hace que es salto de + y - sea de 10 seg o de 1
tecla 4 va al otro menu. y almacena en la eeprom el valor para que lo recuerde al encender y no tengas que volver a ponerlo

pantalla insolacion
tecla 1 start
tecla 2 stop
tecla 3 reset (pone a 0), o encendido manual
tecla 4 va al otro menu
  Responder
#10
Muchas gracias Juanjo, no habia tenido en cuenta lo delantirebote la verdad, usare la libreria debounce o los programare a manopla, no es problema. Como es la primera vez que voy a programar algo del estilo se me pasan cosas por alto.

Lo del menu, si, no es mala idea la tuya, aunque el boton de x10 podria omitirle seria intereante implementarle.

Para la temporizacion aunque exista alguna libreria, quisiera programarlo a fuego, tampoco es mucho problema, se me da bien la logica jajajajja, veremos aver cuando empieze a picar codigo como va la cosa.

Tengo ahora un examen en septiembre no le puedo dedicar ahora mucho tiempo, pero en cuanto acabe y me llege el arduino ire a cañon.

Enviado desde mi Nexus 4 usando Tapatalk 2
  Responder
#11
Triggerr escribió:Muchas gracias Juanjo, no habia tenido en cuenta lo delantirebote la verdad, usare la libreria debounce o los programare a manopla, no es problema. Como es la primera vez que voy a programar algo del estilo se me pasan cosas por alto.

Lo del menu, si, no es mala idea la tuya, aunque el boton de x10 podria omitirle seria intereante implementarle.

Para la temporizacion aunque exista alguna libreria, quisiera programarlo a fuego, tampoco es mucho problema, se me da bien la logica jajajajja, veremos aver cuando empieze a picar codigo como va la cosa.

Tengo ahora un examen en septiembre no le puedo dedicar ahora mucho tiempo, pero en cuanto acabe y me llege el arduino ire a cañon.

Enviado desde mi Nexus 4 usando Tapatalk 2
Y si le pones un encoder rotatorio para poner o quitar tiempo?? Lo veo más cómodo, como los microondas nuevos.

Otro que tiene exámenes, te acompañó en el sentimiento

Enviado desde mi GT-I9100 usando Tapatalk 2
  Responder
#12
cansi22 escribió:
Triggerr escribió:Muchas gracias Juanjo, no habia tenido en cuenta lo delantirebote la verdad, usare la libreria debounce o los programare a manopla, no es problema. Como es la primera vez que voy a programar algo del estilo se me pasan cosas por alto.

Lo del menu, si, no es mala idea la tuya, aunque el boton de x10 podria omitirle seria intereante implementarle.

Para la temporizacion aunque exista alguna libreria, quisiera programarlo a fuego, tampoco es mucho problema, se me da bien la logica jajajajja, veremos aver cuando empieze a picar codigo como va la cosa.

Tengo ahora un examen en septiembre no le puedo dedicar ahora mucho tiempo, pero en cuanto acabe y me llege el arduino ire a cañon.

Enviado desde mi Nexus 4 usando Tapatalk 2
Y si le pones un encoder rotatorio para poner o quitar tiempo?? Lo veo más cómodo, como los microondas nuevos.

Otro que tiene exámenes, te acompañó en el sentimiento

Enviado desde mi GT-I9100 usando Tapatalk 2


Tengo ya preparado para hacerlo con botones, y para ser mi primer proyecto con arduino no quiero meterme demasiado jajajaja, en un futuro puede, por ahora con botoncitos Lengua

De todas formas un menu con encoder gana mucho, lo reconozco
  Responder
#13
Respecto al encoder por si es de ayuda: http://webdelcire.com/wordpress/archives/1545

Y como montar un pulsador para filtrar los rebotes por hardware y no tener que hacerlo por programación:

[Imagen: encoder3.jpg]

S2
  Responder
#14
Muchas gracias jorge!!

Dejo tambien la libreria para este mismo fin, echarla un ojo:


http://playground.arduino.cc/code/bounce


Enviado desde mi Nexus 4 usando Tapatalk 2
  Responder
#15
Puedes sumar el filtrado de rebotes por SW y por HW. Con un filtro con SW para tu aplicacion es mas que suficiente a mi parecer.
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#16
grafisoft escribió:Puedes sumar el filtrado de rebotes por SW y por HW. Con un filtro con SW para tu aplicacion es mas que suficiente a mi parecer.

No entiendo muy bien a que te refieres con sumar el filtrado, cada vez que se requiera una comprobacion sera necesario un filtrado antorebote no?

Enviado desde mi Nexus 4 usando Tapatalk 2
  Responder
#17
Joder, creo que lo he entendido, estaba espeso, te refieres a que puedes usar los dos tipos de filtrados a la vez, pero que con Soft, para mi proyecto es suficiente¡¡
  Responder
#18
las librerias de debouncing son tan sencillas que tardas menos en hacerlo por soft de lo que tardas en conectar los componentes.
me parece buena idea lo del encoder, podrias no necesitar 2 menus, girandolo ajustas tiempo, pulsandolo pone en marcha,
pulsando otra vez apaga antes de acabar, manteniendolo pulsado enciende sin contar tiempo.

en dx.com tienes uno muy barato, yo lo tengo y va de lujo.
  Responder
#19
SIEMPRE, que me meto en DealExtreme acabo comprando algo.....jajajja, por ahora empleare botones, que tendria que hacer otro frontal para la insoladora y me da bastante pereza....jejejeje.

Dios necesito que me llege ya, mi cabeza solo entiende de programar ahora mismo. Voy a hacer la placa donde iran conectados los pulsadores y demas, aver si para la semana que viene la tengo y subo fotos.
  Responder
#20
Yo creo que en este caso es preferible solucionarlo por hardware, añadir una resistencia y un condensador no cuesta nada y te facilita la programación, no veo motivo para no hacerlo. Todo hardware que facilite la programación y no tenga un costo alto (precio, espacio, etc..) desde mi punto de vista ha de implementarse.
  Responder