Любительская робототехника в наши дни развивается весьма быстрыми темпами. Все больше и больше людей хотят сделать своего собственного робота, пусть даже небольшого, простого и обладающего минимальным набором функций. При разработке робота встает вопрос о его управлении. Робот, управляемый джойстиком или клавиатурой, на сегодняшний день вполне обычное явление среди радиолюбителей. Куда интереснее сделать робота с необычным управлением, например, с жестовым управлением с помощью акселерометра.

Что нам потребуется:
- Плата Arduino
- Два двигателя постоянного тока
- Акселерометр ADXL335
- Кодер HT12D
- Декодер HT12E
- Радиопередатчик и радиоприёмник
- Драйвер двигателей L293D
- Батарейка 9 В
- Разъем для батарейки
- USB-кабель
- Шасси робота
Пульт управления, состоящий из акселерометра и радиопередатчика, крепится на руке и позволяет перемещать робота вперёд, назад, влево, вправо и останавливать.
Акселерометр ADXL335 имеет по аналоговому выходу на каждую ось (X-OUT, Y-OUT, Z-OUT) и питается напряжением 5 В.

Робот совершает перемещения на основе положения руки. Если наклонить руку вперёд, робот начнёт движение прямо и будет продолжать, пока не будет дана другая команда. Отклонение руки назад позволит роботу двигаться назад. Наклоны руки вправо или влево заставит робота поворачивать направо или налево соответственно. Для остановки робота нужно держать руку в горизонтальном положении.
На представленном ниже видео показано функционирование простого робота с жестовым управлением с помощью акселерометра.:
Проект робота состоит из двух частей: передающей части и принимающей части. В передающей части основными элементами являются акселерометр и радиопередатчик. Поскольку акселерометр передаёт аналоговые сигналы, их необходимо преобразовать в цифровые. Для этой цели вместо АЦП используется 4-канальный компаратор. С помощью опорного напряжения мы получаем необходимые цифровые сигналы, которые впоследствии подводим к шифратору HT12E для получения последовательных данных для последующей их отправки по радиоканалу.

В принимающей части данные, принятые от радиоприёмника, поступают на дешифратор HT12D. Он преобразует информацию в параллельные сигналы, которые заводятся на Arduino. На основе этих данных робот осуществляет движение. Следует учитывать, что для питания двигателей используется дополнительный источник в виде батарейки 9 В.

Ниже приведена таблица состояний для управления роботом:

Ниже представлен код для Arduino:
//определяем выходные пины для двигателей
#define FD 16
#define BD 17
#define LD 18
#define RD 19
#define m11 3
#define m12 4
#define m21 5
#define m22 6
void forward()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void backward()
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
}
void left()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
void right()
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void Stop()
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
//определяем направления для пинов
void setup()
{
pinMode(FD, INPUT);
pinMode(BD, INPUT);
pinMode(LD, INPUT);
pinMode(RD, INPUT);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
}
void loop()
{
//считываем входы
int temp1=digitalRead(FD);
int temp2=digitalRead(BD);
int temp3=digitalRead(LD);
int temp4=digitalRead(RD);
if(temp1==1 && temp2==0 && temp3==0 && temp4==0)
backward();
else if(temp1==0 && temp2==1 && temp3==0 && temp4==0)
forward();
else if(temp1==0 && temp2==0 && temp3==1 && temp4==0)
left();
else if(temp1==0 && temp2==0 && temp3==0 && temp4==1)
right();
else
Stop();
}
© digitrode.ru