Acuariofilia Madrid

Versión completa: Diseño de un programador básico de acuario con arduino
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
(16-03-2016, 06:22 PM)pedmar escribió: [ -> ]yo ya me he preparado una base donde poner los componentes y he encontrado una caja de un componente electrónico en la basuraBig Grin y la he aprovechado-pardon.gif...
puro reciclaje

es que a mi . ya no me deja la mujer mirar por los contenedores -nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif-nosweat.gif


y ahora en serio.
yo tengo guardadas cajas de fuente de alimentacion de ordenador
pero no me cuadran las medidas

pon unas fotillos
Con el reciclaje se consigue una relación calidad/precio(=0) inmejorable. Yo también reciclo cajas de plástico.

He localizado un sitio donde tienen una interesante variedad de separadores:

La empresa es de Valencia. No me deja meter más de 19 separadores de cada modelo en la cesta de la compra.-glare.gif

Tengo pedido estos
mira como ha quedado:

[Imagen: xej59k.jpg]

[Imagen: 28sxyes.jpg]
[Imagen: lMFuaLD.jpg]

Aquí unas fotos de algunos detalles.

fotos


Estoy probando programaciones y parece que por fin le he echo funcionar
Que fácil parece-laughbounce2.gif no lo habéis dejado a huevo.
ya estoy pensando meter mas cosas.
de momento he modificado la programación con una prueba para poder llevarme al curro el aparato y controlar el funcionamiento.
he metido esto:
Cita: // *****************************************************************************************
// MODIFIQUE ESTE EJEMPLO PARA ESTABLECER UNA PROGRAMACION DIFERENTE.
// Consulte los comentarios de las funciones ConfigurarPin() y CrearPulso() en el fuente
// del modulo CaoSeta_ProgPins.cpp.
// *****************************************************************************************
// Aquí hay que programar los pulsos sobre los pines. (tiempo a estado activo)
// Salvo casos especiales los Pines deben configurarse para que su estado por defecto
// (estado en ausencia pulso activo) sea el estado LOW.
// *****************************************************************************************
void SetPinsProgram(){
ProgPins.ConfigurarPin(4, HIGH);
ProgPins.ConfigurarPin(5, HIGH);
ProgPins.ConfigurarPin(6, HIGH);
ProgPins.ConfigurarPin(7, HIGH);

ProgPins.CrearPulso(4, 7, 44, 0, 4, 0, 40); // Activar rele INT1 7:44 - 11:44
ProgPins.CrearPulso(5, 8, 15, 0, 6, 0, 40); // Activar rele INT1 8:15 - 14:15
ProgPins.CrearPulso(5, 15, 10, 0, 0, 30, 0); // Activar rele INT2 15:10 - 15:40
ProgPins.CrearPulso(6, 12, 26, 0, 2, 10, 0); // Activar rele INT3 12:26 - 14:36
ProgPins.CrearPulso(7, 9, 10, 10, 6, 10, 0);// Activar rele INT4 9:10 - 15:20
}

lo que dudo es si toda esta parte del codigo es necesaria o solo es para pruebas ?


Cita:************ freeMemory() ***********************
extern unsigned int __heap_start;
extern void *__brkval;

/*
* The free list structure as maintained by the
* avr-libc memory allocation routines.
*/
struct __freelist {
size_t sz;
struct __freelist *nx;
};

/* The head of the free list structure */
extern struct __freelist *__flp;

/* Calculates the size of the free list */
int freeListSize() {
struct __freelist* current;
int total = 0;

for (current = __flp; current; current = current->nx) {
total += 2; /* Add two bytes for the memory block's header */
total += (int) current->sz;
}
return total;
}

