Arduineces y otras hierbas (Monitorizar fugas de agua)
Re: Mis primeros pasos con Arduino (Últimos proyectos...)
La parte de los menus siempre me da pereza.
He mirado varias librerias pero no me acaban de convencer.
He mirado varias librerias pero no me acaban de convencer.
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Mis primeros pasos con Arduino (Últimos proyectos...)
Gracias Rove, nunca me ha gustado la tendencia a usar y tirar que impera hoy en día, es un despilfarro de recursos, de eficiencia y naturalmente económico, pero además anula la curiosidad sobre cómo son las cosas y cómo funcionan, haciendo que para casi todo dependamos de gigantescos engranajes productivos que están fuera de nuestro control. El desafortunado "que inventen ellos", de Unamuno, ha echado raíces en la intelectualidad y en la política, e incluso en una parte de la presunta comunidad técnico-científica que sólo aspira a ser subvencionada en proyectos de puro humo o vivir confortablemente apesebrada en la administración pública. En fin, como también os pasa a muchos de vosotros, eso nunca ha sido lo mío, aunque reconozco que en ciertos ámbitos sería la postura más inteligente.
...Siguiendo con la descripción del display y los pulsadores, comenté que en un principio pensé en hacerlo muy básico de manejo y con la configuración de funcionamiento de la máquina fijada en constantes o variables insertadas en el listado, con lo cual, de querer cambiarla sería necesario conectarle un ordenador portátil, modificar los valores en el IDE, compilar de nuevo y recargar el código en la placa... es decir, aunque funcionara sería una verdadera chapuza... Por este motivo tuve que dedicar una semana más de programación los menús.
...Dije que con la bomba de calor parada o en marcha, si pulsamos los botones "Up" o "Down", entramos en una secuencia circular de "Nenús Informativos", consignas de temperaturas, habilitación de compresores, horas de funcionamiento, modos de funcionamiento, tiempos de respuesta, etc. Pues bien, si con la bomba de calor parada por alguno de los interruptores externo o interno, pulsamos el pulsador "Enter" entraremos en los "Menús de Configuración"...
A) La primera pantalla tendrá el aspecto de la siguente imagen, que como es evidente, sirve para introducir un password de cuatro cifras que nos dará acceso a la configuración:
B) Pulsando de nuevo "Enter", el dígito de la izquierda comenzará a parpadear, indicando que está en modo de edición. Actuando sobre "Up" y "Down" iremos visionando los números de 0 a 9, que fijaremos pulsando de nuevo "Enter", con lo cual este dígito dejará de parpadear y esta característica pasará al siguiente, y así hasta haber entrado los cuatro números.
C) Si ya hemos entrado los cuatro números, pulsamos "Enter" una vez más y la rutina va a comprobar la validez del password, si es incorrecto mostrará en el display el texto "Password ERROR" y al cabo de un segundo regresará al menú de máquina parada, pero si es correcto mostrará "Password OK" y tras un segundo saltará al primer "Menú de Configuración":
D) Este menú es igual en aparencia al primer "Menú de Información", pero con la diferencia que sus valores serán ahora editables pulsando "Enter" y "Up" y "Down", a igual manera que hemos hecho al introducir el password. En este caso podremos cambiar el dato CF: (Consigna Frío), con valores entre 7 y 20 Cº, que irán subiendo o bajando de medio grado en medio grado. De igual forma cambiaremos el dato BP: (Banda Proporcional), con valores entre 1 y 10 Cº
E) Una vez hayamos pasado por los dos valores editables de este menú, la siguente pulsación de Enter, detendrá el parpadeo del segundo valor y podremos cambiar de menú con "Up" y "Down". Los 10 menús de configuración disponibles son:
1 ) - Cambiar Consigna y Banda de Frío
2 ) - Cambiar Consigna y Banda de Calor
3 ) - Cambiar Habilitar/Deshabilitar Compresores
4 ) - Cambiar permisos de Auto-rearme de alarmas
5 ) - Cambiar Intervalos de arranque entre compresores
6 ) - Cambiar Tiempo de auto rearme alarmas
7 ) - Cambiar Modo: Bomba Calor / Enfriadora
8 ) - Cambiar Filtros de entrada digital y analógica
9 ) - Reset de Contadores de Horas
10) - Menú de salida de opción Configurar
En caso de que no sean valores numéricos 0-9, si no binarios Sí/No o Activado/Desactivado, el pulsador "Up" lo activa y "Down" lo desactiva.
F) A igual que ocurría en los "Menús Informativos", entre los de Configuración aparece el de salida de la opción "Regresar.. ENTER", con el cual volvemos al menú de máquina apagada. Con esta acción, internamente, el programa guardará todos los datos de configuración en la EEPROM del microcontrolador, a igual que también guardará las horas acumuladas de funcionamiento de los compresores cada vez que la máquina se para.
...Y eso es todo sobre el manejo de la máquina a través del display y los pulsadores. Alberttoy, algunos aspectos del código, como la gestión de menús, los comentaré en posteriores mensajes.
Un saludo a todos
...Siguiendo con la descripción del display y los pulsadores, comenté que en un principio pensé en hacerlo muy básico de manejo y con la configuración de funcionamiento de la máquina fijada en constantes o variables insertadas en el listado, con lo cual, de querer cambiarla sería necesario conectarle un ordenador portátil, modificar los valores en el IDE, compilar de nuevo y recargar el código en la placa... es decir, aunque funcionara sería una verdadera chapuza... Por este motivo tuve que dedicar una semana más de programación los menús.
...Dije que con la bomba de calor parada o en marcha, si pulsamos los botones "Up" o "Down", entramos en una secuencia circular de "Nenús Informativos", consignas de temperaturas, habilitación de compresores, horas de funcionamiento, modos de funcionamiento, tiempos de respuesta, etc. Pues bien, si con la bomba de calor parada por alguno de los interruptores externo o interno, pulsamos el pulsador "Enter" entraremos en los "Menús de Configuración"...
A) La primera pantalla tendrá el aspecto de la siguente imagen, que como es evidente, sirve para introducir un password de cuatro cifras que nos dará acceso a la configuración:
B) Pulsando de nuevo "Enter", el dígito de la izquierda comenzará a parpadear, indicando que está en modo de edición. Actuando sobre "Up" y "Down" iremos visionando los números de 0 a 9, que fijaremos pulsando de nuevo "Enter", con lo cual este dígito dejará de parpadear y esta característica pasará al siguiente, y así hasta haber entrado los cuatro números.
C) Si ya hemos entrado los cuatro números, pulsamos "Enter" una vez más y la rutina va a comprobar la validez del password, si es incorrecto mostrará en el display el texto "Password ERROR" y al cabo de un segundo regresará al menú de máquina parada, pero si es correcto mostrará "Password OK" y tras un segundo saltará al primer "Menú de Configuración":
D) Este menú es igual en aparencia al primer "Menú de Información", pero con la diferencia que sus valores serán ahora editables pulsando "Enter" y "Up" y "Down", a igual manera que hemos hecho al introducir el password. En este caso podremos cambiar el dato CF: (Consigna Frío), con valores entre 7 y 20 Cº, que irán subiendo o bajando de medio grado en medio grado. De igual forma cambiaremos el dato BP: (Banda Proporcional), con valores entre 1 y 10 Cº
E) Una vez hayamos pasado por los dos valores editables de este menú, la siguente pulsación de Enter, detendrá el parpadeo del segundo valor y podremos cambiar de menú con "Up" y "Down". Los 10 menús de configuración disponibles son:
1 ) - Cambiar Consigna y Banda de Frío
2 ) - Cambiar Consigna y Banda de Calor
3 ) - Cambiar Habilitar/Deshabilitar Compresores
4 ) - Cambiar permisos de Auto-rearme de alarmas
5 ) - Cambiar Intervalos de arranque entre compresores
6 ) - Cambiar Tiempo de auto rearme alarmas
7 ) - Cambiar Modo: Bomba Calor / Enfriadora
8 ) - Cambiar Filtros de entrada digital y analógica
9 ) - Reset de Contadores de Horas
10) - Menú de salida de opción Configurar
En caso de que no sean valores numéricos 0-9, si no binarios Sí/No o Activado/Desactivado, el pulsador "Up" lo activa y "Down" lo desactiva.
F) A igual que ocurría en los "Menús Informativos", entre los de Configuración aparece el de salida de la opción "Regresar.. ENTER", con el cual volvemos al menú de máquina apagada. Con esta acción, internamente, el programa guardará todos los datos de configuración en la EEPROM del microcontrolador, a igual que también guardará las horas acumuladas de funcionamiento de los compresores cada vez que la máquina se para.
...Y eso es todo sobre el manejo de la máquina a través del display y los pulsadores. Alberttoy, algunos aspectos del código, como la gestión de menús, los comentaré en posteriores mensajes.
Un saludo a todos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Mis primeros pasos con Arduino (Últimos proyectos...)
Y por cierto, estos días de vacaciones en que un calor tórrido invita a quedarte a la fresca del invento de Sr. Carrier, he comenzado a mirar Processing, el lenguaje del MIT del que derivó el utilizado en Arduino, con lo cual la sintaxis es muy semejante. La idea es poder interactuar con estas placas para mostrar datos y grabar datos en el PC, como otra veces he hecho con el Visual Basic ...pero me estoy encontrando que el Processing es limitado en algunos aspectos, es potente en gráficos pero adolece por ejemplo de controles. De forma incompresible, para insertar botones en un formulario hay que escribir media Biblia... En fin, seguiré con ello...
Saludos a todos
Saludos a todos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Mis primeros pasos con Arduino (Últimos proyectos...)
Como dije en un anterior mensaje sobre la placa de control de la bomba de calor Climaveneta, voy a comentar un poco por encima el programa.
Debo puntualizar que todos los programadores, sean profesionales u ocasionales (como es mi caso) somos conscientes que hay mil maneras de escribir un código, y que normalmente no hay un solo porqué se ha elegido una de ellas y no cualquiera de las 999 restantes. Los motivos suelen ser muy variados, como la experiencia en un lenguaje determinado, las preferencias (y vicios) personales y las necesidades concretas para un programa puramente "informático", o para el control de una placa electrónica.
El programa lleva ya un mes funcionando sin problemas. Seguro que en su interior debe quedar algún bug o cosa mejorable, porque cuando el código es mínimamente complejo es muy difícil que todo encaje en las primeras versiones y que pueda tener en cuenta además todas las combinaciones de valores de variables y de imprevistos externos. Pero en este caso, después de muchas horas de marcha, con repetidos arranques y paradas, ha demostrado ser estable, responder con presteza a los cambios y evitar que le afecte cualquier manipulación inadecuada de la botonera y el display.
===============================
Las premisas al escribirlo eran:
1 ) - El programa no necesita ser demasiado veloz, un ciclo de medio segundo será adecuado, porque no hay nada en él que necesite ir más rápido, pero en ningún caso debe "engancharse" en algún bucle esperando una señal u orden determinada mientras "desatiende" los elementos de seguridad, como las alarmas o los arranques y paradas de compresores.
2 ) - El programa debe poder atender a un panel formado por un display y una botonera, que sirvan tanto como elementos informativos, como de control de funcionamiento, gestión de alarmas y de configuración de los parámetros.
3 ) - El mando "on-off" será doble y en serie, uno de ellos accionable desde el panel de la máquina, y el otro externo, que en este caso será controlado por el sistema domótico Sauter del edificio.
4 ) - Las configuraciones, así como algunos parámetros variables de la máquina deben poder guardarse y permanecer a salvo de cortes de alimentación
5 ) - La seguridad debe ser la premisa de funcionamiento, porque no controlamos una linterna a pilas, si no una máquina de 80 Kw, de 3,4 x 2 x 1,5 metros, con cuatro enormes compresores y unos 32 Kg de gas licuado a alta presión. Para esto, los elementos de protección han de ser a prueba de fallos, y los más críticos disponer además de seguridades adicionales.
===============================
...Y el modo de funcionamiento:
1 ) - Si el Sauter está en "on", el interruptor interno también en "on", y el estado de máquina en "off", se inicia el ciclo de arranque.
2 ) - Con la relación entre la temperatura de entrada de agua, la temperatura de consigna y el valor en Cº de banda proporcional, una rutina calcula el número de compresores que han de estar en marcha en cada momento.
3 ) - Con el dato anterior y el número de compresores que ya están en marcha, calcula los compresores a arrancar o parar. En caso de arrancar un compresor, tiene en cuenta los segundos desde que se arrancó el último. El tiempo mínimo entre uno y otro se establece en la configuración, normalmente está a 15 segundos. En cambio, en caso de necesitar parar compresores, los para sin más.
4 ) - Otra rutina, tiene en cuenta el número de compresores a arrancar o parar y los compresores que no están detenidos por una alarma o por estar desactivados desde la configuración, acude a variables que guardan las horas de funcionamiento de cada compresor disponible, y siempre arrancará prioritariamente el que tenga menos horas y parará antes el que tenga más horas.
5 ) - Una vez marcados qué compresores (nº 1,2,3 o 4) a arrancar o parar, otra rutina arrancará o parará los ventiladores correspondientes a sus condensadores de tubos.
6 ) - Una rutina comprueba en cada ciclo todos los sensores, por si alguno de ellos indica un mal funcionamiento que deba provocar una alarma. Las distintos tipos de alarmas pueden afectar a un compresor individual, a dos simultáneamente (en caso que formen uno de los dos circuitos independientes de gas), o bien a los cuatro a la vez. Cuando un compresor está afectado por una alarma, se detiene al instante. En este caso, si hubiera otro compresor parado y disponible, arrancará en sustitución del anterior.
7 ) - Las alarmas pueden desactivarse a través de tres caminos distintos: A) Entrando en el panel en la opción de alarmas y rearmándola manualmente. B) Mediante una rutina automática de auto-rearme, si está autorizada para ello en la configuración, y después de un tiempo (también prefijado) a partir de que cese el evento que la ha provocado. C) Al poner la máquina en "off".
8 ) - Si estando la máquina en marcha, alguno de los dos interruptores se pone en "off", se iniciará el proceso de apagado en que guardará los datos de ciertas variables en la eeprom del microcontrolador y detendrá luego todos los compresores y ventiladores.
===============================
...En cuanto al ciclo simplificado del programa, contiene las siguientes funciones:
Continuará...
Saludos a todos
Debo puntualizar que todos los programadores, sean profesionales u ocasionales (como es mi caso) somos conscientes que hay mil maneras de escribir un código, y que normalmente no hay un solo porqué se ha elegido una de ellas y no cualquiera de las 999 restantes. Los motivos suelen ser muy variados, como la experiencia en un lenguaje determinado, las preferencias (y vicios) personales y las necesidades concretas para un programa puramente "informático", o para el control de una placa electrónica.
El programa lleva ya un mes funcionando sin problemas. Seguro que en su interior debe quedar algún bug o cosa mejorable, porque cuando el código es mínimamente complejo es muy difícil que todo encaje en las primeras versiones y que pueda tener en cuenta además todas las combinaciones de valores de variables y de imprevistos externos. Pero en este caso, después de muchas horas de marcha, con repetidos arranques y paradas, ha demostrado ser estable, responder con presteza a los cambios y evitar que le afecte cualquier manipulación inadecuada de la botonera y el display.
===============================
Las premisas al escribirlo eran:
1 ) - El programa no necesita ser demasiado veloz, un ciclo de medio segundo será adecuado, porque no hay nada en él que necesite ir más rápido, pero en ningún caso debe "engancharse" en algún bucle esperando una señal u orden determinada mientras "desatiende" los elementos de seguridad, como las alarmas o los arranques y paradas de compresores.
2 ) - El programa debe poder atender a un panel formado por un display y una botonera, que sirvan tanto como elementos informativos, como de control de funcionamiento, gestión de alarmas y de configuración de los parámetros.
3 ) - El mando "on-off" será doble y en serie, uno de ellos accionable desde el panel de la máquina, y el otro externo, que en este caso será controlado por el sistema domótico Sauter del edificio.
4 ) - Las configuraciones, así como algunos parámetros variables de la máquina deben poder guardarse y permanecer a salvo de cortes de alimentación
5 ) - La seguridad debe ser la premisa de funcionamiento, porque no controlamos una linterna a pilas, si no una máquina de 80 Kw, de 3,4 x 2 x 1,5 metros, con cuatro enormes compresores y unos 32 Kg de gas licuado a alta presión. Para esto, los elementos de protección han de ser a prueba de fallos, y los más críticos disponer además de seguridades adicionales.
===============================
...Y el modo de funcionamiento:
1 ) - Si el Sauter está en "on", el interruptor interno también en "on", y el estado de máquina en "off", se inicia el ciclo de arranque.
2 ) - Con la relación entre la temperatura de entrada de agua, la temperatura de consigna y el valor en Cº de banda proporcional, una rutina calcula el número de compresores que han de estar en marcha en cada momento.
3 ) - Con el dato anterior y el número de compresores que ya están en marcha, calcula los compresores a arrancar o parar. En caso de arrancar un compresor, tiene en cuenta los segundos desde que se arrancó el último. El tiempo mínimo entre uno y otro se establece en la configuración, normalmente está a 15 segundos. En cambio, en caso de necesitar parar compresores, los para sin más.
4 ) - Otra rutina, tiene en cuenta el número de compresores a arrancar o parar y los compresores que no están detenidos por una alarma o por estar desactivados desde la configuración, acude a variables que guardan las horas de funcionamiento de cada compresor disponible, y siempre arrancará prioritariamente el que tenga menos horas y parará antes el que tenga más horas.
5 ) - Una vez marcados qué compresores (nº 1,2,3 o 4) a arrancar o parar, otra rutina arrancará o parará los ventiladores correspondientes a sus condensadores de tubos.
6 ) - Una rutina comprueba en cada ciclo todos los sensores, por si alguno de ellos indica un mal funcionamiento que deba provocar una alarma. Las distintos tipos de alarmas pueden afectar a un compresor individual, a dos simultáneamente (en caso que formen uno de los dos circuitos independientes de gas), o bien a los cuatro a la vez. Cuando un compresor está afectado por una alarma, se detiene al instante. En este caso, si hubiera otro compresor parado y disponible, arrancará en sustitución del anterior.
7 ) - Las alarmas pueden desactivarse a través de tres caminos distintos: A) Entrando en el panel en la opción de alarmas y rearmándola manualmente. B) Mediante una rutina automática de auto-rearme, si está autorizada para ello en la configuración, y después de un tiempo (también prefijado) a partir de que cese el evento que la ha provocado. C) Al poner la máquina en "off".
8 ) - Si estando la máquina en marcha, alguno de los dos interruptores se pone en "off", se iniciará el proceso de apagado en que guardará los datos de ciertas variables en la eeprom del microcontrolador y detendrá luego todos los compresores y ventiladores.
===============================
...En cuanto al ciclo simplificado del programa, contiene las siguientes funciones:
Código: Seleccionar todo
void loop() // Ciclo de programa
{
Par = -Par; // Variable alterna para blink en menús de configuración
Control_Sensores(); // Adquiere datos de sensores y adapta valores, offsets y unidades
Control_Menus(); // Menus de Control, Informativos y de Configuración
Control_Displays(); // Muestra Displays
Control_Alarmas(); // Activación Alarmas
Rearme_Alarmas(); // Rearme automático de alarmas
Control_Maquina(); // Arranca o detiene la máquina
Control_Compresores(); // Si máquina en marcha, arranca y detiene compresores
Ciclo_Desescarche(); // Descongelación de evaporadores de tubos en ciclo de calor
wdt_reset(); // Reset de contador de watchdog
Pausa(200); // Control de velocidad de ciclo
}
Continuará...
Saludos a todos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Mis primeros pasos con Arduino (Últimos proyectos...)
Como hemos podido ver en el fragmento de código que forma el "loop" o ciclo de programa, la primera función se llama "Control_Sensores()", y como su nombre indica es la que tiene como misión leer los distintos sensores de la máquina, tanto los digitales como los analógicos, filtrar el posible ruido eléctrico que pueda haber, y de los analógicos adaptar los datos a escalas reales con sus unidades correspondientes.
La bomba de calor Climaveneta Water 300 tiene los siguientes sensores digitales:
1 ) - Flujo de agua (pin 30)
2 ) - Protector Térmico de Compresor 1 (pin 28)
3 ) - Protector Térmico de Compresor 2 (pin 27)
4 ) - Protector Térmico de Compresor 3 (pin 25)
5 ) - Protector Térmico de Compresor 4 (pin 24)
6 ) - Presostato Baja Presión del Circuito 1 (Compresores 1 y 2) (pin 29)
7 ) - Presostato Baja Presión del Circuito 2 (Compresores 3 y 4) (pin 26)
8 ) - Presostato Alta Presión del Circuito 1 (Compresores 1 y 2) (pin 23)
9 ) - Presostato Alta Presión del Circuito 2 (Compresores 3 y 4) (pin 22)
...Cinco sensores analógicos:
10 ) - Sensor Temperatura de agua de entrada (pin A1) ()
11 ) - Sensor Temperatura de agua de salida Circuito 1 (pin A2)
12 ) - Sensor Temperatura de agua de salida Circuito 2 (pin A3)
13 ) - Sensor Presión de Gas Circuito 1 (pin A5) *
14 ) - Sensor Presión de Gas Circuito 2 (pin A6) *
...Y aparte hay dos entradas digitales de órdenes exteriores a la máquina:
15 ) - Interruptor Off/On exterior (Controlado por el sistema domótico Sauter)
16 ) - Orden de Frío/Calor (Controlado por el sistema domótico Sauter) *
Los sensores marcados con un asterisco (*) sólo están presentes en la bomba de calor, pero no en la enfriadora del mismo tipo.
Vale, todos los sensores digitales y los contactos de órdenes exteriores son en realidad contactos abierto/cerrado. Los sensores de temperatura son resistencias NTC, y los sensores de presión de gas ignoro su tecnología pero su salida es por "bucle de 20 mA". Por otra parte, estamos en una máquina de 80 Kw, con conductores de sección generosa e intensidades importantes, tanto en funcionamiento normal como en las arrancadas y paradas, en que los transitorios pueden inducir señales espúreas en los cables de los sensores, por este motivo en todas las entradas digitales están protegidas con optoacopladores y tienen dos filtros RC en serie. En cuanto a los analógicos, que no pueden aislarse con estos integrados, tienen cuatro filtros en serie, así como diodos para evitar entradas con polaridad inversa o que superen la tensión de 5 Volts de alimentación.
De todas formas, como la seguridad es importante y no quiero que una señal falsa dispare algún procedimiento inadecuado, también he incorporado filtros por software en las lecturas. El sistema algoritmo es el siguiente:
Para la entradas digitales, un "0" corresponderá a un valor leído de "0", mientras que un "1" corresponderá a "1024":
- Una variable configurable por menú establece la "amortiguación" del filtro, por ejemplo 10.
- Una variable "acumulador" tiene valor 0
- Si la entrada es "0" no pasa nada
- Si la entrada es "1", a cada ciclo de programa suma 1024/10 al acumulador.
- Cuando el valor de acumulador supera 1024, deja de sumar y el programa valida la entrada como "1"
Si en cambio la entrada está validada a "1" pero el sensor se pone a "0":
- El acumulador, que estará a 1024, resta 1024/10 a cada ciclo
- Cuando el acumulador llega a 0 o adquiere valor negativo, deja de contar, se pone a 0 y valida la entrada como "0"
En ambos casos, el valor final se alcanzará en 10 ciclos de programa, más o menos 3-4 segundos después de que el sensor se active o desactive, pero podemos variar a nuestro gusto la variable de amortiguación para que el sistema tarde más o menos en responder. Mediante estos dos procedimientos, el sistema será inmune a los transitorios, porque necesitará "n" ciclos de programa con la entrada en un estado determinado para validarla como "1" o "0".
Con los valores analógicos la cosa es diferente, tanto en procedimiento como en operación, por este motivo utilicé una "variable de amortiguación" distinta.
- Inicialmente el valor "filtrado" de salida, que llamaremos "V_Sal", es 0
- El valor analógico de entrada (V_Ent), una vez leído por el ADC del microcontrolador puede ser cualquiera entre 0 y 1024
- A cada ciclo V_Sal = V_Sal + ((V_Ent - V_Sal) / Amortiguación) .
Si la amortiguación también era por ejemplo 10, a cada ciclo irá sumando a la salida 1/10 parte de la diferencia entre la entrada y la salida, tanto en sentido ascendente como descendente, con lo cual V_Sal primero más rápido y luego más lento se irá aproximando al valor de V_Ent, sin que un transitorio extremo pueda variar la salida en más de un 10%.
En este punto ya tenemos señales amortiguadas tanto analógicas como digitales, pero éstas segundas deberán pasar por otra rutina para convertir las temperaturas a grados centígrados (Cº) y las presiones a bares. Lo cual mostraré en el próximo mensaje.
Un saludo a todos
La bomba de calor Climaveneta Water 300 tiene los siguientes sensores digitales:
1 ) - Flujo de agua (pin 30)
2 ) - Protector Térmico de Compresor 1 (pin 28)
3 ) - Protector Térmico de Compresor 2 (pin 27)
4 ) - Protector Térmico de Compresor 3 (pin 25)
5 ) - Protector Térmico de Compresor 4 (pin 24)
6 ) - Presostato Baja Presión del Circuito 1 (Compresores 1 y 2) (pin 29)
7 ) - Presostato Baja Presión del Circuito 2 (Compresores 3 y 4) (pin 26)
8 ) - Presostato Alta Presión del Circuito 1 (Compresores 1 y 2) (pin 23)
9 ) - Presostato Alta Presión del Circuito 2 (Compresores 3 y 4) (pin 22)
...Cinco sensores analógicos:
10 ) - Sensor Temperatura de agua de entrada (pin A1) ()
11 ) - Sensor Temperatura de agua de salida Circuito 1 (pin A2)
12 ) - Sensor Temperatura de agua de salida Circuito 2 (pin A3)
13 ) - Sensor Presión de Gas Circuito 1 (pin A5) *
14 ) - Sensor Presión de Gas Circuito 2 (pin A6) *
...Y aparte hay dos entradas digitales de órdenes exteriores a la máquina:
15 ) - Interruptor Off/On exterior (Controlado por el sistema domótico Sauter)
16 ) - Orden de Frío/Calor (Controlado por el sistema domótico Sauter) *
Los sensores marcados con un asterisco (*) sólo están presentes en la bomba de calor, pero no en la enfriadora del mismo tipo.
Vale, todos los sensores digitales y los contactos de órdenes exteriores son en realidad contactos abierto/cerrado. Los sensores de temperatura son resistencias NTC, y los sensores de presión de gas ignoro su tecnología pero su salida es por "bucle de 20 mA". Por otra parte, estamos en una máquina de 80 Kw, con conductores de sección generosa e intensidades importantes, tanto en funcionamiento normal como en las arrancadas y paradas, en que los transitorios pueden inducir señales espúreas en los cables de los sensores, por este motivo en todas las entradas digitales están protegidas con optoacopladores y tienen dos filtros RC en serie. En cuanto a los analógicos, que no pueden aislarse con estos integrados, tienen cuatro filtros en serie, así como diodos para evitar entradas con polaridad inversa o que superen la tensión de 5 Volts de alimentación.
De todas formas, como la seguridad es importante y no quiero que una señal falsa dispare algún procedimiento inadecuado, también he incorporado filtros por software en las lecturas. El sistema algoritmo es el siguiente:
Para la entradas digitales, un "0" corresponderá a un valor leído de "0", mientras que un "1" corresponderá a "1024":
- Una variable configurable por menú establece la "amortiguación" del filtro, por ejemplo 10.
- Una variable "acumulador" tiene valor 0
- Si la entrada es "0" no pasa nada
- Si la entrada es "1", a cada ciclo de programa suma 1024/10 al acumulador.
- Cuando el valor de acumulador supera 1024, deja de sumar y el programa valida la entrada como "1"
Si en cambio la entrada está validada a "1" pero el sensor se pone a "0":
- El acumulador, que estará a 1024, resta 1024/10 a cada ciclo
- Cuando el acumulador llega a 0 o adquiere valor negativo, deja de contar, se pone a 0 y valida la entrada como "0"
En ambos casos, el valor final se alcanzará en 10 ciclos de programa, más o menos 3-4 segundos después de que el sensor se active o desactive, pero podemos variar a nuestro gusto la variable de amortiguación para que el sistema tarde más o menos en responder. Mediante estos dos procedimientos, el sistema será inmune a los transitorios, porque necesitará "n" ciclos de programa con la entrada en un estado determinado para validarla como "1" o "0".
Con los valores analógicos la cosa es diferente, tanto en procedimiento como en operación, por este motivo utilicé una "variable de amortiguación" distinta.
- Inicialmente el valor "filtrado" de salida, que llamaremos "V_Sal", es 0
- El valor analógico de entrada (V_Ent), una vez leído por el ADC del microcontrolador puede ser cualquiera entre 0 y 1024
- A cada ciclo V_Sal = V_Sal + ((V_Ent - V_Sal) / Amortiguación) .
Si la amortiguación también era por ejemplo 10, a cada ciclo irá sumando a la salida 1/10 parte de la diferencia entre la entrada y la salida, tanto en sentido ascendente como descendente, con lo cual V_Sal primero más rápido y luego más lento se irá aproximando al valor de V_Ent, sin que un transitorio extremo pueda variar la salida en más de un 10%.
En este punto ya tenemos señales amortiguadas tanto analógicas como digitales, pero éstas segundas deberán pasar por otra rutina para convertir las temperaturas a grados centígrados (Cº) y las presiones a bares. Lo cual mostraré en el próximo mensaje.
Un saludo a todos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Los servos (y los "Timers") con Arduino...
Creo que ya publiqué algo sobre servos, pero como ahora los programas de prueba son distintos, comienzo de nuevo...
Cualquier aficionado al radiomodelismo o a la pequeña robótica, sabe que es un servo. En esencia es un dispositivo electromecánico que dispone de un eje y un brazo o actuador, el cual girará un ángulo determinado mediante una señal de mando...
Los servos son además "proporcionales", es decir, giran en "proporción" a la señal excitadora estándar en forma de impulsos de una duración de entre 1 y 2 milisegundos (mS) y una frecuencia de repetición de 50 Hz... Aunque puede haber pequeñas diferencias de una marca a otra en la duración de los impulsos y tienen además bastante tolerancia en la frecuencia de repetición...
En la siguiente imagen se ven los sistemas internos de un servo: un motor eléctrico que actúa sobre una serie de engranajes que reducen la velocidad y multiplican la fuerza por el mismo factor, cuyo eje final de salida mueve además un potenciómetro interior de referencia, el cual entrega una tensión proporcional al ángulo de giro...
...No obstante, en esta última imagen que he encontrado en internet hay algunas imprecisiones. Lo que llama "flecha" es en realidad el eje de salida. El "motor de CD", en realidad es de "CC" (corriente continua). Además, lo que llama resistencia variable, en los servos normalmente es un potenciómetro de 3 pines, aunque también podría ser una resistencia variable de 2 pines combinada con una resistencia exterior como divisor de tensión...
Continuará...
Cualquier aficionado al radiomodelismo o a la pequeña robótica, sabe que es un servo. En esencia es un dispositivo electromecánico que dispone de un eje y un brazo o actuador, el cual girará un ángulo determinado mediante una señal de mando...
Los servos son además "proporcionales", es decir, giran en "proporción" a la señal excitadora estándar en forma de impulsos de una duración de entre 1 y 2 milisegundos (mS) y una frecuencia de repetición de 50 Hz... Aunque puede haber pequeñas diferencias de una marca a otra en la duración de los impulsos y tienen además bastante tolerancia en la frecuencia de repetición...
En la siguiente imagen se ven los sistemas internos de un servo: un motor eléctrico que actúa sobre una serie de engranajes que reducen la velocidad y multiplican la fuerza por el mismo factor, cuyo eje final de salida mueve además un potenciómetro interior de referencia, el cual entrega una tensión proporcional al ángulo de giro...
...No obstante, en esta última imagen que he encontrado en internet hay algunas imprecisiones. Lo que llama "flecha" es en realidad el eje de salida. El "motor de CD", en realidad es de "CC" (corriente continua). Además, lo que llama resistencia variable, en los servos normalmente es un potenciómetro de 3 pines, aunque también podría ser una resistencia variable de 2 pines combinada con una resistencia exterior como divisor de tensión...
Continuará...
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Los servos con Arduino
...A la vez, los impulsos de control modulados en duración también se convierten en otra tensión proporcional. Un comparador comprueba ambas tensiones y genera una diferencia de error que a través de un circuito "puente" hace girar el motor en uno u otro sentido...
Imaginemos que un impulso de control de 1,5 mS genera una tensión de 2,5 volts. Y a la vez el potenciómetro (situado en su punto medio) también da 2,5 V. Entonces no hay tensión de error, y el motor no se mueve, y en consecuencia tampoco el eje de salida del servo... Ahora aumentamos la duración del impulso de control a 1,7 mS, que nos dará una tensión de 2,8 V. Como el potenciómetro sigue dando 2,5 V, el comparador detecta una diferencia de +0,3 V, la cual se amplifica y hace girar el motor hasta que el potenciómetro también dé 2,8 V...
...Igual ocurre si disminuimos el impulso de control a 1,3 mV, que entonces bajara su tensión y resultará inferior a la del potenciómetro. La señal de error será negativa y el motor girará en sentido contrario hasta que se restablezca el equilibrio...
Vemos por lo tanto, que a cada duración del impulso de control le corresponderá una cierta posición angular del eje de salida y su potenciómetro asociado. Por esto precisamente los servos se denominan "proporcionales"...
Continuara...
Saludos
Imaginemos que un impulso de control de 1,5 mS genera una tensión de 2,5 volts. Y a la vez el potenciómetro (situado en su punto medio) también da 2,5 V. Entonces no hay tensión de error, y el motor no se mueve, y en consecuencia tampoco el eje de salida del servo... Ahora aumentamos la duración del impulso de control a 1,7 mS, que nos dará una tensión de 2,8 V. Como el potenciómetro sigue dando 2,5 V, el comparador detecta una diferencia de +0,3 V, la cual se amplifica y hace girar el motor hasta que el potenciómetro también dé 2,8 V...
...Igual ocurre si disminuimos el impulso de control a 1,3 mV, que entonces bajara su tensión y resultará inferior a la del potenciómetro. La señal de error será negativa y el motor girará en sentido contrario hasta que se restablezca el equilibrio...
Vemos por lo tanto, que a cada duración del impulso de control le corresponderá una cierta posición angular del eje de salida y su potenciómetro asociado. Por esto precisamente los servos se denominan "proporcionales"...
Continuara...
Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Los servos con Arduino
Hay distintos tipos de servos de modelismo, desde los "micros" de dos o tres gramos de peso, capaces de crear un par de fuerza de 250 gr, los de 9 gramos de peso con pares de 2 Kg y hasta algunos de 200 gramos de pso y piñonería metálica que pueden ejercer el considerable par de 55 Kg...
Un compañero me citó los servos llamados "digitales", pero en realidad estos sólo tienen digital el comparador de señales, siendo la entrada PPM, el potenciómetro y el driver del motor, sistemas totalmente analógicos. La mayoría de los servos siguen siendo analógicos. Para ser realmente digitales las señales de control deberían utilizar algún protocolo serie, que también podría enviar datos de configuración, y en vez del potenciómetro de eje de salida debería llevar un encoder digital de ángulos, entonces si podrían llamarse "servos digitales"...
Vale, para realizar experiencias con servos, algunos blogs conectan la alimentación del servo a la salida +5V del Arduino, pero eso no es buena idea, porque los servos al moverse crean altos picos de consumo con sus correspondientes caídas de tensión que pueden bloquear y hasta resetear el propio Arduino...
Incluso con servos pequeños, se debe utilizar alimentación aparte, por ejemplo un portapilas de 9 V con toma en los 6 V. Los 9 irán al Vin del Arduino y los +6 irán al positivo del servo, que aún puede funcionar bien a esta tensión. Las masas GND, claro está, serán comunes...
Incluso es muy buena idea añadir un par de condensadores a la línea de alimentación del servo, un electrolítico de 220 uF en paralelo con uno de poliéster de 100 nF que ayudará a eliminar los picos más breves...
Continuará...
Saludos
Un compañero me citó los servos llamados "digitales", pero en realidad estos sólo tienen digital el comparador de señales, siendo la entrada PPM, el potenciómetro y el driver del motor, sistemas totalmente analógicos. La mayoría de los servos siguen siendo analógicos. Para ser realmente digitales las señales de control deberían utilizar algún protocolo serie, que también podría enviar datos de configuración, y en vez del potenciómetro de eje de salida debería llevar un encoder digital de ángulos, entonces si podrían llamarse "servos digitales"...
Vale, para realizar experiencias con servos, algunos blogs conectan la alimentación del servo a la salida +5V del Arduino, pero eso no es buena idea, porque los servos al moverse crean altos picos de consumo con sus correspondientes caídas de tensión que pueden bloquear y hasta resetear el propio Arduino...
Incluso con servos pequeños, se debe utilizar alimentación aparte, por ejemplo un portapilas de 9 V con toma en los 6 V. Los 9 irán al Vin del Arduino y los +6 irán al positivo del servo, que aún puede funcionar bien a esta tensión. Las masas GND, claro está, serán comunes...
Incluso es muy buena idea añadir un par de condensadores a la línea de alimentación del servo, un electrolítico de 220 uF en paralelo con uno de poliéster de 100 nF que ayudará a eliminar los picos más breves...
Continuará...
Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Los servos con Arduino
Vale, vayamos al software. Para los impacientes diré que ya sé que existe la librería "Servo.h", pero como de momento se trata de aprender las interioridades del sistema, vamos a hacer nuestras propias rutinas... Veamos este sencillo código...
Este soft es simple. Se configura el pin-11 como salida y en el "loop" se genera un ciclo de impulsos de 20 mS a 0 y a 1 de los microsegundos guardados en la variable "pulso", 1.500, que corresponden a 1,5 mS, y por lo tanto el brazo del servo adoptará la posición media.
Cambiando el valor de "pulso" entre 1000 y 2000, el servo adoptará todas sus posible posiciones en proporción al número, pero si lo queremos ver cambiando de forma continua añadiremos un potenciómetro conectado a A1 al montaje con Arduino...
En el soft sólo añadiremos las órdenes para leer la tensión del potenciómetro a través de la entrada analógica A1, y la transformación de su valor de 0-5 Volts a uno de "pulso" entre 1.000 y 2.000, con lo cual, con el mando podremos mover el servo de uno a otro extremo...
Continuará...
Saludos
Este soft es simple. Se configura el pin-11 como salida y en el "loop" se genera un ciclo de impulsos de 20 mS a 0 y a 1 de los microsegundos guardados en la variable "pulso", 1.500, que corresponden a 1,5 mS, y por lo tanto el brazo del servo adoptará la posición media.
Cambiando el valor de "pulso" entre 1000 y 2000, el servo adoptará todas sus posible posiciones en proporción al número, pero si lo queremos ver cambiando de forma continua añadiremos un potenciómetro conectado a A1 al montaje con Arduino...
En el soft sólo añadiremos las órdenes para leer la tensión del potenciómetro a través de la entrada analógica A1, y la transformación de su valor de 0-5 Volts a uno de "pulso" entre 1.000 y 2.000, con lo cual, con el mando podremos mover el servo de uno a otro extremo...
Continuará...
Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
- Anilandro
- Mensajes: 4905
- Registrado: Dom Feb 11, 2007 10:16 pm
- Ubicación: Islas Baleares, España
- Contactar:
Re: Los servos con Arduino
Ahora vamos a complicar un poco el montaje, con dos servos y dos potenciómetros. El circuito es prácticamente el mismo excepto que usamos dos entradas analógicas A1 y A2, y dos salidas Pin-11 y Pin-12...
El programa de control simplemente añade otra variable "pulso2" para el 2º servo, y la correspondiente orden de lectura "analogRead (A2)". Para mayor claridad, la rutina de generación de los los pulsos para el Servo-1 y el Servo-2 la he colocado en una función que llamo "servos()"...
Este programa PruebaServos_04, junto con las versiones anteriores de este tema _01 y _02 los podéis bajar de mi Drive en un archivo comprimido .rar a partir del enlace:
https://t.co/4HB2KUSBFq
Continuará...
Saludos
El programa de control simplemente añade otra variable "pulso2" para el 2º servo, y la correspondiente orden de lectura "analogRead (A2)". Para mayor claridad, la rutina de generación de los los pulsos para el Servo-1 y el Servo-2 la he colocado en una función que llamo "servos()"...
Este programa PruebaServos_04, junto con las versiones anteriores de este tema _01 y _02 los podéis bajar de mi Drive en un archivo comprimido .rar a partir del enlace:
https://t.co/4HB2KUSBFq
Continuará...
Saludos
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
*** La Web de Anilandro *** http://sites.google.com/site/anilandro
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados