miércoles, 9 de noviembre de 2011

2 - Control de iluminacion

Bienvenidos de nuevo a este blog.

Hoy, como paso basico, programaremos nuestra arduino para poder establecer los periodos de dia y noche en nuestro acuario.

Necesitaremos:

  • La placa arduino , con su cable usb
  • Placa de prototipos o breadboard ( la tipica placa donde se pinchan los componentes).
  • Placa con el chip RT1307( es opcional , pero muy recomendable, hara las funciones de reloj, dandonos hora y fecha. 
  • Rele, que hara de interruptor, aunque dependiendo del tipo de iluminacion se pueden utilizar otros, mas delante lo veremos.
  • 1 resistencia 1k
  • 1 diodo 1N4001
  • 1 transistor BD137
El montaje es sencillo, y depende sobretodo del tipo de rele, yo os recomiendo un rele cuyo funcionamiento  este en el rango de 5v, para no tener que suministrar ese potencial de una fuente externa.

El rele no lo podremos conectar directamente a la arduino, debido a que ni tiene intensidad para alimentarlo debidamente y que al ser una bobina, podria dañar el chip.
 Debemos usar el siguiente esquema:


Os recomendaria añadir un condensador de 1000 uF para asi protejer de los picos de bajada y que la placa arduino no haga un reset.

Si no os atreveis a montarlo, o simpemente os da perreria ;) en ebay venden cientos de placas con reles, solo teneis que poner "avr relay".



Primer montaje, para ver si esto realmente funciona, probaremos con cuaquier lampara o bombilla que tengamos.obtendremos y usaremos el mismo patron que usamos anteriormente para probar el arduino, el blink ;) .



No os recomendaria probarlo con los tubos fluorescentes, pues les causaria un desgaste prematuro.

Aqui el ejemplo que podremos usar con nuestro acuario.

Como podeis ver el montaje es igual.


Segundo montaje:
Ahora nos disponemos a usar el RTC.
Como primer paso, podemos descargar la libreria para poder usarlo de forma comoda, o gestionarlo "en bruto" ( no os lo recomiendo).

Aqui os pongo un enlace a la libreria. https://github.com/adafruit/RTClib/zipball/master
Hay mas librerias , pero os recomiendo esta, es la mas sencilla.

 Una vez descargado , descomprimirla y meter la carpeta en la carpeta librerias , que esta dentro de la carpeta del IDE arduino.

Este chip funciona mediante el protocolo I2C , el cual es capaz de transmitir datos de varios dispositivos mediante dos cables.

En la placa tiene pines especiales, en las paqueñas ( UNO, Duemilanove...) es el pin 4 y 5 analogico, y en el caso de la Mega, viene indicado , y son el pin 22 y 23.
El esquema de montaje es el siguiente:
De igual manera, si no sois habiles con el soldador, venden cientos de placas ya montadas, ademas con la pila incluida, que hara que cuando no tengamos alimentacion no se pierda la hora.


El esquema , el cul suministra la ibreria, nos servira de ejemplo para ver el funcionamiento, lo coloco con comentarios y explicando cada paso dado:


