Concurso de fotografía AM

Temática: «Una panorámica de tu acuario».
Ya esta abierto el plazo para presentar fotografías.

Más info
image01

¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
CERRADO EL PLAZO DE INSCRIPCIÓN

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 467738
#421
Buenas tardes.

He montado una botonera según tu ejemplo, Antonio, y parece funcionar bien, junto con el lcd, piezoelectrico y reloj.

[Imagen: IMG_20140729_171035_zpsjbb1p4yi.jpg]

[Imagen: IMG_20140729_171023_zpsv1ti8ko3.jpg]

[Imagen: IMG_20140729_171013_zpsmlplh5ed.jpg]

Me pone esto:

Demo botonera
Fecha de Compilacion
Jul 29 2014 17:42:57

<<BEEP>>
Inicializando...
RTC OK!

<<BEEP>>
FIN INI (12s)
Memoria libre=894

<<BEEP>>
Botoneras activas en
3 segundos.
UDF ( 17) 145
<Tick>
DOW( 328) 206
<Tick>
RIG( 509) 12
<Tick>
LEF( 689) 16
<Tick>
UP ( 826) 14
<Tick>
SEL(1001) 9

Es correcto?

Saludos
#422
Xavi, todo parece correcto. Felicidades. -good.gif

No recuerdo que proyecto tenías en mente. Lo pregunto porque te quedan solo 894 bytes libres de memoria SRAM. (La que se usa para el contenido de las variables de los programas). -fisch.gif
#423
Buenos dias.

Aún no he comentado el proyecto que tengo en mente. De momento tengo instalado un controlador en uno de los acuarios, basado en el que se desarrollo en otra página web (no se si se pueden hacer citas a otras páginas de acuarofilia), donde utilizo reles para las luces, y dimeo para 2 canales de leds de baja potencia (únicamente estético). Funciona sin problemas desde hace un año.

Me gusta trastear con Arduino; aunque no tengo formación en temas electrónicos, pero internet es una ventana abierta a la información, leyendo de uno y otros, adaptando códigos, etc.

Al leer tu blog, y ver los videos, me he quedado sorprendido por tu trabajo, de modo que voy siguiendo tus pasos a la espera de que vengan mas capítulos.
Sobre la memoria de los arduinos (te repito que no tengo demasiada idea), las pruebas de la botonera las realicé sobre un Arduino UNO (2 KB SRAM).

Sobre mi proyecto; estoy preparando los componentes para una pantalla para un acuario pequeño, con leds de 1w. Con el Arduino únicamente quiero controlar los canales de dimeo y el ventilador de la pantalla.

Una pregunta sobre la memoria; cuando compilas un sketch de arduino (350 líneas de código) , y dice “medida en binario=16.500 bytes”; ¿cómo interpreto si un Arduino Uno es válido para mi proyecto?.

Saludos y gracias
#424
(30-07-2014, 08:51 AM)xavi escribió: Buenos dias.

Aún no he comentado el proyecto que tengo en mente. De momento tengo instalado un controlador en uno de los acuarios, basado en el que se desarrollo en otra página web (no se si se pueden hacer citas a otras páginas de acuarofilia), donde utilizo reles para las luces, y dimeo para 2 canales de leds de baja potencia (únicamente estético). Funciona sin problemas desde hace un año.

Me gusta trastear con Arduino; aunque no tengo formación en temas electrónicos, pero internet es una ventana abierta a la información, leyendo de uno y otros, adaptando códigos, etc.

Al leer tu blog, y ver los videos, me he quedado sorprendido por tu trabajo, de modo que voy siguiendo tus pasos a la espera de que vengan mas capítulos.
Sobre la memoria de los arduinos (te repito que no tengo demasiada idea), las pruebas de la botonera las realicé sobre un Arduino UNO (2 KB SRAM).

Sobre mi proyecto; estoy preparando los componentes para una pantalla para un acuario pequeño, con leds de 1w. Con el Arduino únicamente quiero controlar los canales de dimeo y el ventilador de la pantalla.

Una pregunta sobre la memoria; cuando compilas un sketch de arduino (350 líneas de código) , y dice “medida en binario=16.500 bytes”; ¿cómo interpreto si un Arduino Uno es válido para mi proyecto?.

Saludos y gracias

Bueno unas nociones de programación avanzada para Arduino no os van a hacer daño.

Hay tres tipos de memoria física en Arduino:

1) Memoria Flash (para el código)
2) SRAM (para variables)
3) Memoria EEPROM (para datos no volátiles).

Cada tipo de tarjeta ofrece cantidades diferentes de memoria.

Memoria Flash:
Se trata de una zona de memoria donde solo se usará la escritura para escribir en ella el código. Para el compilador esta memoria es de solo lectura. Se la llama PROGMEM y existe la posibilidad de incluir datos de solo lectura en esta zona en tiempo de compilación. Es una zona de memoria mucho más amplia que la SRAM.

Memoria SRAM:
Arduino trae poca memoria SRAM y hay que aprovecharla al máximo. Es la que se usa para contener datos de varuables. Es una memoria muy rápida tanto para lectura como oara escritura.

Memoria EEPROM:
Arduini no trae disco duro así que la EEPROM nos sirve para leer y escribir datos que no deseamos que se pierdan al apagarse Arduino.

Todo lo que sigue se refiere al uso de la SRAM que es la que puede dar más problemas a la hora de programar.

El compilador en la SRAM gestiona tres tipos de datos en tres zonas de memoria:

1) Stack (pila para variables locales de las funciones)
2) Head (memoria dinámica)
3) Static Data (variables globales)


En tiempo de ejecución: se gestionan las zonas de Stack y de la pila.

Al arrancar Arduino ejecuta setup() para inicializar lo que sea necesario.
Durante el proceso de inicialización de un programa se suele instanciar objetos (Instanciar = crear objeto y asignarlo a una variable) . Esto consume memoria. Son variables dinámicas (que se crean durante la ejecución) y que ocupan espacio. Nada impide usar memoria dinámica durante el resto de la ejecución del programa, (con malloc() o calloc() ) pero yo no lo hago. En los Arduinos de 8 bits la gestión de memoria dinámica es muy mala.

Así pues, una vez que completo el proceso setup(), ya tengo inicializadas las variables dinámicas que se van a usar en el mismo. Por esta razón, realizo habitualmente al final del proceso setup() una consulta sobre la cantidad de memoria libre.

Es una medida de precaución muy necesaria cuando se está desarrollando porque cuando queda muy poca memoria libre, existe el peligro de que programa empiece a fallar al realizar alguna tarea. Si no estás sobre aviso te vuelves loco buscando el fallo porque son errores que en Arduino no generan aviso de violación de segmento como en otros sistemas. Simplemente el programa se queda colgado o se reinicia.

Al entrar en una función las variables locales consumen memoria de la pila (Stack) y al salir la liberan. La memoria dinámica también usa SRAM (en la zona llamada heap) pero en Arduino de 8 bits no libera bien. Deja huecos y sigue creciendo hasta encontrarse con la zona de crecimiento de la pila. El Stack y el Heap son zonas de tamaño variable y para aprovechar todo el espacio crecen cada una de ellas en sentido contrario. El Heap de Arduino es muy rudimentario.

Por ejemplo: Si el programa me ha avisado que me quedan solo 300 bytes de SRAM, ya sé que en el momento que entre en un procedimiento que contenga variables locales que me ocupen más de 300 bytes, va a petar.

[Imagen: Stack_Operation.gif?1396718650]

La imagen está sacada de una página que comenta estas nociones de la gestión de memoria por parte del ordenador y que está escrita en Ingles.

Optimizing SRAM

Si queréis hacer algo más que reutilizar código conviene dominar estos temas. También es interesante tener algo de idea para estar sobre aviso de los problemas derivados de la escasez de memoria.
#425
(30-07-2014, 08:51 AM)xavi escribió: [...]
Sobre mi proyecto; estoy preparando los componentes para una pantalla para un acuario pequeño, con leds de 1w. Con el Arduino únicamente quiero controlar los canales de dimeo y el ventilador de la pantalla.

Una pregunta sobre la memoria; cuando compilas un sketch de arduino (350 líneas de código) , y dice “medida en binario=16.500 bytes”; ¿cómo interpreto si un Arduino Uno es válido para mi proyecto?.

Saludos y gracias

Me faltaba responderte a esas otras cuestiones.

Al compilar Arduino solo te indica el uso de PROGMEN que has realizado.
En lo que suele quedarse corto Arduino es en la SRAM. .

