Show Posts
Pages: [1] 2 3
1  International / Español / Re: Construir maqueta domótica controlada por internet on: June 23, 2011, 10:55:31 am
Hace poco monté un seminario en el que les enseñaba justamente lo que tú intentas realizar. Utilicé el wrt54G como lo tengo configurado en el enlace que te han pasado. Está claro que esta solución es buena si dispones de este tipo de routers (linksys o fonera, o compatibles) pues aprovechas la comunicación a través del puerto serie. Si no, utiliza un ethernet shield y marchando.

Te dejo otro enlace para que veas la potencia de esa comunicación.

http://eduardomarin.es/2011/06/control-webcam-2-0/

Saludos.

http://eduardomarin.es
2  International / Español / Re: DataloggerWeb y Arduino on: March 13, 2011, 09:58:10 am
Buenas Neododo,

personalmente no he utilizado ethernet shield, pero supongo que si tienes montada la web en un servidor externo, podrás realizar consultas hacia la placa arduino y obtener vía tcp/udp los valores que necesites.

Otra alternativa, en la que sí que tengo experiencia pasa por utilizar un router con capacidad para crear el propio servidor web. Los modelos de linksys wrt54g, en mi caso, o las famosas foneras con nucleo linux, permiten la comunicación a través del puerto serie con arduino.

Para que te hagas una idea:

http://eduardomarin.es/?q=node/11

http://eduardomarin.es/?q=node/10

saludos
3  International / Español / Re: ayuda GPS EM-406A SIRF III on: March 13, 2011, 07:54:10 am
Buenas Adumet,

échale un ojo a http://www.ladyada.net/make/gpsshield/

Yo utilizé su sketch para leer ese modelo, y funciona sin problemas.

(creo que este en concreto, no sé si lo adapté, ojéalo)

// A simple sketch to read GPS data and parse the $GPRMC string
// see http://www.ladyada.net/mak/ for more info

#include <NewSoftSerial.h>

NewSoftSerial mySerial =  NewSoftSerial(9, 2);

#define GPSRATE 4800

// GPS parser para SRIF STAR III 406a
#define BUFFSIZ 90
char buffer[BUFFSIZ];
char *parseptr;
char buffidx;
int latitud_dd, longitud_dd;
double latitud, latitud_aux, longitud, longitud_aux,altitud;
char latdir, longdir;
char status;

void setup()
{   

  Serial.begin(GPSRATE);
  mySerial.begin(GPSRATE);
   
  //Imprimimos titulo
  Serial.println("GPS parser");
 
}
 
 
void loop()
{
  uint32_t tmp;
  readline();
 
  // check if $GPRMC (global positioning fixed data)
  if (strncmp(buffer, "$GPGGA",6) == 0) {
    Serial.println(buffer);
    //Posicionamos detrás de la cadena $GPGGA, y saltamos la hora
    parseptr = buffer+7;   
    parseptr = strchr(parseptr, ',') + 1;
    status = parseptr[0];
   
    // Captura de latitud y longitud
    // Extraemos valor de latitud
    latitud_aux = parsedecimal(parseptr);
    latitud_dd = latitud_aux;
    latitud_dd /= 100;
    latitud = latitud_dd + ((latitud_aux - (latitud_dd * 100)) / 60);
   
    //Leemos referencia norte o sur
    parseptr = strchr(parseptr, ',') + 1;
    // read latitud N/S data
    if (parseptr[0] != ',') {
      latdir = parseptr[0];
    }
   
    // Extraemos valor de longitud
    parseptr = strchr(parseptr, ',')+1;
    longitud_aux = parsedecimal(parseptr);
    longitud_dd = longitud_aux;
    longitud_dd /= 100;
    longitud = longitud_dd + ((longitud_aux - (longitud_dd * 100)) / 60);
   
    //Leemos referencia este u oeste
    parseptr = strchr(parseptr, ',')+1;
    // read longitud E/W data
    if (parseptr[0] != ',') {
      longdir = parseptr[0];
    }
   
    //Saltamos los campos position fix, satellites used, y HDOP
    parseptr = strchr(parseptr, ',')+1;
    parseptr = strchr(parseptr, ',')+1;
    parseptr = strchr(parseptr, ',')+1;
   
    //Leemos altura en metros
    parseptr = strchr(parseptr, ',')+1;
    altitud = parsedecimal(parseptr);   
   
    Serial.print("Lat: ");
    if (latdir == 'S')
       latitud *= -1;
    Serial.println(latitud,4);
       
    Serial.print("Long: ");
    if (longdir == 'W')
       longitud *= -1;
    Serial.println(longitud,4);
   
    Serial.print("Altitud: ");
    Serial.print(altitud);
    Serial.println(" m");
  }
}

