Оглавление:

Беспроводной автомобиль с управлением жестами: 7 шагов
Беспроводной автомобиль с управлением жестами: 7 шагов

Видео: Беспроводной автомобиль с управлением жестами: 7 шагов

Видео: Беспроводной автомобиль с управлением жестами: 7 шагов
Видео: Танк стреляюций шариками орбиз с необычным пультом управления! 2024, Ноябрь
Anonim
Беспроводной автомобиль с управлением жестами
Беспроводной автомобиль с управлением жестами

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

Шаг 1: оборудование

Блок передатчика

1. Arduino Nano.

2. Сенсорный модуль MPU6050.

3. Передатчик RF 433 МГц.

4. Любой тип 3-элементной батареи на 11,1 В (здесь я использовал плоскую батарею).

5. Vero-Board.

6. Перчатки для рук.

Приемник

1. Arduino Nano или Arduino Uno.

2. Модуль драйвера двигателя L298N.

3. 4-х колесная рама робота, включая двигатели.

4. RF 433 RF приемник.

5. Трехэлементный литий-полимерный аккумулятор на 11,1 В.

6. Веро-доска.

Другие

1. Клей-стержни и пистолет.

2. Провода-перемычки.

3. Отвертки.

4. Комплект для пайки.

и т.п.

Шаг 2: Файл изображения принципиальной схемы

Файл изображения принципиальной схемы
Файл изображения принципиальной схемы

Шаг 3: Фриттинг файла принципиальной схемы

Шаг 4: Код передатчика

#включают

#включают

#включают

MPU6050 mpu6050 (провод);

длинный таймер = 0;

char * контроллер;

установка void ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (истина); vw_set_ptt_inverted (правда); // vw_set_tx_pin (10); vw_setup (4000); // скорость передачи данных Kbps

}

пустой цикл ()

{ ////////////////////////////////////////////////////////////////////////////////////////////////

mpu6050.update ();

если (millis () - таймер> 1000)

{Serial.println ("============================================ =========== "); Serial.print ("темп:"); Serial.println (mpu6050.getTemp ()); Serial.print ("accX:"); Serial.print (mpu6050.getAccX ()); Serial.print ("\ taccY:"); Serial.print (mpu6050.getAccY ()); Serial.print ("\ taccZ:"); Serial.println (mpu6050.getAccZ ()); Serial.print ("gyroX:"); Serial.print (mpu6050.getGyroX ()); Serial.print ("\ tgyroY:"); Serial.print (mpu6050.getGyroY ()); Serial.print ("\ tgyroZ:"); Serial.println (mpu6050.getGyroZ ()); Serial.print ("accAngleX:"); Serial.print (mpu6050.getAccAngleX ()); Serial.print ("\ taccAngleY:"); Serial.println (mpu6050.getAccAngleY ()); Serial.print ("gyroAngleX:"); Serial.print (mpu6050.getGyroAngleX ()); Serial.print ("\ tgyroAngleY:"); Serial.print (mpu6050.getGyroAngleY ()); Serial.print ("\ tgyroAngleZ:"); Serial.println (mpu6050.getGyroAngleZ ()); Serial.print ("angleX:"); Serial.print (mpu6050.getAngleX ()); Serial.print ("\ tangleY:"); Serial.print (mpu6050.getAngleY ()); Serial.print ("\ tangleZ:"); Serial.println (mpu6050.getAngleZ ()); Serial.println ("=============================================== ========== / n "); таймер = миллис (); }

/////////////////////////////////////////////////////////////////////////////////////

если (mpu6050.getAccAngleX () 30) {контроллер = "X2"; vw_send ((uint8_t *) контроллер, strlen (контроллер)); vw_wait_tx (); // Ждем, пока все сообщение не исчезнет Serial.println ("FORWARD"); } иначе, если (mpu6050.getAccAngleY ()> 40) {контроллер = "Y1"; vw_send ((uint8_t *) контроллер, strlen (контроллер)); vw_wait_tx (); // Ждем, пока не исчезнет все сообщение Serial.println ("LEFT"); } иначе, если (mpu6050.getAccAngleY () <- 40) {контроллер = "Y2"; vw_send ((uint8_t *) контроллер, strlen (контроллер)); vw_wait_tx (); // Ждем, пока все сообщение не исчезнет Serial.println ("RIGHT"); } else if (mpu6050.getAccAngleX () - 10 && mpu6050.getAccAngleY () - 10) {controller = "A1"; vw_send ((uint8_t *) контроллер, strlen (контроллер)); vw_wait_tx (); // Ждем, пока все сообщение не исчезнет Serial.println ("STOP"); }}

Шаг 5: Код получателя

#включают

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (правда); // Требуется для DR3100 vw_set_rx_pin (12); vw_setup (4000); // Бит в секунду pinMode (13, OUTPUT); pinMode (LA, ВЫХОД); pinMode (LB, ВЫХОД); pinMode (RA, ВЫХОД); pinMode (RB, ВЫХОД); vw_rx_start (); // Запускаем ФАПЧ приемника с запущенным Serial.println ("Все в порядке");

}

недействительный цикл () {uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message (buf, & buflen)) // Неблокирующий

{если ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("НАЗАД"); назад (); задержка (100); //выключенный(); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("ВПЕРЕД"); вперед(); задержка (100); //выключенный(); }

иначе, если ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println ("ВЛЕВО"); левый(); задержка (100); //выключенный(); }

иначе, если ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println ("ВПРАВО"); Правильно(); задержка (100); //выключенный(); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); выключенный(); задержка (100); }} else {Serial.println ("Сигнал не получен"); }}

пусто вперед ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 70); analogWrite (RB, 0); }

аннулировать назад ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 0); analogWrite (RB, 70); }

пусто оставлено ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 70); analogWrite (RB, 0); }

недействительное право ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 70); }

аннулировать ()

{analogWrite (LA, 0); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 0); }

Шаг 6: файлы INO

Шаг 7. Связывание библиотек

Виртуальная библиотека проводов:

MPU6050_tockn Libraby:

Библиотека проводов:

Рекомендуемые: