Сумо ардуино

30 апреля 2019 - Администратор

Сумо ардуино

На этом уроке мы познакомимся с соревнованием сумо роботов на Arduino. Разберем принципиальную схему робота сумо ардуино.  Напишем программу для робота сумо в среде разработки IDE Arduino.
Соревнования роботов сумо заключаются в том, чтобы один робот вытолкнул другого за круг но сам при этом не вышел за круг. Вращаясь, роботы обнаруживают друг друга и таранят.  Для того чтобы робот знал, где находится робот противник,  ему необходим датчик расстояния. В нашем случае мы используем инфракрасный дальномер, он имеет свои плюсы по сравнению с ультразвуковым дальномером. Ультразвуковой дальномер работает с задержкой. Инфракрасный датчик расстояния срабатывает мгновенно и не пропускает робота противника. Для того чтобы робот сумо не вылетел за поле, ему требуется датчик линии. По краю поля идет линия если робот вылетает за нее он проигрывает. Для того чтобы робот сумо не вылетел за линию ставится датчик линии. Если робот заезжает на линию границы круга, датчик света фиксирует это и  робот отъезжает назад. Соревнование сумо ардуино делится на 3 категории.
В микро сумо размеры роботов  5x5 сантиметров.
В мини сумо размеры роботов 10x10 сантиметров.
В сумо ардуино размеры роботов 15x15 сантиметров
Вес роботов определяется регламентами конкретных соревнований. 
Схема  робота сумо на ардуино.
Для управления моторами будем использовать motor shield подробно о работе с ним рассказывается на уроке Мобильный робот ардуино Подключение инфракрасного датчика расстояния к ардуино рассказывается на уроке Инфракрасный датчик расстояния sharp
Красный провод инфракрасного датчика подключается к 5v ардуино.
Черный провод инфракрасного датчика подключается к GND ардуино.
Желтый провод инфракрасного датчика подключается к A0 ардуино.
vcc датчика линии подключается к 3.3v ардуино.
gnd датчика линии подключается к gnd ардуино.
AO датчика линии подключается к A1 ардуино.
Драйвер моторов ставится сверху платы Arduino UNO.
мотор 2 подключается к клемме m2 драйвера.
мотор 1 подключается к клемме m1 драйвера.
Подробнее со схемой подключения датчиков робота сумо к Arduino можно ознакомиться на рисунке. 

 схема сумо робота ардуино
Программирование робота ардуино сумо в среде разработки IDE Arduino.


Для работы с инфракрасным датчиком используется библиотека.
SharpIR.h
Задается порт к которому подключен датчик.
#define ir A0
Задается переменная для сравнения значений датчика.
int kalib = 200;
Переменная для хранения значений датчика.
int dis;
Присваивание значения датчика переменной dis.

dis=SharpIR.distance();
Переменная для хранения значений датчика линии.
int sensorValue;
Присваиваем значения датчика линии  переменной sensorValue.
  sensorValue = analogRead(A1);
Для того чтобы робот постоянно не отъезжал нужно откалибровать датчик лини. Для этого нужно поменять значение перемененной kalib. На значения суммы черного и белого деленной на 2. Подробнее о том как от калибровать датчик линии на ардуино рассказывается на уроке Считывание данных датчиков линии и калибровка

Полная программа сумо ардуино
#define SPEED_1      6 //Пин для управления  скоростью  первого мотора
#define DIR_1        7 //Пин для управления направлением первого мотора
#define SPEED_2      5 // Пин для управления  скоростью  второго мотора
#define DIR_2        4 // Пин для управления направлением второго мотора
#include <SharpIR.h>//подключение библиотеки для датчика расстояния
#define ir A0// присваиваем порт для датчика расстояния
#define model 20150 // вводим модель датчика
int kalib = 200; // переменная для хранения значения для сравнения значений с датчика линии
int sensorValue; // переменная для хранения значения с датчика линии
int dis; // переменная для хранения значения с датчика расстояния
SharpIR SharpIR(ir, model); // создаем объект SharpIR для датчика расстояния
void setup() {
    Serial.begin(9600);  //настраиваем частоту считывания ком порта
pinMode(4, OUTPUT); // настраиваем порт для направления мотора
pinMode(5, OUTPUT); // настраиваем порт для скорости мотора
pinMode(6, OUTPUT); // настраиваем порт для скорости мотора
pinMode(7, OUTPUT); // настраиваем порт для направления мотора
}
void loop() {
  sensorValue = analogRead(A1); //записываем значение датчика линии в переменную
//если робот наехал на белю линию то отъезжаем назад
  if (sensorValue < kalib){
 analogWrite(SPEED_1, 0);
  analogWrite(SPEED_1, 200);
 digitalWrite(DIR_1,LOW);
 analogWrite(SPEED_2,200);
 digitalWrite(DIR_2, LOW);
 delay(1000);
 analogWrite(SPEED_1, 0);
 digitalWrite(DIR_1,LOW);
 analogWrite(SPEED_2,0);
 digitalWrite(DIR_2,LOW);
 delay(1);
  }
dis=SharpIR.distance();//записываем значение датчика линии в переменную
// если робот видит врага то едим на него
  if(dis < 100){
  analogWrite(SPEED_1, 200);
 digitalWrite(DIR_1,HIGH);
 analogWrite(SPEED_2,200);
 digitalWrite(DIR_2, HIGH);
 delay(1);
  }
  dis=SharpIR.distance();//записываем значение датчика расстояния в переменную
//если врага не видим, то крутимся
  if(dis>100) {
  analogWrite(SPEED_1, 200);
 digitalWrite(DIR_1,HIGH);
 analogWrite(SPEED_2,200);
 digitalWrite(DIR_2, LOW);
 delay(1);
  }
}

Вернуться к содержанию

Почитать полезно по теме сумо роботов arduino
Сборка и программирование мобильного робота arduino с motorshield
Сборка и программирование мобильного робота arduino с драйвером l289

Поделиться:

 
Комментарии (0)

Нет комментариев. Ваш будет первым!