Arduino Forum

International => Español => Proyectos => Topic started by: car127 on Aug 24, 2018, 10:55 pm

Title: Diseño Controlador Acuario
Post by: car127 on Aug 24, 2018, 10:55 pm
Hola
Con la guia de Daniel_Arg se realizara un controlador de acuario, donde se iran agregando partes del código hasta completarlo,  constara menú para modificar parametros luz,Hora,fecha,etc, lcd para visualizar información, sensor de temperatura y relés. La idea es tener una base y que cualquiera pueda realizar su controlador y porque no ampliarlo

Materiales:
      Arduino                  Puede ser Nano, Uno o Mega
      Reloj                      DS3231
      Lcd                        20x4 con I2C
      Sensor temperatura DS18B20
      Encoder rotatorio con pulsador
      Resistencia              4,7k - 1/4w =1
      Resistencia              1k - 1/4w    =4
      Led                         Blanco, Rojo, Azul
      Fuente de poder       9v
      Reles arduino           5v 2 canales
      transistor                 2N2222
      Protoboard
      Cables coneccion
     
Esquema  fácil de leer
Nota: La entrada de alimentación varia según su arduino

Adjunte la imagen

(https://i.imgur.com/rlSJBQ9.png)




Librería
Code: [Select]

        encoder      :  https://github.com/mathertel/RotaryEncoder

        RTC            :  https://github.com/adafruit/RTClib
        (post 36 libreria RTC)

        OneButton  :https://github.com/mathertel/OneButton

        LiquidCristal:https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
         (Newliquidcrystal_1.3.5)

 

Archivos adjunto con Sketch base

En ultima pagina  se adjunta Sketch final



Title: Re: Diseño Controlador Acuario
Post by: Swift on Aug 25, 2018, 06:37 am
Hola voy a hacer mi aporte:
En esta parte del código:
Code: [Select]
void loop() {
 unsigned long currentMillis = millis();
 button.tick();
 LeeEncoder(0, 7, 1, 1);  // Lee el enconder de 0 a 7, de a 1 paso y con tope final.

 if (currentMillis % 6000 < 5) {  //  Si el resto de dividir currentMillis por 6000 da menos que 5...
 ImprimeFecha();
 ImprimeHora();
 ImprimeTemp();
 }
}

se va a cumplir cuando sea por ejemplo 6000,6001,6002,6003,6004 y  en el "mejor de los casos" pero en el transcurso se cumple y se va a actualizar como 20 veces aquí un ejemplo de lo que digo:
(https://forum.arduino.cc/index.php?action=dlattach;topic=565291.0;attach=271624)
Ahora asi como muestra por serial va actualizar en la pantalla para lo cual presentó algo que puede ser mejor  tendrías que añadir las siguientes líneas y borra en el que tu tienes, espero se entienda
Code: [Select]
#define tiempoPresentarDatos 6000UL // Tiempo al que se quiera realizar las acciones ejemplo 6s (1000ms = 1s)
unsigned long tiempoActualDatos = 0;

void loop() {
 if (millis() - tiempoActualDatos >= tiempoPresentarDatos) { // Si el tiempo actual menos el tiempo anterior  es mayor o igual a 6 segundos
 tiempoActualDatos = millis(); // Actualiza el tiempo Actual
 //Resto del codigo que quieras que se cumpla cada 6 segundos
 }
}

(https://forum.arduino.cc/index.php?action=dlattach;topic=565291.0;attach=271626)
Ahora también por ejemplo en esta parte utilizas una función y en el cual en una condición la utilizas para para comprobar si tiene tope o no
Code: [Select]
void LeeEncoder(int ROTARYMIN, int ROTARYMAX, int ROTARYSTEPS, int ROTARYTOPE )
{
  encoder.tick();  // Lee el encoder y actualiza el puntero. La librería lleva la cuenta desde 0.
  newPos = encoder.getPosition() * ROTARYSTEPS; // Asigna a newPos el puntero del encoder multiplicado por los pasos.

  if (ROTARYTOPE == 1) {  // Si el rotor tiene tope entonces no se pasa de valor
    if (newPos < ROTARYMIN) {    // Solo si el puntero es menor a Valor Mínimo ->
      encoder.setPosition(ROTARYMIN / ROTARYSTEPS);  // Se fija el puntero al valor mínimo por los pasos
      newPos = ROTARYMIN;  
    }
    if (newPos > ROTARYMAX) {   // Solo si el puntero es mayor a Valor Máximo ->
      encoder.setPosition(ROTARYMAX / ROTARYSTEPS);  // Se fija el puntero al valor mínimo por los pasos
      newPos = ROTARYMAX;

    }
  }

  if (ROTARYTOPE == 0) {  // Si el rotor SI tiene tope entonces se pasa del valor máximo al mínimo y viceversa.
    if (newPos < ROTARYMIN) {  // Solo si el puntero es menor a Valor Mínimo ->
      encoder.setPosition(ROTARYMAX / ROTARYSTEPS);
      newPos = ROTARYMAX;  // Entonces el puntero saltará del mínimo al máximo

    }
    if (newPos > ROTARYMAX) { // Solo si el puntero es mayor al Valor Máximo ->
      encoder.setPosition(ROTARYMIN / ROTARYSTEPS);
      newPos = ROTARYMIN;  // Entonces el puntero saltará del máximo al  mínimo.
    }
  }
}

lo que veo un poco innecesario ya que ese no va a cambiar en el transcurso del funcionamiento si no solo cuando se configura por lo que creo que se podría utilizar de esta forma como ejemplo
Code: [Select]
#define encoderTope 1
void loop() {

#if encoderTope == 1
 if (newPos < ROTARYMIN) {    // Solo si el puntero es menor a Valor Mínimo ->
 encoder.setPosition(ROTARYMIN / ROTARYSTEPS);  // Se fija el puntero al valor mínimo por los pasos
 newPos = ROTARYMIN;
 }
 if (newPos > ROTARYMAX) {   // Solo si el puntero es mayor a Valor Máximo ->
 encoder.setPosition(ROTARYMAX / ROTARYSTEPS);  // Se fija el puntero al valor mínimo por los pasos
 newPos = ROTARYMAX;
 }
#else
 if (newPos < ROTARYMIN) {  // Solo si el puntero es menor a Valor Mínimo ->
 encoder.setPosition(ROTARYMAX / ROTARYSTEPS);
 newPos = ROTARYMAX;  // Entonces el puntero saltará del mínimo al máximo
}
 if (newPos > ROTARYMAX) { // Solo si el puntero es mayor al Valor Máximo ->
 encoder.setPosition(ROTARYMIN / ROTARYSTEPS);
 newPos = ROTARYMIN;  // Entonces el puntero saltará del máximo al  mínimo.
 }
#endif
}

Qué te parece @surbyte sería una mejor forma o no haría gran diferencia
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 25, 2018, 06:19 pm
Hola
    meda estos errores



Code: [Select]
C:\Users\Car127\Downloads\ProyectoControlAcuarioDM\CADUSA1\CADUSA1.ino: In function 'void ImprimeFecha()':

CADUSA1:354: error: too many arguments to function 'void printDigits(int)'

 printDigits(now.day(), DEC);  // Imprime el día

                           ^

C:\Users\Car127\Downloads\ProyectoControlAcuarioDM\CADUSA1\CADUSA1.ino:330:6: note: declared here

void printDigits(int digits) {  // Esta función agrega un cero a dígitos menores a 10

    ^

CADUSA1:356: error: too many arguments to function 'void printDigits(int)'

 printDigits(now.month(), DEC);  // Imprime el mes

                             ^

C:\Users\Car127\Downloads\ProyectoControlAcuarioDM\CADUSA1\CADUSA1.ino:330:6: note: declared here

void printDigits(int digits) {  // Esta función agrega un cero a dígitos menores a 10

    ^

exit status 1
too many arguments to function 'void printDigits(int)'

Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 25, 2018, 08:23 pm
Ok, funcionando


 (https://i.imgur.com/Ajnzk1Z.jpg)
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Aug 25, 2018, 08:56 pm
Muy complicado aunque funciona, porque no usan sprintf

Code: [Select]

void ImprimeFecha() {
  DateTime now = rtc.now();  // Consulta al RTC
  lcd.setCursor(0,0); // Fija el cursor en la primera línea
  lcd.print(DiaDeSemana[now.dayOfTheWeek()]); // Imprime el día de la semana
  lcd.setCursor(10,0);
  printDigits(now.day(), DEC);  // Imprime el día
  lcd.print('/');   // Separador
  printDigits(now.month(), DEC);  // Imprime el mes
  lcd.print('/');  //  Separador
  lcd.print(now.year(), DEC);  // Imprime el año
}

void ImprimeHora() {
   DateTime now = rtc.now();   // Consulta el RTC
   lcd.setCursor(13,1);  // Fija cursor en 13,1
   lcd.write(1);  // Imprime el gráfico
   lcd.print(':');
   printDigits(now.hour());  // Imprime hora
   lcd.print(':');
   printDigits(now.minute());  // Imprime minuto
   MinActual = now.hour()*60+now.minute();   // Se actualiza la variable MinActual que será usada para encender y apagar las luces del acuario. Su valor va de 0 a 1439.
}


Otra forma que evita el problmea de los dias/meses/horas/minutos de 1 digitos es esta
Code: [Select]
void ImprimeFecha() {
  char buffer[20];
  DateTime now = rtc.now();  // Consulta al RTC
  lcd.setCursor(0,0); // Fija el cursor en la primera línea
  lcd.print(DiaDeSemana[now.dayOfTheWeek()]); // Imprime el día de la semana
  lcd.setCursor(10,0);
  sprintf(buffer,"%02d/%02d/%04d", now.day(),  now.month(), now.year());
  lcd.print(buffer);
}

void ImprimeHora() {
   char buffer[20];
   DateTime now = rtc.now();   // Consulta el RTC
   lcd.setCursor(13,1);  // Fija cursor en 13,1
   lcd.write(1);  // Imprime el gráfico
   sprintf(buffer,"%02d:%02d:%02d", now.hout(), now.minute(), now.second());
   lcd.print(buffer);

   MinActual = now.hour()*60+now.minute();   // Se actualiza la variable MinActual que será usada para encender y apagar las luces del acuario. Su valor va de 0 a 1439.
}
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 26, 2018, 06:35 pm
En el void ImprimeTemp la parte del else faltaba los //

La parte del termometro con RTC tengo que probar con otro sketch para ver si funciona, ley por hay que en algunas versiones no funciona.


verificando eso sigo.



Code: [Select]

C:\Users\Car127\Downloads\ProyectoControlAcuarioDM\CADUSA1\CADUSA1.ino: In function 'void ImprimeTemp()':

CADUSA1:366: error: 'class RTC_DS3231' has no member named 'getTemperature'

     Tlamp = rtc.getTemperature(); // Asigna a Tlamp la temperatura del RTC

                 ^

C:\Users\Car127\Downloads\ProyectoControlAcuarioDM\CADUSA1\CADUSA1.ino: In function 'void MideTemperatura()':

CADUSA1:380: error: 'class RTC_DS3231' has no member named 'getTemperature'

      Tlamp = rtc.getTemperature();  // Se asigna a la variable Tlamp la temperatura del RTC

                  ^

C:\Users\Car127\Downloads\ProyectoControlAcuarioDM\CADUSA1\CADUSA1.ino: In function 'void overheating()':

CADUSA1:445: error: 'Termostato' was not declared in this scope

      Termostato();     // Corrobora el termostato para el calefactor

                 ^

CADUSA1:446: error: 'ControlCo2' was not declared in this scope

      ControlCo2();    // Comprueba si el Co2 debe estar activo

                 ^

exit status 1
'class RTC_DS3231' has no member named 'getTemperature'

Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 26, 2018, 09:44 pm
Es la biblioteca que uso no hace referencia a temperatura, me puedes adjuntar tu biblioteca del rtc


class RTC_DS3231' has no member named 'getTemperature'
Title: Re: Diseño Controlador Acuario
Post by: Daniel_Arg on Aug 26, 2018, 10:00 pm
Es la biblioteca que uso no hace referencia a temperatura, me puedes adjuntar tu biblioteca del rtc

RTClib (https://github.com/adafruit/RTClib)
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 26, 2018, 10:12 pm
Es la misma que tenía, reclama lo mismo.
Adjunto lo que llevó
Title: Re: Diseño Controlador Acuario
Post by: Daniel_Arg on Aug 26, 2018, 10:44 pm
A mi me compila bien..

¿Porque el sketch ahora se llama CADUSA1.ino? ¿No tendrás en una misma carpeta CADUSA.ino y CADUSA1.ino?
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 27, 2018, 12:30 am
no vario nada solo que no me funcionaba bien y lo baje denuevo despues me percate que era un mal contacto del encoder

la libreria del rtc de tu compu tiene el comando que falta al parecer revice los archivos .cpp y h y no aparece
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 27, 2018, 04:04 am
Esta vivoooooo después de varios intentos lo logre, aprendi algo nuevo respecto a las librerías me voy a celebrar, mañana sigo
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 27, 2018, 08:56 pm
Pruebas con sensor temperatura DS18B20

(https://i.imgur.com/fbtwWEm.jpg)

La actualización de la información de corte de  un cable demora aproximadamente 20seg
al desconectar cable rojo muestra información diferente no el de falla

La actualización de la información de temperatura demora aprox. 50 seg

 ver forma de bajar tiempo

Adjunto imajen

Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 27, 2018, 11:55 pm
Prueba de temperatura de RTC3231

Se toma temperatura ambiente y luego se acerca un cautin

(https://i.imgur.com/R14InbK.jpg)

La actualización de températura con demora
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 28, 2018, 05:18 am
Menú Reloj modificando valores

https://youtu.be/DRN33OEBVf0 (https://youtu.be/DRN33OEBVf0)




Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 28, 2018, 05:50 am
Hola
    el calefactor tiene que estar siempre encendido y trabajar así, si lo seteo a 25 grados se mantiene si sube se apaga si baja se enciende puede haber una variación de un grado, no entiendo porque en el dia una temperatura, horas que esta encendido , noche otra temperatura, la idea es tener una temperatura pareja y que no por un cambio de temperatura los peces se enfermen


Calefactor algo raro pasa

https://youtu.be/-n8DGmYBOMk (https://youtu.be/-n8DGmYBOMk)
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 28, 2018, 04:52 pm
Falta algo
Code: [Select]


CADUSA1:107: error: 'TempHoraInicio' was not declared in this scope
CADUSA1:108: error: 'TempHoraFin' was not declared in this scope



Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 28, 2018, 08:45 pm
No sigue igual y al quitar la energía no guarda lo configurado
adjunto archivo
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 29, 2018, 05:12 am
linea 408,425,436,447,458 faltaba

 
Code: [Select]
read_but();  // Lee si opromimos el botón del encoder y enc_but pasa a valor 1.



Se mantiene lo observado primera configuración caracteres raros luego de 2 a 3 intentos se normaliza información Hora

Guarda configuración en Calefactor y CO2 al resetear y cortar energía

Realizadas las pruebas con código que adjuntaste
Title: Re: Diseño Controlador Acuario
Post by: car127 on Aug 29, 2018, 07:46 pm
Prueba de calefactor con rele

  temperatura 18° actual
 se bajó hasta 9.9° sin actividad
 aumento de temperatura hasta 60° sin actividad.

Configuración en el menú Calefactor
ON
Dia     : 25°
Hora   : 10:00 a 16:00
Noche : 18°

Hora toma de muestra 14:37

se probó con skech básico relé funcionando ok
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 01, 2018, 05:23 pm
 Esta es la configuración para prueba donde el calefactor en este horario estará a 25° y el relé no se activa

(https://i.imgur.com/TauwCRO.jpg)

esta es la pantalla principal con la temperatura actual

(https://i.imgur.com/WNtpVpT.jpg)




Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 01, 2018, 06:27 pm
e realizado la prueba y al conectar la señal del rele a negativo se activa, en ningun momento se activo ni con 9° ni con 60° que llego en un momento
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 01, 2018, 08:04 pm
es lo mismo que tengo, la única forma que se activa el rele es si no dejo activa esta linea digitalWrite en el void setup pero no se desactiva el calefactor al pasar de los 26 o 35 o 65°

Code: [Select]
void setup() {
   pinMode(SFetAzul, OUTPUT);
   pinMode(SFetRojo, OUTPUT);
   pinMode(SFetBlanco, OUTPUT);
   pinMode(Relay1, OUTPUT);
 //  digitalWrite(Relay1, HIGH); // Subimos el pin a HIGH porque el relay se dispara con LOW
   pinMode(Relay2, OUTPUT);
 //  digitalWrite(Relay2, HIGH); // Subimos el pin a HIGH porque el relay se dispara con LOW
 



(https://i.imgur.com/DuLJEng.jpg)
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 02, 2018, 01:42 am
OK,
     Calefactor  se activa y corta a la temperatura programada y CO2 enciende a la hora programada,  corta ala hora programada

Pruebas con ultimo codigo
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 03, 2018, 09:15 pm
Pruebas memoria:
se carga programa para blanquear la memoria luego se carga archivo CADUSA y se chequean valores guardados en calefactor por defecto correspondiendo a estos dia 24° hora 09:00 a 21:40 noche 20°
en el caso del CO2 datos aparecen como en la imagen no siendo legibles y no activando rele

(https://i.imgur.com/0AKR3vD.jpg)
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 04, 2018, 12:59 am
No es mas fácil usar EEPROM.get y EEPROM.put y establecer una estructura donde pongan todos los parámetros para leerlos o grabarlos?

Este método funciona pero es muy complejo, teniendo una opción como la indicada.

Asi con un comando graban todo y con otro leen todo.



Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 04, 2018, 03:28 am
 se carga programa para blanquear la memoria luego se carga archivo CADUSA y se chequean valores
 en calefactor valores por defecto correspondiendo a estos dia 24° hora 09:00 a 21:40 noche 20°
en el caso del CO2 valores  por defecto hora 09:00 a 21:40.
 en ambos casos se visualiza correctamente al resetear y cortar la energía
 al modificar valor CO2 o Calefactor estos se guardan sin perderse
 Todo OK
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 04, 2018, 06:01 am
que son las posiciones

termostato[1] y termostato[2]?

El resto lo tengo casi convertido.
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 04, 2018, 04:54 pm
A bien, me faltaban estos dos

Quote
termostato[1]; para almacenar un valor entero de temperatura afectado por el horario, por default 24°
termostato[2]; para almacenar un valor entero de temperatura para el resto del día, por default 20°
ya los agrego y les doy la variante para que la evalúen.
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 04, 2018, 09:47 pm
Bueno esta es la versión usando EEPROM.get y EEPROM.put

Deben verificar que se comporte correctamente porque yo no lo he hecho por no disponer de todas las librerías.
He hecho algunas simplificaciones pero hay mucho mas para simplificar en este código.

Muchas repeticiones de códigos que pueden compactarse.
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 05, 2018, 12:46 am
Bueno pero la idea tal vez les sirva, te parece que es mas cómodo mas alla de los nombres que elegí.
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 05, 2018, 05:41 am
Si @Daniel_Arg estoy de acuerdo que el uso de módulo o como tu lo haces es cuestión de gustos. Como dije reiteradamente el código funciona y mi aporte era solamente intentar hacer mas fácil las cosas.
Creo que el uso de la estructura y .get/.put lo logra.
Habrá detalles, seguro.

Luego veo numerosas acciones repetidas que luego voy a intentar simplificar siempre y cuando sea para hacer mas liviano el código y mas entendible. Nada mas. Peroo será mañana.
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 05, 2018, 03:11 pm
Ok. Ire ayudando por donde me dices.
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 06, 2018, 12:39 am
CADUSA2 en prueba
Se limpia la eeprom se carga CADUSA2
pantalla inicio OK
pantalla información hora. fecha,temperaturas OK
menús: calefactor  valores por defecto aparecen, funciona rele al activar ON OK
          fecha y hora Ok
         control CO2 se agrega read_but(); en lineas 482, 513, 531, 548, 566, al faltar solo mostraba ON OFF y  no entrega información en pantalla de valores por defecto, al seleccionar ON o OFF aparece leyenda Hecho y sale del menú.
Al borrar un símbolo ! linea 476
if (!Co2Var.Status == 0)
aparece información por defecto  y se activa rele
en cada prueba se limpio eeprom

se adjunta archivo con agregado de lineas faltantes y en estado original linea 476 para análisis
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 06, 2018, 01:15 am
va esto como te dice Daniel
Code: [Select]
if (Co2Var.Status == 0)

o va solo esto

Code: [Select]
if (!Co2Var.Status)


si se me escapó disculpas
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 06, 2018, 01:31 am
ok , hago el cambio y pruebo todo
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 06, 2018, 01:40 am
Aunque @Daniel_Arg lo dejó muy claro siempre hay alguien que no sabe seguir los pasos.
Acá esta RTC_lib con la funcion get_temperature() incorporada.

Ya pude compilar todo el código sin errores.
Ahora veré de impliementarlo para poder seguir mas que nada las opciones de LCD.
Y luego ir colaborando.
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 06, 2018, 07:50 pm
Ya que estamos mostrado este era mi acuario de agua dulce de 170 cm de largo luego cambie al actual marino


   (https://i.imgur.com/eFIcVYm.jpg)


Actual en proceso

  (https://i.imgur.com/afBd4aM.jpg)


sigo probando solo un relajo
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 06, 2018, 08:25 pm
CADUSA2 en prueba
Se limpia la eeprom se carga CADUSA2
pantalla inicio OK
pantalla información hora. fecha,temperaturas OK
menús:
Reloj y fecha OK
calefactor  valores por defecto aparecen, rele se activa depues de 1 minutos OK
control CO2  entrega información en pantalla de valores por defecto, al seleccionar ON activa rele despues de 1 minuto.
se mantiene la configuracion puesta por usuario al resetear y desconectar energia
Prueva de sobre calentamiento a 72° mensaje  Alta temperatura en pantalla y se reestablece bajo los 50°
en cada prueba se limpio eeprom

Lo otro hay posibilidad de agregar este control de temperatura en la parte del void overheating(), que se accione con el termómetro del rtc como una acción antes que la temperatura llegue al sobre calentamiento y mantener una temperatura y si falla pasaría al modo sobre calentamiento.
la idea la saque de aca

https://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/ (https://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/)

el codigo a modificar para usar el sensor de temperatura del rtc

Code: [Select]
#include <Wire.h>
#include <OneWire.h>                     //libreria temperatura
#include <DallasTemperature.h>
OneWire ourWire(12);           //  Se establece el pin D12  como bus OneWire
DallasTemperature sensors(&ourWire);  //Se declara una variable u objeto para nuestro sensor
int PinVent = 5;                         //puerto digital D11 dodne conectar el ventildor
int Temperatura;                     //variable calculo temperatura
int Restriccion_de_Temp;             //Variable para mapear la temperatura
int pwm;                              //Variable para generar pwm

void setup() {
sensors.begin();
pinMode(5,OUTPUT);
// Serial.begin(9600);
}

void loop() {
  
/////// Regulador Veloc Ventilador  ////////////
 sensors.requestTemperatures();
Temperatura = (sensors.getTempCByIndex(0));
     Restriccion_de_Temp = constrain(Temperatura, 35, 45);
  pwm = map(Restriccion_de_Temp, 35, 45, 0, 255);
  analogWrite(PinVent,pwm);
//  Serial.println(sensors.getTempCByIndex(0));
//  Serial.println (pwm);
 delay(1000);  
}


se adjunta archivo CADUSA2
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 07, 2018, 04:41 am
una idea  para la iluminación del display has probado con una resistencia de 10K donde esta el jumper del lcd atenúa arto  y es visible la información y no es molesto a la vista y  solo ver que se apague la pantalla cuando termine el periodo de luz y se encienda cuando comience el periodo.

se ve mejor en vivo que en la foto


      (https://i.imgur.com/TNIzytB.jpg)
Title: Re: Diseño Controlador Acuario
Post by: surbyte on Sep 09, 2018, 02:31 am
Bueno, debido a diferencias con Daniel_Arg que me exige resolver cosas... simplemente paso de colaborar. No trabajo de ese modo con nadie.

Intenté de buena voluntad colaborar y lo hice con EEPROM.put y get.

Suficiente.


Suerte a ambos.
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 16, 2018, 12:07 am
Prueba de ventilador activándose a los 50° y desactivando a los 45 ...........OK
prueba de atenuación iluminación y activación iluminación LCD .................OK
en lo personal use resistencia de 10k
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 16, 2018, 01:10 am
    10k ilumina justo para que se vea y como dices a gusto del lector y se probo con un valor  bajo y uno  alto de resistencia.
    Se ve muy genial, esa era la idea, al mover el encoder recobra la iluminación genial.
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 18, 2018, 03:50 am
        Lo único diferente  indicador de dirección de menú ( > ) al cargar por primera vez, reiniciar o apagar y prender no aparece asta mover el encoder en la dirección de la flecha.
     Lo demás OK

Adjunto sketch
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 18, 2018, 06:03 am
OK , el cambio ( > ) funciona al cargar, reset y apagado y encendido
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 20, 2018, 01:22 am
la (>) parte al cargar y al entrar a un menú y salir este no vuelve automaticamente
linea 1182 se borra 35; se deja rtc.getTemperatura
Prueba iluminación
se pone horario modo sol finalizando 19:23 se apaga iluminacion y modo luna enciende a las 19:25 segun relog
RTC, demora de 1:59 seg según cronometro en encender, no es inmediato el paso a luna
en modo mantenimiento se encienden solo luz azul y rojas solamente o las blancas igual, solo se me encienden las azul y rojas

 Consulta habría forma de poner en el LCD información del estado en que se está como:
Amanecer, Sol, Atardecer, Noche
Según horario programado
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 20, 2018, 04:33 pm
Los 35 son un detalle pero que me preocupe por el rtc luego lo descubrí jajaa
algo que note es cuando parte el periodo parten encendido los tres led no en un orden como azul luego  rojo y blanco,  tu idea es como esta del video es muy buena


https://www.youtube.com/watch?v=6dIhVlFYRLs (https://www.youtube.com/watch?v=6dIhVlFYRLs)


Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 20, 2018, 06:23 pm
que periodo seria este "Orto"? dejemos los conocidos este suena feo jejejejee
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 20, 2018, 10:48 pm
Bien aclarado el termino ok, pero de igual manera use Alba, puesto que en España, Argentina y creo que en Venezuela o Colombia el significado es una grosería



- La (>) parte al cargar el programa pero al entrar a un menú y salir esta (>) no vuelve automáticamente


- Transición a modo Luna
   Si el horario sol finaliza a las 17:00 y luego dentro a menu luna y pongo que inicie a las 17:00 y finalice 18:00 salgo e ingreso nuevamente este cambia iniciando a las 17:01 provocando un lapso de casi 2 minutos con las luces apagadas y luego enciende luz azul, la transición debiese ser continua sin espacio apagado
-----Creo que entendí el espacio sin luz es una transición a la salida de la luna



Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 21, 2018, 03:51 am
    El termino lo tome de la misma pagina " En el lenguaje común, al orto se le denomina amanecer, alba o aurora. En ocasiones se diferencia la aurora, que sería el primer resplandor del cielo, del amanecer, que correspondería a la salida del sol"
mañana veré bien lo de las fases del día justo es este Alba, Luna y Ocaso me estan dando problemas sino dejare los basicos Noche, Amanecer, Sol, Atardecer y Luna que son los mas significativos

Sigue igual, para que vuelva el signo se tiene que mover (girar) el encoder avanzar y luego retroceder y aparece



   Como tu has dicho no es poca cosa, es mucho lo que se a logrado y de una manera sencilla  ""entre comillas para que la mayoría pueda entenderlo y realizarlo y por ultimo tener una base de donde partir y molestar menos en el foro como me paso ami barias veces no debo negar que recibí ayuda si, pero varias me mandaron a estudiar cosas que para mi eran chino.
   Conforme, muy conforme con tu paciencia y con lo que se ha realizado
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 21, 2018, 11:50 pm
 Test faces del día
Noche         OK
Amanecer   OK
Sol             OK
Atardecer    OK,
se apagan las luces espera 2min y pasa a Sale luna
Ocaso        No aparece    
Sale luna     OK
Luna          OK  


Adjunto archivo
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 22, 2018, 04:11 am
aqui un video donde se ve la acción > este es entrando al menú con las luces encendidas

https://youtu.be/uFHKIUjvo1M (https://youtu.be/uFHKIUjvo1M)

otro donde se entra al mismo menú pero con las luces apagadas y ocurre la desaparición >


https://youtu.be/eDqVIkd_WiI (https://youtu.be/eDqVIkd_WiI)


tomados con la modificación echa
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 25, 2018, 04:36 am
    si es que modifique mi anterior circuito  los 10v eran porque las fuentes MEANWELL necesitan un voltaje de referencia y las recomendaban, no los uso se quedo hay .
     los 8v alimento arduino.
los relés que tengo son de 5v hay los uso.
son Tip141  los tengo en uso en mi pantalla actual y son baratos en comparación al fet, cuando vi precios no se en estos momentos.
voy a usar tu recomendación del transistor para el ventilador.

     la fuente uso 5 de estas soportan hasta 18 led de 3w en serie, claro que estuve revisando y parece que la descontinuaron.

(https://i.imgur.com/wUfKcZ5.jpg)



Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 25, 2018, 05:22 pm
Esta conversación sobre led es algo para largo algunos ven los watt otros los lumens otros el par led y nunca están de acuerdo yo opte luego de leer mucho por watt y lumens donde uso led con temp de color
blanco calido  6000-6500k
blanco frio      10000-15000k
azul     460-470nm
royal blue 445nm
uv       420-425nm
para un marino
esta es mi pantalla cuando la estaba armando hace un año placa de aluminio 5mm de espesor algo gruesa y lentes de 90°

(https://i.imgur.com/e5pehI3.jpg)





Dudas:

   1-    linea 235
          es el tiempo de amanecer a sol, es de 30min la duracion definido en (+30)
   2-    en la linea 238
          0,30,0,255   quiere decir que va a subir de 0min a 30min y la luz (pmw) iría aumentando de 0 a 255 según lo programado claro

Code: [Select]
if (MinActual < (ModoSol.HoraInicio + 30)) {  // Periodo Amanecer
        lcd.setCursor(0,1); lcd.print("          ");
          lcd.setCursor(0,1); lcd.print(Periodo_name[1]);
        brillo = map((MinActual - ModoSol.HoraInicio),0,30,0,255);
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 26, 2018, 03:17 am
No olvidar para la atenuación de la pantalla después de un minuto una resistencia entre 1k a 10k

(https://i.imgur.com/SvhcQS7.jpg)
Title: Re: Diseño Controlador Acuario
Post by: car127 on Sep 26, 2018, 03:36 am
      Adjunto Sketch final CADUSA2



y archivos opcionales para creación de pcb, circuito eléctrico, placa pcb, actualizado
Title: Re: Diseño Controlador Acuario
Post by: sondauta2 on Dec 28, 2018, 02:13 am
excelente trabajo.  Te felicito.