- Предварителни условия:
- Концепция зад проекта:
- Електрическа схема:
- Програмиране на вашия Arduino:
- Програмиране на вашия Python:
- Контролиран с жестове компютър в действие:
Напоследък контролираните с жестове лаптопи или компютри стават много известни. Тази техника се нарича Leap motion, което ни позволява да контролираме определени функции на нашия компютър / лаптоп, като просто махаме с ръка пред него. Много е готино и забавно да го направите, но тези лаптопи наистина имат много висока цена. Така че в този проект нека се опитаме да изградим собствен лаптоп / компютър за контрол на жестове, като комбинираме силата на Arduino и Python.
Ще използваме два ултразвукови сензора, за да определим позицията на ръката си и да контролираме медиен плейър (VLC) въз основа на позицията. Използвах това за демонстрация, но след като разберете проекта, можете да направите всичко, като просто промените няколко реда код и контролирате любимото си приложение по любимия си начин.
Предварителни условия:
Вече разгледахме няколко проекта, които съчетават Arduino с Python. Така че предполагам, че вече сте инсталирали Python и неговата серийна библиотека и сте изпробвали успешно няколко основни проекта като мигащ светодиод. Ако не, не се притеснявайте, можете да се върнете към този урок за Arduino-Python Led Controlling и да се разберете с него. Затова се уверете, че сте инсталирали Python и pyserial библиотека, преди да продължите.
Концепция зад проекта:
Концепцията зад проекта е много проста. Ще поставим два ултразвукови (САЩ) сензора отгоре на нашия монитор и ще отчитаме разстоянието между монитора и ръката ни, използвайки Arduino, въз основа на тази стойност на разстоянието ще извършим определени действия. За да изпълняваме действия на нашия компютър, използваме библиотеката на Python pyautogui. Командите от Arduino се изпращат към компютъра чрез сериен порт (USB). След това тези данни ще бъдат прочетени от python, който работи на компютъра и въз основа на прочетените данни ще бъде извършено действие.
Електрическа схема:
За да управлявате компютъра с жестове с ръце, просто свържете двата ултразвукови сензора с Arduino. Знаем, че американският сензор работи с 5V и следователно те се захранват от вградения регулатор на напрежението на Arduino. Arduino може да бъде свързан към компютър / лаптоп за захранване на модула, а също и за серийна комуникация. След като свържете, поставете ги на монитора си, както е показано по-долу. Използвал съм двойна странична лента, за да я залепя на монитора си, но можете да използвате собственото си творчество. След като го закрепим на място, можем да продължим с програмирането.
Програмиране на вашия Arduino:
Arduino трябва да бъде програмиран да отчита разстоянието на ръка от американския сензор. В пълна програма се дава в края на тази страница; малко по-долу съм дал обяснението за програмата. Ако не сте запознати с ултразвуков сензор, просто преминете през Arduino & Ultrasonic Sensor Измерване на разстоянието.
Четейки стойността на разстоянието, можем да стигнем до определени действия, които да се контролират с жестове, например в тази програма съм програмирал 5 действия като демонстрация.
Действие 1: Когато двете ръце са поставени нагоре преди сензора на определено далечно разстояние, тогава видеото във VLC плейъра трябва да се възпроизведе / пауза.
Действие 2: Когато дясната ръка е поставена нагоре пред сензора на определено далечно разстояние, тогава видеото трябва да се превърта напред една стъпка.
Действие 3: Когато лявата ръка е поставена нагоре преди сензора на определено далечно разстояние, тогава видеоклипът трябва да се върне една стъпка назад.
Действие 4: Когато дясната ръка е поставена нагоре преди сензора на определено близко разстояние и след това, ако се премести към сензора, видеото трябва да се превърти бързо напред, а ако се отдалечи, видеото трябва да се превърти назад.
Действие 5: Когато лявата ръка е поставена преди сензора на определено близко разстояние и след това, ако се премести към сензора, обемът на видеото трябва да се увеличи, а ако се отдалечи, звукът трябва да намалее.
Нека видим как е написана програмата за извършване на горните действия. И така, както всички програми, ние започваме с дефиниране на I / O щифтовете, както е показано по-долу. Двата американски сензора са свързани към цифрови щифтове 2,3,4 и 5 и се захранват от + 5V щифт. Щифтовете на спусъка са изходни щифтове, а щифтовете Echo са входни щифтове.
Серийната комуникация между Arduino и python се осъществява със скорост на предаване 9600.
const int спусък1 = 2; // Задействащ щифт на 1-ви Sesnor const int echo1 = 3; // Ехо пин на 1-ви Sesnor const int trigger2 = 4; // Задействащ щифт на 2-ри Sesnor const int echo2 = 5; // Ехо-щифт на втория Sesnor void setup () {Serial.begin (9600); pinMode (спусък1, ИЗХОД); pinMode (ехо1, ВХОД); pinMode (спусък2, ИЗХОД); pinMode (ехо2, ВХОД); }
Трябва да изчислим разстоянието между сензора и стрелката всеки път, преди да приключим с каквото и да е действие. Така че трябва да го правим много пъти, което означава, че този код трябва да се използва като функция. Написали сме функция на име calcu_distance (), която ще ни върне разстоянието между сензора и стрелката.
/ * ### Функция за изчисляване на разстояние ### * / void calcu_distance (int trigger, int echo) {digitalWrite (спусък, LOW); delayMicroseconds (2); digitalWrite (спусък, HIGH); delayMicroseconds (10); digitalWrite (спусък, LOW); time_taken = pulseIn (ехо, ВИСОКО); dist = време_прието * 0,034 / 2; ако (dist> 50) dist = 50; }
Вътре основната ни линия ние проверява за стойността на разстояние и да извършват действия, споменати по-горе. Преди това използваме две променливи distL и distR, които се актуализират с текущата стойност на разстоянието.
изчисли_разстояние (спусък1, ехо1); distL = dist; // получаваме разстояние от левия сензор count_distance (trigger2, echo2); distR = dist; // получаваме разстояние от десния сензор
Тъй като знаем разстоянието между двата сензора, вече можем да го сравним с предварително зададени стойности и да стигнем до определени действия. Например, ако двете ръце са поставени на разстояние 40 mc, тогава възпроизвеждаме / поставяме на пауза видеото. Тук думата „Възпроизвеждане / пауза“ ще бъде изпратена през серийния порт
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Откриване на двете ръце {Serial.println ("Възпроизвеждане / пауза"); забавяне (500);}
Ако само дясната ръка е поставена преди модула, ние пренасочваме видеоклипа напред с една стъпка и ако е лявата ръка, ние го връщаме с една стъпка назад. Въз основа на действието, тук думата „Пренавиване“ или „Препращане“ ще бъде изпратена през серийния порт
if ((distL> 40 && distL <50) && (distR == 50)) // Откриване на лявата ръка {Serial.println ("Пренавиване"); забавяне (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Откриване на дясната ръка {Serial.println ("Напред"); забавяне (500);}
Враг детайлен контрол на силата на звука и песента, ние използваме различна методология, за да предотвратим фалшиви задействания. За да контролираме силата на звука, трябва да поставим лявата ръка прибл. На разстояние 15 см можете да го преместите към сензора, за да намалите силата на звука, да го преместите от сензора, за да увеличите силата на звука. Кодът за същото е показан по-долу. Въз основа на действието, тук думата „Vup“ или „Vdown“ ще бъде изпратена през серийния порт
// Заключване вляво - Режим на управление, ако (distL> = 13 && distL <= 17) {delay (100); // Време за задържане на ръка изчисли_разстояние (спусък1, ехо1); distL = dist; ако (distL> = 13 && distL <= 17) {Serial.println ("Оставено заключено"); докато (distL <= 40) {изчисли_разстояние (спусък1, ехо1); distL = dist; if (distL <10) // Ръката се натиска в {Serial.println ("Vup"); delay (300);} if (distL> 20) // Ръчно изтеглено {Serial.println ("Vdown"); забавяне (300);}}}}
Можем да използваме същия метод и за десния сензор, за да контролираме пистата на видеото. Това е, ако преместим дясната ръка към сензора, той ще превърти филма бързо напред и ако го отдалечите от сензора, той ще превърти филма назад. Въз основа на действието, тук думата „Пренавиване“ или „Препращане“ ще бъде изпратена през серийния порт
Вече можете да прочетете пълния код за този компютър, контролиран с жестове, даден в края на страницата, и да опитате да го занизите като цяло и след това да го копирате на вашия Arduino IDE.
Програмиране на вашия 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 –upgrade pip
Стъпка 3: Използвайте командата “ python –m pip install pyautogui ”, за да инсталирате модула pyautogui. След като процесът е успешен, трябва да видите екран, подобен на този по-долу.
python –m pip install –upgrade pip
Сега, когато модулът pyautogui и модулът pyserial (инсталиран в предишния урок) са успешно инсталирани с python, можем да продължим с програмата python. Най- пълен питон кодът се дава в края на урока, но обяснението за същото е както следва.
Нека импортираме трите необходими модула за този проект. Те са pyautogui, сериен питон и време.
import serial # Сериал, импортиран за време за импортиране на серийна комуникация # Задължително използване на функции за забавяне импортиране pyautogui
След това установяваме връзка с Arduino чрез COM порт. В моя компютър Arduino е свързан към COM 18. Използвайте диспечера на устройствата, за да намерите към кой COM порт е свързан вашият Arduino и съответно коригирайте следващия ред.
ArduinoSerial = serial.Serial ('com18', 9600) # Създаване на обект на сериен порт, наречен arduinoSerialData time.sleep (2) # изчакайте 2 секунди, за да се установи комуникацията
Вътре в безкрайния цикъл while , ние многократно слушаме COM порта и сравняваме ключовите думи с всички предварително дефинирани произведения и правим съответните преси на клавиатурата.
докато 1: входящ = 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 ',' up ')
Както можете да видите, за да натиснем клавиш, просто трябва да използваме командата “pyautogui.typewrite (, 0.2)”, която ще натисне клавишното пространство за 0.2sec. Ако имате нужда от горещи клавиши като ctrl + S, можете да използвате командата за бърз клавиш „pyautogui.hotkey ('ctrl', 's')“.
Използвал съм тези комбинации, тъй като те работят на VLC медиен плейър, можете да ги ощипвате по какъвто и да е начин, за да създадете свои собствени приложения, за да контролирате всичко в компютъра с жестове.
Контролиран с жестове компютър в действие:
Направете връзките, както е дефинирано по-горе, и качете кода на Arduino на дъската на Arduino. След това използвайте скрипта на python по-долу и стартирайте програмата на вашия лаптоп / компютър.
Сега можете да възпроизвеждате всеки филм на компютъра си с помощта на медийния плейър VLC и да използвате ръката си, за да контролирате филма, както е показано във видеото, дадено по-долу.
Надявам се, че сте разбрали проекта и сте се радвали да играете с него. Това е само демонстрация и можете да използвате креативността си, за да създадете много по-готини неща, контролирани с жестове около това. Кажете ми дали това е било полезно и какво ще създадете, като използвате това в раздела за коментари и ще се радвам да го знам.