Go Down

Topic: Proyecto SAYCA (Sistemas antirrobo y confort arduido) (Read 2924 times) previous topic - next topic

fjramirez

Aug 01, 2012, 07:05 pm Last Edit: Aug 01, 2012, 07:26 pm by fjramirez Reason: 1
Bueno, pues hace ya mucho que tenia pensado realizar este proyecto, y ya hace algun tiempo que lo empece. Se trata de un sistema, en principio para coche, antirrobo, localización gps, confort, etc. todo lo que se nos ocurra.

Estoy usando la librería TVout http://code.google.com/p/arduino-tvout/ (si algo des-actualizada) pero es la que mas se adapta a mis necesidades. Facilidad de uso y nos permite usar una pantalla lcd entre 4" y 7", que a la vez podemos usarla para ver películas o como monitor de aparcamiento. Es algo muy versátil. He desarrollado el entorno y todo bien, la pantalla principal muestra los Km/h, rpm, temperatura del motor y algunas cosillas mas.

Para obtener los datos del coche he usado la librería OBD http://www.arduinodev.com/hardware/obd-kit/ y me va perfecta.

Todo funciona muy bien por separado, el problema es a la hora de juntarlo, que los datos del puerto obd que llegan por el puerto serie se procesan a tirones, es como si el programa tardara mucho para procesar la parte de video y no dedicara tiempo a escuchar los puertos series. (la librería TVout usa un puerto serie modificado)

Bien, pensé en que la librería tvout me comía muchos recursos para los puerto y decidi usar un arduino uno para manejar la información obd obtener los datos y enviar los valores ya procesados al arduino mega que maneja la librería tvout. Pero nada, el refresco de información es adecuado, pero la información me llega  errónea, me pierde datos y no se cual es el motivo. Os pongo unos ejemplos de prueba:

Codigo arduino uno (lee datos del puerto obd)
Code: [Select]
#include <SoftwareSerial.h>
#include <OBD.h>
COBD obd;


SoftwareSerial SerialSYCA (2, 3); // RX, TX Puerto serie para conectar con SAYCA

String inputString = ""; // String de comandos recividos de SAYCA
boolean stringComplete = false;  // Indicador de comando completo

void setup() {
Serial.begin(OBD_SERIAL_BAUDRATE); // Puerto de comunicacion con SYCA
SerialSYCA.begin(OBD_SERIAL_BAUDRATE); // Puerto de comunicacion con OBDII

inputString.reserve(20); // Reservamos espacios para el string comandos
//while (!obd.Init());
}

void loop() {
// **ENVIO DE PRUEBA**
delay (2000);
SerialSYCA.println("1234");
}
......


Adjunto el código de SAYCA que es el que procesad todo

Haber si entre todos podemos hacer algo. Y por cierto, si hay alguna librería similar a TVOut pues me seria de gran ayuda

Adjunto una imagen del terminal donde se ve que no se recibe el dato completo que es 1234

Igor R

#1
Aug 01, 2012, 08:07 pm Last Edit: Aug 01, 2012, 08:09 pm by Igor R Reason: 1
Si no recuerdo mal, TVOut tiene su propias funciones para manejo de puerto serie...mira a ver si eso es el problema....http://code.google.com/p/arduino-tvout/wiki/EX2

Creo que el autor lo hizo porque como bien dices, el micro va un poco al límite, y para respetar los tiempos,interrupciones, y demás que se necesitas,tuvo que hacer la parte del manejo serie. No sé como esta el tema de envio, o era sólo para recepción.... te tocará investigar un poco.

Saludos


Igor

fjramirez


Si no recuerdo mal, TVOut tiene su propias funciones para manejo de puerto serie...mira a ver si eso es el problema....http://code.google.com/p/arduino-tvout/wiki/EX2

Creo que el autor lo hizo porque como bien dices, el micro va un poco al límite, y para respetar los tiempos,interrupciones, y demás que se necesitas,tuvo que hacer la parte del manejo serie. No sé como esta el tema de envio, o era sólo para recepción.... te tocará investigar un poco.

Saludos


Igor


Quieres decir que use la modificación de la librería del propio tvout y no la de arduino? mmmm muy interesante eso que me dices jajaja, voy a probar.

Gracias Igor R, siempre estas hay ayudando!!!

fjramirez

nada, se conoce que la librería es para la antigua versión de arduino me da erro

Quote
#include <TVout.h>
#include <pollserial.h>
#include <fontALL.h>

TVout TV;
pollserial pserial;

void setup()  {
  TV.begin(PAL,184,72);
  TV.select_font(font6x8);
  TV.println("Serial Terminal");
  TV.println("-- Version 0.1 --");
  TV.set_hbi_hook(pserial.begin(57600));
}

void loop() {
  if (pserial.available()) {
    TV.print((char)pserial.read());
  }
}



C:\Archivos de programa\arduino\libraries\pollserial/pollserial.h:46: error: conflicting return type specified for 'virtual void pollserial::write(uint8_t)'
C:\Archivos de programa\arduino\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'

Oye, ahora que estoy viendo, este proyecto es tuyo no Igor??
http://www.youtube.com/watch?v=CZGxynxNAlM
Yo quiero justo hacer esoooo, podrias echarme una mano. Lo que quiero es manejar ese tipo de pantalla, entre 4,3" y estoy viendo que seguir con la libreria TVout me va a dar muchos problemas. También he visto esto: http://www.batsocks.co.uk/products/Shields/TellyMate%20Shield.htm alguien a trabajado con el?? Es para mostrar un menú y datos en tiempo real de rpm y km/h del coche.

fjramirez

#4
Aug 01, 2012, 10:27 pm Last Edit: Aug 01, 2012, 10:29 pm by fjramirez Reason: 1
Bien, ya modifique la librería pollserial para que funcione en la IDE de arduino 1.0.1 Probé el ejemplo y lo metí en mi código y va perfecto!!! Ahora bien, quiero usar solo un arduino, la librería OBD usa el puerto Serial es decir el 0, pero como tengo que usar el que gestiona TVout como lo haría???

En OBD.cpp encontre:
Quote
#ifndef OBDUART
#define OBDUART Serial
#endif

para usar el puerto serie 1 u otro del arduino mega yo lo hacia asi:
Quote
#ifndef OBDUART
#define OBDUART Serial1
#endif


pero como lo tengo que hacer para usar:
Quote
#include <pollserial.h>
pollserial pserial;

Igor R

#5
Aug 02, 2012, 12:34 am Last Edit: Aug 02, 2012, 12:41 am by Igor R Reason: 1
Me alegra que lo tengas funcionando!!

Si, ese proyecto de la pantalla glcd es mio. Manejar esas pantallas no es dificil, es un poco coñazo de preparar los gráficos, pero el resultado es bastante bueno. Tienes unas cuantas librerías para Arduino dependiendo el controlador que lleven. Los más estandard son T6963 ó KS0108.

Saludos


Igor R.


fjramirez


Me alegra que lo tengas funcionando!!

Si, ese proyecto de la pantalla glcd es mio. Manejar esas pantallas no es dificil, es un poco coñazo de preparar los gráficos, pero el resultado es bastante bueno. Tienes unas cuantas librerías para Arduino dependiendo el controlador que lleven. Los más estandard son T6963 ó KS0108.

Saludos


Igor R.


Puedes decirme donde encontrar la pantalla que tu usas? no he encontrado ninguna lo suficientemente grande...

Se te ocurre alguna manera de solucionara el problema que cite anteriormente, para no tener que usar los dos arduinos. No se si funcionara bien como esta, porque la librería obd trabaja con el porto serial, y la TVout estoy trabajando con pollserial pserial que es el puerto serie 0...  :smiley-roll:

Muchas gracias por tu ayuda!!

fjramirez


Bien, ya modifique la librería pollserial para que funcione en la IDE de arduino 1.0.1 Probé el ejemplo y lo metí en mi código y va perfecto!!! Ahora bien, quiero usar solo un arduino, la librería OBD usa el puerto Serial es decir el 0, pero como tengo que usar el que gestiona TVout como lo haría???

En OBD.cpp encontre:
Quote
#ifndef OBDUART
#define OBDUART Serial
#endif

para usar el puerto serie 1 u otro del arduino mega yo lo hacia asi:
Quote
#ifndef OBDUART
#define OBDUART Serial1
#endif


pero como lo tengo que hacer para usar:
Quote
#include <pollserial.h>
pollserial pserial;



Sigo teniendo este problema!! Nadie puede ayudarme?? vamos chicos es simple programacion seguro que alguno lo sabe!!  =(

Lo que me ocurre que quiero usar el puerto serie que genera la libreria <pollserial.h> que es pserial con la libreria OBD que usa el puerto series 0 que genera por defecto arduino.
En OBD.cpp:
Quote
#ifndef OBDUART
#define OBDUART Serial
#endif


teoricamente poniendo:
En OBD.cpp:
Quote
#ifndef OBDUART
#define OBDUART pserial
#endif


deberia funcionar porque probe:
Quote
#ifndef OBDUART
#define OBDUART Serial1
#endif

y si que me usa el puerto 1, pero con pserial me dice que no esta declarado!! :(

fjramirez

Hola a todos,

os comento como va mi proyecto... Conseguí resolver temporalmente los problemas que tenia a la hora de usar los puertos series y de integrar las librerías Tvout y OBD. Lamentablemente he tenido que usar dos arduinos y un adaptador OBDII basado en el  ELM327. Mi idea era reducir los dispositivos y quitar el adaptador OBDII. ¿Si alguien puede echarme una mano con esto le estaría muy agradecido? Lo que quiero es usar un arduino como lector de los datos del puerto can del vehículo. ¿Alguna librería para bus-can sencilla? ¿ También seria interesante una librería para arduino basada en el ELM327, se que existen por algún sitio porque el adaptador tienen un pic, y no el ELM327 por lo tanto tiene cargada esta librería.

Pongo algunas fotos del proyecto:


Sergegsx


Hola a todos,

os comento como va mi proyecto... Conseguí resolver temporalmente los problemas que tenia a la hora de usar los puertos series y de integrar las librerías Tvout y OBD. Lamentablemente he tenido que usar dos arduinos y un adaptador OBDII basado en el  ELM327. Mi idea era reducir los dispositivos y quitar el adaptador OBDII. ¿Si alguien puede echarme una mano con esto le estaría muy agradecido? Lo que quiero es usar un arduino como lector de los datos del puerto can del vehículo. ¿Alguna librería para bus-can sencilla? ¿ También seria interesante una librería para arduino basada en el ELM327, se que existen por algún sitio porque el adaptador tienen un pic, y no el ELM327 por lo tanto tiene cargada esta librería.

Pongo algunas fotos del proyecto:




echale un vistazo a estos dos videos, mi sistema funciona con el modulo canbus de Igor y su libreria. te lo recomiendo.

http://www.youtube.com/watch?v=xefQ2o4gV3A
http://www.youtube.com/watch?v=aFT2RwZgjSw

Go Up