Tutorial de Arduino: Comunicación Canbus con DHT11

Tutorial de Arduino: Comunicación Canbus con DHT11

diciembre 19, 2020

Arduino-Tutorial-Canbus-Comunicación-con-DHT11

1. Visión general

En este tutorial, aprenderemos cómo usar el código Arduino para implementar la comunicación CANBUS con el sensor DHT11. También usaremos un OLED en este proyecto, para que podamos mostrar la temperatura y la humedad en él.

2. Listas de materiales

2.1 Hardware:

2.2 Software:

  • Arduino IDE

3. Qué es CANBUS

3.1 Acerca de CAN

CAN (Controller Area Network) es una red de comunicación en serie que puede realizar un control distribuido en tiempo real. Está desarrollado para la industria automotriz para reemplazar el complejo mazo de cables con un bus de dos hilos.
El protocolo CAN define la capa de enlace de datos y parte de la capa física en el modelo OSI.
El protocolo CAN está estandarizado ISO con ISO11898 e ISO11519. ISO11898 es el estándar de comunicación de alta velocidad CAN con una velocidad de comunicación de 125kbps-1Mbps. ISO11519 es el estándar de comunicación de baja velocidad CAN con una velocidad de comunicación de menos de 125 kbps.
Qué es Canbus
Aquí nos centramos en el CAN de alta velocidad.
  • ISO-11898 describe cómo se pasa la información entre dispositivos en una red y se ajusta al modelo de interconexión de sistemas abiertos (OSI) que se define en términos de capas. La comunicación real entre dispositivos conectados por el medio físico está definida por la capa física del modelo.
    Qué-es-Canbus-1
  • Cada unidad CAN conectada al bus se puede llamar nodo. Todas las unidades CAN están conectadas a un bus terminado en cada extremo con resistencias de 120 Ω para formar una red. El autobús consta de CAN_H y CAN_L líneas. El controlador CAN determina el nivel del bus en función de la diferencia en el nivel de potencia en ambos cables. Los niveles de autobús se dividen en niveles dominantes y recesivos, que deben ser uno de ellos. El remitente envía el mensaje al receptor realizando un cambio en el nivel del bus. Cuando la línea lógica "y" se ejecuta en el bus, el nivel dominante es "0" y el nivel recesivo es "1".
  • En el estado dominante, el voltaje de CAN_H es de aproximadamente 3.5V y el voltaje de CAN_L es de aproximadamente 1.5V. En estado recesivo, el voltaje de ambas líneas es de alrededor de 2.5V.
  • La señal es diferencial, por eso CAN deriva su robusta inmunidad al ruido y tolerancia a fallos. La señal diferencial equilibrada reduce el acoplamiento de ruido y permite altas velocidades de señalización a través de un cable de par trenzado. La corriente en cada línea de señal es igual pero en la dirección opuesta y resulta en un efecto de cancelación de campo que es clave para las bajas emisiones de ruido. El uso de receptores diferenciales balanceados y cableado de par trenzado mejora el rechazo de modo común y la alta inmunidad al ruido de un bus CAN.

3.2 Transceptor CAN

El transceptor CAN es responsable de la conversión entre el nivel lógico y la señal física. Convertir una señal lógica a un nivel diferencial o una señal física a un nivel lógico.

3.3 Controlador CAN

El controlador CAN es el componente central de CAN, que realiza todas las funciones de la capa de enlace de datos en el protocolo CAN y puede resolver automáticamente el protocolo CAN.

3.4 MCU

El MCU es responsable del control del circuito de función y del controlador CAN. Por ejemplo, los parámetros del controlador CAN se inicializan cuando se inicia el nodo, la trama CAN se lee y se envía a través del controlador CAN, etc.

4. Comunicaciones CAN