Si tu proyecto, si no entendí mal, va a usar un solo canal de dimeo para regular globalmente toda la iluminación del acuario, ahorrarás memoria. Te podría valer una versión muy reducida que estoy preparando para los que solo van a necesitar controlar un canal de dimeo en combinación con el reloj de tiempo real y poco más. Introduciré lo que pueda en la PROGMEM y simplificaré mi software actual para intentar sacar una versión que ahorre el máximo de memoria y os sirva a los que usais Arduino UNO.
#426
Antonio , dame una direccion por privado que te voy a mandar un funduino uno que tengo nuevo y no voy a usar, por las molestias ocasionadas ,por tu paciencia y por que quiero vamos, que te lo curras mucho aqui ayudando a todo el mundo y esta es mi forma de agradecertelo, ademas ya dijiste en un mensaje que no tenias ninguna placa uno o duemilanove, mandame esa direccion y te lo envio.............portes pagados....jajajaja.
#427
(29-07-2014, 07:08 AM)xavi escribió: Buenos dias.

No desesperes. Comparto en este dropbox la libreria que utilizo sin problemas.

https://www.dropbox.com/s/9pszxu10oveyin...2004V1.rar

Saludos

(29-07-2014, 07:33 AM)Antonio Castro escribió: La primera parte de ese hardware que podemos probar si funciona es su módulo I2C.
Me refiero a hacer un escanner y localizar su dirección I2C.
Adjunto el código para el escaneado.

Gracias a los dos pero no hay manera, creo que el modulo I2C vine defectuoso, se me ha pasado conectar la pantalla en paralelo, pero lo dejo, desisto.
Estoy planteandome encargar otra, pero esta vez de dos lineas que era lo que tenia pensado inicialmente.

De todas formas la que voy a comprar es un kit de una pantalla 16x2 y el modulo I2C aparte, para soldar, antes hare pruebas con el por si las acaso.
#428
Hola Antonio,

Te cuento:
Ya he probado la parte del reloj, dimeo de leds, pantalla lcd, etc. y todo funciona.
Sin embargo me surge una duda que no me había planteado, las pruebas las he realizado conectando cables directamente pero, ¿cómo monto todos los elementos para que me quede bien?. Tengo una protoboard, shield, como lo de la foto, pero no tengo ni idea de cómo montarlo. ¿Me puedes ayudar?

[Imagen: lafoto_zps3a282e12.jpg]

Respecto al tema de los ventiladores y el mosfet estoy esperando a recibirlos.
Un saludo y muchas gracias por la ayuda
Dani
#429
Buenas tardes.

He montado la botonera en un Arduino Mega, y el resultado que sale en pantalla es un poco

diferente:


Demo botonera

Fecha de Compilacion

Jul 30 2014 20:41:22

<<BEEP>>

Inicializando...

RTC OK!

<<BEEP>>

FIN INI (12s)

Memoria libre=6507

<<BEEP>>

Botoneras activas en

3 segundos.

<Tick>

SEL(1018) 228

NUL( 0) 0

<Tick>

UP ( 837) 32

NUL( 0) 1

<Tick>

LEF( 696) 14

NUL( 0) 1

<Tick>

RIG( 510) 12

NUL( 0) 1

<Tick>

DOW( 320) 9

NUL( 0) 1

¿Que significa el NUL?

Me he dado cuenta de que al pulsar los botones, en la pantalla serial (en el pc) sale lo que he copiado arriba. Pero en cambio, en la pantalla LCD, a veces pone :

[Imagen: IMG_20140730_220401_zpsa2chns2e.jpg]

Y otras veces:

[Imagen: IMG_20140730_220954_zpsziklsoaf.jpg]

¿A que puede ser debido?

Por cierto, tengo el "refrigerador de acuario" del proyecto CAO montado sobre una placa

Arduino Pro Mini, y parece que funciona bien, aunque he compobado que hay una diferencia de 1º con un termómetro digital, aunque no me fio demasiado de mi termometro...

[Imagen: IMG_20140730_205357_zpsil7dtshv.jpg]

[Imagen: IMG_20140730_215057_zpsg5frlwdl.jpg]

[Imagen: IMG_20140730_205548_zps94swjzhw.jpg]

Siguiendo el ejemplo siguiente:

http://www.instructables.com/id/Use-Ardu...trol-moto/

Controlo el ventilador, sin relé.

[Imagen: F9LKDFGGU7FXUMHLARGE_zps96299625.jpg]

Saludos

Daninonino, la shield del centro creo es para conectar sensores.

Sobre la protoboard de la derecha podrías soldar los componentes, pero has de tener un poco de practica con el soldador.

Otra opción es que te fabriques tu mismo la PCB...

Saludos
#430
(30-07-2014, 11:18 PM)xavi escribió: Daninonino, la shield del centro creo es para conectar sensores.

Sobre la protoboard de la derecha podrías soldar los componentes, pero has de tener un poco de practica con el soldador.

