arduino en Automoviles

Buenas tardes

Trabajo en una empresa de transformación de vehículos y estoy interesado en incluir el arduino con el shield GPS/3g para poder visualizar o bien en una app personalizada o bien a través de navegador web (con usuario y contraseña) como estan las funciones del coche (luces encendidas o apagadas, posicionamiento gps, puertas abiertas, etc...)
Pero el caso, es que estoy bastante perdido.... tengo algunas nociones de lenguaje en c y de electrónica, lo estudie hace 15 años.... me podéis aconsejar/ayudar??

Muchas gracias de antemano

Hola.

Lo que quieres hacer es perfectamente factible, sin embargo debes considerar algunos asuntos que debes resolver.

Usar un shield GPS/GPRS te recomiendo con antena externa.
Para detección de puertas abiertas, puedes usar perfectamente cualquier pin que se pueda configurar como entrada, básicamente lo que detectas es el "switch" de las puertas que generalmente es una señal de tierra del vehículo, aunque puedes poner tu propio switch ya que no todos los vehículos indican cuál de las puertas esta abierta sino que la señal es que "alguna" está abierta, para determinar cuál entonces tendras que acceder a cada una por separado y eso ya es el uso de 4 para coupé + maletera y motor, 6 para sedan y hatch.

El sensado de luces encendidas/apagadas puedes hacerlo interceptando (leyendo) la señal del relé que lo activa, así que será HIGH cuando esté encendida y evidentemente LOW para apagada. Para eso tienes dos (hasta) 3 sistemas de luces que son: Cocuyos (lamparitas), Luz Alta y Luz Baja, alli tienes tres señales que debes interceptar.

Para visualizar la data pues lo mas conveniente, ya que estas usando Arduino es una LCD que pueda mostrar esos valores, pero no has dicho si quieres visualizar remotamente (asumo que sí) y/o dentro del vehículo mismo.

Si es de acceso remoto obviamenmte no requieres de pantalla y todo lo enviarás via GPRS/GSM/3G, así que lo mas probable es que envíes esa data a un server para después accederlo desde la estación remota. Allí simplemente te diseñas el protocolo de comunicación simple que transporte los parámetros deseados y los interpretas en la aplicación cliente, biuen sea por PC o movil celular.

Técnicamente puedes interceptar cualquier señal del vehículo y la complejidad dependerá de la circuitería interna y además de interceptar señales también puedes hacer actuar algunas funciones como cerrado de puertas (Lock/Unlock) etc.

Lo más importante en mi experiencia es que aisles todas las señales, es decir aisla eléctricamente el Arduino de las señales eléctricas del auto, tambien debes obligatoriamente encapsular o proteger el arduino en alguna caja metálica, no tienes idea de la cantidad de ruido EMF que encontrarás y variará en cada vehículo.

Para la alimentación eléctrica recomiendo que usas una fuente Step Down, que pueda soportar las variaciones del voltaje que viene desde el alternador, no cometas el error de creer que hay 12V en las líneas, pues no, el voltaje con el auto encendido puede llevar aproximadamente a 15V, así que ajusta la fuente step down para que se alimente desde el sistema eléctrico y te suiministre alrededor de 7.5v para que alimentes al Arduino por su regulador, o si confías plenamente en la fuente step down, sacas 5V y alimentas directo al Arduino (no recomendado a menos que sepas exactamente que estas haciendo).

Para lo demas, solo ingenio.

Saludos

Es un proyecto muy ambicioso, incluso para alguien con experiencia.
Te va a llevar buen tiempo resolverlo. No soy pesimista sino realista.
Sin conocimientos son muchas cosas para resolver y es difícil dudar a cada momento, no digo que no lo resuelvas, pero si que será un largo trabajo.
Considera mejorar tus conocimientos por etapas antes de querer hacer algo tan complejo.
Detectar puertas es lo mas simple, es como detectar un pulsador.

Visionario ya te dió un enfoque inicial de como encarar el proyecto.
La parte directa es la mas fácil. La de comunicaciones será la que requiere más atención.
Yo consideraría leer la información disponible via ODB2 para evitar tanto cablerío e instalación posterior lo cual incrementa los costos. Ya que estas en etapa de diseño lo mejor es evaluar los pros y contras de las alternativas posibles.
Eso incrementa la complejidad a nivel de software pero te simplifica mucho la instalación, al punto que solo sería ganancias e instalación tan simple como que lo puede hacer el cliente (si fuera el caso).

Buenas tardes de nuevo

Muchas gracias a los dos por contestarme

por el tema de técnico de instalación no me preocupa mucho,lo que quiero controlar es una instalación independiente a la del vehículo.Nosotros hacemos Ambulancias, fúnebres, etc. al final es coger la señales que necesito y meterlas en el arduino (obviamente en el pin correspondiente), he trabajado muchos años de electricista y podría añadir esos cables a la instalación standard sin problema. (ya que la diseñe yo).

Lo que realmente me preocupa es:

.- Imagino que el arduino mega es el mas recomendable no? hay varias versiones?

.- Los shields necesarios en principio es cuestion de ensamblarlos con el arduino no?

.- El tema de programación del arduino y el diseño/programación de la pagina web o aplicación para poder ver el "estado del coche". (creo que esto es lo mas dificil)

Imaginaros una app que nos bajamos de la appstore o entramos en una pagina web, metemos el usuario y contraseña (especifico para cada vehículo) y nos da como un plano del coche, con las luces encendidas que estén en ese momento o apagadas, etc. y un botón de localización que cuando le des, te aparezca un mapa con la localización del vehículo.

Había pensado que hasta se podian controlar las luces desde la app o la pagina web.

me estoy flipando no?¿

me estoy flipando no?¿

En español neutro por favor!

Bien ya que la instalación no es problema. Comienza por eso y busca una placa que use un SIM808 para la parte GPS/GSM algo que sea añadible al arduino.
Tambien necesitarás una buena alimentación pero no te apures porque el módulo GPS/GSM suele necesitar una buena fuente asi que no estaría mal comprar dos step down. (1 para arduino y otro para la shield).
Mega 2560 es la que debes comprar. La ADK esta fuera de servicio creo y la otra es muy vieja y obsoleta.
En lo personal usaría un DUE antes que MEGA. El SIM808 es 3.3V asi tendrías todo mas unificado.

Buenas tardes, perdón por Esa frase.
Al final me he decidido ponerme manos a la obra, al final voy a usa un módulo Bluetooth, hc-05 y un arduino uno, para probar... en principio encender un led y con una app es "bastante sencillo", pero ahora quería que el arduino retornara a la app el estado del pin... pero algo falla... os dejo la imagen...

Muchas gracias de nuevo

if (Serial.available()) Serial.write(Serial.read());

No te va a servir porque ya lo leíste del búfer serial; y todo lo que se lee del búfer serial, se descarta.
Quizá quisiste hacer:

Serial.write(estado);

Y además:

llamar ClienteBluetooth1.BytesDisponiblesParaRecibir = "1"

No sé cómo intepretará App Inventor "1"; si como un uno, o su valor ASCII (creo que es 47). Esperar a que el dispositivo reciba 47 bytes para hacer algo? En serio?
Yo creo que la condición debería ser "> 0", no crees?

Y para finalizar mi respuesta: según a como veo en ambos códigos, vas a tener un spam de notificaciones; Arduino parece que envía el estado del pin repetidas veces.

Buenas!! muchas gracias!

Se me quedaba colgada la app.... si que es verdad, he modificado unas cuantas cosas, a ver que tal, ahora parece que funciona, cuando enciende el led, el boton pasa a verde y envia la notificacion "encendidas", pero cuando apago el led con la pulsacion larga, el led se apaga, pero el boton no pasa a blanco y no envia la notificacion "apagadas".

Buenas de nuevo, he hecho una modificacion.... ahora funciona bien, pero de este modo, el arduino no me envia la "confirmacion" a ver como lo veis...

muchas gracias de nuevo

La idea era que el envío del caracter ocurriera solamente dentro del bloque que comprueba si Serial.available() > 0:

const byte led = 8;
char estado;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  if (Serial.available()) { // Es lo mismo que Serial.available() > 0
    estado = Serial.read();
    if (estado == '1') digitalWrite(led, HIGH);
    if (estado == '2') digitalWrite(led, LOW);
    Serial.write(estado);
  }

}

Pruébalo con el código que tenías la primera vez para la app

Muchas gracias!!!! Casi lo tenemos!! os paso el programa como lo tengo actualmente a ver que puede fallar.... si le doy dos veces seguidas.... o mantengo pulsado dos veces seguidas hace lo que quiero, sino no....

que puede ser¿¿¿?¿?


Te salta la notificación cuando presionas el botón?

Si presiono dos veces seguidas si, como si hiciera doble click... entonces ahí va bien... puede ser un problema de velocidades??podria probar a meter una espera después del envío al arduino, luego ejecutar la consulta en la transmisión de datos?

Porque no observas que ocurre en arduino con cada pulsación en lugar de concentrarte en encender el LED.
Primero mira la salida!!
Y por favor, tus códigos postealos con tag de código, no como captura de imagen. Es dificil leerlo aunque se lea claro, pero es mas fácil para todo que lo pegues con tag de código </>

Este es el codigo del loop

void loop() {
  int contador = 0;
  while (Serial.available()) {
      estado = Serial.read();
      Serial.print(contador++); Serial.Print(" ");    
      Serial.println(estado);
  }
}

Muestra la salida de eso, ahora si con captura por favor.
Presionas

ignatormo:
Si presiono dos veces seguidas si, como si hiciera doble click... entonces ahí va bien... puede ser un problema de velocidades??podria probar a meter una espera después del envío al arduino, luego ejecutar la consulta en la transmisión de datos?

Eso suena de lo más lógico, pero... App Inventor tiene algún bloque que sirva para retrasar la ejecución del programa?

Porque de no ser así, tendrías que colocar un temporizador (timer) al proyecto.
Que se tarde 1000 ms en dispararse (y que se dispare simpre), que primero verifique si está el bluetooth habilitado y conectado; luego lo de los bytes disponibles para leer, y luego lo de si es A o B.

La primera verificación nunca debe faltar, o puede ocurrir un spam de errores 504 (Bluetooth no disponible).
Por experiencia lo voy a decir: si dejas corriendo la aplicación con un spam grande de notificaciones, tendrás que quitarle la batería al dispositivo (si es teléfono celular); el reinicio forzado no funcionaba :o
Como las notificaciones aparecen en el centro de la pantalla, el celular me quedó inservible en ese momento.

Debes tener activo algo en tu teclado Android que provoca eso.. muy raro.
He visto a muchos topicos que mencionan conectarse con APP Inventor +BT + Arduino y es la primera vez que leo que tienes que presionar dos veces.
Por eso verifica bien que esta pasando.

Buenas tardes
surbyte perdona que no entienda aun como van los formatos del foro, intentare gastarlos bien

surbyte:
Porque no observas que ocurre en arduino con cada pulsación en lugar de concentrarte en encender el LED.
Primero mira la salida!!
Y por favor, tus códigos postealos con tag de código, no como captura de imagen. Es dificil leerlo aunque se lea claro, pero es mas fácil para todo que lo pegues con tag de código </>

Este es el codigo del loop

void loop() {

int contador = 0;
 while (Serial.available()) {
     estado = Serial.read();
     Serial.print(contador++); Serial.Print(" ");    
     Serial.println(estado);
 }
}




Muestra la salida de eso, ahora si con captura por favor. 
Presionas

no se que pasa en arduino porque no se ni leerlo, añado ese codigo al programa de arduino?? y donde veo lo que pasa?? como lo añado?? pero bueno creo que lo he solucionado, con el Programa de Arduino que me adaptó Lucario448

Lucario448:
Eso suena de lo más lógico, pero... App Inventor tiene algún bloque que sirva para retrasar la ejecución del programa?

Porque de no ser así, tendrías que colocar un temporizador (timer) al proyecto.
Que se tarde 1000 ms en dispararse (y que se dispare simpre), que primero verifique si está el bluetooth habilitado y conectado; luego lo de los bytes disponibles para leer, y luego lo de si es A o B.

La primera verificación nunca debe faltar, o puede ocurrir un spam de errores 504 (Bluetooth no disponible).
Por experiencia lo voy a decir: si dejas corriendo la aplicación con un spam grande de notificaciones, tendrás que quitarle la batería al dispositivo (si es teléfono celular); el reinicio forzado no funcionaba :o
Como las notificaciones aparecen en el centro de la pantalla, el celular me quedó inservible en ese momento.

Lo del verificar el bluetooth creo que lo tengo no???

He añadido un delay en el programa de APP Inventor para que envie, espere 800 ms y lea resultados, Ahora pongo las imagenes, creo que funciona de lujo.
Pero bueno, como os comente, estoy realizando esto para el trabajo y primero queria encender y apagar un led desde el bluetooth, creo que eso ya lo tenemos, ahora estoy en la prevision de fallos....

Me he dado cuenta que si dejo el led encendido, me desconecto del bluetooth y me vuelvo a conectar, no me envia que esta el led encendido (obviamente), porque aun no he apretado ningun boton. Esto se me ha ocurrido porque tambien quiero añadir un pulsador fisico para encender y apagar ese mismo led.

Ahora tengo dos cosas a realizar:

1.- que cuando el programa de Android, inicie, y se conecte el bluetooth, lea si esta el led encendido y actue sobre el pulsador de la aplicacion como tal (ponerlo en verde y enviar mensaje de encendido)

2.- añadir un pulsador fisico para poder apagar y encender ese mismo led...

Esta claro que para hacer eso, tengo que modificar un poco la app de android y sobre todo la programacion de Arduino....

siento mi torpeza... me aconsejais?? ideas??