สารบัญ:

การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi: 4 ขั้นตอน (พร้อมรูปภาพ)
การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: สอนใช้ USB UART กับ ESP01S (ESP8266) อัพโหลดโค้ดด้วย Arduino IDE 2024, กรกฎาคม
Anonim
การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi
การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi
การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi
การใช้ Complex Arts Sensor Board เพื่อควบคุม Pure Data ผ่าน WiFi

คุณเคยต้องการทดลองการควบคุมด้วยท่าทางหรือไม่? ทำให้สิ่งต่าง ๆ เคลื่อนไหวด้วยการโบกมือของคุณ? ควบคุมเพลงด้วยการบิดข้อมือของคุณ? คำแนะนำนี้จะแสดงให้คุณเห็นว่า!

The Complex Arts Sensor Board (complexarts.net) เป็นไมโครคอนโทรลเลอร์อเนกประสงค์ที่ใช้ ESP32 WROOM มีคุณสมบัติทั้งหมดของแพลตฟอร์ม ESP32 รวมถึง WiFi และ Bluetooth ในตัวและหมุด GPIO ที่กำหนดค่าได้ 23 ตัว บอร์ดเซนเซอร์ยังมีคุณสมบัติ BNO_085 IMU ซึ่งเป็นโปรเซสเซอร์การเคลื่อนไหว 9 DOF ที่ทำการรวมเซ็นเซอร์ในตัวและสมการควอเทอร์เนียน ให้การวางแนวที่แม่นยำเป็นพิเศษ เวกเตอร์แรงโน้มถ่วง และข้อมูลความเร่งเชิงเส้น บอร์ดเซนเซอร์สามารถตั้งโปรแกรมได้โดยใช้ Arduino, MicroPython หรือ ESP-IDF แต่สำหรับบทเรียนนี้ เราจะเขียนโปรแกรมบอร์ดด้วย Arduino IDE สิ่งสำคัญคือต้องสังเกตว่าโมดูล ESP32 นั้นไม่สามารถตั้งโปรแกรมได้เองจาก Arduino IDE แต่การทำให้เป็นไปได้นั้นง่ายมาก มีบทช่วยสอนที่ยอดเยี่ยมที่นี่: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ ที่ควรใช้เวลาประมาณ 2 นาทีจึงจะเสร็จสมบูรณ์ การตั้งค่าสุดท้ายที่เราต้องการคือไดรเวอร์สำหรับชิป USB-to-UART บน Sensor Board ซึ่งสามารถพบได้ที่นี่: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivers. เพียงเลือกระบบปฏิบัติการของคุณและติดตั้ง ซึ่งน่าจะใช้เวลาประมาณ 2 นาที เสร็จแล้วเราก็ไปกันเลย!

[บทเรียนนี้ไม่ถือว่ามีความคุ้นเคยกับ Arduino หรือ Pure Data แต่จะไม่ครอบคลุมถึงการติดตั้ง สามารถค้นหา Arduino ได้ที่ aduino.cc Pure Data สามารถพบได้ที่ puredata.info ทั้งสองไซต์มีคำแนะนำในการติดตั้งและตั้งค่าที่ปฏิบัติตามได้ง่าย]

นอกจากนี้… แนวคิดที่กล่าวถึงในบทช่วยสอนนี้ เช่น การตั้งค่าการเชื่อมต่อ UDP การเขียนโปรแกรม ESP32 ด้วย Arduino และการสร้างแพตช์ Pure Data พื้นฐาน - เป็นหน่วยการสร้างที่สามารถนำไปใช้กับโปรเจ็กต์จำนวนนับไม่ถ้วน ดังนั้นอย่าย่อท้อเมื่อคุณทำเสร็จแล้ว ได้แนวคิดเหล่านี้ลง!

เสบียง

1. Complex Arts Sensor Board

2. Arduino IDE

3. ข้อมูลบริสุทธิ์

ขั้นตอนที่ 1: ตรวจสอบรหัส:

การตรวจสอบรหัส
การตรวจสอบรหัส
การตรวจสอบรหัส
การตรวจสอบรหัส

อันดับแรก เราจะดูโค้ด Arduino (แหล่งที่มามีอยู่ที่ https://github.com/ComplexArts/SensorBoardArduino ขอแนะนำให้คุณทำตามโค้ดเมื่อเราดำเนินการ) เราต้องการไลบรารี่บางส่วน ซึ่งหนึ่งในนั้นไม่ใช่ไลบรารี Arduino หลัก ดังนั้นคุณ อาจจำเป็นต้องติดตั้ง โปรเจ็กต์นี้ใช้ไฟล์ SparkFun_BNO080_Arduino_Library.h ดังนั้น หากคุณไม่มี คุณจะต้องไปที่ Sketch -> Include Library -> Manage Libraries พิมพ์ "bno080" และไลบรารีดังกล่าวจะปรากฏขึ้น กดติดตั้ง

อีกสามไลบรารีที่ใช้ควรมาพร้อมกับ Arduino โดยค่าเริ่มต้น อันดับแรก เราจะใช้ไลบรารี SPI เพื่อสื่อสารกับ BNO คุณยังสามารถใช้ UART ระหว่าง ESP32 และ BNO ได้ แต่เนื่องจาก SparkFun มีไลบรารีที่ใช้ SPI อยู่แล้ว เราจึงจะยึดมั่นในสิ่งนั้น (ขอบคุณ SparkFun!) การรวมไฟล์ SPI.h จะช่วยให้เราเลือกพินและพอร์ตที่เราต้องการใช้สำหรับการสื่อสาร SPI

ไลบรารี WiFi มีฟังก์ชันที่ช่วยให้เราเชื่อมต่อกับเครือข่ายไร้สายได้ WiFiUDP มีฟังก์ชันที่ช่วยให้เราสามารถส่งและรับข้อมูลผ่านเครือข่ายนั้นได้ สองบรรทัดถัดไปจะพาเราเข้าสู่เครือข่าย – ป้อนชื่อเครือข่ายและรหัสผ่านของคุณ สองบรรทัดหลังจากนั้นระบุที่อยู่เครือข่ายและพอร์ตที่เราส่งข้อมูลไป ในกรณีนี้ เราจะออกอากาศ ซึ่งหมายความว่าส่งไปให้ใครก็ได้ในเครือข่ายของเราที่กำลังฟังอยู่ หมายเลขพอร์ตกำหนดว่าใครกำลังฟังอยู่ อย่างที่เราจะเห็นในอีกสักครู่

สองบรรทัดถัดไปนี้จะสร้างสมาชิกสำหรับชั้นเรียนตามลำดับ เพื่อให้เราสามารถเข้าถึงฟังก์ชันของพวกเขาในภายหลังได้อย่างง่ายดาย

ต่อไป เรากำหนดพินที่เหมาะสมของ ESP ให้กับพินที่เกี่ยวข้องบน BNO

ตอนนี้เราตั้งค่าสมาชิกคลาส SPI และตั้งค่าความเร็วพอร์ต SPI ด้วย

ในที่สุดเราก็มาถึงฟังก์ชั่นการตั้งค่า ที่นี่ เราจะเริ่มต้นพอร์ตอนุกรมเพื่อให้เราสามารถตรวจสอบเอาต์พุตของเราได้หากต้องการ จากนั้นเราก็เริ่ม WiFi โปรดสังเกตว่าโปรแกรมรอการเชื่อมต่อ WiFi ก่อนดำเนินการต่อ เมื่อเชื่อมต่อ WiFi แล้ว เราจะเริ่มการเชื่อมต่อ UDP จากนั้นพิมพ์ชื่อเครือข่ายและที่อยู่ IP ของเราไปยังจอภาพแบบอนุกรม หลังจากนั้นเราเริ่มพอร์ต SPI และตรวจสอบการสื่อสารระหว่าง ESP และ BNO สุดท้ายนี้ เราเรียกฟังก์ชัน “enableRotationVector(50);” เนื่องจากเราจะใช้เฉพาะเวกเตอร์การหมุนสำหรับบทเรียนนี้เท่านั้น

ขั้นตอนที่ 2: ส่วนที่เหลือของรหัส…

รหัสที่เหลือ…
รหัสที่เหลือ…

ก่อนที่เราจะไปที่ main loop() เรามีฟังก์ชันที่เรียกว่า "mapFloat"

นี่คือฟังก์ชันแบบกำหนดเองที่เราได้เพิ่มเพื่อจับคู่หรือปรับขนาดค่ากับค่าอื่นๆ ฟังก์ชั่นแผนที่ในตัวใน Arduino อนุญาตให้ทำการแมปจำนวนเต็มเท่านั้น แต่ค่าเริ่มต้นทั้งหมดของเราจาก BNO จะอยู่ระหว่าง -1 ถึง 1 ดังนั้นเราจะต้องปรับขนาดด้วยตนเองให้เป็นค่าที่เราต้องการจริงๆ ไม่ต้องกังวล แต่นี่เป็นฟังก์ชันง่ายๆ ที่ทำได้ดังนี้:

ตอนนี้เรามาที่ลูปหลัก () สิ่งแรกที่คุณจะสังเกตเห็นคือฟังก์ชันการบล็อกอื่น เหมือนกับที่ทำให้โปรแกรมรอการเชื่อมต่อเครือข่าย สิ่งนี้จะหยุดจนกว่าจะมีข้อมูลจาก BNO เมื่อเราเริ่มรับข้อมูลนั้น เราจะกำหนดค่าควอเทอร์เนียนขาเข้าให้กับตัวแปรทศนิยม และพิมพ์ข้อมูลนั้นไปยังมอนิเตอร์แบบอนุกรม

ตอนนี้เราต้องแมปค่าเหล่านั้น

[คำเกี่ยวกับการสื่อสาร UDP: ข้อมูลถูกถ่ายโอนผ่าน UDP ในแพ็กเก็ต 8 บิต หรือค่าตั้งแต่ 0-255 สิ่งใดที่เกิน 255 จะถูกผลักไปยังแพ็กเก็ตถัดไป เพิ่มมูลค่าให้กับแพ็กเก็ต ดังนั้น เราจำเป็นต้องตรวจสอบให้แน่ใจว่าไม่มีค่าเกิน 255]

ดังที่กล่าวไว้ก่อนหน้านี้ เรามีค่าที่เข้ามาในช่วง -1 – 1 ซึ่งไม่ได้ให้อะไรเรามากนักในการดำเนินการ เนื่องจากสิ่งใดที่ต่ำกว่า 0 จะถูกตัดออก (หรือแสดงเป็น 0) และเราไม่สามารถทำได้ ตันที่มีค่าอยู่ระหว่าง 0 – 1 ก่อนอื่นเราต้องประกาศตัวแปรใหม่เพื่อเก็บค่าที่แมปไว้ จากนั้นเราจะนำตัวแปรเริ่มต้นนั้นมาแมปจาก -1 – 1 ถึง 0 – 255 กำหนดผลลัพธ์ให้กับตัวแปรใหม่ที่เรียกว่า น.

ตอนนี้เรามีข้อมูลที่แมปแล้ว เราก็สามารถรวมแพ็กเก็ตเข้าด้วยกันได้ ในการทำเช่นนั้น เราต้องประกาศบัฟเฟอร์สำหรับข้อมูลแพ็กเก็ต โดยให้มีขนาด [50] เพื่อให้แน่ใจว่าข้อมูลทั้งหมดจะพอดี จากนั้นเราเริ่มต้นแพ็คเก็ตด้วยที่อยู่และพอร์ตที่เราระบุไว้ข้างต้น เขียนบัฟเฟอร์ของเราและ 3 ค่าลงในแพ็คเก็ต to จากนั้นสิ้นสุดแพ็คเก็ต

สุดท้าย เราพิมพ์พิกัดที่แมปของเราไปยังจอภาพแบบอนุกรม ตอนนี้รหัส Arduino เสร็จแล้ว! แฟลชรหัสไปที่ Sensor Board และตรวจสอบซีเรียลมอนิเตอร์เพื่อให้แน่ใจว่าทุกอย่างทำงานตามที่คาดไว้ คุณควรเห็นค่าควอเทอร์เนียนและค่าที่แมป

ขั้นตอนที่ 3: การเชื่อมต่อกับ Pure Data…

การเชื่อมต่อกับ Pure Data…
การเชื่อมต่อกับ Pure Data…

ตอนนี้สำหรับ Pure Data! เปิด Pure Data และเริ่มแพทช์ใหม่ (ctrl n) แพตช์ที่เราจะสร้างนั้นง่ายมาก โดยมีเพียงเจ็ดออบเจ็กต์เท่านั้น สิ่งแรกที่เราจะสร้างคือวัตถุ [netreceive] นี่คือส่วนเสริมของโปรแกรมแก้ไขของเรา ซึ่งจัดการการสื่อสาร UDP ทั้งหมด สังเกตว่ามีสามอาร์กิวเมนต์สำหรับวัตถุ [netreceive]; -u ระบุ UDP, -b ระบุไบนารี และ 7401 เป็นพอร์ตที่เรากำลังฟังอยู่ คุณยังสามารถส่งข้อความ “ฟัง 7401” ไปที่ [netreceive] เพื่อระบุพอร์ตของคุณ

เมื่อได้ข้อมูลเข้ามาแล้ว เราต้องแกะมันออก หากเราเชื่อมต่อวัตถุ [พิมพ์] กับ [netrecieve] เราจะเห็นข้อมูลในขั้นต้นมาถึงเราเป็นกระแสของตัวเลข แต่เราต้องการแยกวิเคราะห์ตัวเลขเหล่านั้นและใช้แต่ละตัวเลขเพื่อสิ่งที่แตกต่างออกไป ตัวอย่างเช่น คุณอาจต้องการใช้การหมุนแกน X เพื่อควบคุมระดับเสียงของออสซิลเลเตอร์ และแกน Y สำหรับระดับเสียง หรือความเป็นไปได้อื่นๆ จำนวนเท่าใดก็ได้ ในการทำเช่นนั้น สตรีมข้อมูลต้องผ่านวัตถุ [แกะ] ที่มีสามทุ่น (f f f) เป็นอาร์กิวเมนต์

ตอนนี้คุณมาไกลถึงขนาดนี้แล้ว โลกทั้งใบก็คือหอยนางรมของคุณ! คุณมีคอนโทรลเลอร์ไร้สายที่คุณสามารถใช้จัดการทุกอย่างที่คุณต้องการในจักรวาล Pure Data แต่หยุดอยู่ตรงนั้น! นอกจาก Rotation Vector แล้ว ให้ลองใช้มาตรความเร่งหรือเครื่องวัดความเข้มข้นของสนามแม่เหล็ก ลองใช้ฟังก์ชันพิเศษของ BNO เช่น "แตะสองครั้ง" หรือ "เขย่า" สิ่งที่ต้องทำคือการขุดเล็กน้อยในคู่มือผู้ใช้ (หรือคำแนะนำถัดไป…)

ขั้นตอนที่ 4:

สิ่งที่เราได้ทำข้างต้นคือการตั้งค่าการสื่อสารระหว่าง Sensor Board และ Pure Data หากคุณต้องการเริ่มมีความสนุกสนานมากขึ้น ให้เชื่อมต่อเอาท์พุตข้อมูลของคุณไปยังออสซิลเลเตอร์บางตัว! เล่นกับการควบคุมระดับเสียง! อาจควบคุมการหน่วงเวลาหรือเสียงก้อง! โลกคือหอยนางรมของคุณ!

แนะนำ: