Houmous Cost
Published © GPL3+

CAN Bus Using Arduino

We implement CAN Bus communication with MCP2515 module to communicate between two Arduino for sending temperature data from DHT

IntermediateShowcase (no instructions)1 hour871
CAN Bus Using Arduino

Things used in this project

Hardware components

Arduino UNO & Genuino UNO
Arduino UNO & Genuino UNO
×1
Arduino Nano R3
Arduino Nano R3
×1
Microchip Technology MCP2515
×2
DHT11 Temperature & Humidity Sensor (4 pins)
DHT11 Temperature & Humidity Sensor (4 pins)
×1
Breadboard (generic)
Breadboard (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×20

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

CAM Bus Circuit

For Transmitter (Arduino 1)
MCP2515 Module / DHT Sensor -> Arduino Nano
MPC2515 – VCC -> +5V
MPC2515 – GND -> GND
MPC2515 – CS -> D10 (SPI_SS)
MPC2515 – SO -> D12 (SPI_MISO)
MPC2515 - S I -> D11 (SPI_MOSI)
MPC2515­ – SCK -> D13 (SPI_SCK)
MPC2515 – INT -> D2
DHT11 – VCC -> +5V
DHT11 – GND -> GND
DHT11­ – OUT -> A0

For Receiver (Arduino 2)
MCP2515 Module -> Arduino Uno
VCC -> +5V
GND -> GND
CS -> 10 (SPI_SS)
SO -> 12 (SPI_MISO)
SI -> 11 (SPI_MOSI)
SCK -> 13 (SPI_SCK)
INT -> 2

Between two MCP2515
MCP2515 on Arduino Nano (Arduino 1) -> MCP2515 on Arduino Nano (Arduino 2)
H -> H
L -> L

Code

Transmitter

C/C++
#include <SPI.h> //Library for using SPI Communication
#include <mcp2515.h> //Library for using CAN Communication
#include <DHT.h> //Library for using DHT sensor
#define DHTPIN A0
#define DHTTYPE DHT11

struct can_frame canMsg;
MCP2515 mcp2515(10);
DHT dht(DHTPIN, DHTTYPE); //initialize object dht for class DHT with DHT pin with STM32 and DHT type as DHT11

void setup(){
  while (!Serial);
  Serial.begin(9600);
  SPI.begin(); //Begins SPI communication
  dht.begin(); //Begins to read temperature & humidity sensor value
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
  mcp2515.setNormalMode();
}

void loop(){
  int h = dht.readHumidity(); //Gets Humidity value
  int t = dht.readTemperature(); //Gets Temperature value
  canMsg.can_id = 0x036; //CAN id as 0x036
  canMsg.can_dlc = 8; //CAN data length as 8
  canMsg.data[0] = h; //Update humidity value in [0]
  canMsg.data[1] = t; //Update temperature value in [1]
  canMsg.data[2] = 0x00; //Rest all with 0
  canMsg.data[3] = 0x00;
  canMsg.data[4] = 0x00;
  canMsg.data[5] = 0x00;
  canMsg.data[6] = 0x00;
  canMsg.data[7] = 0x00;
  mcp2515.sendMessage(&canMsg); //Sends the CAN message
  delay(1000);
}

Receiver

C/C++
#include <SPI.h> //Library for using SPI Communication 
#include <mcp2515.h> //Library for using CAN Communication

struct can_frame canMsg; 
MCP2515 mcp2515(10); // SPI CS Pin 10 

void setup() {
  SPI.begin();   //Begins SPI communication
  Serial.begin(9600); //Begins Serial Communication at 9600 baud rate 
  mcp2515.reset();                          
  mcp2515.setBitrate(CAN_50KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz 
  mcp2515.setNormalMode();  //Sets CAN at normal mode
}

void loop(){
 if ((mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) && (canMsg.can_id == 0x036)){
     int x = canMsg.data[0];         
     int y = canMsg.data[1];  
     Serial.print("Kelembaban: ");
     Serial.print(x);
     Serial.print(" Suhu: ");
     Serial.println(y);      
   }
}

Credits

Maurizfa (13216008) / Arthur Jogy (13216037) / Agha Maretha (13216095)

Posted by Houmous Cost

Comments