Arduino β€” это Π½Π΅ просто ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для Ρ€Π°Π΄ΠΈΠΎΠ»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π° ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ автомобиля. Π‘ Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ систСмы ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π°ΠΆΠ΅ бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΡˆΡ‚Π°Ρ‚Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ практичСскиС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ β€” ΠΎΡ‚ простых ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π΄ΠΎ слоТных систСм управлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Arduino Nano ΠΈΠ»ΠΈ Uno ΠΊ Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠΉ сСти автомобиля, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для считывания Π΄Π°Π½Π½Ρ‹Ρ… с двигатСля, ΠΈ ΠΊΠ°ΠΊ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ устройство Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ скачках напряТСния. ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ протСстированы Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… автомобилях ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ 12Π’/24Π’ Π±ΠΎΡ€Ρ‚ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ. НС трСбуСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ элСктроники β€” достаточно Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π½Π°Π²Ρ‹ΠΊΠΎΠ² ΠΏΠ°ΠΉΠΊΠΈ ΠΈ умСния ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°: Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для старта

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ оборудования. Π‘Π΅Π· Π½Π΅Π³ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ схСмы Π½Π΅ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ”Ή Arduino Nano ΠΈΠ»ΠΈ Uno (Π»ΡƒΡ‡ΡˆΠ΅ Nano β€” ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅ ΠΈ дСшСвлС)
  • πŸ”Ή Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ питания: LM2596 (ΠΏΠΎΠ½ΠΈΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с 12Π’ Π΄ΠΎ 5Π’)
  • πŸ”Ή ΠœΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΏΠ»Π°Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° "ΠΏΠ°ΠΏΠ°-ΠΌΠ°ΠΌΠ°"
  • πŸ”Ή Набор рСзисторов (особСнно 220 Ом ΠΈ 10 кОм)
  • πŸ”Ή Π”ΠΈΠΎΠ΄Ρ‹ 1N4007 (для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ напряТСния)

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŽ понадобится:

  • πŸ”Œ Π Π°Π·ΡŠΡ‘ΠΌ OBD-II (Ссли Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с CAN-шиной)
  • πŸ”Œ ΠšΠ»Π΅ΠΌΠΌΡ‹ "ΠΌΠ°ΠΌΠ°" для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΠΏΡ€ΠΈΠΊΡƒΡ€ΠΈΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ аккумулятору
  • πŸ”Œ ВСрмоусадочная Ρ‚Ρ€ΡƒΠ±ΠΊΠ° (для изоляции соСдинСний)
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Никогда Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Arduino Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊ 12Π’ Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠΉ сСти Π±Π΅Π· стабилизатора. ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ сгорит ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ LM2596 ΠΈΠ»ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ пСрСнапряТСния.

Для программирования:

  • πŸ’» Arduino IDE (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта)
  • πŸ’» Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: CAN-BUS (Ссли Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с шиной), OneWire (для Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹), LiquidCrystal_I2C (для дисплССв)
πŸ“Š Какой Ρƒ вас ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Arduino?
Новичок, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ
Π‘ΠΎΠ±ΠΈΡ€Π°Π» простыС схСмы
ΠžΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΏΠΈΡˆΡƒ скСтчи сам
ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π», Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ устройства

2. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Если Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Arduino, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с этих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Они Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ основы взаимодСйствия с Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΉ элСктрикой.

2.1. Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ напряТСния аккумулятора

ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ напряТСниС Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠΉ сСти Π½Π° LED-ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ ΠΈΠ»ΠΈ нСбольшом экранС. ПолСзно для контроля заряда аккумулятора, особСнно Π·ΠΈΠΌΠΎΠΉ.

НСобходимыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ”‹ Arduino Nano
  • πŸ”‹ ΠœΠΎΠ΄ΡƒΠ»ΡŒ TM1637 (4-разрядный LED-дисплСй)
  • πŸ”‹ Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ напряТСния (рСзисторы 10 кОм ΠΈ 2.2 кОм)

Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ напряТСния ΠΊ A0 (Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄).
  2. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ TM1637 с Arduino ΠΏΠΎ схСмС: CLK β†’ D2, DIO β†’ D3.
  3. ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅ 5Π’ Π±Π΅Ρ€ΠΈΡ‚Π΅ со стабилизатора LM2596.

Код для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:

#include 

const int analogPin = A0;

const int CLK = 2;

const int DIO = 3;

TM1637Display display(CLK, DIO);

void setup() {

display.setBrightness(7);

}

void loop() {

int sensorValue = analogRead(analogPin);

float voltage = sensorValue (5.0 / 1023.0) 3.0; // ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ дСлитСля

display.showNumberDec(voltage, false);

delay(1000);

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если напряТСниС Π½Π° аккумуляторС ΡƒΠΏΠ°Π»ΠΎ Π½ΠΈΠΆΠ΅ 11.8Π’, это ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ разряда. НСмСдлСнно зарядитС ΠΠšΠ‘ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

2.2. Π‘ΠΈΠ³Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ

Π—Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ ΠΈ свСтовой сигнал, Ссли Π΄Π²Π΅Ρ€ΡŒ ΠΈΠ»ΠΈ Π±Π°Π³Π°ΠΆΠ½ΠΈΠΊ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€ΠΈΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π΅Π²ΠΈΠΊΠΎΠ² (ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄Π²Π΅Ρ€Π΅ΠΉ).

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸšͺ Arduino Nano
  • πŸšͺ ΠŸΡŒΠ΅Π·ΠΎΠΈΠ·Π»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ (Π·ΡƒΠΌΠΌΠ΅Ρ€)
  • πŸšͺ Вранзистор 2N2222 (для управлСния Ρ€Π΅Π»Π΅)
  • πŸšͺ Π Π΅Π»Π΅ 5Π’ (Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»Π°ΠΌΠΏΠΎΠΉ)

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅Π²ΠΈΠΊΠΈ Π΄Π²Π΅Ρ€Π΅ΠΉ ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ Π²Ρ…ΠΎΠ΄Π°ΠΌ Arduino (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, D4-D7).
  2. Если хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π²Ρ…ΠΎΠ΄ Π² состоянии LOW (Π΄Π²Π΅Ρ€ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π°), Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Π·ΡƒΠΌΠΌΠ΅Ρ€ Π½Π° 3 сСкунды.
  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ delay(60000), Ρ‡Ρ‚ΠΎΠ±Ρ‹ сигнал Π½Π΅ повторялся слишком часто.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π»ΠΈ всС ΠΊΠΎΠ½Ρ†Π΅Π²ΠΈΠΊΠΈ ΠΊ Arduino?

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ минус для всСх Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ²?

УстановлСн Π»ΠΈ Π΄ΠΈΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ° Π½Π° Ρ€Π΅Π»Π΅?

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ Π»ΠΈ Π²Ρ‹ ΠΊΠΎΠ΄ Π½Π° ΠΌΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅?

-->

3. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ срСднСй слоТности

Π­Ρ‚ΠΈ устройства ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° настройку, Π½ΠΎ Π΄Π°Π΄ΡƒΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ Π² эксплуатации автомобиля. НапримСр, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ двигатСля ΠΈΠ»ΠΈ автоматизация освСщСния.

3.1. Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΎΠΌΠ΅Ρ‚Ρ€ для двигатСля

ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ ΠΎΡ…Π»Π°ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ Тидкости Π½Π° OLED-экранС. МоТно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌΡƒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΡƒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ DS18B20.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • 🌑️ Arduino Nano
  • 🌑️ Π”Π°Ρ‚Ρ‡ΠΈΠΊ DS18B20 (Π²ΠΎΠ΄ΠΎΠ½Π΅ΠΏΡ€ΠΎΠ½ΠΈΡ†Π°Π΅ΠΌΡ‹ΠΉ)
  • 🌑️ ДисплСй OLED 128x64 (I2C)
  • 🌑️ РСзистор 4.7 кОм (для подтяТки Π»ΠΈΠ½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…)

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • Π”Π°Ρ‚Ρ‡ΠΈΠΊ DS18B20 ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ D2 с подтяТкой ΠΊ 5Π’ Ρ‡Π΅Ρ€Π΅Π· рСзистор.
  • ДисплСй соСдиняСтся ΠΏΠΎ I2C: SCL β†’ A5, SDA β†’ A4.
  • Для ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ (сравнитС показания).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

#include 

#include

#include

#include

#include

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

Adafruit_SSD1306 display(128, 64, &Wire, -1);

void setup() {

sensors.begin();

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

}

void loop() {

sensors.requestTemperatures();

float tempC = sensors.getTempCByIndex(0);

display.clearDisplay();

display.setTextSize(2);

display.setCursor(0,0);

display.print("Temp: ");

display.print(tempC);

display.print(" C");

display.display();

delay(1000);

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 105Β°C, Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ остановитС Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΈΡΠΏΡ€Π°Π²Π½ΠΎΡΡ‚ΡŒ тСрмостата ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠΏΡ‹.
πŸ’‘

Для точности помСститС Π΄Π°Ρ‚Ρ‡ΠΈΠΊ DS18B20 Π² ΠΌΠ΅Ρ‚Π°Π»Π»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π³ΠΈΠ»ΡŒΠ·Ρƒ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π΅Ρ‘ Π½Π° ΠΏΠ°Ρ‚Ρ€ΡƒΠ±ΠΊΠ΅ систСмы охлаТдСния рядом со ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ.

3.2. АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ подсвСткой салона

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ свСт Π² салонС ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π΄Π²Π΅Ρ€ΠΈ ΠΈ постСпСнно гасит Π΅Π³ΠΎ послС закрытия. МоТно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с RGB-Π»Π΅Π½Ρ‚ΠΎΠΉ для создания атмосфСрного освСщСния.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ’‘ Arduino Nano
  • πŸ’‘ ΠœΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π΅Π»Π΅ 5Π’ (для управлСния Π»Π°ΠΌΠΏΠΎΠΉ)
  • πŸ’‘ Вранзистор IRLZ44N (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ LED-Π»Π΅Π½Ρ‚Ρƒ)
  • πŸ’‘ ΠšΠΎΠ½Ρ†Π΅Π²ΠΈΠΊΠΈ Π΄Π²Π΅Ρ€Π΅ΠΉ (ΡˆΡ‚Π°Ρ‚Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅)

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ любой Π΄Π²Π΅Ρ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ подсвСтка Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ ΡΡ€ΠΊΠΎΡΡ‚ΡŒ.
  2. ПослС закрытия всСх Π΄Π²Π΅Ρ€Π΅ΠΉ ΡΡ€ΠΊΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π²Π½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 10 сСкунд.
  3. Если Π΄Π²Π΅Ρ€ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° дольшС 3 ΠΌΠΈΠ½ΡƒΡ‚, свСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ энСргосбСрСТСния (ΠΌΠΈΠ³Π°Π½ΠΈΠ΅).

Код для ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ затухания:

const int doorPins[] = {4, 5, 6, 7}; // ΠŸΠΈΠ½Ρ‹ ΠΊΠΎΠ½Ρ†Π΅Π²ΠΈΠΊΠΎΠ²

const int ledPin = 9; // PWM-пин для LED

int brightness = 0;

unsigned long previousMillis = 0;

void setup() {

for (int i = 0; i < 4; i++) {

pinMode(doorPins[i], INPUT_PULLUP);

}

pinMode(ledPin, OUTPUT);

}

void loop() {

bool anyDoorOpen = false;

for (int i = 0; i < 4; i++) {

if (digitalRead(doorPins[i]) == LOW) {

anyDoorOpen = true;

break;

}

}

if (anyDoorOpen) {

brightness = 255;

analogWrite(ledPin, brightness);

previousMillis = millis();

} else {

unsigned long currentMillis = millis();

if (currentMillis - previousMillis <= 10000) { // 10 сСкунд Π½Π° Π·Π°Ρ‚ΡƒΡ…Π°Π½ΠΈΠ΅

brightness = map(currentMillis - previousMillis, 0, 10000, 255, 0);

brightness = constrain(brightness, 0, 255);

analogWrite(ledPin, brightness);

} else {

analogWrite(ledPin, 0);

}

}

}

4. Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ…

Π­Ρ‚ΠΈ устройства Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π½Π°Π½ΠΈΠΉ CAN-ΡˆΠΈΠ½Ρ‹, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² ΡˆΡ‚Π°Ρ‚Π½ΡƒΡŽ элСктрику автомобиля. Но Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ стоит усилий.

4.1. Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с CAN-ΡˆΠΈΠ½Ρ‹

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ со всСх Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² автомобиля: ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΎΠ±ΠΎΡ€ΠΎΡ‚Ρ‹ двигатСля, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° ΠΈ Ρ‚.Π΄. Для этого понадобится ΠΌΠΎΠ΄ΡƒΠ»ΡŒ CAN-BUS Shield ΠΈΠ»ΠΈ MCP2515.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ“‘ Arduino Uno (Π»ΡƒΡ‡ΡˆΠ΅ Mega для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ большСго ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…)
  • πŸ“‘ ΠœΠΎΠ΄ΡƒΠ»ΡŒ MCP2515 с трансивСром TJA1050
  • πŸ“‘ ДисплСй Nextion ΠΈΠ»ΠΈ TFT 3.5" для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ CAN-шинС:

  1. НайдитС Ρ€Π°Π·ΡŠΡ‘ΠΌ OBD-II (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ Ρ€ΡƒΠ»Ρ‘ΠΌ).
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ CAN-H ΠΈ CAN-L ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌ модуля MCP2515.
  3. ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅ 12Π’ Π±Π΅Ρ€ΠΈΡ‚Π΅ с прикуриватСля Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для чтСния скорости:

#include 

#include

MCP2515 mcp2515(10); // CS-ΠΏΠΈΠ½

void setup() {

Serial.begin(115200);

mcp2515.reset();

mcp2515.setBitrate(CAN_500KBPS);

mcp2515.setNormalMode();

}

void loop() {

struct can_frame canMsg;

if (mcp2515.readMessage(&canMsg) == MCP2515_OK) {

if (canMsg.can_id == 0x200) { // ID сообщСния со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ (зависит ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π°Π²Ρ‚ΠΎ)

int speed = canMsg.data[0];

Serial.print("Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: ");

Serial.print(speed);

Serial.println(" ΠΊΠΌ/Ρ‡");

}

}

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: НС всС Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ стандартныС CAN-ID для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Для дСкодирования ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ SavvyCAN ΠΈΠ»ΠΈ CANalyze.
Как Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ CAN-ID?

Для опрСдСлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² сообщСний:

1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Arduino с MCP2515 ΠΊ OBD-II.

2. ЗапуститС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ всСх сообщСний Π² Serial Monitor.

3. НаТмитС Π½Π° пСдаль Π³Π°Π·Π° ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π½ΠΈΠΊ β€” Ρ‚Π°ΠΊ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ сообщСния, связанныС с этими событиями.

4. Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ CAN-ID ΠΈ Π±Π°ΠΉΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

4.2. БистСма контроля давлСния Π² ΡˆΠΈΠ½Π°Ρ… (TPMS)

БамодСльная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ бСспроводныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ NRF24L01 для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с колёс Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸš— 4 Γ— Arduino Pro Mini (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° колСсо)
  • πŸš— 4 Γ— Π”Π°Ρ‚Ρ‡ΠΈΠΊ давлСния MPX5700 ΠΈΠ»ΠΈ HSCMRRN001PDAA3
  • πŸš— 4 Γ— ΠœΠΎΠ΄ΡƒΠ»ΡŒ NRF24L01 (ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ)
  • πŸš— 1 Γ— Arduino Nano (ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ Π² салонС)
  • πŸš— ДисплСй LCD 1602 ΠΈΠ»ΠΈ OLED

Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. Π”Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Π½Π° колёсах ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 5 сСкунд.
  2. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ€Π°Π΄ΠΈΠΎ Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ.
  3. ΠŸΡ€ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ давлСния Π½ΠΈΠΆΠ΅ 1.8 Π±Π°Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал.

Код для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° (Π½Π° колСсС):

#include 

#include

#include

RF24 radio(7, 8); // CE, CSN

const byte address[6] = "00001";

void setup() {

radio.begin();

radio.openWritingPipe(address);

radio.setPALevel(RF24_PA_MIN);

radio.stopListening();

}

void loop() {

float pressure = analogRead(A0) * 0.00488; // ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ADC Π² Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅

radio.write(&pressure, sizeof(pressure));

delay(5000);

}

Код для ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠ° (Π² салонС):

#include 

#include

#include

#include

RF24 radio(7, 8);

const byte address[6] = "00001";

LiquidCrystal_I2C lcd(0x27, 16, 2);

float pressures[4] = {0};

void setup() {

radio.begin();

radio.openReadingPipe(0, address);

radio.setPALevel(RF24_PA_MIN);

radio.startListening();

lcd.init();

lcd.backlight();

}

void loop() {

if (radio.available()) {

float pressure;

radio.read(&pressure, sizeof(pressure));

// Π—Π΄Π΅ΡΡŒ Π»ΠΎΠ³ΠΈΠΊΠ° опрСдСлСния, с ΠΊΠ°ΠΊΠΎΠ³ΠΎ колСса ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅

// и запись в массив pressures[]

}

lcd.clear();

for (int i = 0; i < 4; i++) {

lcd.setCursor(0, i/2);

lcd.print("T");

lcd.print(i+1);

lcd.print(":");

lcd.print(pressures[i], 1);

lcd.print("bar");

}

delay(1000);

}

πŸ’‘

Для Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ измСрСния давлСния Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²Π°Ρ‚ΡŒ. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ показания с ΠΌΠ°Π½ΠΎΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ извСстном Π΄Π°Π²Π»Π΅Π½ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 2.0 Π±Π°Ρ€) ΠΈ подстройтС коэффициСнты Π² ΠΊΠΎΠ΄Π΅.

5. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ для бСзопасности

Устройства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ ΠΎΡ‚ ΡƒΠ³ΠΎΠ½Π° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹Π΅ ситуации. НапримСр, ΠΈΠΌΠΌΠΎΠ±ΠΈΠ»Π°ΠΉΠ·Π΅Ρ€ Π½Π° основС Arduino ΠΈΠ»ΠΈ систСма оповСщСния ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ.

5.1. Π˜ΠΌΠΌΠΎΠ±ΠΈΠ»Π°ΠΉΠ·Π΅Ρ€ с RFID-ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ запуск двигатСля, Ссли рядом Π½Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ RC522 для считывания RFID-ΠΊΠ°Ρ€Ρ‚.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ” Arduino Nano
  • πŸ” ΠœΠΎΠ΄ΡƒΠ»ΡŒ RC522
  • πŸ” Π Π΅Π»Π΅ 5Π’ (для Ρ€Π°Π·Ρ€Ρ‹Π²Π° Ρ†Π΅ΠΏΠΈ заТигания)
  • πŸ” RFID-ΠΊΠ°Ρ€Ρ‚Π° ΠΈΠ»ΠΈ Π±Ρ€Π΅Π»ΠΎΠΊ

Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ RC522 ΠΊ Arduino: SDA β†’ D10, SCK β†’ D13, MOSI β†’ D11, MISO β†’ D12.
  2. Π Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊ D8 ΠΈ Π²Ρ€Π°Π·Ρ€Ρ‹Π² ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°, ΠΈΠ΄ΡƒΡ‰Π΅Π³ΠΎ Π½Π° Π·Π°ΠΌΠΎΠΊ заТигания (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, +12Π’ Π½Π° ΠΊΠ°Ρ‚ΡƒΡˆΠΊΡƒ).
  3. Π—Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ UID вашСй ΠΌΠ΅Ρ‚ΠΊΠΈ Π² скСтч.

Код ΠΈΠΌΠΌΠΎΠ±ΠΈΠ»Π°ΠΉΠ·Π΅Ρ€Π°:

#include 

#include

#define SS_PIN 10

#define RST_PIN 9

#define RELAY_PIN 8

MFRC522 mfrc522(SS_PIN, RST_PIN);

byte authorizedUID[4] = {0xA1, 0xB2, 0xC3, 0xD4}; // Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° UID вашСй ΠΊΠ°Ρ€Ρ‚Ρ‹

void setup() {

SPI.begin();

mfrc522.PCD_Init();

pinMode(RELAY_PIN, OUTPUT);

digitalWrite(RELAY_PIN, LOW); // По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·ΠΎΠΌΠΊΠ½ΡƒΡ‚

}

void loop() {

if (!mfrc522.PICC_IsNewCardPresent()) {

return;

}

if (!mfrc522.PICC_ReadCardSerial()) {

return;

}

bool isAuthorized = true;

for (byte i = 0; i < 4; i++) {

if (mfrc522.uid.uidByte[i] != authorizedUID[i]) {

isAuthorized = false;

break;

}

}

if (isAuthorized) {

digitalWrite(RELAY_PIN, HIGH); // Π—Π°ΠΌΡ‹ΠΊΠ°Π΅ΠΌ Ρ€Π΅Π»Π΅

delay(5000); // Π”Π΅Ρ€ΠΆΠΈΠΌ 5 сСкунд (врСмя Π½Π° запуск)

}

mfrc522.PICC_HaltA();

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΠ΅Ρ€Π΅Π΄ установкой ΠΈΠΌΠΌΠΎΠ±ΠΈΠ»Π°ΠΉΠ·Π΅Ρ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Ρ‹Π² Ρ†Π΅ΠΏΠΈ заТигания Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ ECU. На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… автомобилях это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ошибки Π² Π±Π»ΠΎΠΊΠ΅ управлСния.

5.2. Π”Π°Ρ‚Ρ‡ΠΈΠΊ двиТСния с ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ SMS ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² Telegram, Ссли Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π½Π°Ρ‡Π°Π» Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· вашСго Π²Π΅Π΄ΠΎΠΌΠ°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ GSM-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ SIM800L ΠΈ аксСлСромСтр MPU6050.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ“± Arduino Uno
  • πŸ“± ΠœΠΎΠ΄ΡƒΠ»ΡŒ SIM800L с Π°Π½Ρ‚Π΅Π½Π½ΠΎΠΉ
  • πŸ“± АксСлСромСтр MPU6050
  • πŸ“± SIM-ΠΊΠ°Ρ€Ρ‚Π° с Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠΌ для SMS/ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. АксСлСромСтр фиксируСт Π²ΠΈΠ±Ρ€Π°Ρ†ΠΈΠΈ ΠΈ измСнСния ΡƒΠ³Π»Π° Π½Π°ΠΊΠ»ΠΎΠ½Π°.
  2. Если Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ длится Π±ΠΎΠ»Π΅Π΅ 10 сСкунд, отправляСтся SMS Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€.
  3. Для экономии заряда ΠΌΠΎΠ΄ΡƒΠ»ΡŒ SIM800L пСрСводится Π² спящий Ρ€Π΅ΠΆΠΈΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ.

Код для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ SMS:

#include 

#include

#include

MPU6050 mpu;

SoftwareSerial sim800l(7, 8); // RX, TX

void setup() {

Wire.begin();

mpu.initialize();

sim800l.begin(9600);

delay(1000);

sim800l.println("AT+CMGF=1"); // ВСкстовый Ρ€Π΅ΠΆΠΈΠΌ SMS

delay(100);

}

void loop() {

int16_t ax, ay, az;

mpu.getAcceleration(&ax, &ay, &az);

float movement = sqrt(ax*ax + ay*ay + az*az);

if (movement > 20000) { // ΠŸΠΎΡ€ΠΎΠ³ срабатывания

sendSMS("+79XXXXXXXXX", "Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ!");

delay(60000); // ΠŸΠ°ΡƒΠ·Π° 1 ΠΌΠΈΠ½ΡƒΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΏΠ°ΠΌΠΈΡ‚ΡŒ

}

delay(1000);

}

void sendSMS(String number, String message) {

sim800l.print("AT+CMGS=\"");

sim800l.print(number);

sim800l.println("\"");

delay(100);

sim800l.print(message);

delay(100);

sim800l.write(26); // Ctrl+Z для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ

delay(1000);

}

6. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ для ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π°

Устройства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠΎΠ΅Π·Π΄ΠΊΠΈ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅: автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠΌΠ°Ρ‚ΠΎΠΌ, голосовоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ интСграция с ΡƒΠΌΠ½Ρ‹ΠΌ Π΄ΠΎΠΌΠΎΠΌ.

6.1. АвтоматичСский ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΊΠ»ΠΈΠΌΠ°Ρ‚Π°

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ вСнтилятор ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠ³Ρ€Π΅Π²Π°Ρ‚Π΅Π»ΡŒ салона Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹. МоТно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с CAN-шиной для управлСния ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΠΈΠΌΠ°Ρ‚-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • 🌬️ Arduino Mega (для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ CAN ΠΈ управлСния Ρ€Π΅Π»Π΅)
  • 🌬️ Π”Π°Ρ‚Ρ‡ΠΈΠΊ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ DHT22
  • 🌬️ ΠœΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π΅Π»Π΅ 4-ΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ
  • 🌬️ ВСнтилятор 12Π’ ΠΈΠ»ΠΈ Π½Π°Π³Ρ€Π΅Π²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт

Алгоритм:

  • Если Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π²Ρ‹ΡˆΠ΅ 25Β°C β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ вСнтилятор.
  • Если Π½ΠΈΠΆΠ΅ 18Β°C β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΠ±ΠΎΠ³Ρ€Π΅Π².
  • Π”Π°Π½Π½Ρ‹Π΅ выводятся Π½Π° OLED-экран.

6.2. ГолосовоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ функциями автомобиля

УправляйтС ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ, свСтом ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠΌΠ°Ρ‚ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ голосовых ΠΊΠΎΠΌΠ°Π½Π΄. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ распознавания Ρ€Π΅Ρ‡ΠΈ LD3320 ΠΈΠ»ΠΈ EasyVR.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • 🎀 Arduino Uno
  • 🎀 ΠœΠΎΠ΄ΡƒΠ»ΡŒ EasyVR 3.0
  • 🎀 Π£ΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ Π·Π²ΡƒΠΊΠ° PAM8403 (для ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½Π°)
  • 🎀 Π Π΅Π»Π΅ для управлСния устройствами

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄:

  • "Π’ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΠ±ΠΎΠ³Ρ€Π΅Π² сидСний" β†’ Π·Π°ΠΌΡ‹ΠΊΠ°Π΅Ρ‚ Ρ€Π΅Π»Π΅ Π½Π° ΠΎΠ±ΠΎΠ³Ρ€Π΅Π².
  • "Π£Π²Π΅Π»ΠΈΡ‡ΡŒ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ" β†’ отправляСт сигнал Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚ΠΎΠ»Ρƒ ΠΏΠΎ CAN ΠΈΠ»ΠΈ IR.
  • "ΠžΡ‚ΠΊΡ€ΠΎΠΉ Π±Π°Π³Π°ΠΆΠ½ΠΈΠΊ" β†’ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ Π·Π°ΠΌΠΊΠ° Π±Π°Π³Π°ΠΆΠ½ΠΈΠΊΠ°.

7. Диагностика ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ с Arduino

Arduino ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом для диагностики нСисправностСй автомобиля. НапримСр, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ тСстированиС Ρ†Π΅ΠΏΠ΅ΠΉ.

7.1. ВСстСр Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ABS

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡΠΏΡ€Π°Π²Π½ΠΎΡΡ‚ΡŒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ABS, имитируя Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ колСса. ПолСзно для диагностики ошибок P0500 ΠΈΠ»ΠΈ C0035.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ”§ Arduino Nano
  • πŸ”§ Вранзистор BC547 (для управлСния сигналом)
  • πŸ”§ РСзисторы 1 кОм ΠΈ 10 кОм
  • πŸ”§ ΠžΡΡ†ΠΈΠ»Π»ΠΎΠ³Ρ€Π°Ρ„ ΠΈΠ»ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚Ρ€ (для Π°Π½Π°Π»ΠΈΠ·Π° сигнала)

Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ Arduino ΠΊ Π±Π°Π·Π΅ транзистора.
  2. ΠšΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€ транзистора соСдинитС с ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΎΠΌ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° ABS.
  3. Π—Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² с частотой 100 Π“Ρ† (эмуляция вращСния колСса).

Код для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ сигнала:

const int absPin = 3;

void setup() {

pinMode(absPin, OUTPUT);

}

void loop() {

digitalWrite(absPin, HIGH);

delayMicroseconds(5000); // 100 Π“Ρ† = ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ 10 мс

digitalWrite(absPin, LOW);

delayMicroseconds(5000);

}

7.2. Π›ΠΎΠ³Π³Π΅Ρ€ ошибок OBD-II

ЗаписываСт ошибки OBD-II Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Arduino ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π½Π° экран. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для диагностики Check Engine Π±Π΅Π· сканСра.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ“Š Arduino Mega (для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ELM327)
  • πŸ“Š ΠœΠΎΠ΄ΡƒΠ»ΡŒ ELM327 (Bluetooth ΠΈΠ»ΠΈ USB)
  • πŸ“Š ΠšΠ°Ρ€Ρ‚Π° памяти microSD с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ чтСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для чтСния ошибок:

#include 

SoftwareSerial elm(10, 11); // RX, TX

void setup() {

Serial.begin(9600);

elm.begin(9600);

delay(1000);

elm.println("ATZ"); // Бброс

delay(1000);

elm.println("ATDPN"); // ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»

delay(1000);

elm.println