Go Down

Topic: Busco programador para proyecto con arduino mega (Read 3977 times) previous topic - next topic

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.

nayma

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.


jorgepl

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.

jorgepl

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  ;)

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...

jorgepl

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: http://www.electan.com/modulo-rtc-reloj-tiempo-real-ds1307-conectar-listo-p-3018.html.
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:http://www.electan.com/arduino-shield-tft-tactil-color-240x320-p-3187.html
la pantalla se conecta directamente al módulo, ya he conseguido pintar con el dedo en ella con un ejemplo que traía.

nayma

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

Para el reloj mírate http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html

jorgepl

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:

Code: [Select]

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.

#11
May 19, 2012, 04:02 pm Last Edit: May 19, 2012, 04:05 pm by dacosta666 Reason: 1
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);
      }
   }
  }

yOPERO

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****
   
Code: [Select]

    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í:

Code: [Select]
/*
  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
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

#14
May 19, 2012, 05:22 pm Last Edit: May 19, 2012, 05:26 pm by dacosta666 Reason: 1
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

Go Up