Cuando el bus está inactivo, todos los nodos pueden comenzar a enviar mensajes (control multimaestro). El nodo que primero accede al bus obtiene el derecho de enviar (modo CSMA/CA). Cuando varios nodos comienzan a enviar al mismo tiempo, el nodo que envía el mensaje de ID de alta prioridad obtiene el derecho de enviar.
En el protocolo CAN, todos los mensajes se envían en un formato fijo. Cuando el bus está inactivo, todas las unidades conectadas al bus pueden comenzar a enviar nuevos mensajes. Cuando más de dos celdas comienzan a enviar mensajes al mismo tiempo, la prioridad se determina en función del identificador. El ID no representa la dirección de destino del envío, sino la prioridad del mensaje que accede al bus. Cuando más de dos celdas comienzan a enviar mensajes al mismo tiempo, cada bit de la identificación sin intereses se arbitra uno por uno. La unidad que gana el arbitraje puede continuar enviando mensajes, y la unidad que pierde el arbitraje inmediatamente deja de enviar y recibe el trabajo.
El bus CAN es un tipo de bus de difusión. Esto significa que todos los nodos pueden "escuchar" todas las transmisiones. Todos los nodos recogerán invariablemente todo el tráfico. El hardware CAN proporciona filtrado local para que cada nodo pueda reaccionar solo a los mensajes interesantes.

5. Marcos

Los dispositivos CAN envían datos a través de la red CAN en paquetes llamados tramas.

CAN tieneCuatroTipos de marcos:
  • Marco de datos: una trama que contiene datos de nodo para la transmisión
  • Marco remoto: una trama que solicita la transmisión de un identificador específico
  • Marco de error: una trama transmitida por cualquier nodo que detecta un error
  • Marco de sobrecarga: una trama para inyectar un retardo entre datos o trama remota

5.1 Marco de datos

Hay dos tipos de marcos de datos, estándar y extendido.
Canbus-Comunicación-Datos-Marcos.jpg
El significado de los campos de bits de la figura son:
  • SOF-- El bit de inicio de trama dominante único (SOF) marca el inicio del mensaje y se utiliza para sincronizar los nodos en un bus después de estar inactivo.
  • Identificador-- El identificador estándar CAN de 11 bits establece la prioridad del mensaje. Cuanto menor sea el valor binario, mayor será su prioridad.
  • RTR-- El bit único de solicitud de transmisión remota (RTR)
  • IDE-- Un bit dominante de extensión de identificador único (IDE) significa que se está transmitiendo un identificador CAN estándar sin extensión.
  • R0-- Bit reservado (para su posible uso en futuras modificaciones estándar).
  • DLC-- El código de longitud de datos (DLC) de 4 bits contiene el número de bytes de datos que se transmiten.
  • Datos-- Se pueden transmitir hasta 64 bits de datos de la aplicación.
  • CRC-- La comprobación de redundancia cíclica (CRC) de 16 bits (15 bits más delimitador) contiene la suma de comprobación (número de bits transmitidos) de los datos de la aplicación anterior para la detección de errores.
  • ACK-- ACK es de 2 bits, uno es el bit de reconocimiento y el segundo es un delimitador.
  • EF-- Este campo de fin de trama (EOF) de 7 bits marca el final de una trama CAN (mensaje) y deshabilita el relleno de bits, lo que indica un error de relleno cuando es dominante. Cuando 5 bits del mismo nivel lógico ocurren sucesivamente durante el funcionamiento normal, un bit del nivel lógico opuesto se rellena en los datos.
  • IFS-- Este espacio entre tramas (IFS) de 7 bits contiene el tiempo requerido por el controlador para mover una trama recibida correctamente a su posición correcta en un área de búfer de mensajes.

5.2 Arbitraje

En el estado inactivo del bus, la unidad que comienza a enviar el mensaje primero obtiene el envío correcto. Cuando varias unidades comienzan a enviar al mismo tiempo, cada unidad de envío comienza en la primera parte del segmento de arbitraje. La unidad con el mayor número de niveles dominantes de salida continua puede continuar enviando.

6. Velocidad y distancia de comunicación de Canbus

El bus CAN es un bus que conecta varias unidades al mismo tiempo. Teóricamente, no hay límite para el número total de unidades que se pueden conectar. En la práctica, sin embargo, el número de unidades que se pueden conectar está limitado por el retardo de tiempo en el bus y la carga eléctrica. Reduzca la velocidad de comunicación, aumente el número de unidades que se pueden conectar y aumente la velocidad de comunicación, el número de unidades que se pueden conectar disminuye.
La distancia de comunicación está inversamente relacionada con la velocidad de comunicación, y cuanto más larga es la distancia de comunicación, menor es la velocidad de comunicación. La distancia más larga puede ser de 1 km o más, pero la velocidad es inferior a 40 kps.
Canbus-Comunicación-Velocidad-y-Distancia

7. Maduino Zero Canbus de Makerfabs

Maduino-Zero CANBUS
El módulo Maduino Zero CAN-BUS es una herramienta desarrollada por Makerfabs para la comunicación CANbus, se basa en Arduino, con el controlador CAN y el transceptor CAN, para crear un puerto CAN-bus listo para usar.
Hardware-Canbus
  • MCP2515 es un controlador CAN independiente que implementa la especificación CAN. Es capaz de transmitir y recibir datos estándar y extendidos y tramas remotas.
  • El MAX3051 interactúa entre el controlador de protocolo CAN y los cables físicos de las líneas de bus en una red de área de controlador (CAN). El MAX3051 proporciona capacidad de transmisión diferencial al bus y capacidad de recepción diferencial al controlador CAN.

8. Conexión

Hardware-Connection-Canbus-DHT11-OLED
Conecte el módulo DHT11 al módulo Maduino Zero CAN-BUS con cables que se utilizarán como instrumento para apoyar la comunicación CAN. Del mismo modo, conecte la pantalla al módulo para recibir los datos y mostrarlos.
La conexión entre Maduino Zero CANBUS y DHT11:
Maduino Zero CANBUS -- DHT11
3v3 ------ VCC
GND ------ GND
D10 ------ DATOS
La conexión entre Maduino Zero CANBUS y OLED:
Maduino Zero CANBUS -- OLED
3v3 ------ VCC
GND ------ GND
SCL ------ SCL
ASD ------ ASD
Utilice un cable DB9 para conectar los dos módulos Maduino Zero CANBUS.

9. Código

El MAX3051 completa la conversión de niveles diferenciales a señales lógicas. El MCP2515 completa la función CAN como la codificación y decodificación de datos. El MCU solo necesita inicializar el controlador y enviar y recibir datos.
  • Después de instalar Arduino, no hay ningún paquete para soportar la placa (Arduino cero) que se necesita instalar.
  • Seleccione herramientas --> Board --> Board Manager, busque "Arduino zero" e instale "Arduino SAMD Boards".
  • Seleccione Herramientas --> Placa --> Arduino Zero (Puerto USB nativo), seleccione Herramientas --> Puerto --> com...
  • Después de obtener el programa de GitHub, debe asegurarse de que todos los archivos estén en el directorio del proyecto, que contiene archivos de biblioteca que admiten CANBUS.
  • Instale la biblioteca de sensores DHT de Adafruit, que se utiliza para impulsar la DHT11 para obtener temperatura y humedad.
  • Utilice diferentes direcciones para enviar la temperatura y la humedad por separado en el código Test_DHT11.ino.
CAN.sendMsgBuf(0x10, 0, stmp1.length(), stmp_send1);
retraso(500);
CAN.sendMsgBuf(0x11, 0, stmp2.length(), stmp_send2);
retraso(500);
"0x10" significa el ID del mensaje, "0" significa marco estándar, "stmp1.length()" significa la longitud del mensaje, "stmp_send1" son los datos enviados.
  • En el códigoTest_OLED.ino, todos los mensajes en el CANBUS se reciben por consulta y la información requerida se muestra en el OLED.
  • Sube el programaMaduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.inoal módulo que se conectó al sensor, y Cargue el programaMaduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.inoa otro módulo que se conectó al OLED.

10. Resultado

Resultl-Canbus-Comunicación-con-DHT11Resultl-Canbus-Comunicación-con-DHT11-1

Encienda los dos módulos, la temperatura y la humedad se mostrarán en la pantalla.
Si tiene más preguntas basadas en este proyecto canbus, o si necesita algunasservicio PCBA personalizadobasado en esas soluciones Maduino IoT, no dude en hacérnoslo saber, pls contactoservice@makerfabs.com.fresco

Contáctenos