double parsedecimal(char *str) {
  double d = 0;
char aux_str[BUFFSIZ];
  int i = 0;
  while (str[0] != 0) {
   if (((str[0] > '9') || (str[0] < '0'))&&(str[0]!='.')){
     aux_str='\0';
     return atof(aux_str);
   }
   aux_str=str[0];
   str++;
   i++;
  }
  return atof(aux_str);
}

void readline(void) {
  char c;
 
  buffidx = 0;
  while (1) {
      c=mySerial.read();
      if (c == -1)
        continue;
      //Serial.print(c);
      if (c == '\n')
        continue;
      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {
        buffer[buffidx] = 0;
        return;
      }
      buffer[buffidx++]= c;
  }
}

--
Eduardo Marín.

Un saludo.
4  Forum 2005-2010 (read only) / Español / Re: TRADUCCIONES Y NUEVA VERSION DE ARDUINO.ES on: August 26, 2009, 03:59:27 pm
Pues más de lo mismo, mi granito de arena: challengerk22atgmaildotcom
5  Forum 2005-2010 (read only) / Español / Re: páginas en español on: September 22, 2007, 02:22:24 pm
Aunque no es gran cosa (y suelo dejar ideas en el aire) aquí os pego alguna chapucilla que he ido realizando:

http://ahorcandoeltiempo.blogspot.com/search/label/Arduino

Saludos.
6  Forum 2005-2010 (read only) / Español / Re: Servo motores?¿ on: May 14, 2010, 09:53:05 am
De esos azules, precisamente, tienes por ejemplo en dealxtreme, bastante baratos, todo depende del torque que necesites, pero esos para pequeñas cosas te valen:

http://www.dealextreme.com/details.dx/sku.35764

http://www.dealextreme.com/details.dx/sku.20021

Saludos
7  Forum 2005-2010 (read only) / Español / Re: traduccion al español YA! (verano 2010) on: May 05, 2010, 11:21:57 am
Perfect, salvo el 31, me subo al carro.

saludos!
8  Forum 2005-2010 (read only) / Español / Re: Interfaz grafica? on: May 12, 2010, 05:43:41 pm
Buenas tarmion,

una opción es realizar la interfaz gráfica en java que utilice una librería de comunicación con arduino, como  RXTX Java library, y a través de ella enviar comandos a arduino para que éste los interprete según tus necesidades. Aquí te dejo más info sobre la librería: http://www.arduino.cc/playground/Interfacing/Java
9  Forum 2005-2010 (read only) / Español / Re: Libreria GPS de D. Cuartielles on: May 12, 2010, 05:32:30 pm
Buenas de nuevo Frutronik,

pues respondiendo primero a esto último que comentas.

En este caso, como te comentaba, dado que está utilizando la librería SoftSerial (o similar), y tampoco lo he mirado detenidamente, parece que el GPS lo tiene conectado a los pines 6 y 7 (softserial).

El hecho de que haga eso que tú comentas (lo de SWprint('h'); ... debe ser un simple proceso de depuración o comprobación, como indica. Tan sólo envía al GPS un mensaje de saludo "hi" y salto y retorno de carro, como diciendo, hey! estás escuchando?!, pero sin mayor sentido.

En cuanto a lo que me preguntabas del retardo de adquisición de la señal del GPS, pues la primera vez, o encendido en frío, aún te tardará unos minutillos, pero una vez ha adquirido señal, si apagaras, y encendieras, serían unos segundos.

Te dejo aquí el parser que yo utilicé, y que luego modifiqué, pues tenía algún problema con algún dato: http://www.ladyada.net/make/gpsshield/GPStest_RMC.pde

Un saludo
10  Forum 2005-2010 (read only) / Español / Re: Libreria GPS de D. Cuartielles on: May 11, 2010, 05:47:17 pm
Buenas Frutronik,

directamente yo no he trabajado con esa librería, pero creo recordar que hacía uso de SoftwareSerial. En mi caso, que uso el mismo modelo de GPS que tú, también uso SoftSerial, pues necesito rx y tx libres, así que posiblemente no tengas problemas.

Saludos
11  Forum 2005-2010 (read only) / Español / Tamaño de array on: April 22, 2010, 05:05:55 pm
Muy buenas.

Tengo un problema en relación con un vector de float.

Tengo un programa, que lee de una SD un número determinado de líneas (estoy probando, con menos de 100). Cada línea me devolverá un float. El caso es que la lectura la realizo al principio del programa, y por cada línea quiero almacenar su valor float  en cada posición del array.

Definido como float mivector[100], el programa se me ejecuta con errores. No sé si es posible que en alguna medida esté machacando datos...

Si doy con el problema, os lo comentaré
12  Forum 2005-2010 (read only) / Español / Re: Lectura en serial me provoca retardos on: April 18, 2010, 01:58:32 pm
Bueno, pues después de estar la tarde con ello liado, creo que he encontrado la solución que mejor funciona.

Aún cuando he prescindido de todas las líneas NMEA menos una del GPS, el pps o refresco que nos devuelve el GPS está limitado a una pasada por segundo.

De esta forma, si metíamos una sentencia (if(Serial.avaliable()) en el bucle principal del programa, el programa quedaría detenido hasta que no hubiera de nuevo información a leer del GPS.

Dado que no podía dejar ese tiempo sin refrescar los servos, la solución pasa por leer del puerto serie únicamente cuando tengamos certeza o creamos que habrá información. De este modo, no pararemos la ejecución del programa.

Para ello, basta con lanzar la sentencia (if(Serial.available()) cada ciertos ciclos de ejecución. En mi caso, y para un segundo, aproximadamente debo lanzarla cada 500 pasadas (intentaré bajar hasta que vea que empieza a esperar por información).

De esta forma, la actualización de servos es fluida:

int contador = 0;
bucle{

if((contador % 500)==0){
  if(Serial.available()){
     readline();
  }
}

contador++;
...
}

A seguir con el lío
13  Forum 2005-2010 (read only) / Español / Re: Lectura en serial me provoca retardos on: April 18, 2010, 11:33:13 am
Bueno, estoy viendo algunos comandos como "continue" o "Serial.flush()" que podrían servirme tal vez como salida al paso.

Lo que ahora veo es que puedo configurar el GPS para deshabilitar algunos mensajes, o aumentar la velocidad de comunicación. De esta forma podría minimizar tiempos. A ver si hay suerte.
14  Forum 2005-2010 (read only) / Español / Lectura en serial me provoca retardos on: April 18, 2010, 11:12:26 am
Muy buenas.

Me encuentro ante el siguiente problema.

Tengo un programa, que realiza bastantes operaciones (cálculos matemáticos, tratamiento de cadenas, y escritura en servos).

Al utilizar escritura en servos necesito que la respuesta en ejecución sea lo más rápida posible, pero el problema viene con la lectura del puerto serie.

En el flujo normal del programa, hay un momento en el que debo leer del puerto serie, en concreto leo un GPS (el cual me da unas 5 líneas NMEA por pasada). Esto supone un tiempo de lectura de algo menos de un segundo. El caso es que de estas 5 líneas, solamente me interesa una.

La pregunta es. Es posible al realizar el (if(Serial.available()) leer los caracteres correspondientes a dicha línea e ignorar las demás dejando vacío el buffer de lectura hasta nuevo "available"??

Muchas gracias.
saludos.
15  Forum 2005-2010 (read only) / Español / Re: Visual Basic 6 comunicacion serie con Arduino Mega on: March 03, 2010, 08:02:08 am
Qué código utilizas en arduino??
Pages: [1] 2 3