Делаем робота «сумо» (Датчики)

Датчики

Всем привет, сегодня я расскажу какие я выбрал датчики для моего робота. Во-первых я решил пока что не заморачиваться и сделать все как можно проще, все равно это еще не окончательный вариант. Пока что я установлю всего два датчика: Ультрасоник и Инфракрасный датчик черной линии. Их оба можно купить на али экспрессе или в почти любом радио магазине. Для начала я установил вот так вот, на термоклей, датчик черной линии:

Плюс втыкается в 5V на Arduino, минус в землю. А сигнал идет на цифровой пин 11 (это если у вас датчик цифровой, если аналоговый, то сигнал должен идти на аналоговый пин и программа будет немного другой). После того как подключили этот датчик, подключим Ультрасоник, который нужен для того что бы видеть врагов, я установил также на термоклей. Вот так:

Теперь, после того как вы его прикрепили, разберемся с пинами. С землей и питанием делаем тоже самое, что и в случае с датчиком черной линии. А вот два остальных пина: Echo и Trig, которые нужны для того, что бы издавать и принимать ультразвук, подключаюсь на шим пины 4 и 3 соответственно. Теперь насчет тестовой программы. Я написал кое какой скетч, но он делает совсем не то, что будет делать робот в конце его сборки. В программе сделал пояснения, для тех кто захочет в ней разобраться. Она редактируется в среде разработки Arduino IDE. Которую можно скачать на официальном сайте бесплатно. Так же для того, что бы Ультрасоник работал, понадобиться скачать и установить библиотеку: Ultrasonic.h . Если кто не знает как, пишите в комментариях, я отвечу (просто это долго объяснять и тянет на отдельную статью). Если же вам лень писать коммент, можно просто загуглить. В интернете точно есть информация на эту тему. Ну на этом наверное все, до встречи.

Скетч

#include <Ultrasonic.h>
Ultrasonic ultrasonic(3, 4);
#define BUTTON 13
#define enA 10
#define in1 9
#define in2 8#define enB 5
#define in3 7
#define in4 6
#define blackLineSensor 11

int goalSearchSpeed = 150; //скорость поворота при поиске цели
int speedForward = 200; //Скорость вперед
int speedBack = 200; //Скорость назад
int enemyDistance = 27; //Максимальное расстояние до врага в саниметрах

void rightForwardSearch()
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, goalSearchSpeed);
}
void rightBackSearch()
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, goalSearchSpeed);
}
void leftBackSearch()
{
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enB, goalSearchSpeed);
}
void leftForwardSearch()
{
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enB, goalSearchSpeed);
}

//сверху подпрограммы для движения при поиске, снизу для прсото движения

void rightForward()
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, speedForward);
}
void rightBack()
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, speedBack);
}
void leftBack()
{
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enB, speedBack);
}
void leftForward()
{
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enB, speedForward);
}
void goalSearch()
{
rightForwardSearch();
leftBackSearch();
delay(500);
rightBackSearch();
leftBackSearch();
delay(500);
}

void setup() {
// put your setup code here, to run once:
pinMode (BUTTON, INPUT);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(blackLineSensor, INPUT);

int button = digitalRead(BUTTON);
while (button == 0)
{
button = digitalRead(BUTTON);
delay(10);
}

}
void loop() {

int lineSensor = digitalRead(blackLineSensor);
while (lineSensor > 0)
{

int sonic = ultrasonic.Ranging(CM);
while (sonic > enemyDistance)
{
rightForward();
leftBack();
sonic = ultrasonic.Ranging(CM);
delay(10);
}

rightForward();
leftForward();
delay(2000);
lineSensor = digitalRead(blackLineSensor);
delay(10);
if (lineSensor==0)
break;

}
leftBack();
rightBack();
delay(1500);
}

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий