- ข้อกำหนดเบื้องต้น
- แผนภูมิวงจรรวม
- ผังกระบวนการสำหรับ Air Mouse
- การเขียนโปรแกรม Arduino สำหรับ Air Mouse
- สคริปต์ไดรเวอร์ Python
- ทดสอบ Arduino Air Mouse
เคยสงสัยไหมว่าโลกของเรากำลังก้าวไปสู่ความเป็นจริงที่น่าทึ่งได้อย่างไร เรากำลังค้นหาวิธีการและวิธีการใหม่ ๆ ในการโต้ตอบกับสิ่งรอบข้างของเราอย่างต่อเนื่องโดยใช้ความเป็นจริงเสมือนจริงผสมความจริงเสริม ฯลฯ อุปกรณ์ใหม่ ๆ ออกมาทุกวันด้วยเทคโนโลยีการเว้นจังหวะที่รวดเร็วเหล่านี้เพื่อสร้างความประทับใจให้เราด้วยเทคโนโลยีโต้ตอบ
เทคโนโลยีที่สมจริงเหล่านี้ใช้ในการเล่นเกมกิจกรรมเชิงโต้ตอบความบันเทิงและแอพพลิเคชั่นอื่น ๆ อีกมากมาย ในบทช่วยสอนนี้เราจะมาทำความรู้จักกับวิธีการโต้ตอบดังกล่าวซึ่งจะช่วยให้คุณมีวิธีใหม่ในการโต้ตอบกับระบบของคุณแทนที่จะใช้เมาส์ที่น่าเบื่อ นักเล่นเกมของเราต้องรู้ว่าไม่กี่ปีหลัง Nintendo บริษัท เกมขายแนวคิดของวิธีการโต้ตอบแบบ 3 มิติเพื่อโต้ตอบกับคอนโซลของพวกเขาด้วยความช่วยเหลือของคอนโทรลเลอร์มือถือที่เรียกว่าคอนโทรลเลอร์ Wii มันใช้accelerometer เพื่อหาท่าทางของคุณสำหรับการเล่นเกมและส่งไปยังระบบไร้สายหากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับเทคโนโลยีนี้คุณสามารถตรวจสอบสิทธิบัตรของพวกเขา EP1854518B1 สิ่งนี้จะช่วยให้คุณทราบว่าเทคโนโลยีนี้ทำงานอย่างไร
แรงบันดาลใจจากแนวคิดนี้เรากำลังจะสร้าง"เมาส์อากาศ"เพื่อโต้ตอบกับระบบเพียงแค่เลื่อนคอนโซลไปในอากาศ แต่แทนที่จะใช้การอ้างอิงพิกัด 3 มิติเราจะใช้การอ้างอิงพิกัด 2 มิติเท่านั้น เราสามารถเลียนแบบการทำงานของเมาส์คอมพิวเตอร์ได้เนื่องจากเมาส์ทำงานในสองมิติ X และ Y
แนวคิดเบื้องหลังWireless 3D Air Mouseนี้ง่ายมากเราจะใช้ accelerometer เพื่อรับค่าของการเร่งความเร็วของการกระทำและการเคลื่อนไหวของ "Air mouse" ตามแนวแกน x และ y จากนั้นยึดตามค่า accelerometer เราจะควบคุมเคอร์เซอร์ของเมาส์และดำเนินการบางอย่างด้วยความช่วยเหลือของไดรเวอร์ซอฟต์แวร์ python ที่ทำงานบนคอมพิวเตอร์
ข้อกำหนดเบื้องต้น
- Arduino Nano (ทุกรุ่น)
- Accelerometer ADXL335 โมดูล
- โมดูล Bluetooth HC-05
- กดปุ่ม
- คอมพิวเตอร์ที่ติดตั้ง Python
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการติดตั้ง python ในคอมพิวเตอร์ให้ทำตามบทช่วยสอนก่อนหน้านี้เกี่ยวกับ Arduino-Python LED Controlling
แผนภูมิวงจรรวม
ในการควบคุมคอมพิวเตอร์ของคุณด้วยการเคลื่อนไหวของมือคุณจำเป็นต้องมีเครื่องวัดความเร่งที่ให้ความเร่งตามแกน X และ Y และเพื่อให้ระบบไร้สายทั้งหมดมีโมดูลบลูทู ธ เพื่อถ่ายโอนสัญญาณแบบไร้สายไปยังระบบของคุณ
ที่นี่มีการใช้เครื่องวัดความเร่ง ADXL335 ซึ่งเป็นโมดูลสามแกนที่ใช้ MEMS ซึ่งส่งออกความเร่งตามแกน X, Y และ Z แต่อย่างที่บอกไปก่อนหน้านี้สำหรับการควบคุมเมาส์เราจะต้องการเพียงการเร่งความเร็วตามแกน X และ Y เท่านั้น. เรียนรู้เพิ่มเติมเกี่ยวกับการใช้ADXL335 accelerometer กับ Arduinoกับโครงการก่อนหน้าของเรา:
- ระบบแจ้งเตือนอุบัติเหตุรถยนต์ที่ใช้ Arduino โดยใช้ GPS, GSM และ Accelerometer
- เกม Ping Pong โดยใช้ Arduino และ Accelerometer
- หุ่นยนต์ควบคุมด้วยท่าทางด้วยมือ Accelerometer โดยใช้ Arduino
- เครื่องตรวจจับแผ่นดินไหวโดยใช้ Arduino
ที่นี่ขา Xout และ Yout ของaccelerometerเชื่อมต่อกับพินAnalog, A0 และ A1 ของ Arduino และสำหรับการส่งสัญญาณจาก Arduino ไปยังระบบโมดูล Bluetooth HC-05จะใช้ที่นี่เนื่องจาก Bluetooth ทำงานผ่าน Tx และ Rx การเชื่อมต่อพินดังนั้นเราจึงใช้หมุดอนุกรมของซอฟต์แวร์ D2 และ D3 มันเชื่อมต่อโดยใช้ซอฟต์แวร์อนุกรมเพราะถ้าเราเชื่อมต่อบลูทู ธ กับอนุกรมฮาร์ดแวร์และเริ่มรับการอ่านผ่านคอนโซล python มันจะแสดงข้อผิดพลาดสำหรับอัตราการส่งข้อมูลที่ไม่ตรงกันเนื่องจากบลูทู ธ จะสื่อสารกับ python ด้วยอัตราการส่งข้อมูลของมันเอง เรียนรู้เพิ่มเติมเกี่ยวกับการใช้โมดูลบลูทู ธ โดยทำตามโครงการต่างๆที่ใช้บลูทู ธ โดยใช้ไมโครคอนโทรลเลอร์ต่างๆรวมถึง Arduino
ที่นี่เราได้ใช้ปุ่มกดสามปุ่ม - หนึ่งปุ่มสำหรับเรียกใช้เมาส์ Air และอีกสองปุ่มสำหรับการคลิกซ้ายและขวาดังที่แสดงในภาพด้านล่าง:
ผังกระบวนการสำหรับ Air Mouse
แผนภูมิการไหลแสดงขั้นตอนการทำงานของ Air Mouse ที่ใช้ Arduino:
1. ระบบจะตรวจสอบอย่างต่อเนื่องเพื่อให้ไกกลไกถูกกดจนกว่าจะไม่มีการกดเราจึงสามารถทำงานได้ตามปกติด้วยเมาส์ของคอมพิวเตอร์
2. เมื่อระบบตรวจพบการกดปุ่มการควบคุมเมาส์จะโอนไปยังเมาส์อากาศ
3. เมื่อกดปุ่มทริกเกอร์ระบบจะเริ่มโอนการอ่านค่าของเมาส์ไปยังคอมพิวเตอร์ การอ่านระบบประกอบด้วยการอ่านค่าความเร่งและการอ่านค่าสำหรับการคลิกซ้ายและขวา
4. การอ่านระบบประกอบด้วยสตรีมข้อมูล 1 ไบต์หรือ 8 บิตซึ่งสามบิตแรกประกอบด้วยพิกัด X สามบิตที่สองประกอบด้วยพิกัด Y บิตสุดท้ายที่สองคือบิตสถานะสำหรับการรับ สถานะของการคลิกซ้ายของเมาส์และบิตสุดท้ายคือบิตสถานะสำหรับการรับสถานะของการคลิกขวา
5. ค่าของสามบิตแรก ได้แก่ พิกัด X สามารถอยู่ในช่วงตั้งแต่ 100 <= Xcord <= 999 ในขณะที่ค่าของพิกัด Y สามารถอยู่ในช่วงตั้งแต่ 100 <= Ycord <= 800 ค่าสำหรับการคลิกขวาและคลิกซ้ายคือค่าไบนารีซึ่งเป็น 0 หรือ 1 ซึ่ง 1 ระบุว่าเกิดการคลิกและ 0 นั้นผู้ใช้ไม่ได้คลิก
6. เพื่อไม่ให้การกระเด้งของปุ่มส่งผลต่อตำแหน่งของเคอร์เซอร์การหน่วงเวลา 4 วินาทีที่ทราบจะถูกเก็บไว้ทุกครั้งที่คลิกปุ่มทริกเกอร์ของเมาส์
7. สำหรับการคลิกขวาและซ้ายในเมาส์อากาศเราต้องกดปุ่มกดซ้ายหรือขวาก่อนและหลังจากนั้นเราต้องกดปุ่มทริกเกอร์เพื่อเลื่อนไปยังตำแหน่งของเมาส์อากาศที่เราต้องการ
การเขียนโปรแกรม Arduino สำหรับ Air Mouse
Arduino ควรได้รับการตั้งโปรแกรมให้อ่านค่าความเร่งในแกน X และ Y โปรแกรมที่สมบูรณ์จะได้รับในตอนท้ายล่างนี้เป็นตัวอย่างที่สำคัญจากรหัส
การตั้งค่าตัวแปรส่วนกลาง
ตามที่กล่าวไว้ก่อนหน้านี้เราจะเชื่อมต่อโมดูลบลูทู ธ ด้วยหมุดอนุกรมของซอฟต์แวร์ ดังนั้นในการตั้งค่าซีเรียลซอฟต์แวร์เราจำเป็นต้องประกาศไลบรารีของซอฟต์แวร์ซีเรียลและตั้งค่าพินสำหรับ Tx และ Rx ใน Arduino Nano และ Uno Pin 2 และ 3 สามารถทำงานเป็นอนุกรมซอฟต์แวร์ได้ ต่อไปเราจะประกาศวัตถุ Bluetooth จากไลบรารีอนุกรมของซอฟต์แวร์เพื่อตั้งค่าพินสำหรับ Tx และ Rx
# รวม
การตั้งค่าเป็นโมฆะ ()
ในฟังก์ชั่น การตั้งค่า เราจะตั้งค่าตัวแปรเพื่อบอกโปรแกรมว่าจะทำหน้าที่เป็นอินพุตหรือเอาต์พุต ปุ่มทริกเกอร์จะถูกตั้งค่าเป็นอินพุตแบบดึงขึ้นและคลิกซ้ายและขวาจะถูกประกาศเป็นอินพุตและตั้งค่าเป็นสูงเพื่อให้ทำหน้าที่เป็นอินพุตพูลอัพ
ตั้งอัตรารับส่งข้อมูลสำหรับการสื่อสารแบบอนุกรมและบลูทู ธ เป็น 9600
การตั้งค่าเป็นโมฆะ () { pinMode (x, INPUT); pinMode (y, อินพุต); pinMode (ทริกเกอร์, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, อินพุต); PinMode (นำ, เอาท์พุท); digitalWrite (คลิกสูง); digitalWrite (rclick, สูง); Serial.begin (9600); บลูทู ธ เริ่มต้น (9600); }
ห่วงเป็นโมฆะ ()
เนื่องจากเราต้องการ ปุ่มทริกเกอร์ เพื่อบอกว่าเมื่อใดที่เราจำเป็นต้องส่งสตรีมข้อมูลให้กับระบบดังนั้นเราจึงตั้งค่ารหัสทั้งหมดภายในลูป while ซึ่งจะตรวจสอบสถานะดิจิทัลของทริกเกอร์แบบดึงขึ้นอย่างต่อเนื่องเมื่อมันต่ำลง ส่งต่อสำหรับการประมวลผล
ในขณะที่เราได้ติด LED เพื่อแจ้งให้เราทราบสถานะของระบบเมื่อกดปุ่มทริกเกอร์ในตอนแรกเราจะตั้งค่า led ให้ต่ำนอกลูป while เนื่องจากเป็นเงื่อนไขเริ่มต้นและสูงภายในลูป while ซึ่งจะทำให้ไฟ LED สว่างขึ้น เมื่อใดก็ตามที่ปุ่มเรียกถูกกด
ในการอ่านสถานะของปุ่มคลิกซ้ายและขวาเราได้ประกาศทั่วโลกสองตัวแปร lclick และ rclick ซึ่งค่าเริ่มต้นถูกตั้งค่าเป็น 0
และใน ลูป ให้กำหนดค่าของตัวแปรเหล่านั้นตามสถานะดิจิทัลของปุ่มคลิกซ้ายและขวาเพื่อตรวจสอบว่ามีการกดปุ่มหรือไม่
เราจะอ่านค่าของพิน X และ Y out ของ accelerometer โดยใช้ฟังก์ชัน analogRead และจะแมปค่าเหล่านั้นกับขนาดหน้าจอเพื่อให้ตัวชี้เมาส์เคลื่อนที่ไปทั่วทั้งหน้าจอ เนื่องจากขนาดหน้าจอคือพิกเซลในหน้าจอเราจึงต้องตั้งค่าให้เหมาะสมและเนื่องจากเราต้องการให้ค่าผลลัพธ์เป็นตัวเลขสามหลักเราจึงตั้งใจตั้งค่าช่วงสำหรับ X เป็น 100 <= X <= 999 และในทำนองเดียวกัน ค่าสำหรับ Y เป็น 100 <= Y <= 800 โปรดจำไว้ว่าพิกเซลกำลังอ่านจากมุมบนซ้ายนั่นคือมุมบนซ้ายมีค่า (0,0) แต่เนื่องจากเราได้ประกาศตัวเลขสามหลักสำหรับค่า x และ y ของเราจะอ่านจากจุด (100,100)
นอกจากนี้ให้พิมพ์ค่าพิกัดและสถานะของการคลิกบนซีเรียลและบลูทู ธ ด้วยความช่วยเหลือของ ฟังก์ชัน Serial.print และ bluetooth.print ซึ่ง ช่วยในการรับค่าบนจอภาพแบบอนุกรมและผ่านระบบของคุณผ่านบลูทู ธ
ในที่สุดเนื่องจากการตีกลับของปุ่มค่าเดียวอาจถูกทำซ้ำซึ่งจะทำให้เคอร์เซอร์ของเมาส์ค้างอยู่ในตำแหน่งเดียวดังนั้นเพื่อกำจัดสิ่งนี้เราต้องเพิ่มการหน่วงเวลานี้
โมฆะ loop () { digitalWrite (led, LOW); ในขณะที่ (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = แผนที่ (xh, 286,429,100,999); ycord = แผนที่ (yh, 282,427,100,800); Serial.print (xcord); Serial.print (ycord); ถ้า (lstate == LOW) Serial.print (1); อื่น Serial.print (0); ถ้า (rstate == LOW) Serial.print (1); อื่น Serial.print (0); Bluetooth.print (xcord); Bluetooth.print (ycord); ถ้า (lstate == LOW) bluetooth.print (1); อื่น บลูทู ธ พิมพ์ (0); ถ้า (rstate == LOW) bluetooth.print (1); อื่น ๆ bluetooth.print (0); ล่าช้า (4000); }}
สคริปต์ไดรเวอร์ Python
ณ ตอนนี้เราได้ดำเนินการกับฮาร์ดแวร์และส่วนเฟิร์มแวร์เรียบร้อยแล้วเพื่อให้เมาส์อากาศทำงานได้เราจำเป็นต้องมีสคริปต์ไดรเวอร์ซึ่งสามารถถอดรหัสสัญญาณจากเมาส์อากาศไปสู่การเคลื่อนไหวของเคอร์เซอร์ได้ดังนั้นเราจึงเลือกสำหรับสิ่งนี้ Python Pythonเป็นภาษาสคริปต์และด้วยการเขียนสคริปต์ที่นี่เราหมายความว่ามันช่วยให้เราสามารถควบคุมโปรแกรมอื่นได้เนื่องจากเรากำลังควบคุมเคอร์เซอร์ของเมาส์อยู่ที่นี่
ดังนั้นเปิด python shell ของคุณและติดตั้งไลบรารีต่อไปนี้โดยใช้คำสั่งด้านล่าง:
pip ติดตั้ง pip อนุกรม ติดตั้ง pyautogui
อนุกรม เป็นห้องสมุดสำหรับหลามซึ่งจะช่วยให้เราได้รับข้อมูลจากอินเตอร์เฟซอนุกรมเช่นพอร์ต COM และยังช่วยให้เราจัดการกับมันขณะที่ pyautogui เป็นห้องสมุดสำหรับหลามที่จะได้รับการควบคุมมากกว่าคุณสมบัติ GUI ในกรณีนี้เมาส์
ตอนนี้เรามาดูรหัสสำหรับไดรเวอร์สิ่งแรกที่เราต้องทำคือการนำเข้าไลบรารีอนุกรมและ pyautogui จากนั้นจากไลบรารีอนุกรมเราต้องตั้งค่าพอร์ต com สำหรับการสื่อสารด้วยอัตราการส่งข้อมูลที่ 9600 เช่นเดียวกับ Bluetooth.serial กำลังทำงานที่ สำหรับสิ่งนี้คุณจะต้องเชื่อมต่อโมดูลบลูทู ธ กับระบบของคุณจากนั้นในการตั้งค่าระบบคุณต้องตรวจสอบว่าพอร์ต com ใดที่เชื่อมต่อกับ
สิ่งต่อไปคือการอ่านการสื่อสารแบบอนุกรมจากบลูทู ธ ไปยังระบบและเพื่อให้มันดำเนินต่อไปอย่างต่อเนื่องให้ส่วนที่เหลือของโค้ดวนซ้ำอย่างต่อเนื่องด้วยความช่วยเหลือในขณะที่ 1.
ดังที่ได้กล่าวไว้ก่อนหน้านี้ว่า Arduino กำลังส่ง 8 บิต 6 ตัวแรกสำหรับพิกัดและสองตัวสุดท้ายสำหรับสถานะของปุ่มคลิก ดังนั้นอ่านบิตทั้งหมดด้วยความช่วยเหลือของ ser.read และตั้งค่าความยาวเป็น 8 บิต
จากนั้นแบ่งบิตสำหรับพิกัดเคอร์เซอร์และการคลิกโดยการหั่นเป็นชิ้น ๆ จากนั้นจึงแบ่งบิตเคอร์เซอร์ออกเป็นพิกัด X และ Y แยกกัน เช่นเดียวกันกับการคลิกซ้ายและขวา
จากการสื่อสารเราได้รับสตริงไบต์และเราจำเป็นต้องแปลงเป็นจำนวนเต็มเพื่อให้พอดีกับพิกัดเราทำได้โดยการถอดรหัสจากนั้นพิมพ์เป็นจำนวนเต็ม
ตอนนี้ในการย้ายเคอร์เซอร์เราใช้ฟังก์ชันpyautogui moveto ซึ่งใช้เป็นอาร์กิวเมนต์พิกัดจำนวนเต็มและย้ายเคอร์เซอร์ไปที่ตำแหน่งนั้น
ตรวจสอบการคลิกครั้งต่อไปเราทำได้โดยใช้สองบิตสุดท้ายและฟังก์ชั่นการคลิกของ pyautogui การคลิกเริ่มต้นคือคลิกซ้ายหนึ่งครั้งอย่างไรก็ตามเราสามารถตั้งค่าให้เป็นขวาได้โดยการประกาศค่าปุ่มไปทางขวาเรายังสามารถกำหนดจำนวนคลิกเพื่อ ตั้งค่าเป็นดับเบิ้ลคลิกโดยตั้งค่าพารามิเตอร์คลิกเป็น 2
ด้านล่างนี้คือรหัส Python ที่สมบูรณ์ที่จะรันบนคอมพิวเตอร์:
นำเข้าการนำเข้าแบบอนุกรม pyautogui ser = serial.Serial ('com3', 9600) ในขณะที่ 1: k = ser.read (8) เคอร์เซอร์ = k คลิก = k x = เคอร์เซอร์ y = เคอร์เซอร์ l = คลิก r = คลิก xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) ถ้า l == 49: pyautogui.click (คลิก = 2) elif r = = 49: pyautogui.click (ปุ่ม = 'ขวา', คลิก = 2)
ทดสอบ Arduino Air Mouse
ดังนั้นสำหรับการใช้งาน Air Mouse ให้แนบแหล่งจ่ายไฟเข้าไป อาจเป็นได้จากสล็อต Arduino Nano USB หรือจากแหล่งจ่ายไฟที่มีการควบคุม 5v โดยใช้ 7805 IC จากนั้นเรียกใช้สคริปต์ไดรเวอร์ python โดยตั้งค่าพอร์ต com ที่บลูทู ธ ของคุณเชื่อมต่ออยู่ ขณะที่สคริปต์ทำงานคุณจะเห็นเวลาหน่วงในการกะพริบของบลูทู ธ หมายความว่ามันเชื่อมต่อกับระบบของคุณ จากนั้นสำหรับการใช้งานให้คลิกปุ่มทริกเกอร์และคุณจะเห็นตำแหน่งของพิกัดจะเปลี่ยนไปและหากคุณต้องการคลิกซ้ายหรือขวาจากนั้นกดปุ่มกดซ้ายหรือขวาและปุ่มทริกเกอร์พร้อมกันก่อนคุณจะเห็นการกระทำของการคลิกที่ ตำแหน่งที่เปลี่ยนแปลงของเคอร์เซอร์
ตรวจสอบวิดีโอการทำงานโดยละเอียดด้านล่าง