Otra opción es que te fabriques tu mismo la PCB...

Saludos

Gracias Xavi,

Lo que no tengo claro si utilizo esta protoboard es cómo soldar los componentes, no entiendo como se conectan en la parte central, como llevar los cables, etc.

[Imagen: e3d7e494-4fbc-4872-8555-54775d554356_zpsa55c38ca.jpg]

Un saludo,
#431
(30-07-2014, 11:16 PM)daninonino escribió: Hola Antonio,

Te cuento:
Ya he probado la parte del reloj, dimeo de leds, pantalla lcd, etc. y todo funciona.
Sin embargo me surge una duda que no me había planteado, las pruebas las he realizado conectando cables directamente pero, ¿cómo monto todos los elementos para que me quede bien?. Tengo una protoboard, shield, como lo de la foto, pero no tengo ni idea de cómo montarlo. ¿Me puedes ayudar?

[Imagen: lafoto_zps3a282e12.jpg]

Respecto al tema de los ventiladores y el mosfet estoy esperando a recibirlos.
Un saludo y muchas gracias por la ayuda
Dani

En la protoboard no cabe mucho. Puedes poner en ella el RTC, y el zumbador, y organizar en ella una serie de pines para enchufar el display, el dimmer, la botonera, etc.

Yo el dimmer con TIP141, lo montaría en una plaquita aparte.

(30-07-2014, 11:18 PM)xavi escribió: Buenas tardes.

He montado la botonera en un Arduino Mega, y el resultado que sale en pantalla es un poco

diferente:


Demo botonera

Fecha de Compilacion

Jul 30 2014 20:41:22

<<BEEP>>

Inicializando...

RTC OK!

<<BEEP>>

FIN INI (12s)

Memoria libre=6507

<<BEEP>>

Botoneras activas en

3 segundos.

<Tick>

SEL(1018) 228

NUL( 0) 0

<Tick>

UP ( 837) 32

NUL( 0) 1

<Tick>

LEF( 696) 14

NUL( 0) 1

<Tick>

RIG( 510) 12

NUL( 0) 1

<Tick>

DOW( 320) 9

NUL( 0) 1

¿Que significa el NUL?

Me he dado cuenta de que al pulsar los botones, en la pantalla serial (en el pc) sale lo que he copiado arriba. Pero en cambio, en la pantalla LCD, a veces pone :

[Imagen: IMG_20140730_220401_zpsa2chns2e.jpg]

Y otras veces:

[Imagen: IMG_20140730_220954_zpsziklsoaf.jpg]

¿A que puede ser debido?

Por cierto, tengo el "refrigerador de acuario" del proyecto CAO montado sobre una placa

Arduino Pro Mini, y parece que funciona bien, aunque he compobado que hay una diferencia de 1º con un termómetro digital, aunque no me fio demasiado de mi termometro...

[Imagen: IMG_20140730_205357_zpsil7dtshv.jpg]

[Imagen: IMG_20140730_215057_zpsg5frlwdl.jpg]

[Imagen: IMG_20140730_205548_zps94swjzhw.jpg]

Siguiendo el ejemplo siguiente:

http://www.instructables.com/id/Use-Ardu...trol-moto/

Controlo el ventilador, sin relé.

[Imagen: F9LKDFGGU7FXUMHLARGE_zps96299625.jpg]

Saludos

Daninonino, la shield del centro creo es para conectar sensores.

Sobre la protoboard de la derecha podrías soldar los componentes, pero has de tener un poco de practica con el soldador.

Otra opción es que te fabriques tu mismo la PCB...

Saludos

A mi me sale como a tí.

NUL significa ningun boton pulsado.
UDF significa valor indefinido y sería ignorado en el programa.
La cifra entre paréntesis son las décimas de segundo que ese boton se mantiene pulsado.


Las diferencias entre el monitor serie y la pantalla se deben a que en el monitor serie sale cualquier cambio en el estado de la botonera. En la pantalla se puede perder información porque hay un refresco cada cierto tiempo.

Este programa pretende validar el hardware. Verificar si los botones se identifican y muestran el valor real recibido que puede ser ligeramente diferente del esperado por el programa dentro de cierta tolerancia a esas desviaciones.

El software que gestiona los menús, no usa exactamente las mismas funciones para la botonera.

Los termómetros digitales que venden para acuario carecen de la precisión del sensor DS18B20. Me temo que usan sensor analógico y salida digital.Yo tambien tengo un par de ellos y no son demasiado precisos.

