Taller de Arduino

  • Iniciador del tema Iniciador del tema jmcadsl
  • Fecha de inicio Fecha de inicio
Estado
Cerrado para nuevas respuestas.
bueno despues de casi dos meses me llegaron los sensores de temperatura, a programarlos y ya todo ok weeee ara haber si funcionan las cosas de las fuentes para seguir ampliando
 
Yo tampoco lo se. Que es?

Aprovecho para poner una fotillo del injerto aunque no es la definitiva, ya que falta otra peristaltica que ya tengo por casa. A ver si estos días puedo acabarlo que ya me tiene artito. jejejeje.

Este es el aspecto del otro día.
[TodoMarino.com] Taller de Arduino

Ya lo tengo conectado y probandose con el acuario medio-ciclando.
Estoy en el proceso de ir afinando código, sobre todo el de reposición que ya me ha dado algún "sustillo" por culpa del skimmer que no controlo todavia.

Recopilemos:

Control nivel agua urna principal - 1 boya
Control nivel agua sump - 2 boyas
Control nivel agua reposicion - 1 boya
Control 4 reles - Bomba retorno, calentador, iluminacion sump, reposicion
Control 3 sondas de temperatura - Sump, Exterior, Urna principal/pantalla de un led - de momento lo tengo en la pantalla de forma provisional.
Control PH - De momento estoy experimentando.
Control 3 peristalticas - (falta terminarlo pero ya que como lo haré).
Buzzer para emitir soniditos cuando algo falla.
Pantalla 4x20 serial con 3 botones Arriba/Abajo/Menu-Ok

A excepcion de los problemas que comento me está dando el skimmer con la reposicion, es un reloj suizo.
Cuando esté mas probado y testeado ya me atreveré a publicar codigos y demás.
 
Con lo del recopilatorio me quería referir al tema que hablásteis de estructurar el contenido del este taller: Iniciacion, compras, programación, etc. No se, lo que comentásteis sobre hacer apartados para cada cosa importante y como se debe programar y conectar para que funcione. Un saludo otra vez.

PD: No creais que no os sigo, lo que pasa que para localizar algo que has pasado por alto, pues hay que revisar todo el hilo
 
Pues el tema está muy complicado, en principio parecía que se iba a hacer, pero se ha demorado tanto, que se ha perdido al menos hablo por mi, el espiritu y se están buscando foros alternativos, con lo que no se si aqui se llegará a hacer.

Todos estamos mas o menos a la sombra por lo interesante de este hilo con el que tanto aprendemos.

Tienes toda la razón, es un descontrol.......juas juas juas pero es lo que hay.
 
Aquí ideas para mostrar información en pantalla.
De momento por aquí van los tiros, pero se admiten sugerencias.
[TodoMarino.com] Taller de Arduino
 
Un par de cositas, lo primero es que os prometo que cuando tenga una mañana libre hago un foro/blog para unificar todo este tema (espero que alguien me ayude a volcar lo que actualmente hay clasificándolo según convenga)

Lo segundo son unos cuantos consejos con respecto a la programación, para que no tropecéis en las mismas "piedras" que yo.

Primero las peristálticas

