Proyecto incubadora huevos gallina

Buenas, pues ya he comprado el material necesario para empezar a realizar mi programa.

Un miniservo

http://www.dealextreme.com/p/sg90-mini-servo-with-gears-and-parts-2kg-torque-35764

Un sensor de Temp + Humd

http://www.dealextreme.com/p/arduino-digital-temperature-humidity-sensor-module-121350?item=7

Un relor DS1307 con una EPROM AT24C32

http://www.ebay.es/itm/New-Arduino-I2C-RTC-DS1307-AT24C32-Real-Time-Clock-Module-For-AVR-ARM-PIC-/290644556197?pt=LH_DefaultDomain_0&hash=item43abc3f9a5#ht_5063wt_1185

Cuando me llegue expondré como lo voy haciendo, por si algúno se anima y por si necesito ayuda.

Oye no te imgainas lo pequeño que es el servo, yo tengo de esos, ¿te servirá?

a9965:
Oye no te imgainas lo pequeño que es el servo, yo tengo de esos, ¿te servirá?

Mientras me haga girar 1,5 kg entorno a unos rodamientos.... por cierto sabes donde venden rodamientos?

Saludos Amigos....

Tengo la misma inquietud que a9965 ya que yo también tengo 2 servos iguales a esos y dudo mucho de esos "2Kg de torque", por otro lado ¿ese sensor de temp/hum no es un DHT11?

ajtorres:
Saludos Amigos....

Tengo la misma inquietud que a9965 ya que yo también tengo 2 servos iguales a esos y dudo mucho de esos "2Kg de torque", por otro lado ¿ese sensor de temp/hum no es un DHT11?

Tiene toda la pinta

Estoy desarrollando el diagrama de flujo para el programa que debo de hacer y me encuentro con varios muros.

He comprado un RELOJ DS1307 y quiero que se comunique con el Arduino UNO en I2C.
Esto lo hago por si algún día se me apaga el Arduino que no me empieze el ciclo de incubación desde el día 0 y lo haga desde el momento en el que se quedó sin energía.

Está claro que el RELOJ DS1307 se integra en una placa con una pila para ser autónomo.

Mi problema es que se muy poco de I2C, mas o menos se que tienes que cargar la librería .wire y empezar la transmisión, y tienes que ir al datasheet para ver como se comunica. Pero vamos por partes, en el diagrama de flujo lo primero que haga el programa es comprobar si antes ha dejado un ciclo por la mitad y si ha sido así que inicie desde ese momento.

Yo no se como conseguir que el arduino reconozca si se ha quedado a medias antes o no. Lo único que se me ocurre es que el programa sea especifico para una fecha de inicio y si no es esa fecha que reste los días que le manda el reloj y empieze desde ese día.

Es decir si lo pongo a funcionar el 11 de junio del 2012 y cuando inicia no es ese día sino el 15 de junio del 2012 pues que se vaya directamente a ese día.

Si se os ocurre algo mas facil me lo decís.

Hola a todos,

Tengo buenas y malas noticias:

Me ha llegado el reloj DS1307 en cuestión de 4 días desde china, madre mia, la mala noticia que me ha costado dios y ayuda comunicarme con él, me daba fallo al compilarlo porque las librerías de wire.h no son compatibles con Arduino 1.0 y si bajo de versión no me comunica el la placa con el PC. Así que al final encontré un código que si lograba comunicarse con el reloj. Que es el siguiente:

//Arduino 1.0+ Only
//Arduino 1.0+ Only

#include "Wire.h"
#define DS1307_ADDRESS 0x68

void setup(){
  Wire.begin();
  Serial.begin(9600);
}

void loop(){
  printDate();
  delay(1000);
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);

  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  Serial.print(month);
  Serial.print("/");
  Serial.print(monthDay);
  Serial.print("/");
  Serial.print(year);
  Serial.print(" ");
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.println(second);

}

Ahora mi siguiente problema es que tengo poca idea de programar y mas o menos puedo aprender por analogías pero no se si debo hacerlo así.

Entonces que mejor manera es comentaros cada linea que es lo que hace y si lo digo mal pues me lo decís.

Permiteme decirte que te equivocas, la mejor manera es empezar desde cero con tutoriales basicos pars entender que estas haciendo, copiar y pegar codigo no sirve de nada.si no lo entiendes. Coje un programa desde arriba y analiza y entiende cada linea, cuando haya algo que no entiendas pregunta.
Si usas tu metodo no aprenderas y la gente no.va a estar explicandote todo, en mi firma tienes muchos tutoriales. Suerte.
No acentos...movil.

Sergegsx:
Permiteme decirte que te equivocas, la mejor manera es empezar desde cero con tutoriales basicos pars entender que estas haciendo, copiar y pegar codigo no sirve de nada.si no lo entiendes. Coje un programa desde arriba y analiza y entiende cada linea, cuando haya algo que no entiendas pregunta.
Si usas tu metodo no aprenderas y la gente no.va a estar explicandote todo, en mi firma tienes muchos tutoriales. Suerte.
No acentos...movil.

Pues ciertamente estoy de acuerdo con lo que dices, pero es que me corre prisa un proyecto. Muchas gracias, según avance en el proyecto lo iré publicando y en paralelo iré estudiando los ejemplos.

No sé cuantas etapas puede tener un ciclo de incubación, ni que precisión requiere el proyecto (días, horas, minutos,...), pero puedes guardar el estado del ciclo (día del ciclo, hora del ciclo,...) en la EEPROM y leer al principio del código el estado almacenado. Así si se reinicia, podrás continuar desde el principio de la última etapa iniciada.

jorgepl:
No sé cuantas etapas puede tener un ciclo de incubación, ni que precisión requiere el proyecto (días, horas, minutos,...), pero puedes guardar el estado del ciclo (día del ciclo, hora del ciclo,...) en la EEPROM y leer al principio del código el estado almacenado. Así si se reinicia, podrás continuar desde el principio de la última etapa iniciada.

Son del día 0 al día 18 y del día 18 al día 21 y luego se deja 1 día o 2 días mas de margen por si hay algún pollito que no quiere salir. Se que el Arduino cuenta hasta 50 días que son los byte que pueden contar. Lo que no se es que eso se puede guardar en una EPROM que lleva el Arduino o se la tienes que incluir.

De todas maneras ya compre el el reloj DS1307 y lo voy a utilizar, además en el mismo shield viene una EPROM compartiendo el mismo bus I2C.

Tengo unas dudas respecto a este codigo:

void setDateDs1307()                
{
 
   second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); //  Uso de (byte) conversión de tipo ASCII y matemáticas para lograr el resultado.  
   minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   dayOfWeek = (byte) (Serial.read() - 48);
   dayOfMonth = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   I2C_WRITE(zero);
   I2C_WRITE(decToBcd(second) & 0x7f);    // 0 to bit 7 starts the clock
   I2C_WRITE(decToBcd(minute));
   I2C_WRITE(decToBcd(hour));      // If you want 12 hour am/pm you need to set
                                   // bit 6 (also need to change readDateDs1307)
   I2C_WRITE(decToBcd(dayOfWeek));
   I2C_WRITE(decToBcd(dayOfMonth));
   I2C_WRITE(decToBcd(month));
   I2C_WRITE(decToBcd(year));
   Wire.endTransmission();
}

A ver si alguien me lo puede exlicar

Muy buenas, tengo buenas noticias, he hecho que me funcione el siguiente código. Yo copiaba y pegaba el código y le daba a verificar y no me daba errores pero no sabía como imprimir la fecha y la hora ni como establecer la hora ni fecha. Y un momento de esos de lucidez leí el encabezado mas detenidamente y vi que si escribías R o r te imprimía la fecha y la hora en el monitor del IDE pero solo me saían caracteres raros, y un día entero mirando el código hasta que ví que la velocidad de comunicación con el puerto serie era de 57600 baudios y el IDE lo tenía configurado por defecto a 9600 baudios, por lo tanto lo puse a la misma velocidad que en la configuración del puerto serie del Sketch y UALA... ahora puse una r o R y di a "send" y pumba, ahi tenía la hora y la fecha que en ese momento tenía el reloj. También pude establecer la fecha y la hora exacta en la que nos encontramos. Apague a mi amiguete Arduino y lo encendí a los 30 minutos y no se paró nin un momento. Por lo tanto he conseguido lo que yo quería, Ahora me tengo que comer la cabeza para que mi Sketch compare el día que inicia el ciclo de incubación con el que tiene el reloj y así sabrá en que momento empieza el ciclo. La historia es que para mi me cuesta bastante al ser muy novato pero cuando consigo estas cosas me da muchisima satisfacción y ganas de seguir adelante.

