Busco programador para proyecto con arduino mega

Hola, me registro en el foro con la intención de buscar a alguien que esté interesado en programar para un proyecto específico.
No he visto ninguna petición de este tipo en el foro, y espero que no meta la pata. Tengo en mente un proyecto despues de ver algunas versiones por otros foros, pero por falta de tiempo y ninguna experiencia en programación, despues de intentarlo y fracasar. Me pregunto si alguien puede estar interesado en programar para mi proyecto. La intención es facilitar la información de los componentes que poseo, lo que necesito hacer y acordar un precio justo por el trabajo de programación.
Tambien agradezco información sobre alguien que realice este tipo de trabajos.
Si no está permitido este tipo de peticiones, solicito al administrador borre el post y acepte mis disculpas.
Un saludo.

Hola dacosta666,
si explicas el proyecto puede que alguien se ofrezca.

Saludos cordiales,

Nayma

De acuerdo, no querìa entrar en detalles por si alguien consideraba incorrecto el tema.
El proyecto es para un acuario de agua dulce, y lo que necesito en principio es dimear 6 lineas de led con buckpuck por pwm, un par de ventiladores con sonda de temperatura y activar unos relés en dos shields de 4 reles cada una.(más adelante me gustaría incorporar un sensor de PH)
Lo que tengo:
arduino mega 2560 v3
Shield TFT Tàctil Color 240x320
Shield ethernet
Shield mega conectar y listo
Modulo RTC reloj DS1307
2 x Shield 4 relés
y algunas cosas más como módulos de regleta, potenciómetro,sensores temperatura, cables,etc.
Creo que es posible ensamblar todo, pero depues de varias pruebas, se sale por completo de mis básicos conocimientos y estoy desbordado, sobre todo por falta de tiempo.
Es importante controlar a traves de red y utilizar la posibilidad tactil de la pantalla para manejar las opciones, creo que es lo más complicado.
Pues eso es todo, si alguien está interesado puede utilizar un privado.

Es un proyecto bastante complejo como para realizarlo "a distancia". Tendrías que dar más datos (de donde eres, posibilidad de quedar, de dejar el hardware para programar/debugear, tiempos, presupuesto,...) para ver si a alguien le puede interesar.

Incluso, si lo planteas "a trozos" puedes ir realizandolo tú mismo con ayuda de la comunidad del foro.

Soy de Ourense y no creo que por el foro haya mucha gente de aquí, ojalá me equivoque.
Por lo del hardware no habría problema, tambien tengo documentación con datos de todo lo que tengo hasta ahora.
Por lo demás mi problema es el tiempo disponible. Como mucho puedo probar el código compilado, que realmente es lo que se me atraganta e informar de los resultados.
No sé ... acepto cualquier sugerencia.

Lo primero de todo, si quieres empezar a desarrollarlo tú y quieres ayuda, yo pasaría el post al subforo "proyectos".

Lo segundo es exponer lo más detallada y claramente posible las especificaciones del proyecto que quieres realizar: No vale con "quiero controlarlo a través de la red y utilizar la pantalla táctil", qué parámetros quieres controlar y a través de que interfaz (configuración/horarios/calendarios, encendido/apagado remoto, sólo visualizar las lecturas a través de una web,....). Cada cosa que explicas detalladamente, define la complejidad del proyecto (cada cosa que pìdes, lo hace más y más complejo).

Lo tercero, empezar poco a poco. Comienza creando un programa que lea el RTC, después otro que lea entradas y controle unas salidas (sensores y relés), luego los juntas/mezclas/fusionas para que se lea a unas horas y se actúe a otras,.... Y así hasta ir probando cada uno de los módulos e ir juntan dolos poco a poco.

Sé que es un poco tedioso y que hay una curva de aprendizaje que hace que te cueste arrancar, pero al final merece la pena...y me imagino que tus peces pueden esperar tres/cuatro meses a tener su "hogar" totalmente domotizado :wink:

Si quieres que te lo haga alguien, el proyecto como ya te he dicho es complicado (mayor dificultad=más tiempo=más dinero) y va a necesitar el material para ir desarrollándolo y esto va a suponer un gasto más (tiempo y dinero si no es de Ourense), porque no va a valer con que te mande el código y tu lo pruebes. Al principio, puede que sí baste con intercambiar códigos y correos, pero cuando el proyecto se complique hay muchas cosas que probar y corregir sino tiene el hardware va a eternizar el desarrollo. Imaginate cada iteración, cada prueba, cada código va a tardar varios días: Él te lo envía, tu lo pruebas, le mandas los resultados, él los recibe y analiza, hace la corrección...y vuelta a empezar. Todo esto se simplifica si es de Ourense, claro.

Por otro lado, tienes que considerar la confianza que pones al enviarle/dejarle algo a alguien que no conoces y con el que has contactado a través de un foro....

No tengo prisa y mis peces menos todavía, precisamente el proyecto es para automatizar un poco más todo, ya que yo no dispongo del tiempo necesario, tengo un acuario plantado que realmente se mantiene bien de salud de peces y plantas, pero es por el tiempo que he dedicado a él y el cual ahora he tenido que reducir.
Ahora mismo tanto el CO2, como pantalla de leds y la luz UV los tengo con programadores de reloj. De todas formas no pido mucha complicación, lo que veo más complicado es hacer funcionar la pantalla tactil, aunque ya la he probado con ejemplos que venian con los drivers y va bien. Pero por ejemplo con el reloj, despues de probar varios códigos, no he conseguido avanzar.
Tampoco pensé en que fuese tan necesario el tener que usar el hardware para programar, teniendo las especificaciones del mismo.
Trataré de plantearme otra solución ya fabricada, aunque más cara...

Hacer funcionar el reloj de tiempo real no es tan complicado, es cuestión de ver que módulo tienes para ver el conexionado e ir realizando pequeños programas para aprender a utilizarlo. No es cuestión de empezar con el código de tu proyecto si no lo has utilizado nunca.

Una vez que lo tengas, con las placas de relés ya podrás sustituir los programadores que tienes. (1ª fase realizada)

A partir de ahí, es cuestión de ir añadiendo mejoras una a una: la pantalla, el interfaz táctil, la conexión por red,...

Aquí en el foro, te pueden echar una mano con ello. De momento, si quieres, puedes ir poniendo el módulo RTC que tienes y seguro que alguien sabe como configurarlo y/o te facilita algún ejemplo para empezar.

Gracias Jorgepl, pues el módulo que tengo es: 101020013 Seeedstudio Módulo RTC Reloj Tiempo Real DS1307 Conectar y Listo.
Lo he conectado y he probado un código que al parecer es para el, pero claro no he conseguido visualizar la hora en la pantallla.
Ahí ya me pierdo... esta es la pantalla:104030004 Seeedstudio Arduino Shield TFT Táctil Color 240x320
la pantalla se conecta directamente al módulo, ya he conseguido pintar con el dedo en ella con un ejemplo que traía.

La pantalla y la ethernet la dejaría para el final. Con la salida serial de momento tienes bastante.

Para el reloj mírate DS1307 RTC tutorial

Supongo que el ejemplo del que hablas es el de esta página:

http://www.seeedstudio.com/wiki/index.php?title=Twig_-_RTC

En este ejemplo, tienes que mandar por puerto serie (por ejemplo, en el monitor del IDE) un comando para configurar la hora del RTC, de la forma:

T0010166190512

Para poner las 16:10 del 19/05/2010 (Sábado)

A partir de ese momento, te mostrará la hora por puerto serie cada medio segundo.

¿Has obtenido ese resultado? Si es así, ya tienes el módulo RTC funcionando, que no es poco.

gracias nayma, interesante página...
bueno me estais convenciendo para hacer otro intento, hoy tengo un par de horas libres y voy a experimentar, que en el fondo....es lo más efectivo

edito: he posteado al mismo tiempo jorgepl, y sí efectivamente ese código es el que estoy investigando...
voy a realizar unas pruebas.

con el siguiente código, primero me da un error de sustituir send por write, una vez sustituido me dice lo siguiente en esta linea marcada en naranja Wire.write(0x00); call of overloaded 'write(int)' is ambiguous

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // This is the I2C address
// Global Variables
int command = 0; // This is the command char, in ascii form, sent from the serial port
int i;
long previousMillis = 0; // will store last time Temp was updated
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte test;

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

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

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers, Probably need to put in checks for valid numbers.

void setDateDs1307()
{

second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); // Use of (byte) type casting and ascii math to achieve result.
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);
Wire.send(0x00);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}

// Gets the date and time from the ds1307 and prints result
void getDateDs1307()
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0x00);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// A few of these need masks because certain bits are control bits
second = bcdToDec(Wire.receive() & 0x7f);
minute = bcdToDec(Wire.receive());
hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
dayOfWeek = bcdToDec(Wire.receive());
dayOfMonth = bcdToDec(Wire.receive());
month = bcdToDec(Wire.receive());
year = bcdToDec(Wire.receive());

Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.print(" ");
}
void setup() {
Wire.begin();
Serial.begin(57600);
}
void loop() {
delay(2000);
/*T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99) - T(sec)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(year) - T Sets the date of the RTC DS1307 Chip.
Example to set the time for 02-DEC-10 @ 19:57:11 for the 3 day of the week, send this command - T1157193021210
*/
if (Serial.available())
{ // Look for char in serial que and process if found
command = Serial.read();
if (command == 84) { //If command = "T" Set Date
setDateDs1307();
getDateDs1307();
Serial.println(" ");
}
while(1)
{
getDateDs1307();
delay(500);
}
}
}

Yo lo que hecho es cambiar el archivo Wire.h(dentro de la libreria) anadiendole las siguientes lineas:
Yo haria copia de seguridad de mis librerías antes de hacer algún cambio

    inline size_t write(unsigned long n) { return write((uint8_t)n); }
    inline size_t write(long n) { return write((uint8_t)n); }
    inline size_t write(unsigned int n) { return write((uint8_t)n); }
    inline size_t write(int n) { return write((uint8_t)n); }

El archivo Wire.h debería quedar así:

