Емулятор CAN-шини для приладової панелі Mazda RX-8 (стенд/тестування панелі окремо від автомобіля). Формує HS-CAN фрейми, які кластер очікує від ECU/BCM, та дозволяє керувати показами (оберти, швидкість, температура, індикатори) через Serial-консоль.
- Arduino Nano v3 (або сумісний, ATmega328)
- Модуль MCP2515 (CAN-контролер) + TJA1050/подібний трансивер
- Термінуючий резистор 120 Ом між CAN_H і CAN_L
| MCP2515 | Arduino Nano |
|---|---|
| VCC | 5V |
| GND | GND |
| SCK | D13 |
| SI (MOSI) | D11 |
| SO (MISO) | D12 |
| CS | D10 |
| INT | D2 (INT0) |
| Пін кластера | Сигнал |
|---|---|
| A3 (B/Y) | +12V Ignition (ключ) |
| A4 (B) | GND |
| B3 (Lav) | CAN_H |
| B4 (G/B) | CAN_L |
HS-CAN, 500 kbps, 11-bit Standard ID. Кристал на більшості китайських модулів MCP2515 — 8 МГц (MCP_8MHZ); якщо на платі вказано 16 МГц — змінити на MCP_16MHZ у setup().
| ID | Період | Вміст |
|---|---|---|
| 0x201 | 100 мс | RPM (byte 0-1, big-endian, RPM*4), byte2 = 0x40 (offset), Speed (byte 4-5, big-endian, (speed_kmh+99)*100) |
| 0x420 | 100 мс | Температура ОЖ (byte0 = T°C+40), одометр (byte1, змінюється при перемиканні 0xEF↔0xDF), індикатори oil/MIL/coolant/battery (byte4-6) |
| 0x300 | 100 мс | EPS/Steering Warning (byte0, bit7); в оригіналі кластер очікує цей фрейм раз на 500 мс, тут спрощено до 100 мс |
| 0x212 | 100 мс | ABS Warning, DSC OFF, ручник (byte3-4); в оригіналі — 500 мс |
| 0x650 | 100 мс | Cruise Control (byte0: 0x00 вимк / 0x40 зелений / 0x80 жовтий) |
Одометр: кластер реагує не на значення байта, а на факт його зміни. Кожне перемикання 0xEF↔0xDF = +100 м пробігу (33 перемикання = +1 одиниця одометра, тобто 0.1 км).
0x430— статус кластера; byte[0-2] =FF FF FFозначає, що кластер не бачить аналоговий датчик рівня палива (очікувано за відсутності підключення).
- 0x420 byte[2] і byte[3] — призначення не встановлено; є гіпотеза про fine-adjust температури ОЖ.
- У діапазоні приблизно 70–110°C стрілка температури не рухається ("мертва зона") — причина ще не з'ясована.
Швидкість порту: 115200 бод. Формат команди: ключ=значення\n.
rpm=3000
speed=80
temp=90
mil=1
| Ключ | Опис |
|---|---|
rpm |
оберти двигуна, об/хв (0..9000) |
speed |
швидкість, км/год (0..300) |
temp |
температура ОЖ, °C |
mil |
Check Engine: 0=вимк, 1=горить, 2=блимає |
oil |
стрілка тиску масла: 0/1 |
oil_low |
індикатор низького рівня масла: 0/1 |
coolant_low |
індикатор низького рівня ОЖ: 0/1 |
battery |
індикатор низького заряду АКБ: 0/1 |
handbrake |
індикатор ручного гальма: 0/1 |
abs_warn |
індикатор ABS: 0/1 |
dsc_off |
індикатор DSC OFF: 0/1 |
steering |
індикатор попередження EPS: 0/1 |
cruise |
Cruise Control: 0=вимк, 1=зелений, 2=жовтий |
Обов'язково використовувати бібліотеку autowp/arduino-mcp2515 саме з цього архіву:
https://github.com/autowp/arduino-mcp2515/archive/master.zip
- Завантажити zip за посиланням вище.
- Sketch → Include Library → Add .ZIP Library... → обрати завантажений файл
(або розпакувати вручну в
Documents/Arduino/libraries/arduino-mcp2515-master). - Відкрити
rx8_cluster/rx8_cluster.ino. - Обрати плату Arduino Nano (та відповідний процесор/бутлоадер за потреби).
- Завантажити скетч.
У репозиторії є platformio.ini, де залежність вже прописана саме на цей zip
(lib_deps = https://github.com/autowp/arduino-mcp2515/archive/master.zip),
а не на PlatformIO Registry — щоб збірка була відтворюваною і не «розʼїжджалась»
з майбутніми змінами бібліотеки:
pio run
pio run --target upload
Проєкт призначений для тестування/стендової роботи з приладовою панеллю окремо від автомобіля. Підключення до реального CAN-контуру працюючого авто не тестувалося і не рекомендується без розуміння наслідків для інших блоків, що сидять на тій самій шині.
MIT — див. LICENSE.