цифровая электроника
вычислительная техника
встраиваемые системы

 



Робот на Arduino, управляемый с помощью жестов

Автор: Mike(admin) от 18-08-2015, 10:50

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


Робот на Arduino, управляемый с помощью жестов

Что нам потребуется:


  • Плата Arduino
  • Два двигателя постоянного тока
  • Акселерометр ADXL335
  • Кодер HT12D
  • Декодер HT12E
  • Радиопередатчик и радиоприёмник
  • Драйвер двигателей L293D
  • Батарейка 9 В
  • Разъем для батарейки
  • USB-кабель
  • Шасси робота

Пульт управления, состоящий из акселерометра и радиопередатчика, крепится на руке и позволяет перемещать робота вперёд, назад, влево, вправо и останавливать.


Акселерометр ADXL335 имеет по аналоговому выходу на каждую ось (X-OUT, Y-OUT, Z-OUT) и питается напряжением 5 В.


Акселерометр ADXL335

Робот совершает перемещения на основе положения руки. Если наклонить руку вперёд, робот начнёт движение прямо и будет продолжать, пока не будет дана другая команда. Отклонение руки назад позволит роботу двигаться назад. Наклоны руки вправо или влево заставит робота поворачивать направо или налево соответственно. Для остановки робота нужно держать руку в горизонтальном положении.


На представленном ниже видео показано функционирование простого робота с жестовым управлением с помощью акселерометра.:



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


Робот на Arduino, управляемый с помощью жестов, схема

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


Робот на Arduino, управляемый с помощью жестов, схема

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


Робот на Arduino, управляемый с помощью жестов, таблица состояний

Ниже представлен код для 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


<Via>


Теги: Arduino, робот




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • Группа: Посетители
  • ICQ: 238485511
  • Регистрация: 19.03.2016
  • Статус: Пользователь offline
  • Комментариев: 1
  • Публикаций: 0
^
мне не нкжно

---

Фильтр против пыльцы и Фильтр от дыма

--------------------