// ****************************************************
// Informa de la cantidad de memoria SRAM disponible
// ****************************************************
int freeMemory() {
int free_memory;

if ((int)__brkval == 0) {
free_memory = ((int)&free_memory) - ((int)&__heap_start);
} else {
free_memory = ((int)&free_memory) - ((int)__brkval);
free_memory += freeListSize();
}
return free_memory;
}
Muy bien Pedro muy bien!! (Me froto las manos) tenemos que hablar usted y yo!!
Saludos crack!! Eres un manitas!
(17-03-2016, 08:40 AM)pedmar escribió: [ -> ]Que fácil parece-laughbounce2.gif no lo habéis dejado a huevo.
ya estoy pensando meter mas cosas.
de momento he modificado la programación con una prueba para poder llevarme al curro el aparato y controlar el funcionamiento.
he metido esto:
Cita: // *****************************************************************************************
// MODIFIQUE ESTE EJEMPLO PARA ESTABLECER UNA PROGRAMACION DIFERENTE.
// Consulte los comentarios de las funciones ConfigurarPin() y CrearPulso() en el fuente
// del modulo CaoSeta_ProgPins.cpp.
// *****************************************************************************************
// Aquí hay que programar los pulsos sobre los pines. (tiempo a estado activo)
// Salvo casos especiales los Pines deben configurarse para que su estado por defecto
// (estado en ausencia pulso activo) sea el estado LOW.
// *****************************************************************************************
void SetPinsProgram(){
ProgPins.ConfigurarPin(4, HIGH);
ProgPins.ConfigurarPin(5, HIGH);
ProgPins.ConfigurarPin(6, HIGH);
ProgPins.ConfigurarPin(7, HIGH);

ProgPins.CrearPulso(4, 7, 44, 0, 4, 0, 40); // Activar rele INT1 7:44 - 11:44
ProgPins.CrearPulso(5, 8, 15, 0, 6, 0, 40); // Activar rele INT2 8:15 - 14:15
ProgPins.CrearPulso(5, 15, 10, 0, 0, 30, 0); // Activar rele INT2 15:10 - 15:40
ProgPins.CrearPulso(6, 12, 26, 0, 2, 10, 0); // Activar rele INT3 12:26 - 14:36
ProgPins.CrearPulso(7, 9, 10, 10, 6, 10, 0);// Activar rele INT4 9:10 - 15:20
}

Creo que uno de los comentarios tiene un error que me he permitido señalar.
Cita:lo que dudo es si toda esta parte del codigo es necesaria o solo es para pruebas ?
Cita:************ freeMemory() ***********************
extern unsigned int __heap_start;
extern void *__brkval;

/*
* The free list structure as maintained by the
* avr-libc memory allocation routines.
*/
struct __freelist {
size_t sz;
struct __freelist *nx;
};

/* The head of the free list structure */
extern struct __freelist *__flp;

/* Calculates the size of the free list */
int freeListSize() {
struct __freelist* current;
int total = 0;

for (current = __flp; current; current = current->nx) {
total += 2; /* Add two bytes for the memory block's header */
total += (int) current->sz;
}
return total;
}

// ****************************************************
// Informa de la cantidad de memoria SRAM disponible
// ****************************************************
int freeMemory() {
int free_memory;

if ((int)__brkval == 0) {
free_memory = ((int)&free_memory) - ((int)&__heap_start);
} else {
free_memory = ((int)&free_memory) - ((int)__brkval);
free_memory += freeListSize();
}
return free_memory;
}

Esa parte solo sirve para vigilar la cantidad de memoria libre, se puede quitar, pero si empiezas a añadir código, podrías dejar sin memoria para variables, y en el Arduino de 8 bits cuando se queda sin memoria en tiempo de ejecución, emppezará a hacer cosas aparentemente inexplicables porque no detecta bien esa condición.

Yo supongo que en otros sistemas como Arduino DUE se gestionan mucho mejor este tipo de condiciones y se generaría un error por falta de memoria.

Tengo la manía de dejar ese código en muchos proyectos y voy vigilando el consumo de memoria cada vez que amplío el programa con alguna variable gordota.

El código de todo el programa se guarda ya compilado en la PROGMEM que es mucho más grande, ademas generaría un error en el momento de la carga del programa. Los errores de falta de memoria en variables son silenciosos, ruines y traidores.

Has identificado perfectamente en el código toda una parte ajena a la funcionalidad del programa. Para alguien que partió de cero hace poco tiempo en programación, me parece una señal clara de que vas avanzando.

Sigue así. Practica con ejemplos sencillos. Pregúntame lo que necesites siempre que quieras.
(16-03-2016, 08:08 PM)Antonio Castro escribió: [ -> ]Con el reciclaje se consigue una relación calidad/precio(=0) inmejorable. Yo también reciclo cajas de plástico.

He localizado un sitio donde tienen una interesante variedad de separadores:

La empresa es de Valencia. No me deja meter más de 19 separadores de cada modelo en la cesta de la compra.-glare.gif

Tengo pedido estos



la verdad que yo también guardo montón de cacharritos.
mas que nada por el precio que tiene cualquier tonteria.

el enlace esta bien, sobre todo si se necesita algo especial.
yo compre estas cosas.
http://es.aliexpress.com/item/Free-Shipp...10668.html

http://es.aliexpress.com/item/SAF-Hot-60...94266.html

