- Arduino и MCP2515 – интерфейс CAN для Arduino
- Arduino и MCP2515: принцип работы, подключение, схема, код
- Модуль MCP2515
- Схема подключения Arduino и MCP2515
- Код программы для взаимодействия Arduino и MCP2515
- CAN bus with Arduino Due
- Contents
- Configure your Arduino IDE
- Get CAN transceivers working
- Install GV-RET
- Add logging to SD card (optional)
- Start hacking
- Хакаем CAN шину авто. Виртуальная панель приборов
- CAN сниффер из Arduino Uno
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
- Приложение на телефон Виртуальная панель приборов
- 🌟 Видео
Arduino и MCP2515 – интерфейс CAN для Arduino
Видео:Трансиверы CAN шины TJA1050, MCP2551 как альтернатива RS485Скачать
Arduino и MCP2515: принцип работы, подключение, схема, код
CAN (Controlled Area Network) – это стандарт шины, который позволяет микроконтроллеру и его периферийным устройствам обмениваться данными без необходимости использования хост-устройства или компьютера. Протокол CAN, разработанный Robert Bosch GmbH, в основном используется в автомобилях для связи между блоком управления и его компонентами.
Например, блок управления двигателем является основным средством управления, используемым в автомобиле. Этот блок подключен ко многим датчикам и исполнительным механизмам, таким как механизмы контроля потока воздуха, давления, температуры, управления клапанами, двигатели для контроля воздуха и т. д. Связь между этими модулями и блоком управления осуществляется через шину CAN. В этом проекте мы узнаем о модуле контроллера CAN MCP2515, о том, как связать контроллер шины CAN MCP2515 с Arduino, и, наконец, о том, как обеспечить связь между двумя платами Arduino с помощью двух контроллеров CAN MCP2515 и самого протокола CAN.
Видео:Arduino CAN Monitor (простейший монитор шины CAN)Скачать
Модуль MCP2515
Контроллер шины CAN MCP2515 – это простой модуль, который поддерживает протокол CAN версии 2.0B и может использоваться для связи со скоростью 1 Мбит/с. Для того, чтобы настроить полную систему связи, вам потребуется два модуля шины CAN. Модуль, используемый в проекте, показан на рисунке ниже.
Этот конкретный модуль основан на ИС контроллера CAN MCP2515 и ИС приемопередатчика TJA1050. Микросхема MCP2515 представляет собой автономный контроллер CAN и имеет встроенный интерфейс SPI для связи с микроконтроллерами. Что касается микросхемы TJA1050, она действует как интерфейс между ИС контроллера MCP2515 и физической шиной CAN.
MCP2515 – это основной контроллер, который состоит из трех основных подкомпонентов: модуля CAN, логики управления и блока SPI. Модуль CAN отвечает за передачу и прием сообщений на шине CAN. Логика управления управляет настройкой и работой MCP2515, взаимодействуя со всеми блоками. Блок SPI отвечает за интерфейс связи SPI.
На следующем рисунке показана схема CAN-модуля MCP2515, а также показано, как микросхема MCP2515 и TJA1050 подключены к модулю.
Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать
Схема подключения Arduino и MCP2515
На следующем рисунке показана принципиальная схема подключения модуля CAN MCP2515 с Arduino и связь между двумя Arduino по протоколу CAN.
Видео:Универсальная плата CAN шиныСкачать
Код программы для взаимодействия Arduino и MCP2515
Прежде чем углубляться в код, вам необходимо скачать библиотеку для модуля MCP2515. Есть много библиотек, но здесь мы использовали эту: https://github.com/Seeed-Studio/CAN_BUS_Shield. Загрузите ее и поместите извлеченное содержимое в каталог библиотек Arduino. Поскольку сеть CAN включает в себя модуль передатчика и модуль приемника, код также делится на код передатчика и код приемника.
Работа этого проекта очень проста, так как вся работа выполняется библиотеками (SPI и CAN). Поскольку CAN является связью на основе сообщений, вам необходимо отправить сообщение в диапазоне от 0 до 8 байтов.
В этом проекте передатчик отправляет сообщение 1 1 2 3 0 5 6 7. Это сообщение передается по шине CAN, и получатель получает это сообщение, что отображается на его последовательном мониторе. Кроме того, 0-й и 4-й биты, то есть 1 и 0 в вышеуказанной последовательности, извлекаются приемником отдельно и включают и выключают светодиод, подключенный к контакту 2 платы Arduino.
Видео:Arduino Due - для тех, кто почувствовал, что классический контроллер уже не справляется с задачамиСкачать
CAN bus with Arduino Due
You can analyse CAN bus traffic using an Arduino Due.
You will need the following:
- An Arduino Due board
- Two SN65HVD230-based CAN transceivers
- An SPI Micro SD storage module (optional)
Видео:Arduino CAN Sender ( Ардуино отправка пакетов в КАН шину)Скачать
Contents
Видео:CanHacker из АрдуиноСкачать
Configure your Arduino IDE
Download and install the Arduino IDE on your computer
Tools -> Board -> Boards Manager. Type «due» in the search box and install «Arduino SAM Boards (32-bits ARM Cortex-M3)»
Connect your computer to the «native» USB port on the Arduino Due board with a USB cable. The Due has two USB ports and they’re used for different purposes.
Make sure your Arduino board is selected with Tools -> Board: «Arduino Due (Native USB port)»
File -> Examples -> 01.Basics -> Blink
Push the reset button on your Due. You should now see a blinking light. Congratulations! You’ve successfully compiled and loaded your first program and your IDE is working.
Видео:Программируемый контроллер Arduino DueСкачать
Get CAN transceivers working
The Due has two on-board CAN interfaces. However, the board lacks the necessary CAN transceivers to make then useful. You will need to add the transceivers yourself. You can find suitable 3.3V SN65HVD230-based CAN transceivers easily on eBay. They are very cheap. Unfortunately, not all of them work.
Читайте также: Шина n нулевая din рейку в корпусе 2 15
Initially, I tried tiny ones that look like this. They were all faulty.
I tried some bigger ones with screw terminals. These all worked perfectly.
Connect your transceivers to the Due board
The CAN0 interface is on the pins marked CANRX and CANTX
The CAN1 interface is on the pins marked DAC0 (RX) and 53 (TX)
Connect the CAN bus on the two transceivers together (CANL to CANL, CANH to CANH)
Connect your computer to the the «native» USB port on the Arduino Due board with a USB cable and make sure Tools -> Board: «Arduino Due (Native USB port)» is selected.
Tools -> Manage Libraries. Type «due_can» in the search box and install «due_can»
File -> Examples -> due_can -> CAN_ExtendedPingPong
If your CAN transceivers are working properly, you should be rewarded with incrementing numbers in the serial monitor window.
Видео:CanHacker из 2CAN модуля своими руками КанХакер подробно в деталяхСкачать
Install GV-RET
Once you’ve confirmed that your CAN transceivers are working, you can move on to installing the Generalized Electric Vehicle Reverse Engineering Tool (GV-RET). This software will allow your Due CAN transceivers to talk to SavvyCAN.
You need to install a number of libraries (in addition to the due_can library installed in the last section). These are all linked to on the GV-RET website, but a couple of them may not work properly if you install them via that method. I recommend you install the following via the Arduino IDE Library Manager with Tools -> Manage Libraries. :
Now install the remaining libraries manually. In each case, the installation procedure is:
- Download the .zip file
- Rename the file to remove «-master» or any other postfixes. This is important!
- Install the library with Sketch -> Include Library -> Add .ZIP Library. and select the file.
Once the libraries are all installed, you can install GV-RET. Go to the GitHub webpage, and click on Code -> Download .ZIP.
Expand the .zip file and put the folder in your Arduino sketchbook location. Open the GV-RET project and install it as follows:
If it doesn’t compile and complains about missing libraries or headers, check the folder names in the Library folder. Remove any «-master» suffixes from the folder names. The folder names should match the library names listed above.
If everything worked, you should be rewarded with the following messages in the serial console:
Resetting to factory defaults
Using stored values for digital toggling system
Running on CANDue hardware
11977 — ERROR: Could not initialize SDCard! No file logging will be possible!
Congratulations! Your Due is now a powerful CAN sniffer and injection tool. You can connect the CAN-H and CAN-L terminals of a CAN bus transceiver to the CAN bus in your vehicle.
Видео:Как CanHacker , но дешевле от CDEBYTEСкачать
Add logging to SD card (optional)
You may have noticed the error message about the SD card. If you have an SPI SD card storage module, your Due will log CAN traffic to this for later analysis. This is ideal if you don’t want to have to drive around with a laptop on the passenger seat.
The SD card module needs to be connected to the SPI header (in the middle of the Due board), plus one additional wire to data line 10.
The SD module can be a bit finicky. The GV-RET software defaults to running the SPI bus at 50MHz, but this didn’t work for me. So you will need to do a bit of tweaking to fix this.
First of all, check your SD card is working with File -> Examples -> SdFat -> QuickStart. Connect your Due to the Programming USB Port (not the Native USB Port) and upload the program. In the serial console, it will ask for the CS pin. Enter ’10’. You should see a little report in the serial console that shows it is working.
Читайте также: Датчик давления шин ручной
It may say you need to reformat your SD card. To do this, go to File -> Examples -> SdFat -> SdFormatter. Edit the source code to set the CS pin to 10 and limit SD clock speed to 4MHz:
Upload the program and follow the instructions to format your SD card.
Now go to your GVRET code. Add this line after the line ‘SdFat sd;’ :
Find the line ‘if (!sd.begin(SysSettings.SDCardSelPin, SPI_FULL_SPEED)) Open Connection Window
Add New Device Connection and select the USB connection you noted earlier
Check «Enable Bus» and set the Speed to match your CAN bus. 500000 is a good guess. You can always change it later.
After a few seconds, you should see «Connected» in the Status field. If it doesn’t connect, try pushing the reset button on your Due or click «Reset Selected Device» in SavvyCAN.
Видео:Arduino CAN Hacker, CAN Monitor, CAN Sender разбор вопросовСкачать
Start hacking
Feel free to add SavvyCAN examples here.
I will add something on my Ampera BMS (once I figure out an easy way to connect to the CAN bus. )
Видео:Как управлять автомобилем через CAN-шину?Скачать
Хакаем CAN шину авто. Виртуальная панель приборов
В первой статье «Хакаем CAN шину авто для голосового управления» я подключался непосредственно к CAN шине Comfort в двери своего авто и исследовал пролетающий траффик, это позволило определить команды управления стеклоподъемниками, центральным замком и др.
В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).
Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.
В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.
- CAN сниффер из Arduino Uno
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
Под катом полная реализация проекта, будет интересно!
Водительская дверь открыта
CAN сниффер из Arduino Uno
Чтобы послушать, что отправляет VCDS в CAN шину я собрал сниффер на макетке из Arduino и модуля MCP2515 TJA1050 Niren.
Схема подключения следующая:
Для прослушивания трафика использовал анализатор CanHackerV2 и прошивку arduino-canhacker для Arduino, которая реализует API совместимое с этой программой. Прошивка в гите https://github.com/autowp/arduino-canhacker.
CanHackerV2 позволяет смотреть пролетающий трафик, записывать и проигрывать команды с заданным интервалом, что очень сильно помогает в анализе данных.
Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
Описание VCDS с официального сайта ru.ross-tech.com:
Программно-аппаратный сканер VCDS предназначен для диагностики электронных систем управления, устанавливаемых на автомобилях группы VAG. Доступ ко всем системам: двигатель, ACP, АБС, климат-контроль, кузовая электроника и т.п., считывание и стирание кодов неисправностей, вывод текущих параметров, активация, базовые установки, адаптация, кодирование и т.п.
Читайте также: Шины дорожные что это летние
Подключив сниффер к линиям CAN_L и CAN_H в диагностическом шнурке я смог увидеть какие запросы делает VCDS и что отвечает авто.
Особенность авто группы VAG в том, что OBD2 разъем подключен к CAN шине через шлюз и шлюз не пропускает весь гуляющий по сети трафик, т.е. подключившись в OBD2 разъем сниффером вы ничего не увидите. Чтобы получить данные в OBD2 разъёме нужно отправлять шлюзу специальные запросы. Эти запросы и ответы видно при прослушивании трафика от VCDS. Например вот так можно получить пробег.
В VCDS можно получить информацию почти с любого датчика в машине. Меня в первую очередь интересовала информация, которой вообще нет на моей приборке, это:
- температура масла
- какая именно дверь открыта
Скорость, обороты, температура ОЖ, пробег, расход, место в баке и другие запросы я тоже получил, для справки размещу.
Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
В качестве аппаратной части я выбрал Raspberry Pi. Была идея использовать Android планшет, но показалось, что на Raspberry Pi будет проще и быстрее. В итоге докупил официальный 7″ дисплей, и сделал CAN шилд из модуля TJA1050 Niren.
OBD2 штекер использовал от старого ELM327 адаптера.
Используются контакты: CAN_L, CAN_H, +12, GND.
Тесты в машине прошли успешно и теперь нужно было все собрать. Плату дисплея, Raspberry Pi и блок питания разместил на куске черного пластика, очень удачно подобрал пластмассовые втулки, с ними ничего не болтается и надежно закреплено.
Местом установки выбрал бардачок на торпедо, которым я не пользуюсь. По примеркам в него как раз помещается весь бутерброд.
Напильником довел лист черного пластика до размера крышки бардачка, к нему прикрепил бутерброд и дисплей. Для прототипа сойдет, а 3D модель с крышкой для дисплея и всеми нужными крепежами уже в разработке.
Софт панели приборов на Python и Kivy (UI framework)
Параллельно со сборкой самой панели приборов я вел разработку приложения для отображения информации с датчиков. В самом начале я не планировал какой либо дизайн.
Первая версия панели приборов
По мере разработки решил визуализировать данные более наглядно. Хотел гоночный дизайн, а получилось, что-то в стиле 80-х.
Вторая версия панели приборов
Продолжив поиски более современного дизайна я обратил внимание какие цифровые приборки делают автопроизводители и постарался сделать что-то похожее.
Третья версия панели приборов
Ранее, я никогда не разрабатывал графические приложения под Linux поэтому не знал с чего начать. Вариант на вебе простой в разработке, но слишком много лишних компонентов: иксы, браузер, nodejs, хотелось быстрой загрузки. Попробовав Qt PySide2 я понял, что это займет у меня много времени, т.к. мало опыта. Остановился на Kivy — графический фреймворк для Python, простой в понимании с полной библиотекой графических элементов и дающий возможность быстро создать мобильный интерфейс.
Kivy позволяет запускать приложение без Иксов, прямо из консоли, в качестве рендера используется OpenGL. Благодаря этому полная загрузка системы может происходить за 10 секунд.
Алгоритм работы следующий, используется 3 потока:
- В главном потоке работаем с графическими элементы (спидометр, тахометр, часы, температуры и др) на экране
- Во втором потоке каждые 5 мс делаем опрос следующего датчика
- В третьем потоке слушаем CAN шину, получив ответ парсим его и обновляем соответствующий графический элемент
Работает стабильно, самый долгий процесс в разработке был связан с рисованием дизайна. На данный момент обкатываю решение и потихоньку пишу мобильное приложение для iOS, чтобы любой мог попробовать цифровую панель приборов.
Проект цифровой панель приборов открытый. Рад буду предложениям и комментариям!
Видео работы цифровой панели приборов на базе Raspberry Pi
Приложение на телефон Виртуальная панель приборов
Для телефона написал приложение — виртуальная панель приборов, данные от машины передаются через ELM327 Wi-Fi адаптер. Адаптер подключается в OBD2 разъем, делает запросы по CAN шине и возвращается ответы в приложение по Wi-Fi.
Приложение VAG Virtual Cockpit уже в AppStore. Пока, что только под iPhone/iPad, но Android версия планируется. Приложение решил сделать платным с минимальной символической стоимостью.
Если есть желание поддержать проект, то вот ссылка на приложение, принимаю любые замечания и предложения!
VAG Virtual Cockpit
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
- Правообладателям
- Политика конфиденциальности
🌟 Видео
Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED I2C, TJA 1020Скачать
CAN шина👏 Как это работаетСкачать
CAN Hacker своими руками пример чтения кан шины с помощью ARDUINO MCP2515Скачать
ESP32 CAN Monitor Обзор (простейший монитор шины CAN на ESP32)Скачать
Arduino CAN Sender ID 29bit (Ардуино отправка пакетов в КАН шину c 29bit CAN ID)Скачать
Arduino на максималках! Честный обзор Portenta H7. Надо брать?Скачать
Arduino CanHacker Lowicel (дружим Ардуино с программой CanHacker)Скачать
Arduino DUE - мощный микроконтроллер семейства Arduino - АнбоксингСкачать