Proyecto SAYCA (Sistemas antirrobo y confort arduido)

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 Google Code Archive - Long-term storage for Google Code Project Hosting. (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 Freematics OBD-II Adapter for Arduino | ArduinoDev.com 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)

#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

Sayca.rar (4.85 KB)

Si no recuerdo mal, TVOut tiene su propias funciones para manejo de puerto serie...mira a ver si eso es el problema....Google Code Archive - Long-term storage for Google Code Project Hosting.

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

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

#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??

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: Batsocks - TellyMate Shield alguien a trabajado con el?? Es para mostrar un menú y datos en tiempo real de rpm y km/h del coche.

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:

#ifndef OBDUART
#define OBDUART Serial
#endif

para usar el puerto serie 1 u otro del arduino mega yo lo hacia asi:

#ifndef OBDUART
#define OBDUART Serial1
#endif

pero como lo tengo que hacer para usar:

#include <pollserial.h>
pollserial pserial;

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

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:

#ifndef OBDUART
#define OBDUART Serial
#endif

para usar el puerto serie 1 u otro del arduino mega yo lo hacia asi:

#ifndef OBDUART
#define OBDUART Serial1
#endif

pero como lo tengo que hacer para usar:

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

#ifndef OBDUART
#define OBDUART Serial
#endif

teoricamente poniendo:
En OBD.cpp:

#ifndef OBDUART
#define OBDUART pserial
#endif

deberia funcionar porque probe:

#ifndef OBDUART
#define OBDUART Serial1
#endif

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

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:

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:

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