/*
  TwoWire.h - TWI/I2C library for Arduino & Wiring
  Copyright (c) 2006 Nicholas Zambetti.  All right reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef TwoWire_h
#define TwoWire_h

#include <inttypes.h>
#include "Stream.h"

#define BUFFER_LENGTH 32

class TwoWire : public Stream
{
  private:
    static uint8_t rxBuffer[];
    static uint8_t rxBufferIndex;
    static uint8_t rxBufferLength;

    static uint8_t txAddress;
    static uint8_t txBuffer[];
    static uint8_t txBufferIndex;
    static uint8_t txBufferLength;

    static uint8_t transmitting;
    static void (*user_onRequest)(void);
    static void (*user_onReceive)(int);
    static void onRequestService(void);
    static void onReceiveService(uint8_t*, int);
  public:
    TwoWire();
    void begin();
    void begin(uint8_t);
    void begin(int);
    void beginTransmission(uint8_t);
    void beginTransmission(int);
    uint8_t endTransmission(void);
    uint8_t requestFrom(uint8_t, uint8_t);
    uint8_t requestFrom(int, int);
    virtual size_t write(uint8_t);
    virtual size_t write(const uint8_t *, size_t);
    virtual int available(void);
    virtual int read(void);
    virtual int peek(void);
	virtual void flush(void);
    void onReceive( void (*)(int) );
    void onRequest( void (*)(void) );
	
    inline size_t write(unsigned long n) { return write((uint8_t)n); } //**Linea anadida
    inline size_t write(long n) { return write((uint8_t)n); }//**Linea anadida
    inline size_t write(unsigned int n) { return write((uint8_t)n); }//**Linea anadida
    inline size_t write(int n) { return write((uint8_t)n); }//**Linea anadida
  
    using Print::write;
};

extern TwoWire Wire;

#endif

gracias, ahora se tragó el código despues de cambiar receive por read, y no me dá errores, pero en el serial no veo nada.
edito: al enviar la configuración de la hora y fecha salen simbolos rarísimos y a una velocidad menor que un segundo

ya funciona, aunque no me gusta
el mes aparece antes que el día y no muestra los ceros a la izquierda en el reloj, intentaré cambiar eso

Hola, buenas, la verdad que me siento bastante identificado contigo ya que yo inicié un proyecto de una incubadora para huevos de gallina y ahi voy... tirando.

Hay una frase que la ponen en práctica los gobiernos y dice así:

Divide y vencerás.

Eso es lo que hice yo, hice la idea general del proyecto y vi que módulos necesitaba.

Ahora lo que estoy haciendo es ir aprendiendo a programar por separado cada modulo

y cuando se como funciona lo incluyo al código del proyecto.

Debes de tener en cuenta el orden de necesidad de cada módulo para que el código sea

correlativo con la idea que tu quieres.

Y te aseguro que esto engancha y te da mucha satisfacción.

Yo empezé con el reloj ds1307 y lo controlo como quiero ya :D.

luego me compré un LCD 16x2 y bua...

Luego aprendí a grabar en la eeprom

ahora estoy con un sensor de temperatura el dht11 que me saca 600 Cº jajaja

y según voy aprendiendo voy haciendo el código.

Mi proyecto de la incubadora que por cierto se llama "Caponata" sirve para meter los huevos

y olvidarte hasta los 21 días que nacen los polluelos.

Tu proyecto me parece muy interesante así crees que te puedo ayudar en algo, alguna duda o yo que se...

llevo 1 mes programando y algo he aprendido.... es importante saber que cuando se aprende algo

la curva de aprendizaje al principio no se eleva nada pero un día pegas el estirón.

Bueno pues lo dicho y muchos ánimos que ya no van a ser los peces los que lo te lo van a agradecer,

si no tu mismo por el grado de satisfacción que ésto conlleva.

Un saludo

gracias por los ánimos barkalez, ayer mismo comenzé a dominar tambien el reloj, y sí engancha ... pero eso yá me lo temía.
Con la pátalla táctil tambien empiezo a interactuar, ya consigo mostrar letras en cualquier dirección, cambiar color, situación,tamaño...
pero como me aconsejaron en un post anterior, creo que la voy a dejar para el final, demasiados datos he visto en el monitor serial al utilizar el modo táctil.
Ahora me voy a meter con las placas de relé, creo que son fáciles de programar, ya que es basicamente un abre cierra contactos.
En fin, poco a poco me estoy metiendo, lo que pasa es que hasta el próximo fin de semana tengo que abandonar.
Por cierto resumiendo un poco, alguien me puede decir cual es el método para mostrar la hora en el tft, me refiero a la forma de meter el código, unir basicamente todas las órdenes, despues de repasar algun manual, no logro encontrar el sistema, algo me pasaré por alto...

Buenos días.
Estoy liado con un proyecto de cronometraje, de momento estoy programando con la función millis(), pero imagino que con un relog de este tipo seria mas preciso, lo que no me queda claro es como hacer que capture el tiempos y me muestre la diferencia en el LCD.
Alguien tiene algún ejemplo que me pueda iluminar el camino.

Muchas gracias.