El codigo es el siguiente, estoy traduciendo los comentarios en español:

Os pongo el link porque no me deja incluir el código porque excedo de carácteres:

http://combustory.com/wiki/index.php/RTC1307_-_Real_Time_Clock

Me ha llegado el LCD y ya lo he puesto en marcha.

un vídeo para que veais como funciona.

i agree with barkalez. thanks for the share, keep posting !

Thanks again

Ammumarket:
i agree with barkalez. thanks for the share, keep posting !
Thanks again

¿¿¿ Se ha dado de alta un usuario americano solo para agradecer al compañero que haya puesto el video del LCD ???

Ya lo que me faltaba por ver.... si me pinchan no sacan sangre :fearful:

Hola a todos nuevo, vuelvo a la carga y con mas ganas que antes, pido disculpas por dejar el proyecto a medias, fué así por motivos personales y poco tiempo.

Me ha costado un poco ponerme al día pero ya estoy actualizado con el proyecto. Estoy haciendo el esquema con el software Fritzing que es genial, lo recomiendo. Cuando lo tenga todo conexionado lo subo a mi blog para que lo veáis.

Voy a actualizar el blog y cuando esté actualizado subo el proyecto para que veais como va quedando.

Saludos a todos.

Felicitaciones por el emprendimiento!! Yo estoy haciendo lo mismo solo que las cosas de china demoran unos 30 días en llegar y se me hace complicada la continuidad.
Ya tengo el Arduino con el realClock y el LCD funcionando, donde se muestra humedad, temperatura, día de incubación. Días restantes. Me gustaba la idea de guardarla en la EEPROM pero aproveché esos bytes para guardar picos de humedad temperatura, reinicios del arduino.
Hoy por hoy estoy pensando en algunos extras que te comparto por las dudas que despierten interes y los podamos resolver:

  1. El volteo de los huevos se puede hacer tranquilamente con un mini servo, ya que lo aplicas sobre bandejas balanceadas. Los huevos van punta para abajo, a 45 gr de incluinación, y se los "rota" 90 gr para que queden a 45 gr en el otro sentido, AUNQUE, los huevos de pato van acostados. Por lo que este sistema tiene sus carencias. Hay que usar rodillos, o sarandas. Importante recordar que el soporte de los huevos tiene que estar bien limpio, no tener quimicos ni pinturas que con el calor contaminen el huevo, y estar perforados para permitir la ventilación y llegada de oxigeno.
  2. La cantidad de oxigeno: Si tenemos una tobera abierta, calefaccionar es complicado, si la cerramos podemos olvidar abrir y saturar de CO2 el recinto. Habria que ver de medir la saturación de Oxigeno, (o de CO2) y actuar en consecuencia con la apertura y cierre de una tobera.
  3. La humedad: Pensando en que nazcan solos, en la misma incubadora, no me gusta la idea de la bandeja con agua abajo, por lo que estaba pensando en un vaporizdor por ultrasonido. Tengo que investigar mas.
  4. La nacedora: para que las bandejas pivoteen y giren los huevos, la misma debe estar elevada. El día 18 no se mueve mas por lo que podría bajar al nivel del piso, y así estar en condiciones de esperar las eclosiones. De esa manra podría dejar la incubadora 26 días para sacar los pichones sin interacción.

En fin hay mucho por hacer, y ojala pueda ayudarte en tu proyecto con lo poco que he avanzado en el mio.

Saludos

al final como quedo este proyecto?