- ข้อกำหนดเบื้องต้น:
- แนวคิดเบื้องหลังโครงการ:
- แผนภูมิวงจรรวม:
- การเขียนโปรแกรม Arduino ของคุณ:
- การเขียนโปรแกรม Python ของคุณ:
- การทำงานของคอมพิวเตอร์ที่ควบคุมด้วยท่าทาง:
เมื่อเร็ว ๆ นี้แล็ปท็อปหรือคอมพิวเตอร์ที่ควบคุมด้วยท่าทางสัมผัสกำลังได้รับความนิยมอย่างมาก เทคนิคนี้เรียกว่า Leap motion ซึ่งช่วยให้เราสามารถควบคุมฟังก์ชันบางอย่างบนคอมพิวเตอร์ / แล็ปท็อปของเราได้โดยเพียงแค่โบกมือไปข้างหน้า มันเจ๋งและสนุกมากที่ได้ทำ แต่โน้ตบุ๊กเหล่านี้มีราคาสูงมาก ดังนั้นในโครงการนี้ให้เราพยายามสร้างของเราเองแล็ปท็อปการควบคุมท่าทาง / คอมพิวเตอร์โดยการรวมพลังของ Arduino และ Python
เราจะใช้สองเซ็นเซอร์อัลตราโซนิกในการกำหนดตำแหน่งของมือของเราและควบคุมเครื่องเล่นสื่อ (VLC) ตามตำแหน่ง ฉันใช้สิ่งนี้เพื่อการสาธิต แต่เมื่อคุณเข้าใจโครงการแล้วคุณสามารถทำอะไรก็ได้เพียงแค่เปลี่ยนโค้ดไม่กี่บรรทัดและควบคุมแอปพลิเคชันโปรดของคุณด้วยวิธีที่คุณชื่นชอบ
ข้อกำหนดเบื้องต้น:
เราได้กล่าวถึงโครงการไม่กี่โครงการที่รวม Arduino กับ Python ดังนั้นฉันคิดว่าคุณได้ติดตั้ง Python และไลบรารีอนุกรมแล้วและได้ลองใช้โปรเจ็กต์พื้นฐานบางอย่างเช่น LED กะพริบ ถ้าไม่อย่ากังวลคุณสามารถย้อนกลับไปที่บทช่วยสอน Arduino-Python Led Controlling และทำตามได้ ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Python และไลบรารี pyserial ก่อนดำเนินการต่อ
แนวคิดเบื้องหลังโครงการ:
แนวคิดเบื้องหลังโครงการนั้นง่ายมาก เราจะวางเซ็นเซอร์อัลตราโซนิก (US) สองตัวไว้ที่ด้านบนของจอภาพของเราและจะอ่านระยะห่างระหว่างจอภาพกับมือของเราโดยใช้ Arduino ตามค่าของระยะทางนี้เราจะดำเนินการบางอย่าง ในการดำเนินการกับคอมพิวเตอร์ของเราเราใช้ Python pyautogui library คำสั่งจาก Arduino จะถูกส่งไปยังคอมพิวเตอร์ผ่านพอร์ตอนุกรม (USB) ข้อมูลนี้จะถูกอ่านโดย python ซึ่งทำงานบนคอมพิวเตอร์และจากข้อมูลที่อ่านแล้วจะมีการดำเนินการ
แผนภูมิวงจรรวม:
ในการควบคุมพีซีด้วย Hand Gesturesเพียงแค่เชื่อมต่อเซ็นเซอร์อัลตราโซนิกสองตัวกับ Arduino เรารู้ว่าเซ็นเซอร์ของสหรัฐฯทำงานร่วมกับ 5V และด้วยเหตุนี้จึงขับเคลื่อนโดยตัวควบคุมแรงดันไฟฟ้าบนบอร์ดของ Arduino Arduino สามารถเชื่อมต่อกับพีซี / แล็ปท็อปเพื่อเปิดโมดูลและสำหรับการสื่อสารแบบอนุกรม เมื่อเชื่อมต่อเสร็จแล้วให้วางบนจอภาพของคุณตามที่แสดงด้านล่าง ฉันใช้เทปสองด้านติดไว้บนจอภาพของฉัน แต่คุณสามารถใช้ความคิดสร้างสรรค์ของคุณเองได้ หลังจากรักษาความปลอดภัยในสถานที่แล้วเราสามารถดำเนินการเขียนโปรแกรมต่อได้
การเขียนโปรแกรม Arduino ของคุณ:
Arduino ควรได้รับการตั้งโปรแกรมให้อ่านระยะห่างของมือจากเซ็นเซอร์ของสหรัฐอเมริกา โปรแกรมที่สมบูรณ์จะได้รับในตอนท้ายของหน้านี้; ด้านล่างฉันได้ให้คำอธิบายสำหรับโปรแกรม หากคุณยังใหม่กับเซ็นเซอร์อัลตราโซนิกเพียงแค่ผ่านการวัดระยะทางด้วย Arduino และเซ็นเซอร์อัลตราโซนิก
ด้วยการอ่านค่าของระยะทางเราสามารถไปถึงการกระทำบางอย่างที่ต้องควบคุมด้วยท่าทางเช่นในโปรแกรมนี้ฉันได้ตั้งโปรแกรม5 การกระทำเป็นตัวอย่าง
การดำเนินการ 1:เมื่อวางมือทั้งสองข้างขึ้นก่อนเซ็นเซอร์ในระยะทางที่ไกลมากวิดีโอในเครื่องเล่น VLC ควรเล่น / หยุดชั่วคราว
การดำเนินการที่ 2:เมื่อวางมือขวาไว้ก่อนเซ็นเซอร์ในระยะทางที่ไกลมากวิดีโอควรกรอไปข้างหน้าหนึ่งขั้น
การดำเนินการที่ 3:เมื่อวางมือซ้ายไว้ก่อนเซ็นเซอร์ในระยะทางที่ไกลมากวิดีโอควรกรอกลับหนึ่งขั้น
การดำเนินการที่ 4:เมื่อวางมือขวาไว้ก่อนเซ็นเซอร์ในระยะใกล้โดยเฉพาะจากนั้นหากเคลื่อนไปทางเซ็นเซอร์วิดีโอควรกรอไปข้างหน้าและหากย้ายออกไปวิดีโอควรกรอกลับ
การดำเนินการที่ 5:เมื่อวางมือซ้ายขึ้นก่อนเซ็นเซอร์ในระยะใกล้โดยเฉพาะจากนั้นหากเคลื่อนไปทางเซ็นเซอร์ระดับเสียงของวิดีโอควรเพิ่มขึ้นและหากเคลื่อนออกไประดับเสียงควรลดลง
ให้เราดูว่าโปรแกรมถูกเขียนขึ้นเพื่อดำเนินการข้างต้นอย่างไร เช่นเดียวกับโปรแกรมทั้งหมดที่เราเริ่มต้นด้วยการกำหนดพิน I / Oดังที่แสดงด้านล่าง เซ็นเซอร์ของสหรัฐอเมริกาสองตัวเชื่อมต่อกับพินดิจิตอล 2,3,4 และ 5 และใช้พลังงานจากพิน + 5V พินทริกเกอร์คือพินเอาต์พุตและพินเอคโค่คือพินอินพุต
การสื่อสารแบบอนุกรมระหว่าง Arduino และ python เกิดขึ้นที่อัตราการส่งข้อมูลที่ 9600
const int trigger1 = 2; // Trigger pin ของ 1st Sesnor const int echo1 = 3; // Echo pin ของ 1st Sesnor const int trigger2 = 4; // Trigger pin ของ 2nd Sesnor const int echo2 = 5; // Echo pin ของ 2nd Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, เอาท์พุท); pinMode (echo1, INPUT); pinMode (trigger2, เอาท์พุท); pinMode (echo2, อินพุต); }
เราจำเป็นต้องคำนวณระยะห่างระหว่างเซนเซอร์และมือทุกครั้งก่อนที่จะสรุปการดำเนินการใด ๆ ดังนั้นเราต้องทำหลาย ๆ ครั้งซึ่งหมายความว่าควรใช้รหัสนี้เป็นฟังก์ชัน เราได้เขียนฟังก์ชั่นชื่อการ คำนวณ ระยะทาง () ซึ่งจะส่งกลับระยะห่างระหว่างเซ็นเซอร์และมือ
/ * ### ฟังก์ชั่นคำนวณระยะทาง ### * / void คำนวณระยะทาง (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (ทริกเกอร์สูง); delayMicroseconds (10); digitalWrite (ทริกเกอร์ LOW); time_taken = pulseIn (ก้อง, สูง); ระยะ = time_taken * 0.034 / 2; ถ้า (dist> 50) dist = 50; }
ภายใน ลูป หลักของเราเราตรวจสอบค่าของระยะทางและดำเนินการตามที่กล่าวไว้ข้างต้น ก่อนหน้านั้นเราใช้สองตัวแปร distL และ distR ซึ่งได้รับการอัปเดตด้วยค่าระยะทางปัจจุบัน
คำนวณระยะทาง (trigger1, echo1); distL = ระยะ; // รับระยะทางของเซ็นเซอร์ซ้ายคำนวณระยะทาง (trigger2, echo2); distR = ระยะ; // รับระยะเซ็นเซอร์ที่ถูกต้อง
เนื่องจากเราทราบระยะห่างระหว่างเซ็นเซอร์ทั้งสองจึงสามารถเปรียบเทียบกับค่าที่กำหนดไว้ล่วงหน้าและดำเนินการบางอย่างได้ ตัวอย่างเช่นหากวางมือทั้งสองข้างห่างกัน 40 mc เราจะเล่น / หยุดวิดีโอชั่วคราว ที่นี่คำว่า"เล่น / หยุดชั่วคราว"จะถูกส่งผ่านพอร์ตอนุกรม
ถ้า ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // ตรวจจับมือทั้งสองข้าง {Serial.println ("Play / Pause"); ล่าช้า (500);}
หากวางมือขวาอย่างเดียวก่อนโมดูลเราจะกรอวิดีโอไปข้างหน้าทีละขั้นตอนและถ้าเป็นมือซ้ายเราจะกรอทีละขั้นตอน ขึ้นอยู่กับการดำเนินการที่นี่คำว่า"กรอกลับ" หรือ "ส่งต่อ"จะถูกส่งผ่านพอร์ตอนุกรม
ถ้า ((distL> 40 && distL <50) && (distR == 50)) // ตรวจจับมือซ้าย {Serial.println ("กรอกลับ"); ล่าช้า (500);} if ((distR> 40 && distR <50) && (distL == 50)) // ตรวจจับมือขวา {Serial.println ("ไปข้างหน้า"); ล่าช้า (500);}
การควบคุมระดับเสียงและการติดตามโดยละเอียดของศัตรูเราใช้วิธีการที่แตกต่างกันเพื่อป้องกันทริกเกอร์ที่ผิดพลาด ในการควบคุมระดับเสียงเราต้องวางมือซ้ายประมาณ จากนั้นคุณสามารถเลื่อนไปทางเซ็นเซอร์เพื่อลดระดับเสียงในการเคลื่อนย้ายออกจากเซ็นเซอร์เพื่อเพิ่มระดับเสียง รหัสเดียวกันแสดงอยู่ด้านล่าง จากการดำเนินการที่นี่คำว่า“ Vup” หรือ“ Vdown” จะถูกส่งผ่านพอร์ตอนุกรม
// ล็อคซ้าย - โหมดควบคุม if (distL> = 13 && distL <= 17) {delay (100); // คำนวณระยะทางถือมือ (trigger1, echo1); distL = ระยะ; ถ้า (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); ในขณะที่ (distL <= 40) {ระยะคำนวณ (trigger1, echo1); distL = ระยะ; ถ้า (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 ตามค่าเริ่มต้นคำสั่งควรเป็น
ซีดี 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 ได้ รหัสหลามสมบูรณ์จะได้รับในตอนท้ายของการกวดวิชาแต่คำอธิบายสำหรับเดียวกันมีดังนี้
ให้เรานำเข้าทั้งสามโมดูลที่จำเป็นสำหรับโครงการนี้ พวกมันคือ pyautogui งูเหลือมอนุกรมและเวลา
นำเข้า # อนุกรมนำเข้าสำหรับเวลานำเข้าการสื่อสารแบบอนุกรม # จำเป็นต้องใช้ฟังก์ชันหน่วงเวลานำเข้า pyautogui
ต่อไปเราจะสร้างการเชื่อมต่อกับ Arduino ผ่านพอร์ต COM ในคอมพิวเตอร์ของฉัน Arduino เชื่อมต่อกับ COM 18 ใช้ตัวจัดการอุปกรณ์เพื่อค้นหาว่าพอร์ต COM ใดที่ Arduino ของคุณเชื่อมต่ออยู่และแก้ไขบรรทัดต่อไปนี้ให้ถูกต้อง
ArduinoSerial = serial.Serial ('com18', 9600) # สร้างวัตถุพอร์ตอนุกรมที่เรียกว่า arduinoSerialData time.sleep (2) # รอ 2 วินาทีเพื่อให้การสื่อสารเริ่มขึ้น
ภายในลูป ในขณะที่ ไม่มีที่สิ้นสุดเราจะฟังพอร์ต COM ซ้ำ ๆ และเปรียบเทียบคำสำคัญกับงานที่ท้าทายล่วงหน้าและทำการกดคียบอร์ดตามลำดับ
ในขณะที่ 1: ขาเข้า = str (ArduinoSerial.readline ()) # อ่านข้อมูลอนุกรมและพิมพ์เป็นบรรทัดพิมพ์ขาเข้าหาก 'เล่น / หยุดชั่วคราว' ในขาเข้า: pyautogui.typewrite (, 0.2) ถ้า 'กรอกลับ' ในขาเข้า: pyautogui ฮอต ('ctrl', 'ซ้าย') ถ้า 'ไปข้างหน้า' ในขาเข้า: pyautogui.hotkey ('ctrl', 'ขวา') ถ้า 'Vup' ในขาเข้า: pyautogui.hotkey ('ctrl', 'ลง') ถ้า ' Vdown 'ในขาเข้า: pyautogui.hotkey (' ctrl ',' up ')
อย่างที่คุณเห็นในการกดปุ่มเราต้องใช้คำสั่ง “ pyautogui.typewrite (, 0.2)” ซึ่งจะกดช่องว่างสำคัญเป็นเวลา 0.2 วินาที หากคุณต้องการฮอตคีย์เช่น ctrl + S คุณสามารถใช้คำสั่งฮอตคีย์ “ pyautogui.hotkey ('ctrl', 's')”
ฉันได้ใช้รวมกันเหล่านี้เพราะพวกเขาทำงานใน VLC เครื่องเล่นสื่อคุณสามารถปรับแต่งพวกเขาในแบบที่คุณต้องการในการสร้างโปรแกรมของคุณเองเพื่อใด ๆอะไรในการควบคุมคอมพิวเตอร์ด้วยท่าทาง
การทำงานของคอมพิวเตอร์ที่ควบคุมด้วยท่าทาง:
ทำการเชื่อมต่อตามที่กำหนดไว้ข้างต้นและอัปโหลดรหัส Arduino บนบอร์ด Arduino ของคุณ จากนั้นใช้สคริปต์ python ด้านล่างและเปิดโปรแกรมบนแล็ปท็อป / คอมพิวเตอร์ของคุณ
ตอนนี้คุณสามารถเล่นภาพยนตร์ใดก็ได้บนคอมพิวเตอร์ของคุณโดยใช้เครื่องเล่นสื่อ VLC และใช้มือของคุณเพื่อควบคุมภาพยนตร์ดังที่แสดงในวิดีโอด้านล่าง
หวังว่าคุณจะเข้าใจโครงการและสนุกกับการเล่นกับมัน นี่เป็นเพียงการสาธิตและคุณสามารถใช้ความคิดสร้างสรรค์ของคุณเพื่อสร้างสิ่งต่างๆที่ควบคุมด้วยท่าทางที่เจ๋งกว่านี้ได้ แจ้งให้เราทราบว่าสิ่งนี้มีประโยชน์หรือไม่และสิ่งที่คุณจะสร้างโดยใช้สิ่งนี้ในส่วนความคิดเห็นเรายินดีที่จะทราบ