#include <Wire.h>
#include "RTClib.h"
// creamos el "objeto" que almacenara las propiedades del RTC
RTC_DS1307 RTC;
void setup () {
                        // inician el puerto serie, la libreria que transmite y el software del chip 
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
                       // este fragmento iniciara el chip con la hora de compilacion del sketch si este no esta arrancado, podeis usarlo para configurarlo la primera vez, una vez has configurado la hora, ya no hara falta configurarla mas.
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop () {
                        //Obtenemos la hora del rtc
    DateTime now = RTC.now();
    // Imprimimos la fecha
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    //esperamos un segundo
    delay(1000);
}
Tercer montaje y el definitivo:

Ahora aunaremos ambas cosas para conseguir controlar el arduino y encender y apagar.

// definiremos el numero del pin qu usamos y los datos, haremos esto para no ocupar espacio innecesario en la memoria pues son valores fijos.
#define PINRELE 3
#define HORAON 10
#define HORAOFF 20
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
    Wire.begin();
    RTC.begin();
    // configuramos el tipo de pin.
    pinMode(pinRele,OUTPUT);
// esta parte es opcional. recomendaria no ponerla dado que si no , cada vez que se reinicie volvera a configurar la hora, dando caso a error.
  if (! RTC.isrunning()) {
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop () {
    DateTime now = RTC.now();
    // seguimos la siguiente deduccion
    // si la fecha es mayor a X y menor que Y
    // entonces
    if(HORAON<=now.hour()&&now.hour()<HORAOFF){
    digitalWrite(PINRELE,true);
  }// si no
  else{
    digitalWrite(PINRELE,false);
  }



  /* SI la hora traspasa las 24:00 entonces podemos hacer uso de la siguiente deduccion
    if(HORAON<=now.hour()||now.hour()<HORAOFF)
   dado que deberiamos tener en cuenta el salto que ocurre  23:59->00:00 */
 
    // esperamos un segundo
    delay(1000);
}

Y el montaje, ( con fritzing ;) ) es el siguiente.

Se ve un poco mal , lo siento , aun estoy aprendiendo a usarlo.
El led y la fuente simulan a el circuito de la iluminacion.

esquema final.


Un saludo y gracias por pasaros , espero que os sea utiles.



sábado, 5 de noviembre de 2011

1 - primeros pasos e instalacion del software necesario.

Hola, hoy como primer paso instalaremos todo lo necesarios para programar la placa arduino.

En primer lugar, nos disponemos a bajarnos la ultima version del IDE ( entorno de desarrollo)
hay diversas versiones: Windows, MacOs, Linux.

El IDE ( entorno de desarrollo integrado) tiene todo lo que podremos necesitar.
Podremos compilar( para quien no conozca el termino, es como pasar del texto que nosotros programamos a el codigo que leera el chip, con sus diversas librerias y añadidos) , ver errores ( solo por el terminal de abajo, indica la linea donde esta y una pequeña explicacion), leer por puerto de serie...

bueno, bastantes opciones que ire explicando conforme haga falta.

En principio, una vez instalado el IDE, ya esta todo apunto , enchufaremos por usb nuestra placa y veremos que se ilumina el led de encendido.
Pero claro.. no tiene nada dentro...

como primer ejemplo usaremos el ejemplo mas comercial, que es como el hello world ( el primer codigo que se programa para un lenguaje, y sirve para probar que todo funciona) de todas las programaciones.

Iremos a la pestaña de File, Basic, Examples, y veremos diversos archivos de prueba, en nuestro caso pincharemos sobre el blink, un ejemplo qeu hace parpadear el led que tienen las arduinos incluido.
Esta en el pin 13.

Esquema blink
A continuacion explicare el codigo un poco.

veremos dos apartados, el setup, donde definiremos lo mas basico del sketch, como son los pines ( si es entrada o salida) y en un futuro algun parametro mas.
el loop, que como si nombre indica , es la funcion que se va a ejecutar de forma redundante, y que contiene el programa normalmente, dado que la funcionalidad que buscamos se repetira de forma ciclica.

en este podemos ver como escribe en el pin un estado alto ( high) , poniendo 5v en el pin, despues espera 1000 milesimas, lo pone en off, y espera otras 1000 milesimas... es decir , hara que el led parpade.

Es la parte mas basica, y ayuda a comprender cosas basicas como definir el tipo del pin, y su estado, y algo tan basico como esperar x tiempo.

Espero que os guste , o que almenos alguien me lea :P , para cualquier pregunta , ya sea sobre esto o algo mas avanzado, contacten ;)

Un saludo.

miércoles, 26 de octubre de 2011

Hola mundo;

Hola , soy David , estudiante de grado en Ing informatica, y me gustaría explicarles el curioso mundo de la programación sobre placas micro-controladas ARDUINO aplicado en este caso a los acuarios. (Ambos hobbys que aunque parezca que no, se llevan bastante bien.)


En este caso, quisiera empezar desde cero explicando la plataforma con la que iré trabajando, las explicaciones no quiero que sean demasiado tecnicas, para que todos podamos entenderlas ( en ocasiones hasta para entenderme yo mismo ... )

ARDUINO
        La primera version de arduino, con puerto serie. Actualmente existen diversos modelos.



una plataforma de desarrollo libre, que utiliza un derivado de wiring y processing, dos lenguajes de programacion a su vez derivados de otros.

Como podréis observar si habéis programado antes, el lenguaje es sencillo a mas no poder, pudiendo utilizarse en su forma estructurada, similar a C o en su forma de objetos, siendo similar a Java.


En un principio, empezaremos con programacion estructurada, para ir aumentando y solo en caso de que genere mejoras utilizaremos objetos.


A modo de primera entrada, el ya famoso primer código en C que nos sirve para probar todo.


Entorno IDE con nuestro HelloWorld particular.

Como podemos observar , el programa es sencillo.

podemos observar dos partes,
El setup, el cual se ejecuta el primero, y donde se configura las entradas y salidas, además de instanciar ( "iniciar") los diversos módulos que podemos agregarle.
pinMode(pin,Tipo);

El loop, donde como se puede predecir, se repite de forma cíclica.
Aquí ejecutaremos el cuerpo del programa.
delay(milisegundos a esperar);
digitalWrite(pin, estado de salida);

Exacto, este programa como se puede intuir, pondrá en ON ( 5v) el pin 13 , esperara 1000 milisegundos, apagara el pin 13, esperara otros 1000 milsegundos....

Además, la placa arduino, siempre lleva ( al menos las oficiales) un led en el pin 13, el cual ya viene con su resistencia y todo ( esto no implica que no podamos usar el pin 13.) .

Asi que sumado todo esto, tenemos un led parpadeando con un ciclo de dos segundos.

Espero que como pequeño ejemplo y principio de todo ,os guste el blog, y que poco a poco pasemos de un ejemplo sencillo como este a fabricarnos un sistema de automatización del acuario.

Os dejo unas pequeñas referencias.
http://www.arduino.cc/es/

Si queréis conseguir una placa arduino a buen precio, en ebay las hay muy baratas, y aunque sean en china ( y en este caso barato no implica perder calidad) , los vendedores se portan muy bien y las placas son igual de duras.

yo hace poco ahogue sin querer a una de las mías durante 1 hora en un acuario de prueba ( menos mal) y aun sigue dando guerra por aquí.

Un saludo , y muchas gracias por su visita ;)