hola pedmar
ha quedado muy bien el montaje.
al final pones el arduino uno
¿no has puesto la placa que regula la corriente?
(17-03-2016, 11:27 AM)Antonio Castro escribió: [ -> ]Has identificado perfectamente en el código toda una parte ajena a la funcionalidad del programa. Para alguien que partió de cero hace poco tiempo en programación, me parece una señal clara de que vas avanzando.

jajaja seguro que ha sido casualidad

(17-03-2016, 11:27 AM)Antonio Castro escribió: [ -> ]Sigue así. Practica con ejemplos sencillos. Pregúntame lo que necesites siempre que quieras.

Y a riesgo de parecer pesao te voy a hacer un par de preguntas, ¿quizas con poco sentido?Huh

Cita:// Muestra la lista de configuracion de salidas, la hora actual, indica el estado de cada
// una de las salidas y en caso de estar activa indica cual es el pulso que la mantiene
// activa y su definición.
// *****************************************************************************************
void Informe(){
Serial.println();
Serial.println(F("------------------------"));
Serial.println(F("---- Informe ----"));
Serial.println(F("-----------------------"));
RTC.readDateTime(&verano, &year, &month, &dayOfMonth, &dayOfWeek, &hour, &minute, &second);
Serial_DDMMYYhhmmss(dayOfMonth, month, year, hour, minute, second);
ProgPins.Serial_OutputStatus();
Serial.println();
ProgPins.ListConfPins();
Serial.println();
Serial.println(F("------------------------"));
Serial.println();

Esta parte del código:
¿me podría decir en el monitor serial que salida a los relés esta activa?

y otra también un poco absurda:

En este caso estamos leyendo información a través del monitor serial
¿toda esta información se podría leer a través de una pantalla LCD metiendo la librería correspondiente y modificando la orden Serial println por Lcd println ?
[Imagen: s60o43.jpg]


una pregunta

los conectores que señalo con las flecha
¿es por donde se mete la corriente al rele?

y después. ¿es necesario cambiar la conexion? de los que he rodeado con el circulo
(18-03-2016, 01:42 AM)rodazac escribió: [ -> ]una pregunta

los conectores que señalo con las flecha
¿es por donde se mete la corriente al rele?
a eso te puedo responder yo :
efectivamente el VCC y al GND le metes 5v y GND respectivamente desde arduino

(18-03-2016, 01:42 AM)rodazac escribió: [ -> ]y después. ¿es necesario cambiar la conexion? de los que he rodeado con el circulo

y ese puente en mi modulo de relés no es exactamente -no2.gif igual yo lo tengo puesto como sale en la foto puenteado VCC y JD-VCC pero no tengo un pin GND por lo que imagino que así esta bien pero que te lo confirme el maestro -hi.gif
(17-03-2016, 10:02 PM)pedmar escribió: [ -> ]
(17-03-2016, 11:27 AM)Antonio Castro escribió: [ -> ]Has identificado perfectamente en el código toda una parte ajena a la funcionalidad del programa. Para alguien que partió de cero hace poco tiempo en programación, me parece una señal clara de que vas avanzando.

jajaja seguro que ha sido casualidad

Intuición+suerte=acierto.

(17-03-2016, 10:02 PM)pedmar escribió: [ -> ]
(17-03-2016, 11:27 AM)Antonio Castro escribió: [ -> ]Sigue así. Practica con ejemplos sencillos. Pregúntame lo que necesites siempre que quieras.

Y a riesgo de parecer pesao te voy a hacer un par de preguntas, ¿quizas con poco sentido?Huh

Cita:// Muestra la lista de configuracion de salidas, la hora actual, indica el estado de cada
// una de las salidas y en caso de estar activa indica cual es el pulso que la mantiene
// activa y su definición.
// *****************************************************************************************
void Informe(){
Serial.println();
Serial.println(F("------------------------"));
Serial.println(F("---- Informe ----"));
Serial.println(F("-----------------------"));
RTC.readDateTime(&verano, &year, &month, &dayOfMonth, &dayOfWeek, &hour, &minute, &second);
Serial_DDMMYYhhmmss(dayOfMonth, month, year, hour, minute, second);
ProgPins.Serial_OutputStatus();
Serial.println();
ProgPins.ListConfPins();
Serial.println();
Serial.println(F("------------------------"));
Serial.println();

Esta parte del código:
¿me podría decir en el monitor serial que salida a los relés esta activa?

y otra también un poco absurda:

En este caso estamos leyendo información a través del monitor serial
¿toda esta información se podría leer a través de una pantalla LCD metiendo la librería correspondiente y modificando la orden Serial println por Lcd println ?

Al activar las trazas se va volcando por el puerto Serial el estado de las salidas.

Respecto al uso del LCD, se podría hacer así. Lógicamente hay LCDs que están limitados a visualizar muy pocos caracteres, algunos tienen autoscroll y otros no, y los LCDs con mayor capacidad, tienen librerías que consumen mucha memoria.

Quizás los que trabajan en modo Serial vienen preparados para hacer autoscroll.

Sería cuestión de hacer pruebas sencillas con un programita para ver las posibilidades del LCD, pero desde el punto de vista de programación, si tienes las librerías adecuadas y lo conectas correctamente, el manejo de un LCD es tan sencillo como tú, acabas de sugerir.
(18-03-2016, 01:42 AM)rodazac escribió: [ -> ][Imagen: s60o43.jpg]


una pregunta

los conectores que señalo con las flecha
¿es por donde se mete la corriente al rele?

y después. ¿es necesario cambiar la conexion? de los que he rodeado con el circulo

Caso 1) Consideraciones para cuando estamos alimentado el Arduino a algo más de 5v por la entrada de tensión previa al regulador que ha de hacerse por el pin RAW.

En nuestro caso, bastaría conectar tanto el gnd como el vcc del arduino con los gnd y vcc de la placa de relé con el jumper puesto tal y como viene en la imagen, porque el consumo no sería excesivo.

Esta conexión haría que el regulador de voltaje del Arduino tenga que suministrar potencia a cada uno de los relés. Si son muchos los relés activados simultaneamente o si estos consumen mucho, podrían sobrecargar el regulador de voltaje del Arduino, pero con placas de unos pocos relés no suele ser el caso.

El jumper, cuando se quita, permite alimentar la placa de los reles conectando los 5V desde una alimentación externa en el pin Jd-Vcc y el retorno GND de la alimentación externa en el GND .

Creo que ambos GNDs en la placa están permanentemente conectados y ambos Vccs también. La entrada de +5v, de una manera o de otra, (con o sin jumper) ha de alcanzar siempre el punto de entrada de corriente Jd-Vcc.


Caso 2) Alimentamos el Arduino directamente a 5v en Vcc.
En este caso, también estaremos alimentando directamente la placa de reles a 5v y no existiría uso del regulador de voltaje interno del Arduino. Ambas placas, Arduino y la placa de Reles, estarían conectadas a 5v en paralelo a la fuente de alimentación.