Por el contrario tengo varias sondas DS18B20 y todas marcan la misma temperatura con una diferencia de una o dos décimas de grado entre ellas.

¿Has probado a dimear el ventilador con ese circuito o solo lo usas para conmutar?
#432
Buenos días.

Me queda perfectamente claro lo de la botonera.

Sobre la diferencia de temperatura; he utilizado otro termometro digital que tengo por casa, y las temperaturas son idénticas (una décima de diferencia, insignificante para un acuario).

Sobre el circuito con el TIP120; utilizando el ejemplo "FADE" que viene con el software del Arduino, dimea el ventilador sin problema.

Una consulta sobre los TIP141; según he leído, también se puede utilizar un mosfet IRFZ44N para dimear los Leds; esta página explica el uso del mosfet:

http://www.neoteo.com/irfz44n-el-mos-fet...-para-pwm/

Mi pregunta es si tu aprecias diferencias significativas entre ambos mosfets, siempre pensando en el uso que queremos darle (dimeo de leds). Coincido contigo en que los mosfets debería ir en una placa aparte, preveyendo la disipación del calor.

Saludos
#433
(31-07-2014, 08:34 AM)xavi escribió: Buenos días.

Me queda perfectamente claro lo de la botonera.

Sobre la diferencia de temperatura; he utilizado otro termometro digital que tengo por casa, y las temperaturas son idénticas (una décima de diferencia, insignificante para un acuario).

Sobre el circuito con el TIP120; utilizando el ejemplo "FADE" que viene con el software del Arduino, dimea el ventilador sin problema.

Una consulta sobre los TIP141; según he leído, también se puede utilizar un mosfet IRFZ44N para dimear los Leds; esta página explica el uso del mosfet:

http://www.neoteo.com/irfz44n-el-mos-fet...-para-pwm/

Mi pregunta es si tu aprecias diferencias significativas entre ambos mosfets, siempre pensando en el uso que queremos darle (dimeo de leds). Coincido contigo en que los mosfets debería ir en una placa aparte, preveyendo la disipación del calor.

Saludos

Carezco del conocimiento de electrónica para contestar a tu pregunta. Ojala existiera una web que comentara el uso de estos dos TIPs al mismo nivel de detalle que se explica el uso del MOSFET en esta página que señalas.

A diferencia de los transistores clásicos, los MOSFET son de alta impedancia así que no trabajan con intensidades en la entrada sino con voltajes. Es decir demandan muy poca corriente al Arduino. En la página que me señalas se comenta que en el SOURCE se necesita aplicar entre 2 y 4 Volts. Es un detalle que me interesaba conocer porque cuando trabaje con Arduino DUE (un año de estos) solo dispondré de un voltaje de 3.3v en las salidas para activar un disparador.

Los TIPs son transistores DARLINTONG que significa que tienen una ganancia muy alta que les permite amplificar considerablemente intensidades muy pequeñas. Los montajes con TIP141 usan resistencias de 2k2 y a 5 voltios nunca va a circular por la base del TIP141 más de 5/2200 = 0.002A = 2mA.

Pero no soy capaz de interpretar correctamente los datos de las características de estos transistores para deducir su comportamiento a 3.3v. En principio al trabajar con intensidades y no con voltajes no debería existir impedimento en trabajar a 3.3v pero no he visto ningún ejemplo.

Al final se trata de elegir el componente más barato que nos proporcione la funcionalidad que necesitamos para nuestro proyecto.
#434
Está resultando muy complicado simplificar CAO1 para que queda un subconjunto para el dimeo de un canal.

El módulo del dimmer ya lo he modificado, y he quitado todo lo que sobraba y me temo que aún consume mucha memoria así que he quitado incluso los módulos de parametros, de menus y de botonera porque pese a ser muy necesarios no se si caben.

Ahora tengo una verision que usa el RTC para controlar el dimmer, pero no es usable. No permite poner el hora el RTC por ejemplo.

Solo me interesa que alguien lo cargue en un Arduino UNO o similar (con 1K de SRAM) y me diga cuanta memoria libre dice que tiene.
[attachment=790]
#435
Buenos dias.

En cuando llegue esta tarde a casa lo cargo y posteo el resultado.

De todas formas, si la memoria del Arduino Uno es tan limitada, habrá que utilizar un MEGA, si o si.

Yo hice las pruebas con la botonera con el Uno por que lo tenía mas a mano, pero tambien tengo un mega (y un Pro Mini).

Saludos.

Usuarios navegando en este tema: 8 invitado(s)


Salto de foro: