- Передумови:
- Концепція проекту:
- Кругова діаграма:
- Програмування вашого Arduino:
- Програмування вашого Python:
- Комп’ютер, керований жестами в дії:
Останнім часом ноутбуки або комп’ютери, керовані жестами, стають дуже відомими. Цей прийом називається Leap motion, що дозволяє нам контролювати певні функції на нашому комп’ютері / ноутбуці, просто махаючи рукою перед ним. Це дуже здорово і весело, але ці ноутбуки дійсно мають дуже високу ціну. Тож у цьому проекті давайте спробуємо створити власний портативний комп’ютер / комп’ютер за допомогою жестів, об’єднавши потужність Arduino та Python.
Ми будемо використовувати два ультразвукові датчики для визначення положення нашої руки та управління медіаплеєром (VLC) на основі положення. Я використовував це для демонстрації, але як тільки ви зрозуміли проект, ви можете зробити що завгодно, просто змінивши кілька рядків коду та керуючи улюбленим додатком улюбленим способом.
Передумови:
Ми вже розглянули декілька проектів, що поєднують Arduino з Python. Тож я припускаю, що ви вже встановили Python та його послідовну бібліотеку та успішно випробували кілька основних проектів, таких як блимаючий світлодіод. Якщо ні, не хвилюйтесь, ви можете повернутися до цього підручника з керування Arduino-Python під керуванням та погодитися з ним. Тому переконайтеся, що ви встановили Python і бібліотеку pyserial, перш ніж продовжувати.
Концепція проекту:
Концепція проекту дуже проста. Ми розмістимо два ультразвукові (американські) датчики поверх нашого монітора і будемо зчитувати відстань між монітором і рукою за допомогою Arduino, виходячи з цього значення відстані, ми будемо виконувати певні дії. Для виконання дій на нашому комп’ютері ми використовуємо бібліотеку Python pyautogui. Команди від Arduino надсилаються на комп'ютер через послідовний порт (USB). Потім ці дані будуть прочитані python, який працює на комп'ютері, і на основі прочитаних даних буде виконана дія.
Кругова діаграма:
Щоб керувати ПК за допомогою жестів руками, просто підключіть два ультразвукові датчики до Arduino. Ми знаємо, що американський датчик працює з напругою 5 В, і тому він живиться від вбудованого регулятора напруги Arduino. Arduino можна підключити до ПК / ноутбука для живлення модуля, а також для послідовного зв'язку. Після підключення розмістіть їх на моніторі, як показано нижче. Я використовував подвійну бічну стрічку, щоб наклеїти її на монітор, але ви можете використати власну творчість. Закріпивши його в такому місці, ми можемо приступити до програмування.
Програмування вашого Arduino:
Arduino повинен бути запрограмований на зчитування відстані руки від американського датчика. Повна програма наводиться в кінці цієї сторінки; трохи нижче я дав пояснення програми. Якщо ви новачок у ультразвуковому датчику, просто пройдіть Arduino та ультразвуковий датчик вимірювання відстані.
Читаючи значення відстані, ми можемо дійти до певних дій, якими керуємо за допомогою жестів, наприклад, у цій програмі я запрограмував 5 дій як демонстрацію.
Дія 1: Коли обидві руки поставлені перед датчиком на певній далекій відстані, тоді відео у програвачі VLC має відтворити / призупинити.
Дія 2: Коли права рука розміщена перед датчиком на певній далекій відстані, тоді відео має перейти вперед на один крок.
Дія 3: Коли ліва рука піднята перед датчиком на певній далекій відстані, тоді відео має перемотатись на один крок назад.
Дія 4: Коли права рука поставлена перед датчиком на певній близькій відстані, а потім, якщо рухатись до датчика, відео повинно швидко перемотуватися вперед, а якщо віддалятись, відео повинно перемотувати назад.
Дія 5: Коли ліва рука піднята перед датчиком на певній близькій відстані, а потім, якщо рухатись до датчика, обсяг відео повинен збільшуватися, а якщо відсуватися, гучність повинна зменшуватися.
Давайте подивимося, як написана програма для виконання вищевказаних дій. Отже, як і всі програми, ми починаємо з визначення штифтів вводу-виводу, як показано нижче. Два американських датчика підключені до цифрових виводів 2,3,4 і 5 і живляться від виводу + 5В. Виводи тригера є вихідними виводами, а виводи Ехо - вхідними виводами.
Послідовний зв’язок між Arduino та python відбувається зі швидкістю передачі даних 9600.
const int тригер1 = 2; // Тригерний штифт 1-го Сеснора const int echo1 = 3; // Ехо-пін 1-го Сеснора const int trigger2 = 4; // Тригерний штифт 2-го Sesnor const int echo2 = 5; // Ехо-шпилька 2-го Sesnor void setup () {Serial.begin (9600); pinMode (тригер1, ВИХІД); pinMode (echo1, INPUT); pinMode (тригер2, ВИХІД); pinMode (echo2, INPUT); }
Нам потрібно щоразу обчислювати відстань між датчиком і рукою, перш ніж робити висновок щодо будь-якої дії. Тому нам доводиться це робити багато разів, а це означає, що цей код слід використовувати як функцію. Ми написали функцію з назвою calcu_distance (), яка поверне нам відстань між датчиком і рукою.
/ * ### Функція для обчислення відстані ### * / void calcu_distance (int trigger, int echo) {digitalWrite (тригер, LOW); delayMicroseconds (2); digitalWrite (тригер, HIGH); delayMicroseconds (10); digitalWrite (тригер, LOW); time_taken = pulseIn (echo, HIGH); dist = час_зайнятий * 0,034 / 2; якщо (dist> 50) dist = 50; }
Всередині нашого головного циклу ми перевіряємо значення відстані і виконуємо дії, згадані вище. До цього ми використовуємо дві змінні distL та distR, які оновлюються поточним значенням відстані.
обчислити_відстань (тригер1, ехо1); distL = dist; // отримуємо відстань лівого датчика izračunaти_відстань (тригер2, ехо2); distR = dist; // отримуємо відстань правого датчика
Оскільки ми знаємо відстань між обома датчиками, тепер ми можемо порівняти її із заздалегідь визначеними значеннями та дійти до певних дій. Наприклад, якщо обидві руки розташовані на відстані 40 мк, тоді ми відтворюємо / призупиняємо відео. Тут слово "Відтворити / Призупинити" буде надіслано через послідовний порт
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Виявлення обох рук {Serial.println ("Відтворення / пауза"); затримка (500);}
Якщо перед модулем розміщена лише права рука, ми перемотуємо відео вперед на один крок, а якщо вона є лівою, перемотуємо назад на один крок. Залежно від дії, тут слово "Перемотка назад" або "Вперед" буде розсилатися через послідовний порт
if ((distL> 40 && distL <50) && (distR == 50)) // Виявлення лівої руки {Serial.println ("Rewind"); затримка (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Виявлення правої руки {Serial.println ("Вперед"); затримка (500);}
Детальний контроль гучності та доріжки ми використовуємо іншу методологію, щоб запобігти помилковим тригерам. Для регулювання гучності ми повинні покласти ліву руку прибл. На відстані 15 см ви можете або перемістити його до датчика, щоб зменшити гучність, відсунути його від датчика, щоб збільшити гучність. Код для цього наведено нижче. Залежно від дії, тут слово “Vup” або “Vdown” буде розсилатися через послідовний порт
// Блокування вліво - Режим управління if (distL> = 13 && distL <= 17) {delay (100); // Час утримання руки, обчислити_відстань (тригер1, ехо1); distL = dist; якщо (distL> = 13 && distL <= 17) {Serial.println ("Заблоковано вліво"); while (distL <= 40) {обчислити_відстань (тригер1, ехо1); distL = dist; if (distL <10) // Рука натиснута на {Serial.println ("Vup"); затримка (300);} if (distL> 20) // Рука витягнута {Serial.println ("Vdown"); затримка (300);}}}}
Ми можемо використовувати той самий метод і для правого бічного датчика, щоб контролювати доріжку відео. Тобто, якщо ми рухаємося правою рукою до датчика, він перемотує відео вперед, а якщо відсунути його від датчика, фільм буде перемотаний назад. Залежно від дії, тут слово "Перемотка назад" або "Вперед" буде розсилатися через послідовний порт
Тепер ви можете прочитати повний код цього ПК, керованого жестами, наведений у кінці сторінки, і спробувати занизити його як єдине ціле, а потім скопіювати у свій ID Arduino.
Програмування вашого Python:
Програма python для цього проекту дуже проста. Нам просто потрібно встановити послідовний зв’язок з Arduino за допомогою правильної швидкості передачі даних, а потім виконати деякі основні дії клавіатури. Першим кроком з python було б встановити модуль p yautogui . Обов’язково виконайте цей крок, оскільки програма не працюватиме без модуля pyautogui.
Встановлення модуля pyautogui для Windows:
Виконайте наведені нижче дії, щоб встановити pyautogui для Windows. Якщо ви використовуєте інші платформи, кроки також будуть більш-менш схожими. Переконайтеся, що ваш комп’ютер / ноутбук підключений до Інтернету, і виконайте кроки нижче
Крок 1: Відкрийте командний рядок Windows і змініть каталог на папку, де ви встановили python. За замовчуванням команда повинна бути
cd C: \ Python27
Крок 2: Усередині вашого каталогу python використовуйте команду python –m pip install –upgrade pip для оновлення вашого pip. Pip - це інструмент у python, який допомагає нам легко встановлювати модулі python. Після оновлення цього модуля (як показано на малюнку нижче) перейдіть до наступного кроку.
python –m pip install –оновлення pip
Крок 3: Використовуйте команду “ python –m pip install pyautogui ”, щоб встановити модуль pyautogui. Коли процес буде успішним, ви побачите екран, подібний до цього нижче.
python –m pip install –оновлення pip
Тепер, коли модуль pyautogui та модуль pyserial (встановлені в попередньому посібнику) успішно встановлені за допомогою python, ми можемо продовжити роботу з програмою python. Повний код пітона дається в кінці уроку, але пояснення того ж полягає в наступному.
Давайте імпортуємо всі три необхідні модулі для цього проекту. Це п’явтогі, серійний пітон і час.
import serial # Серія імпортована для послідовного зв'язку час імпорту # Потрібно використовувати функції затримки import pyautogui
Далі ми встановлюємо зв’язок з Arduino через COM-порт. У моєму комп'ютері Arduino підключено до COM 18. За допомогою диспетчера пристроїв знайдіть, до якого COM-порту підключений ваш Arduino, і відповідно виправте наступний рядок.
ArduinoSerial = serial.Serial ('com18', 9600) # Створити об'єкт послідовного порту під назвою arduinoSerialData time.sleep (2) # зачекайте 2 секунди, щоб зв'язок налагодився
Усередині нескінченного у час циклу, ми постійно слухати COM порт і порівняти ключові слова з будь-якими попередньо кинув виклик робіт і зробити натискання плати відповідно.
while 1: incoming = str (ArduinoSerial.readline ()) # прочитайте послідовні дані та роздрукуйте їх як друк рядка вхідним, якщо "Відтворити / Призупинити" у вхідному: pyautogui.typewrite (, 0.2), якщо "Перемотати назад" у вхідному: pyautogui. гаряча клавіша ('ctrl', 'left'), якщо 'Forward' у вхідному: pyautogui.hotkey ('ctrl', 'right'), якщо 'Vup' в вхідному: pyautogui.hotkey ('ctrl', 'down') if ' Vdown 'у вхідному: pyautogui.hotkey (' ctrl ',' вгору ')
Як бачите, для натискання клавіші нам просто потрібно використовувати команду “pyautogui.typewrite (, 0,2)”, яка натискатиме простір клавіш на 0,2 сек. Якщо вам потрібні гарячі клавіші, такі як ctrl + S, ви можете скористатися командою гарячих клавіш “pyautogui.hotkey ('ctrl', 's')”.
Я використовував ці комбінації, оскільки вони працюють на медіаплеєрі VLC, і ви можете налаштувати їх будь-яким способом, який вам подобається, щоб створювати власні програми для управління будь-чим на комп’ютері за допомогою жестів.
Комп’ютер, керований жестами в дії:
Встановіть з'єднання, як визначено вище, і завантажте код Arduino на свою плату Arduino. Потім скористайтеся наведеним нижче сценарієм python і запустіть програму на своєму ноутбуці / комп’ютері.
Тепер ви можете відтворити будь-який фільм на своєму комп’ютері за допомогою медіаплеєра VLC і за допомогою руки керувати фільмом, як показано у відео, поданому нижче.
Сподіваюся, ви зрозуміли проект і вам сподобалося з ним грати. Це просто демонстрація, і ви можете використовувати свою творчість, щоб створити набагато більше крутих речей, керованих жестами навколо цього. Повідомте мене, чи було це корисно, і що ви створите, використовуючи це в розділі коментарів, і я буду радий це знати.