Π‘Π°ΠΊΠ°Π»Π°Π²Ρ€
Π”ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Π΅ ΠΈ курсовыС Π½Π° Π·Π°ΠΊΠ°Π·

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Boolean left = !digitalRead (LEFT_SENSOR_PIN); Π”Π΅Π»Π°Π΅ΠΌ измСрСния Π·Π°Π½ΠΎΠ²ΠΎ. Π’ΠΏΠ΅Ρ€Ρ‘Π΄, Ссли LOW — Π½Π°Π·Π°Π΄. AnalogWrite (SPEED_RIGHT, SPEED / BRAKE_K); Π§Π΅ΠΌ болшС, Ρ‚Π΅ΠΌ быстрСС. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚. ΠŸΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π½Π°Π»Π΅Π²ΠΎ. Π¦Π΅Π»Π΅Π²ΠΎΠ΅ состояниС. Π‘Ρ€Π°Π·Ρƒ Π΅Π΄Π΅ΠΌ Π²ΠΏΠ΅Ρ€Ρ‘Π΄. AnalogWrite (SPEED_RIGHT, SPEED); AnalogWrite (SPEED_LEFT, SPEED); AnalogWrite (SPEED_LEFT, SPEED); DigitalWrite (DIR_RIGHT, HIGH); DigitalWrite… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

НапишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая заставит ΡΠΎΠ±Ρ€Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‘Ρ€Π½ΡƒΡŽ линию, Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Π½ΡƒΡŽ Π½Π° Π±Π΅Π»Ρ‹Ρ… листах Π±ΡƒΠΌΠ°Π³ΠΈ.

Основная идСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠŸΡƒΡΡ‚ΡŒ Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ Π±Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΈ Π½Π° Π½Ρ‘ΠΌ Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ нарисован Ρ‚Ρ€Π΅ΠΊ для нашСго Ρ€ΠΎΠ±ΠΎΡ‚Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Π»ΠΈΠ½ΠΈΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ логичСский ноль, ΠΊΠΎΠ³Π΄Π° «Π²ΠΈΠ΄ΡΡ‚» Ρ‡Ρ‘Ρ€Π½ΠΎΠ΅ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΊΠΎΠ³Π΄Π° «Π²ΠΈΠ΄ΡΡ‚» Π±Π΅Π»ΠΎΠ΅.

На ΠΏΡ€ΡΠΌΠΎΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ сСнсоров, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Π° сСнсора Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ‡ΠΊΠΈ.

ΠŸΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΏΡ€Π°Π²Ρ‹ΠΉ сСнсор Π½Π°Π΅Π·ΠΆΠ°Π΅Ρ‚ Π½Π° Ρ‚Ρ€Π΅ΠΊ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ логичСский ноль. ΠŸΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅ Π½Π°Π»Π΅Π²ΠΎ, ноль ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π»Π΅Π²Ρ‹ΠΉ сСнсор.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ систСму с Ρ‚рСмя состояниями:

STATE_FORWARD — Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ…Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Ρ‘Π΄.

STATE_RIGHT — Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΡ€Π°Π²ΠΎ.

STATE_LEFT — Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π°Π»Π΅Π²ΠΎ На Π²Ρ…ΠΎΠ΄ систСмы поступаСт информация с ΡΠ΅Π½ΡΠΎΡ€ΠΎΠ². ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²:

Π›Π΅Π²Ρ‹ΠΉ.

ΠŸΡ€Π°Π²Ρ‹ΠΉ.

Π¦Π΅Π»Π΅Π²ΠΎΠ΅ состояниС.

STATE_FORWARD.

STATE_RIGHT.

STATE_LEFT.

STATE_FORWARD.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π‘Π»ΠΎΠΊ схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

// ΠœΠΎΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΠΊΠ»Π΅ΠΌΠΌΠ°ΠΌ M1+, M1-, M2+, M2;

// Motor shield ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° 6,5,7,4 для управлСния ΠΌΠΎΡ‚ΠΎΡ€Π°ΠΌΠΈ.

#define SPEED_LEFT 6.

#define SPEED_RIGHT 5.

#define DIR_LEFT 7.

#define DIR_RIGHT 4.

#define LEFT_SENSOR_PIN 8.

#define RIGHT_SENSOR_PIN 9.

// Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ (0−255).

#define SPEED 35.

// ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎ ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π· Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ.

// ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ»Ρ‘с для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°.

#define BRAKE_K 4.

#define STATE_FORWARD 0.

#define STATE_RIGHT 1.

#define STATE_LEFT 2.

int state = STATE_FORWARD;

void runForward ().

{.

state = STATE_FORWARD;

// Для Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ скорости `SPEED` ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ 0 Π΄ΠΎ 255,.

// Ρ‡Π΅ΠΌ болшС, Ρ‚Π΅ΠΌ быстрСС.

analogWrite (SPEED_LEFT, SPEED);

analogWrite (SPEED_RIGHT, SPEED);

// Если Π² DIR_LEFT ΠΈΠ»ΠΈ DIR_RIGHT пишСм HIGH, ΠΌΠΎΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ колСсо.

// Π²ΠΏΠ΅Ρ€Ρ‘Π΄, Ссли LOW — Π½Π°Π·Π°Π΄.

digitalWrite (DIR_LEFT, HIGH);

digitalWrite (DIR_RIGHT, HIGH);

}.

void steerRight ().

{ state = STATE_RIGHT;

// ЗамСдляСм ΠΏΡ€Π°Π²ΠΎΠ΅ колСсо ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ,.

// Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚.

analogWrite (SPEED_RIGHT, SPEED / BRAKE_K);

analogWrite (SPEED_LEFT, SPEED);

digitalWrite (DIR_LEFT, HIGH);

digitalWrite (DIR_RIGHT, HIGH);

}.

void steerLeft ().

{.

state = STATE_LEFT;

analogWrite (SPEED_LEFT, SPEED/BRAKE_K); analogWrite (SPEED_RIGHT, SPEED);

digitalWrite (DIR_LEFT, HIGH);

digitalWrite (DIR_RIGHT, HIGH);

}.

void setup ().

{.

// НастраиваСт Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚Ρ‹ 4,5,6,7 Π½Π° Π²Ρ‹Π²ΠΎΠ΄ сигналов.

for (int i = 4; i <= 7; i++).

pinMode (i, OUTPUT);

// Π‘Ρ€Π°Π·Ρƒ Π΅Π΄Π΅ΠΌ Π²ΠΏΠ΅Ρ€Ρ‘Π΄.

runForward ();

}.

void loop ().

{.

// Наш Ρ€ΠΎΠ±ΠΎΡ‚ Π΅Π·Π΄ΠΈΡ‚ ΠΏΠΎ Π±Π΅Π»ΠΎΠΌΡƒ полю с Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ Ρ‚Ρ€Π΅ΠΊΠΎΠΌ. Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ случаС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

// ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ².

boolean left = !digitalRead (LEFT_SENSOR_PIN);

boolean right = !digitalRead (RIGHT_SENSOR_PIN);

// Π’ ΠΊΠ°ΠΊΠΎΠ΅ состояниС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ?

int targetState;

if (left == right).

{.

// ΠΏΠΎΠ΄ сСнсорами всё Π±Π΅Π»ΠΎΠ΅ ΠΈΠ»ΠΈ всё Ρ‡Ρ‘Ρ€Π½ΠΎΠ΅.

// Π΅Π΄Π΅ΠΌ Π²ΠΏΠ΅Ρ€Ρ‘Π΄.

targetState = STATE_FORWARD;

}.

else if (left) {.

// Π»Π΅Π²Ρ‹ΠΉ сСнсор упёрся Π² Ρ‚Ρ€Π΅ΠΊ.

// ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π½Π°Π»Π΅Π²ΠΎ.

targetState = STATE_LEFT;

}.

else.

{.

targetState = STATE_RIGHT;

}.

if (state == targetState).

{.

// ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ всё Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ,.

// Π΄Π΅Π»Π°Π΅ΠΌ измСрСния Π·Π°Π½ΠΎΠ²ΠΎ.

return;

}.

switch (targetState).

{ case STATE_FORWARD:

runForward ();

break;

case STATE_RIGHT:

steerRight ();

break;

case STATE_LEFT:

steerLeft ();

break;

}.

// Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΠΌ сильно Π²ΠΈΠ»ΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΡΠΌΠΎΠΉ.

delay (50);

}.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