Poner un regulador LM7805 de 5v externo y alimentar el Arduino a 5v por medio del pin Vcc nos permite alimentar cualquier otra cosa a 5v sin sobrecargar el regulador de voltaje del arduino.
muchas gracias.
Nada que no hay manera.
ahora creo que los modulos de reles que me han mandado están defectuosos
bueno eso o que soy un negado

he intentado alimentar los modulos con una fuente externa y nada
he quitado el jumper, que une vvc y jd-vvc
y en ese mismo sitio he alimentado los reles en gnd y jd-vvc
y nada de nada.(he medido corriente y esta bien)
[Imagen: MmePz0A.jpg]


pero si saco todas las conexiones del arduino(uno)
entonces funciona perfecto
he utilizado el código que ha puesto Antonio (PruLeds)
[Imagen: vTgftHC.jpg]




¿veis algo que este mal?
¿Estás usando 5v para alimentar la placa en todos los casos?

¿Tienes algún polímetro?

Si no teneis tester podeis probar a fabricaros un probador de continuidad.

Se pueden fabricar uno con un par de transistores. He buscado uno que no cargue apenas corriente en el circuito que queremos probar y que debe de estar desconectado de su fuente de alimentación mientras se prueba.

[Imagen: probador-continuidad-transistores.png]

Este probador yo creo que admite usar transistores baratos 2N2222 o BC548. Creo que el transistor no es crítico y que funcionaría con muchos transistores NPN.

La resistencia del Led de 120 Ohms considero que es baja. Yo usaría para más seguridad una de 470 Ohms. No hace falta que el Led luzca mucho y se podría alimentar con a +6v o a +9v.

Fijaros que al circuito que deseemos probar le vamos a atravesar con una corriente débil porque tenemos en serie con la punta de prueba una resistencia alta (de 220k).

Yo para confirmar, miraría si hay continuidad entre los dos pines GND de la placa de relés y tambien si hay continuidad entre los pines Vcc de esa misma placa.

La primera pregunta que hago es importante para poder ayudarte.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29