Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Робот для управления жестами

Компоненты и расходные материалы

Arduino UNO
× 1
Arduino Nano R3
× 1
Передатчик-приемник RF-433
× 1
Кодировщик и декодер HT12
× 1
Аналоговый акселерометр Adafruit:ADXL335
× 1
Motor Shield для Uno
× 1
Двигатель постоянного тока (общий)
× 1

Необходимые инструменты и машины

Паяльник (универсальный)

Об этом проекте

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

Чтобы получить хорошее представление, мы будем двигаться к пониманию роли и функции каждого компонента, а затем объединим их для достижения желаемой производительности.

1. ADXL335 (акселерометр)

Функция акселерометра проста:определять ориентацию запястья. Акселерометр измеряет ускорение, включая ускорение свободного падения g. Таким образом, мы можем использовать акселерометр для определения ориентации запястья, измеряя компонент «g» на любой конкретной оси ADXL335, как показано на рисунке ниже:

Из-за наклона руки угол оси X и / или Y с вертикальными изменениями и, следовательно, компонент ускорения g также действует на них, что может быть измерено и, таким образом, указывает ориентацию руки.

ADXL335 может измерять ускорение до 3g и взаимодействует с Arduino путем подключения выводов оси к аналоговым выводам Arduino. Акселерометр выдает значения напряжения, пропорциональные ускорению.

В этом проекте акселерометр подключен к Arduino Nano и прикреплен к ладони. ADXL335 выводит напряжение в диапазоне от 0 до Vcc (приложенное напряжение обычно 3,3 В) и считывается аналоговыми выводами Arduino. Таким образом, для пользователя мы получаем значение в диапазоне от 0 до 1024 (10-битный АЦП). Различная ориентация дает разные аналоговые значения для каждой оси, которые затем сопоставляются с разными движениями робота.

Принципиальная схема акселерометра:

Тестовый код для понимания работы ADXL335 выглядит следующим образом:

  void setup () {pinMode (A0, INPUT); // ось x подключена к A0 pinMode (A1, INPUT); // ось Y подключена к A1 pinMode (A2, INPUT); // ось z связана с A2Serial.begin (9600); // Для печати данных в Serial Monitor} void loop () {Serial.print ("X ="); Serial.println (analogRead (A0)); Serial.print ("Y ="); Serial.println (analogRead (A1)); Serial.print ("Z ="); Serial.println (analogRead (A2)); delay (1000);}  

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

2. Передатчик и приемник RF-433

Функция RF-модуля проста:передавать командные данные с Arduino Nano на запястье на двигатель, управляющий Arduino Uno. Радиочастотный модуль использует радиоволны на частоте 433 Гц, отсюда и название RF-433. Они используют амплитудную модуляцию для отправки данных, но не вдаваясь в подробности и упрощая вещи, они будут использоваться для передачи команды роботу, а именно:двигаться вперед, назад, вправо или влево. А в случае отсутствия данных стойте на месте. Они хорошо работают на расстоянии до 10 метров.

Теперь, чтобы понять, как реализовать RF-модуль в нашем проекте, давайте последовательно поработаем над схемами передатчика и приемника.

Схема передатчика

Схема передатчика состоит из двух частей:передатчика RF и энкодера HT12E. Передатчик состоит из одного вывода данных, одной антенны, одной земли и питания. Работа кодировщика HT12E заключается в предоставлении данных передатчику. Кодер состоит из 4 выводов данных, данные на которые могут быть отправлены. Мы будем использовать эти 4 контакта данных для представления четырех движений, ВЫСОКИЙ уровень на этих контактах по отдельности будет представлять одно из четырех движений, а НИЗКИЙ на всех означает остановку.

Принципиальная схема выглядит так:

Левые контакты (A0-A7) являются адресными контактами и определяют пару, которая будет обмениваться данными (передатчик и приемник, имеющие одинаковые адреса, будут обмениваться только данными). Мы установим A0-A7 как LOW (заземлено).

Контакты ввода данных подключены к цифровым выводам Arduino (в этом проекте с 6 по 9), и они будут выводить данные команды как:

Команда цифрового вывода (при ВЫСОКОМ)

9 Нападающий

10 Реверс

11 слева

12 Вправо

Мы запишем цифровые выводы как ВЫСОКИЙ на основе входного сигнала от ADXL335 для выполнения требуемого движения.

Схема приемника

Схема приемника полностью аналогична схеме передатчика, как показано, но вместо выводов данных, идущих как выходные данные от Arduino, в этом случае они будут считываться как входные данные для принятия команды для Arduino Uno и запуска двигателей по мере необходимости:

Для упрощения, вы можете подключить светодиод последовательно к выводу 17 с резистором 1 кОм вместо сложной схемы, как показано, чтобы указать правильное соединение с передатчиком.

3. ДВИГАТЕЛЬНЫЙ ЩИТ

Моторный щит - самая простая часть в обращении из-за наличия библиотеки Adafruit AFMotor, ссылка:- https://github.com/adafruit/Adafruit-Motor-Shield-library

Загрузите и скопируйте библиотеку в папку библиотек Arduino, чтобы включить ее в скетч программы.

Ниже приведен пример библиотеки AFMotor:

  #include  AF_DCMotor motor (4); // Подключаем провода двигателя к точке Motor 4 в настройке shieldvoid () {Serial.begin (9600); // настраиваем последовательную библиотеку на 9600 бит / с Serial.println ("Motor test!"); // включаем мотор motor.setSpeed ​​(200); motor.run (RELEASE);} цикл void () {uint8_t i; Serial.print («галочка»); мотор. бег (ВПЕРЕД); для (я =0; я <255; я ++) {motor.setSpeed ​​(я); задержка (10);} for (i =255; i! =0; i--) {motor.setSpeed ​​(i); delay (10);} Serial.print ("tock"); motor.run (НАЗАД); для (я =0; я <255; я ++) {motor.setSpeed ​​(я); задержка (10);} for (i =255; i! =0; i--) {motor.setSpeed ​​(i); delay (10);} Serial.print ("технология"); motor.run (ВЫПУСК); задержка (1000);  

4. Объединение всего

Последняя и заключительная часть включает в себя объединение всех вышеперечисленных частей вместе, чтобы сформировать законченного робота, который следует командам руки!

Поскольку моторный щит использует почти все цифровые выводы, мы будем использовать аналоговые выводы Arduino Uno для чтения данных приемника. Окончательная принципиальная схема приведена ниже:

Моторный щит выполняет соединения с двигателями. Подключите батарею 9 В к входу питания экрана.

ПРИМЕЧАНИЕ:я лично предпочитаю подключать 2 или даже 3,9 В батареи параллельно входу питания экрана, чтобы обеспечить достаточную мощность для работы всех четырех двигателей. Я соединил четыре двигателя в группу из 2 (двигатели с одной стороны подключены параллельно друг другу, поэтому для работы требуются только двигатели 3 и 4).

Окончательный код

Для Arduino Nano:

  int x_axis =0; int y_axis =0; int forward =9; int backward =10; int right =11; int left =12; void setup () {pinMode (A0, INPUT); // Ось X pinMode (A3, OUTPUT); // Ось Y pinMode (вперед, ВЫХОД); // ВЫСОКИЙ для перемещения вперед pinMode (назад, OUTPUT); // ВЫСОКОЕ для перемещения назад pinMode (right, OUTPUT); // ВЫСОКОЕ для перемещения Вправо pinMode (left, OUTPUT); // ВЫСОКОЕ для перемещения влево Serial.begin (9600);} void loop () {x_axis =analogRead (A0); y_axis =analogRead (A3); Serial.print ("X ="); Serial.println (x_axis); Serial.print ("Y ="); Serial.println (y_axis); if (y_axis> =390) {Serial.println ("Вперед"); digitalWrite (вперед, ВЫСОКИЙ); } else {if (y_axis <=310) {Serial.println ("НАЗАД"); digitalWrite (назад, ВЫСОКИЙ); } else {if (x_axis> =380) {Serial.println ("ВПРАВО"); digitalWrite (справа, ВЫСОКИЙ); } else {if (x_axis <=320) {Serial.println ("LEFT"); digitalWrite (слева, ВЫСОКИЙ); } Serial.println (""); }}} задержка (200); if (x_axis> 320 &&x_axis <380 &&y_axis> 310 &&y_axis <390) {digitalWrite (вперед, LOW); digitalWrite (назад, LOW); digitalWrite (справа, LOW); digitalWrite (слева, НИЗКИЙ); }}  

Для Arduino Uno:

  #include  AF_DCMotor motor_right (3); AF_DCMotor motor_left (4); int forward =0; int backward =0; int right =0; int left =0; void setup () { pinMode (A2, ВХОД); pinMode (A3, ВХОД); pinMode (A4, ВХОД); pinMode (A5, ВХОД); Serial.begin (9600); motor_right.setSpeed ​​(255); motor_left.setSpeed ​​(255); motor_right.run (ВЫПУСК); motor_left.run (RELEASE);} недействительный цикл () {вперед =digitalRead (A0); назад =digitalRead (A1); справа =digitalRead (A2); left =digitalRead (A3); если (вперед ==ВЫСОКИЙ) {motor_right.run (ВПЕРЕД); motor_left.run (ВПЕРЕД); Serial.println («Вперед»); } если (назад ==ВЫСОКИЙ) {motor_right.run (НАЗАД); motor_left.run (НАЗАД); Serial.println («Обратный»); } if (right ==HIGH) {motor_right.run (ВПЕРЕД); motor_left.run (РЕЛИЗ); Serial.println («ВПРАВО»); } если (left ==HIGH) {motor_right.run (RELEASE); motor_left.run (ВПЕРЕД); Serial.println («ЛЕВЫЙ»); } if (left ==LOW &&right ==LOW &&вперед ==LOW &&backward ==LOW) {motor_right.run (RELEASE); motor_left.run (РЕЛИЗ); } delay (100);}  

Фото и видео здесь:


Производственный процесс

  1. Управление монетоприемником с помощью Arduino
  2. Центр управления Arduino
  3. Arduino с Bluetooth для управления светодиодом!
  4. Робот-последователь линии
  5. Простой калькулятор UNO
  6. Управление увлажнителем Arduino
  7. Робот, управляемый речью
  8. Постоянство видения
  9. Управление автомобилем с помощью Arduino Uno и Bluetooth
  10. 4-контактный ШИМ-контроль вентилятора, 25 кГц, с Arduino Uno