- วัสดุที่ต้องการ:
- แผนภูมิวงจรรวม:
- เปิดเครื่องการตั้งค่าของคุณ:
- การเขียนโปรแกรม Arduino ของคุณ:
- การเตรียมแอปพลิเคชัน Android โดยใช้การประมวลผล:
- การทำงานของ Arduino Inclinometer:
MPU6050เป็น IC accelerometer 3 แกนและหมุน 3 แกนรวมกันเป็นหนึ่งหน่วย นอกจากนี้ยังมีเซ็นเซอร์อุณหภูมิและ DCM สำหรับทำงานที่ซับซ้อน MPU6050 มักใช้ในการสร้าง Drone และหุ่นยนต์ระยะไกลอื่น ๆ เช่นหุ่นยนต์ปรับสมดุลในตัวเอง ในโครงการนี้เราจะได้เรียนรู้วิธีการใช้ MPU6050 จะสร้าง Inclinometer หรือวิญญาณ Leveler อย่างที่เราทราบกันดีว่าเครื่องวัดความเอียงนั้นใช้เพื่อตรวจสอบว่าพื้นผิวได้รับการปรับระดับอย่างสมบูรณ์หรือไม่โดยมีให้เลือกทั้งแบบที่เป็นฟองสบู่หรือเป็นมิเตอร์ดิจิตอล ในโครงการนี้เราจะสร้างDigital Inclinometerซึ่งสามารถตรวจสอบได้โดยใช้แอปพลิเคชัน Android. เหตุผลในการใช้จอแสดงผลระยะไกลเช่นโทรศัพท์มือถือคือเราสามารถตรวจสอบค่าจาก MPU6050 ได้โดยไม่ต้องดูฮาร์ดแวร์สิ่งนี้จะมีประโยชน์มากเมื่อวาง MPU6050 ไว้บนโดรนหรือสถานที่อื่น ๆ ที่ไม่สามารถเข้าถึงได้
วัสดุที่ต้องการ:
- Arduino Pro-mini (5V)
- MPU6050 Gyro เซนเซอร์
- โมดูลบลูทู ธ HC-05 หรือ HC-06
- บอร์ด FTDI
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
- สมาร์ทโฟน
แผนภูมิวงจรรวม:
แผนภาพวงจรที่สมบูรณ์สำหรับโครงการ Arduino Tilt Sensorนี้แสดงไว้ด้านล่าง มีส่วนประกอบเพียงสามชิ้นและสามารถสร้างขึ้นบนเขียงหั่นขนมได้อย่างง่ายดาย
MPU6050 สื่อสารด้วยความช่วยเหลือของ I2Cและด้วยเหตุนี้ขา SDA มีการเชื่อมต่อกับขา A4 ของ Arduino ซึ่งเป็นขา SDA และขา SCL เชื่อมต่อกับขา A5 ของ Arduino HC-06 บลูทู ธ โมดูลการทำงานด้วยความช่วยเหลือของการสื่อสารแบบอนุกรมจึงขา Rx ของบลูทู ธ เชื่อมต่อกับ D11 ขาและขา Tx ของบลูทู ธ เชื่อมต่อกับ D10 ขาของ Arduino พิน D10 และ D11 เหล่านี้จะถูกกำหนดค่าเป็นพินอนุกรมโดยการตั้งโปรแกรม Arduino โมดูล HC-05 และโมดูล MSP6050 ทำงานบน + 5V และด้วยเหตุนี้จึงใช้พลังงานจากพิน Vcc ของ Arduino ดังที่แสดงด้านบน
ฉันใช้สายไฟเชื่อมต่อเขียงหั่นขนมและสร้างการตั้งค่าบนเขียงหั่นขนมขนาดเล็ก เมื่อเชื่อมต่อเสร็จแล้วบอร์ดของฉันจะมีลักษณะดังนี้ด้านล่าง
เปิดเครื่องการตั้งค่าของคุณ:
คุณสามารถจ่ายไฟให้วงจรของคุณผ่านบอร์ดการเขียนโปรแกรม FTDI เหมือนที่ฉันเคยทำหรือใช้แบตเตอรี่ 9V หรืออะแดปเตอร์ 12V และเชื่อมต่อกับขา Raw ของ Arduino pro mini Arduino Pro-mini มีตัวควบคุมแรงดันไฟฟ้าในตัวซึ่งจะแปลงแรงดันไฟฟ้าภายนอกที่ควบคุม + 5V
การเขียนโปรแกรม Arduino ของคุณ:
เมื่อฮาร์ดแวร์พร้อมแล้วเราสามารถเริ่มเขียนโปรแกรม Arduino ของเราได้ เช่นเคยรหัสที่สมบูรณ์สำหรับโครงการนี้สามารถพบได้ที่ด้านล่างของหน้านี้ แต่เพื่อให้เข้าใจโครงการได้ดีขึ้นฉันได้ทำลายโค้ดเป็นข้อบกพร่องเล็ก ๆ และอธิบายเป็นขั้นตอนด้านล่าง
ขั้นตอนแรกจะได้รับการเชื่อมต่อ MPU6050 กับ Arduino สำหรับโครงการนี้เราจะใช้ไลบรารีที่พัฒนาโดย Korneliusz ซึ่งสามารถดาวน์โหลดได้จากลิงค์ด้านล่าง
MPU6050 Liberty - Korneliusz Jarzebski
ดาวน์โหลดไฟล์ ZIP และเพิ่มลงใน Arduino IDE ของคุณ จากนั้นมุ่งหน้าไปยัง File-> Examples-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw เพื่อเปิดโปรแกรมตัวอย่างที่ใช้ไลบรารีที่เราเพิ่งดาวน์โหลดมา คลิกอัปโหลดและรอให้โปรแกรมอัปโหลดไปยัง Arduino Pro mini ของคุณ เมื่อเสร็จแล้วให้เปิดจอภาพแบบอนุกรมของคุณและตั้งค่าอัตราการส่งข้อมูลเป็น 115200 และตรวจสอบว่าคุณได้รับสิ่งต่อไปนี้หรือไม่
ในขั้นต้นค่าทั้งสามจะเป็นศูนย์ แต่เมื่อคุณย้ายเขียงหั่นขนมคุณสามารถสังเกตเห็นค่าเหล่านี้ได้รับการเปลี่ยนแปลง หากมีการเปลี่ยนแปลงแสดงว่าการเชื่อมต่อของคุณถูกต้องให้ตรวจสอบการเชื่อมต่อของคุณ ใช้เวลาสักครู่ที่นี่เพื่อสังเกตว่าค่าทั้งสาม Pitch Roll และ Yawแตกต่างกันอย่างไรตามวิธีที่คุณเอียงเซ็นเซอร์ หากคุณสับสนให้กดปุ่มรีเซ็ตบน Arduino และค่าจะเริ่มต้นเป็นศูนย์อีกครั้งจากนั้นเอียงเซ็นเซอร์ไปในทิศทางเดียวและตรวจสอบว่าค่าใดแตกต่างกันไป ภาพด้านล่างจะช่วยให้คุณเข้าใจได้ดีขึ้น
ออกจากสามพารามิเตอร์เหล่านี้เรามีความสนใจเฉพาะในม้วนและทางลาดมูลค่าม้วนจะบอกเราเกี่ยวกับความโน้มเอียงในแกน Xและมูลค่าทางลาดจะบอกเราเกี่ยวกับความโน้มเอียงในแกน Y ตอนนี้เราเข้าใจพื้นฐานแล้วให้เริ่มเขียนโปรแกรม Arduino เพื่ออ่านค่าเหล่านี้ส่งไปยัง Arduino ผ่านบลูทู ธ เช่นเคยเริ่มต้นด้วยการรวมไลบรารีทั้งหมดที่จำเป็นสำหรับโครงการนี้
# รวม
จากนั้นเราก็เริ่มต้นอนุกรมซอฟแวร์สำหรับโมดูลบลูทู ธ เป็นไปได้เนื่องจากไลบรารีซอฟต์แวร์อนุกรมใน Arduino สามารถตั้งโปรแกรมพิน IO ให้ทำงานเป็นพินอนุกรมได้ ที่นี่เราใช้พินดิจิทัล D10 และ D11 โดยที่ D10 id Rx และ D11 คือ Tx
SoftwareSerial BT (10, 11); // RX, TX
ตามด้วยการเริ่มต้นตัวแปรและวัตถุที่จำเป็นสำหรับโปรแกรมและย้ายไปยังฟังก์ชันการ ตั้งค่า () ที่เราระบุอัตราการส่งข้อมูลสำหรับจอภาพอนุกรมและบลูทู ธ สำหรับ HC-05 และ HC-06 อัตราการส่งข้อมูลคือ 9600 ดังนั้นจึงจำเป็นต้องใช้เช่นเดียวกัน จากนั้นเราจะตรวจสอบว่าบัส IIC ของ Arduino เชื่อมต่อกับ MPU6050 หรือไม่หากไม่พิมพ์ข้อความเตือนและยังคงอยู่ที่นั่นตราบเท่าที่อุปกรณ์เชื่อมต่ออยู่ หลังจากนั้นเราปรับเทียบ Gyroและกำหนดค่าเกณฑ์โดยใช้ฟังก์ชันตามลำดับดังที่แสดงด้านล่าง
การตั้งค่าเป็นโมฆะ () {Serial.begin (115200); BT เริ่มต้น (9600); // เริ่มการสื่อสาร Bluetooth ที่ 9600 baudrate // เริ่มต้น MPU6050 ในขณะที่ (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("ไม่พบเซ็นเซอร์ MPU6050 ที่ถูกต้องตรวจสอบการเดินสาย!"); ล่าช้า (500); } mpu.calibrateGyro (); // ปรับเทียบไจโรสโคประหว่างเริ่มต้น mpu.setThreshold (3); // ควบคุมความไว}
บรรทัด“ mpu.calibrateGyro ();” ปรับเทียบ MPU6050สำหรับตำแหน่งที่วางอยู่ในขณะนี้ บรรทัดนี้สามารถเรียกได้หลายครั้งภายในโปรแกรมเมื่อใดก็ตามที่จำเป็นต้องปรับเทียบ MPU6050 และค่าทั้งหมดจะถูกตั้งเป็นศูนย์ “ mpu.setThreshold (3);” ฟังก์ชั่นนี้ควบคุมว่าค่าที่แตกต่างกันไปสำหรับการเคลื่อนไหวบนเซ็นเซอร์ค่าที่ต่ำเกินไปจะเพิ่มเสียงรบกวนดังนั้นโปรดใช้ความระมัดระวังขณะเล่นซอกับสิ่งนี้
ภายใน void loop () เราจะอ่านค่าของ Gyroscope และ Temperature sensorซ้ำ ๆ เพื่อคำนวณค่า pitch ม้วนและ yaw ส่งไปยังโมดูล Bluetooth สองบรรทัดต่อไปนี้จะอ่านค่า Gyro ดิบและค่าอุณหภูมิ
บรรทัดฐานเวกเตอร์ = mpu.readNormalizeGyro (); อุณหภูมิ = mpu.readTemperature ();
ต่อไปเราจะคำนวณระยะห่างการหมุนและการหันเหโดยการคูณด้วยขั้นตอนเวลาและเพิ่มเป็นค่าก่อนหน้า timestep คืออะไร แต่ช่วงเวลาระหว่างการอ่านต่อเนื่อง
pitch = pitch + norm.YAxis * timeStep; ม้วน = ม้วน + norm.XAxis * timeStep; หันเห = หันเห + norm.ZAxis * timeStep;
เพื่อทำความเข้าใจขั้นตอนเวลาให้ดีขึ้นลองดูที่บรรทัดด้านล่าง บรรทัดนี้วางไว้เพื่ออ่านค่าจาก MPU6050 ที่ช่วงเวลา 10mS หรือ 0.01 วินาที ดังนั้นเราจึงประกาศค่าของ timeStep เป็น 0.01 และใช้บรรทัดด้านล่างเพื่อถือโปรแกรมหากมีหากมีเวลาเหลือมากขึ้น. (มิลลิวินาที () - ตัวจับเวลา ()) ให้เวลาที่โปรแกรมดำเนินการจนถึงปัจจุบัน เราลบมันออกไปด้วย 0.01 วินาทีและในช่วงเวลาที่เหลือเราก็ถือโปรแกรมไว้ที่นั่นโดยใช้ฟังก์ชันหน่วงเวลา
ล่าช้า ((timeStep * 1000) - (มิลลิวินาที () - ตัวจับเวลา));
เมื่อเราอ่านและคำนวณค่าเสร็จแล้วเราสามารถส่งไปยังโทรศัพท์ของเราผ่านทาง Bluetooth แต่มีการจับที่นี่ โมดูลบลูทู ธ ที่เราใช้สามารถส่งได้เพียง 1 ไบต์ (8 บิต) ซึ่งทำให้เราสามารถส่งตัวเลขได้ตั้งแต่ 0 ถึง 255 เท่านั้นดังนั้นเราจึงต้องแยกค่าของเราและแมปภายในช่วงนี้ ทำได้โดยบรรทัดต่อไปนี้
ถ้า (ม้วน> -100 && ม้วน <100) x = แผนที่ (ม้วน -100, 100, 0, 100); ถ้า (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); ถ้า (temp> 0 && temp <50) t = 200 + int (temp);
ดังที่คุณสามารถหาได้ค่าของม้วนจะถูกจับคู่เป็น 0 ถึง 100 ในตัวแปร x และระยะห่างจะถูกจับคู่กับ 100 ถึง 200 ในตัวแปร y และอุณหภูมิจะถูกจับคู่เป็น 200 ขึ้นไปในตัวแปร t เราสามารถใช้ข้อมูลเดิมเพื่อดึงข้อมูลจากสิ่งที่เราส่งไป ในที่สุดเราก็เขียนค่าเหล่านี้ผ่านบลูทู ธโดยใช้บรรทัดต่อไปนี้
BT.write (x); BT เขียน (y); BT เขียน (t);
หากคุณเข้าใจโปรแกรมทั้งหมดแล้วให้เลื่อนลงเพื่อดูโปรแกรมและอัปโหลดไปยังบอร์ด Arduino
การเตรียมแอปพลิเคชัน Android โดยใช้การประมวลผล:
โปรแกรมหุ่นยนต์สำหรับการนี้Arduino Inclinometerได้รับการพัฒนาโดยใช้การประมวลผล IDE สิ่งนี้คล้ายกับ Arduino มากและสามารถใช้สร้างแอปพลิเคชันระบบแอปพลิเคชัน Android การออกแบบเว็บและอื่น ๆ อีกมากมาย เราได้ใช้การประมวลผลเพื่อพัฒนาโปรเจ็กต์เจ๋ง ๆ อื่น ๆ ของเราที่ระบุไว้ด้านล่างแล้ว
- เกม Ping Pong โดยใช้ Arduino
- สมาร์ทโฟนควบคุมวิทยุ FM โดยใช้การประมวลผล
- ระบบเรดาร์ Arduino โดยใช้การประมวลผลและเซ็นเซอร์อัลตราโซนิก
อย่างไรก็ตามไม่สามารถอธิบายโค้ดทั้งหมดเกี่ยวกับวิธีสร้างแอปพลิเคชันนี้ได้ คุณมีสองวิธีในการแก้ไขสิ่งนี้ คุณสามารถดาวน์โหลดไฟล์ APK จากลิงค์ด้านล่างและติดตั้งแอปพลิเคชัน Android บนโทรศัพท์ของคุณโดยตรง หรือเลื่อนด้านล่างเพื่อค้นหารหัสการประมวลผลที่สมบูรณ์และเรียนรู้ด้วยตัวเองว่ามันทำงานอย่างไร
ภายในไฟล์ ZIP คุณจะพบโฟลเดอร์ที่เรียกว่า data ซึ่งประกอบด้วยรูปภาพทั้งหมดและแหล่งข้อมูลอื่น ๆ ที่จะโหลดลงในแอปพลิเคชัน Android บรรทัดด้านล่างเป็นตัวกำหนดชื่อที่บลูทู ธ ควรเชื่อมต่อโดยอัตโนมัติ
bt.connectToDeviceByName ("HC-06");
ภายในฟังก์ชัน draw () สิ่งต่างๆจะถูกดำเนินการซ้ำ ๆ ที่นี่เราวาดภาพแสดงข้อความและทำให้แถบเคลื่อนไหวตามค่าจากโมดูลบลูทู ธ คุณสามารถตรวจสอบสิ่งที่เกิดขึ้นภายในแต่ละฟังก์ชันได้โดยอ่านผ่านโปรแกรม
วาดเป็นโมฆะ () // ลูปไม่มีที่สิ้นสุด {background (0); imageMode (กลาง); รูปภาพ (โลโก้, กว้าง / 2, สูง / 1.04, กว้าง, สูง / 12); load_images (); textfun (); getval (); }
สุดท้ายมีสิ่งที่สำคัญอีกอย่างที่ต้องอธิบายอย่าลืมว่าเราแบ่งค่า pitch, roll และ temp เป็น 0 ถึง 255 ดังนั้นที่นี่เราจะนำมันกลับมาเป็นค่าปกติอีกครั้งโดยการทำแผนที่ย้อนกลับเป็นค่าปกติ
ถ้า (ข้อมูล <100 && ข้อมูล> 0) x = แผนที่ (ข้อมูล, 0, 100, - (กว้าง / 1.5) / 3, + (กว้าง / 1.5) / 3); // x = ข้อมูล; อื่นถ้า (ข้อมูล <200 && ข้อมูล> 100) y = แผนที่ (ข้อมูล 100, 200, - (กว้าง / 4.5) /0.8, + (กว้าง / 4.5) /0.8); // y = ข้อมูล; อื่นถ้า (ข้อมูล> 200) temp = ข้อมูล -200; พิมพ์ (temp, x, y);
มีวิธีที่ดีกว่ามากในการรับข้อมูลจากโมดูลบลูทู ธ ไปยังโทรศัพท์ แต่เนื่องจากนี่เป็นเพียงโปรเจ็กต์งานอดิเรกที่เราเพิกเฉยคุณสามารถขุดลึกลงไปได้หากสนใจ
การทำงานของ Arduino Inclinometer:
หลังจากที่คุณเตรียมพร้อมกับฮาร์ดแวร์และแอปพลิเคชันแล้วก็ถึงเวลาสนุกไปกับสิ่งที่เราสร้างขึ้น อัปโหลดรหัส Arduino ไปยังบอร์ดคุณยังสามารถลบความคิดเห็นในบรรทัด Serial.println และตรวจสอบว่าฮาร์ดแวร์ทำงานตามที่คาดไว้หรือไม่โดยใช้จอภาพแบบอนุกรม อย่างไรก็ตามนั่นเป็นทางเลือกที่สมบูรณ์
เมื่ออัปโหลดรหัสแล้วให้เปิดแอปพลิเคชัน Android บนโทรศัพท์มือถือของคุณ แอปพลิเคชันควรเชื่อมต่อกับโมดูล HC-06 ของคุณโดยอัตโนมัติและจะแสดงข้อความ“ Connect to: HC-06” ที่ด้านบนของแอปพลิเคชันดังที่แสดงด้านล่าง
ในขั้นต้นค่าทั้งหมดจะเป็นศูนย์ยกเว้นค่าอุณหภูมิ เนื่องจาก Arduino ได้ปรับเทียบ MPU-6050 สำหรับตำแหน่งนี้เป็นข้อมูลอ้างอิงตอนนี้คุณสามารถเอียงฮาร์ดแวร์และตรวจสอบว่าค่าในแอปพลิเคชันมือถือมีการเปลี่ยนแปลงพร้อมกับภาพเคลื่อนไหว การทำงานทั้งหมดของแอปพลิเคชันสามารถดูได้จากวิดีโอด้านล่าง ตอนนี้คุณสามารถวางเขียงหั่นขนมได้ทุกที่และตรวจสอบว่าพื้นผิวได้รับการปรับระดับอย่างสมบูรณ์
หวังว่าคุณจะเข้าใจโครงการและเรียนรู้สิ่งที่เป็นประโยชน์จากมัน หากคุณมีข้อสงสัยโปรดใช้ส่วนความคิดเห็นด้านล่างหรือในฟอรัมเพื่อแก้ไขปัญหา