if (mil_time==1500) ///Si es la hora concreta que decidáis en mi caso las 15:00
{
//La bomba P1 en mi caso me da 75ml por 60seg = 800 ms por ml
/*
// int T1=CANT_P1 * 800; <- ESTE FUE EL ERROR QUE NO PILLABA, ABAJO LO EXPLICO

long T1=long(CANT_P1) * 800L; /// ASI SI ESTA BIEN

if (CANT_P1 > 0) { digitalWrite(Rele8, HIGH);delay(T1);digitalWrite(Rele8, LOW);}

...
...
//Se repite con las demás bombas
//Y muy importante al final se comprueba que ha pasado más de un minuto, porque si no volvería a entrar al seguir siendo las 15:00

Bueno pues el problema era que con int el valor máximo era de 38000 y pico, por lo que al hacer pruebas con 20ml o 30ml, no había problema, pero al poner por ejemplo 50ml pasa esto:

int T1=CANT_P1 * 800;
t1=50 * 800; debería ser 40000

pero como desborda me daba -25000 y pico, por lo que el delay era eterno....

solución:

long T1=long(CANT_P1) * 800L;

Declaro T1 como long, convierto a long CANT_P1, y multiplico por 800 en formato long (con la L al final)

Tenedlo en cuenta amigos

Otro tema a vigilar, aunque ya está comentado en este hilo, es el tema de controlar qué pasa si se va la luz... quiero decir, si ponéis algo así para encender la luz ¿qué pasaría?

if (HORA_DE_ENCENDIDO=1400) {digitalWrite(LUZ1, HIGH);}

Pues que si se va la luz (o tenéis que desconectar el controlador para lo que sea), por ejemplo a las 14:05, cuando lo volváis a enchufar no se encenderá la luz hasta las 14:00 del día siguiente

SOLUCION:

Hay muchas soluciones la mia es esta:

if (L1==0) //Si la luz está apagada
{
if ((mil_time>=INI_L1)&&(mil_time<=FIN_L1)) {L1=1;digitalWrite(Rele1, HIGH); }
}
else //L1==1 encendida
{
if (((mil_time>FIN_L1)&&(mil_time<=2359))||((mil_time>=0000)&&(mil_time<INI_L1))) {L1=0;digitalWrite(Rele1, LOW); }
}//del else

Espero que os sirva, y si tenés cualquier duda postearla.
 
muy buenas... ¿me podrias poner como has creado el simbolo de ºC y como lo has añadido al código?
conozco la página de crear caracteres, pero como ya dije un dia, yo soy de los que "copian y pegan" ni ideaa de como pongo eso al lado de la temperatura...

a mi me muestra la temperatura según esto:

p();
Lcdini();
sensors.requestTemperatures();
lcd.print("Temp. Ambiente: ",0,1);
Serial.print(sensors.getTempCByIndex(0));
p();
//FadeLcd();
Lcdini();
lcd.print("Temp. Acuario: ",0,0);
Serial.print(sensors.getTempCByIndex(1));
p();
lcdoff();

que añado para que se vea ºC?
 
Otro tema a vigilar, aunque ya está comentado en este hilo, es el tema de controlar qué pasa si se va la luz... quiero decir, si ponéis algo así para encender la luz ¿qué pasaría?



Pues que si se va la luz (o tenéis que desconectar el controlador para lo que sea), por ejemplo a las 14:05, cuando lo volváis a enchufar no se encenderá la luz hasta las 14:00 del día siguiente

SOLUCION:

Hay muchas soluciones la mia es esta:



Espero que os sirva, y si tenés cualquier duda postearla.

yo el tema de volver a encender las luces despues de desconectar lo hice así: (que es lo mismo que has puesto tu creo):

void Luces()
{
if (hour >= encendidoluz1 && hour < apagadoluz1)
{digitalWrite (Rele1,HIGH);}
else
{digitalWrite (Rele1,LOW);}

if (hour >= encendidoluz2 && hour < apagadoluz2)
{digitalWrite (Rele2,HIGH);}
else
{digitalWrite (Rele2,LOW);}

}
 
PepePotamo, estás super avanzado ya. Muchas grácias por compartir tu código sobre todo depurado. Yo el mío todavía me estoy peleando por lo que no me atrevo.
He empezado a hacer dibujitos de el arduino para la documentación y fotos por un tubo, cuando me digas, empiezo a poner hilo a la aguja y organizamos el tema.
Cuenta conmigo para poner orden.

EDITO: He posteado al mismo tiempo que bbq

Pues para mi el codigo de bbq tambien es correcto, es hacer lo mismo con diferentes variables teniendo en cuenta los valores de la variables.

bbp no lo tengo en mente el número, pero creo que el simbolito de º se pone en mi caso con (byte, 223) o al revés, esta noche te lo confirmo. Según la pantalla tiene un codigo u otro de caracteres, mira la tuya y alli aparece el codigo correcto, yo tengo que decir que fui probando y al 10 o 12 acerté. jejejejeje.
 
Última edición:
Buenas!!

Hay algo definitivo para el amanecer/anochecer con 0-10v?
 
muy buenas... ¿me podrias poner como has creado el simbolo de ºC y como lo has añadido al código?
conozco la página de crear caracteres, pero como ya dije un dia, yo soy de los que "copian y pegan" ni ideaa de como pongo eso al lado de la temperatura...

Como dice jmerino, es un "caracter especial" según cada fabricante se pone de una forma, pero prueba con el que te dice jmerino, en mi caso (LCD crystalfontz) es así:

Serial.print(30,BYTE);Serial.print(1,BYTE);Serial.print(128,BYTE);
sí sí, todo esto para sólo el caracter º

yo el tema de volver a encender las luces despues de desconectar lo hice así: (que es lo mismo que has puesto tu creo):

void Luces()
{
if (hour >= encendidoluz1 && hour < apagadoluz1)
{digitalWrite (Rele1,HIGH);}
else
{digitalWrite (Rele1,LOW);}

if (hour >= encendidoluz2 && hour < apagadoluz2)
{digitalWrite (Rele2,HIGH);}
else
{digitalWrite (Rele2,LOW);}

}

Efectivamente, es más o menos lo mismo, lo único es que yo pruebo antes el estado de la luz

(if) si la L1=0 (si está apagada) -> comprobaciones para encenderla
(else ) L1=1 (está encendida) -> comprobaciones para apagarla

Es por ahorrar capacidad de cálculo, en tu caso cada ciclo de reloj del microprocesador hace más trabajo. Supongo que será deformación profesional ;-) por intentar optimizar el rendimiento del código.
 
Como dice jmerino, es un "caracter especial" según cada fabricante se pone de una forma, pero prueba con el que te dice jmerino, en mi caso (LCD crystalfontz) es así:

sí sí, todo esto para sólo el caracter º



Efectivamente, es más o menos lo mismo, lo único es que yo pruebo antes el estado de la luz

(if) si la L1=0 (si está apagada) -> comprobaciones para encenderla
(else ) L1=1 (está encendida) -> comprobaciones para apagarla

Es por ahorrar capacidad de cálculo, en tu caso cada ciclo de reloj del microprocesador hace más trabajo. Supongo que será deformación profesional ;-) por intentar optimizar el rendimiento del código.

No me lies, no me lies. Si tiene que trabajar mas que trabaje. Que pa eso le pago!. jeje

Bueno, de lo del ºC no me entero. ya os aviso que no tenia ni idea. mi LCD es el tipico de 16x2 serial. y lo que quiero es que al lado del valor numerico me salga ºC.
 
Buenas!!

Hay algo definitivo para el amanecer/anochecer con 0-10v?

Hemos investigado y las ELN 60-48P se dimean con el arduino muy fácilmente con las salidas PWM. solo hace falta una fuente de alimentacion de 10V, un transistor y una resistencia. el compañero karagos ha puesto un esquema. mira un par de paginas hacia atras en el post.

las meanwell 60-48D no tengo ni idea.
 
voy a quitar el programador del reactor de zeolitas, que para eso tengo el arduino y uno de los enchufes con relé disponible.
lo que quiero es que se encienda-apague cada 3 horas. como podría poner esto?
sería algo como decir:
if hour 1,2,3,7,8,9,13,14,15,19,20,21 rele3 HIGH
else rele 3 LOW
con una hora solamente lo tengo claro, el tema es al poner más de una hora, como las pongo en el codigo.
he estado mirando la pagina oficial de arduino y dice que separando con dos || entre numeros, lo interpreta como si este es igual a... o este otro es igual a... o este otro es igual a.... haz esto.
lo podria poner asi?:

if (hour == 1 || hour ==2 || hour==3 || hour ==7 || hour==8 || hour==9) // y asi sucesivamente
{digitalWrite (Rele3,HIGH);}
else
{digitalWrite (Rele3,LOW);}

o hay otra forma más sencilla para decirle que encienda tal enchufe cada tres horas?
Gracias!
 
voy a quitar el programador del reactor de zeolitas, que para eso tengo el arduino y uno de los enchufes con relé disponible.
lo que quiero es que se encienda-apague cada 3 horas. como podría poner esto?
sería algo como decir:
if hour 1,2,3,7,8,9,13,14,15,19,20,21 rele3 HIGH
else rele 3 LOW
con una hora solamente lo tengo claro, el tema es al poner más de una hora, como las pongo en el codigo.
he estado mirando la pagina oficial de arduino y dice que separando con dos || entre numeros, lo interpreta como si este es igual a... o este otro es igual a... o este otro es igual a.... haz esto.
lo podria poner asi?:

if (hour == 1 || hour ==2 || hour==3 || hour ==7 || hour==8 || hour==9) // y asi sucesivamente
{digitalWrite (Rele3,HIGH);}
else
{digitalWrite (Rele3,LOW);}

o hay otra forma más sencilla para decirle que encienda tal enchufe cada tres horas?
Gracias!

Yo pondría:


if ( ((hour >= 1)&&(hour<=3)) || ((hour >= 7)&&(hour<=9)) )
{digitalWrite (Rele3,HIGH);}
else
{digitalWrite (Rele3,LOW);}
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba