CAN BUS: Red de Arduinos

Hola,

Aunque en algún post ya he puesto la dirección de la web, este finde ya se ha ampliado un poco más, y ya empieza a estar más "presentable" para una presentación oficial... :wink:

En las últimas semanas hemos estado trabajando en este proyecto: http://secuduino.blogspot.com/
Se trata de un "brick" + librería para disponer de bus CAN en nuestros Arduinos. La idea de no usar shield, es para que sea compatible con todas las placas oficiales y no oficiales de Arduino.

La conexión se realiza mediante SPI a a la placa de tipo brick, siendo configurable el chip select y el pin de recepción de mensaje, para tener máxima flexibilidad si se está usando alguna otra shield/componente que necesite SPI.

Los primeros montajes de ejemplo de uso han sido:

HELLO WORLD!! (usando un MEGA y un Diecimila/UNO):

ALARMA:

SERVO:

En la página se puede encontrar más información, así como los programas, que resultan muy directos gracias a la librería.
Resulta más fácil de implementar una red CAN que una RS485, ya que el controlador hardware hace toda la tarea "sucia" por nosotros, como son los mensajes,timing,CRC,reglas,errores,.. En RS485 el usuario tiene que crearse todo ésto via soft, ya que sólo define la capa física.
La velocidad alcanzable es hasta de 1 Mbps.
En el FAQ de la página, se puede encontrar información muy útil acerca del bus CAN, que muchas veces es dificil de conseguir.
Se trata de un bus muy utilizado y muy estable para sistemas de control en "tiempo real". Las aplicaciones son domótica, control distribuido, automoción, automatización, alarmas,....

El próximo ejemplo será algun "hack" para el coche!!! ]:smiley:

Saludos

Igor R.

Impresionante Igor !!!

Estoy deseando ver el hack para coche, cuando tenga tiempo (dentro de un mes) quiero ver si pudo conectar mi arduino UNO a mi Ford Focus y coger velocidad, consumo, rpms, etc...

estoy muy interesado en tu trabajo asi que estare atento.

No tengo mucha experiencia con Arduino asi que espero poder conseguirlo gracias a tus manuales.

Igual para el Focus tienes suerte y puedes sacar los datos via CAN por el OBD.... :smiley:
Los del grupo Volkswagen, la CAN del OBD esta protegida y hay que habilitarla mediante la la linea K (otro protocolo). Pero si tienes suerte, igual para tu coche es inmediato!!!
Tienes que hacer un poco de investigación.....:wink:

http://www.aim-sportline.com/download/ecu/stock/ford/Ford_Focus_OBDII_connection_100_eng.pdf

Hola Igor.

Es impresionante tu trabajo. Gracias por compartirlo. Acabo de empezar con Arduino
para realizar una red domótica educativa con RS485, pero me has convencido para
que me plantee CAN. ¿Hago bien?

Jaume N.

Hola Jaume,

El RS485 resulta casi inmediato y fácil de implementar con Arduino, ya que tan sólo hay que añadirle el transceiver y usar la UART del micro.
Por otro lado, viene la dificultad con el soft, ya que te tienes que crear todo un protocolo con mensaje, reglas, checksum o crc, ...
El RS485 sólo define la capa física (señales), y todo lo demás es el diseñador. En el ambito industrial, Profibus, Modbus, DMX,... son algunos de los protocolos que se usan sobre RS485.

Con CAN bus, esto es transparente para el usuario, ya que el controlador hardware lo hace por ti. Y te aseguras de tener un protocolo seguro, que los mensajes se entreguen, robusto, y fácil de implementar, ya que sólo tienes que preocuparte del ID y de los bytes de datos, todo lo demás es transparente.
Como Arduino no lo tiene integrado, necesitas un controlador hardware externo + transceiver, por lo que hace un poco más "dificil" el hardware, pero muchísimo más sencillo el soft.

Ahora ya, elección de cada uno..... Yo me quedo con CAN!! :wink:

Salu2

Igor R.

mil gracias por ese enlace !!

entonces necesito el Can-bus que vendes en tu pagina? u otra cosa para conectar al arduino?
no quiero precipitarme antes de tu proximo tutorial, pero como has dicho que mi caso podria ser tan sencillo, me has picado a investigar antes de tiempo.

yo pensaba que para conectar via CAN seria siempre a traves del OBD-II, y que lo que me hace falta es el shield CAN (o el tuyo) y saber leer los codigos, me equivoco?

he encontrado esto, pero creo que es mejor un shield para arduino directamente,no?
http://cgi.ebay.es/ELM327-ELM-327-V-1-3A-OBD2-USB-DIAGNOSTIC-TOOLS-/180631685672?pt=LH_DefaultDomain_186&hash=item2a0e7cca28

El ELM 327 o sus otras versiones, es un chip que viene integrados casi todos los protocolos de diagnosis que existen.
http://elmelectronics.com/index.html (PWM, ISO, VPW,...)
El que has puesto tu, es directamente una aplicación de ese chip para conectarlo al PC y usar un programa de ordenador.

Cada fabricante usa diferentes cosas para diagnosis, aunque casi todos estan empezando a usar CAN.
Pero no hay que confundir la CAN de diagnosis, con la red interna CAN que existe en el coche. La de diagnosis puede llegar a ser más o menos estandard.

Por ejemplo, en un coche podrías tener:

  • CAN de tracción (ecu motor, abs, airbag,...)
  • CAN de confort (clima, puertas,..)
  • CAN de infotainment
  • CAN de diagnosis.

Es decir, aunque no tuvieras por el OBD, siempre puedes "conectarte" a las otras redes CAN existentes. Por supuesto, hay que ser "manitas", buscar donde estan los cables a conectarse,... Por otro lado, necesitas saber que ID te interesan, y cómo esta codificada la información en dichos mensajes. Cosa que no es fácil de conseguir. Eso si, es mucho más interesante que la de diagnosis... ]:smiley:

No sé muy bien el tema de focus, entonces tampoco puedo asegurarte que vaya por CAN y si usan el estandar que puedes ver en WIKI dentro de los mensajes CAN y dichos PID. Tengo un cable con conector OBD para conectar al "brick" CAN que tengo en mi página....ummmm, no sé si conozco a alguien con un Focus para probar....y que se deje!!! je,je,je

Siempre se pueden encontrar cosas interesantes por la red (Volkswagen) ....CAN-Bus - Ion Del Instructor | PDF | Medición | Electromagnetismo

Saludos

Igor R.

Hola Igor,
he remitido tu web a una persona que pudiera interesarle tu producto.
Me encanta tu proyecto. Gracias por las explicaciones.

yo te dejo el mio !!! jajaja

buff cualquier ayuda q puedas darme para que algun dia consiga conectarme a mi OBD y leer datos con el arduino, estaria super agradecido !!!

un saludo.

He ampliado un poco más el FAQ, para entender bien lo sencillo que resulta usar bus CAN, y las tramas sofisticadas que son generadas transparentemente para el usuario en el bus gracias a los controladores hardware. A lo contrario de RS485, en el que hay que realizar todo ésto via soft.

Para ello, he conectado mi analizador lógico que me autoregalé para reyes :smiley: en el bus CAN entre dos Arduinos.
FAQ 14: SECUduino: FAQ

He explicado cada uno de los campos del mensaje, así como más imagenes de cada uno de los campos de un mensaje CAN estandar.

Espero que sea de utilidad.

Saludos

Igor R.

Gracias Igor. R por la info aportada.

Cual es el analizador logico que usas?

Un abrizo.

He usado Saleae.

:wink:

Hola,

Esta tarde, el amigo Gixxer ha conseguido comunicarse con su Focus (año 2007) a través de OBD usando el brick CAN Bus + librería.
Depués de unos cuantos intentos (yo haciendo de asistencia como podía desde internet), tiene un sketch funcional recibiendo las rpm del coche cada 10 milisegundos!!

Ha prometido grabar un video!!!

Pronto más información en http://secuduino.blogspot.com/

:wink:

Enorabuena por haberlo conseguido.

Salu2

Gracias!! :wink:

Por otro lado, m.alverman tiene su montaje con dos bricks CAN conectados a un MEGA y un UNO funcionando a una distancia de 15 metros a 1 Mbps => http://arduino.cc/forum/index.php/topic,54838.0.html

Igor R. a que distancia como maximo se puede usar 1Mbps.

Saludos.2

Lo recomendado en ambiente industrial es:

Longitud Bit Rate
25 metros 1000 kbit/s
50 metros 800 kbit/s
100 metros 500 kbit/s
250 metros 250 kbit/s
500 metros 125 kbit/s
1000 metros 50 kbit/s
2500 metros 20 kbit/s

Pero ésto es lo recomendado para ambientes "hostiles", en teoría puedes hasta 40 metros a 1 Mbps.

:wink:

Gracias por la info.

enorabuena Igor R lo estas haciendo muy bien, y solo he leído el hilo, espera que lea el blog XD

Me estas poniendo los dientes largos, eres un provocador ejejejejje

A parte del bus CAN que todavía estoy buscando por mis neuronas en que proyecto usarlo, (a lo mejor un display de sensores para hacerme uno de código abierto para el kart), me ha picado el poder sacar telemétrica del coche.

boy a leer tu blog, pero así a bote pronto, ¿sabría como sacar el consumo de un Hyundai Elantra del 2004 ? :wink:

Hola,

La verdad que no lo sé... hay que hacer un poco de investigación por la red :wink:
Existen diferentes protocolos OBD (PWM, VPW,ISO 9141-2,KWP2000 y ISO 15765 CAN) y depende del año, modelo, fabricante,...

Como ya dije en post anteriores, aunque no tengas como protocolo de diagnosis el CAN, no significa que el coche no tenga CAN para comunicarse entre las centralitas, aunque pasa a ser menos "fácil" sacar información.

También puedes mirar si en el conector OBD:

Si tienes los pines 6 y 14 (la resistencia entre ellos si existen debería ser 60 ohm). Esto te indicaría que tienes CAN de diagnosis.

Saludos

Igor R.