สารบัญ:
- ขั้นตอนที่ 1: เกี่ยวกับโครงการนี้
- ขั้นตอนที่ 2: ต้องใช้ฮาร์ดแวร์
- ขั้นตอนที่ 3: วงจรและการเชื่อมต่อ
- ขั้นตอนที่ 4: การทำงาน
- ขั้นตอนที่ 5: CODE
- ขั้นตอนที่ 6: การสาธิตวิดีโอ
วีดีโอ: การควบคุมเซอร์โวโดยใช้ MPU6050 ระหว่าง Arduino และ ESP8266 ด้วย HC-12: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
ในโครงการนี้ เรากำลังควบคุมตำแหน่งของเซอร์โวมอเตอร์โดยใช้ mpu6050 และ HC-12 สำหรับการสื่อสารระหว่าง Arduino UNO และ ESP8266 NodeMCU
ขั้นตอนที่ 1: เกี่ยวกับโครงการนี้
เป็นโครงการ IoT อีกโครงการหนึ่งที่ใช้โมดูล RF HC-12 ที่นี่ข้อมูล imu (mpu6050) จาก arduino ใช้เพื่อควบคุมเซอร์โวมอเตอร์ (เชื่อมต่อกับ Nodemcu) ที่นี่ การสร้างภาพข้อมูลยังดำเนินการที่ด้าน Arduino โดยที่ข้อมูลระดับเสียงของ mpu6050 (การหมุนเกี่ยวกับแกน x) จะแสดงภาพด้วยภาพร่างการประมวลผล (จะกล่าวถึงในภายหลัง) โดยพื้นฐานแล้วโครงการนี้เป็นเพียงการอุ่นเครื่องเล็กน้อยสำหรับการจดจำแง่มุมต่างๆ ของการควบคุม Imu & Servo ด้วย Arduino และ ESP8266 nodemcu
วัตถุประสงค์
วัตถุประสงค์ที่ชัดเจนคือ เรากำลังควบคุมตำแหน่งของเซอร์โวมอเตอร์โดยใช้ค่าพิทช์ของ IMU และเมื่อรวมกันแล้วระยะพิทช์และตำแหน่งของมอเตอร์ที่ซิงโครไนซ์จะแสดงให้เห็นด้วยการประมวลผล
ขั้นตอนที่ 2: ต้องใช้ฮาร์ดแวร์
NodeMCU ESP8266 12E โมดูล Wifi
เขียงหั่นขนมไร้บัดกรี
สายจัมเปอร์
MPU6050 คันเร่ง+ไจโร
โมดูล RF HC-12 (คู่)
SG90 เซอร์โวมอเตอร์
ขั้นตอนที่ 3: วงจรและการเชื่อมต่อ
การเชื่อมต่อตรงไปตรงมา คุณสามารถจ่ายไฟให้กับเซอร์โวด้วย Nodemcu 3.3V ของคุณ คุณยังสามารถใช้ Vin เพื่อจ่ายไฟให้กับเซอร์โวได้หาก nodemcu ของคุณมีแรงดันไฟฟ้าบนพินนั้นมาก แต่บอร์ด Lolin ส่วนใหญ่ไม่มี 5V ที่ Vin (ขึ้นอยู่กับผู้ผลิต)
แผนภาพวงจรเหล่านี้สร้างขึ้นโดยใช้ EasyADA
ขั้นตอนที่ 4: การทำงาน
ทันทีที่ร่าง Arduino เริ่มต้น มันจะส่งมุมพิทช์ (ซึ่งอยู่ในช่วง -45 ถึง 45) ไปยังตัวรับ hc12 ของ Nodemcu ที่จับคู่กับตำแหน่งเซอร์โว 0 ถึง 180 องศา ที่นี่เราใช้มุมพิทช์ตั้งแต่ -45 ถึง +45 องศา เพื่อให้เราสามารถแมปกับตำแหน่งเซอร์โวได้อย่างง่ายดาย
ตอนนี้ คุณกำลังคิดว่าทำไมเราถึงใช้วิธีแผนที่ง่ายๆ ได้ดังนี้:-
int pos = แผนที่ (val, -45, 45, 0, 180);
เนื่องจากได้รับมุมลบที่ส่งโดยตัวส่ง hc12 เป็น:
ครึ่งแรก: (T)0 ถึง 45 => 0 ถึง 45(R)
ครึ่งหลัง: (T)-45 ถึง -1 => 255 ถึง 210(R)
ดังนั้นคุณต้องแมปมันกับ 0 ถึง 180 as
if(val>=0 && val<=45) pos = (val*2)+90; อื่น ๆ pos = (val-210)*2;
ฉันกำลังหลีกเลี่ยงวิธีการทำแผนที่เนื่องจากมีข้อผิดพลาดที่ไม่เกี่ยวข้อง คุณสามารถลองและแสดงความคิดเห็นว่าใช้ได้กับคุณ
if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); อื่น pos = แผนที่ (val, 255, 210, 0, 90); // อาร์กิวเมนต์ที่ 4 สามารถเป็น 2 (คุณสามารถตรวจสอบได้)
MPU6050 การคำนวณมุมพิทช์
ฉันใช้ไลบรารี MPU6050_tockn ซึ่งอิงจากการให้ข้อมูลดิบจาก IMU
int pitchAngle = mpu6050.getAngleX()
จะได้มุมการหมุนรอบแกน x ดังที่คุณเห็นในภาพ imu ของฉันถูกวางในแนวตั้งบนเขียงหั่นขนม ดังนั้นอย่าสับสนกับ pitch และ roll จริงๆแล้วคุณควรเห็นแกนพิมพ์อยู่บนกระดานฝ่าวงล้อม
ผ่านห้องสมุดนี้ คุณไม่ต้องกังวลเกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์ภายในของการอ่านการลงทะเบียนเฉพาะสำหรับการทำงานเฉพาะ คุณระบุเฉพาะงานและคุณทำเสร็จแล้ว!
แต่ถ้าคุณต้องการคำนวณมุมด้วยตัวเอง คุณสามารถทำได้อย่างง่ายดายดังนี้:
#รวม
const int MPU6050_addr=0x68; int16_t AcX, AcY, AcZ, อุณหภูมิ, GyroX, GyroY, GyroZ; การตั้งค่าเป็นโมฆะ () { Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(จริง); Serial.begin(9600); } วงเป็นโมฆะ () { Wire.beginTransmission (MPU6050_addr); Wire.write(0x3B); Wire.endTransmission (เท็จ); Wire.requestFrom(MPU6050_addr, 14, จริง); AcX=Wire.read()<<8|Wire.read(); AcY=Wire.read()<<8|Wire.read(); AcZ=Wire.read()<<8|Wire.read(); Temp=Wire.read()<<8|Wire.read(); GyroX=Wire.read()<<8|Wire.read(); GyroY=Wire.read()<<8|Wire.read(); GyroZ=Wire.read()<<8|Wire.read();
int xAng = แผนที่ (AcX, minVal, maxVal, -90, 90); int yAng = แผนที่ (AcY, minVal, maxVal, -90, 90); int zAng = แผนที่ (AcZ, minVal, maxVal, -90, 90); x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI); Serial.print("มุมX= "); // ระยะห่าง Serial.println(x); Serial.print("มุมY= "); //ม้วน Serial.println(y); Serial.print("มุมZ= "); //หันเห Serial.println(z); }
แต่คุณไม่จำเป็นต้องเขียนโค้ดมากขนาดนี้เพื่อให้ได้มุม คุณควรทราบข้อเท็จจริงเบื้องหลัง แต่การใช้ห้องสมุดของผู้อื่นมีประสิทธิภาพมากในหลายโครงการ คุณสามารถอ่านเกี่ยวกับ imu นี้และแนวทางอื่นๆ เพื่อรับข้อมูลที่กรองเพิ่มเติมได้จากลิงก์ต่อไปนี้: Explore-mpu6050
รหัส Arduino ของฉันที่จุดสิ้นสุดการส่งสัญญาณมีเพียง 30 บรรทัดด้วยความช่วยเหลือของห้องสมุด MPU6050_tockn ดังนั้นการใช้ห้องสมุดจึงดีเว้นแต่คุณไม่จำเป็นต้องเปลี่ยนแปลงหลักในการทำงานของ IMU ห้องสมุดชื่อ I2Cdev โดย Jeff Rowberg มีประโยชน์มากหากคุณต้องการข้อมูลที่กรองโดยใช้ DMP (ตัวประมวลผลการเคลื่อนไหวดิจิทัล) ของ IMU
บูรณาการกับการประมวลผล
ที่นี่ การประมวลผลใช้สำหรับการแสดงภาพข้อมูลการหมุนเกี่ยวกับแกน x ของ IMU ตามที่คำนวณโดยข้อมูลดิบที่มาจาก MPU6050 เราได้รับข้อมูลดิบขาเข้าใน SerialEvent ในลักษณะต่อไปนี้:
เป็นโมฆะ serialEvent (อนุกรม myPort) {
inString = myPort.readString(); ลอง {// แยกวิเคราะห์ข้อมูล //println(inString); สตริง dataStrings = split(inString, ':'); if (dataStrings.length == 2) { if (dataStrings[0].equals("RAW")) { for (int i = 0; i < dataStrings.length - 1; i++) { raw = float (dataStrings[i+1]); } } อื่น { println (inString); } } } catch (ข้อยกเว้น e) { println ("จับข้อยกเว้น"); } }
ที่นี่คุณสามารถดูการสร้างภาพข้อมูลในภาพที่แนบมาในขั้นตอนนี้ ข้อมูลตำแหน่งที่ได้รับที่ปลาย nodemcu จะเห็นได้บนจอภาพแบบอนุกรมตามที่แสดงในภาพ
ขั้นตอนที่ 5: CODE
ฉันได้แนบที่เก็บ github คุณสามารถโคลนและแยกมันเพื่อใช้ในโครงการของคุณ
my_code
repo ประกอบด้วย 2 ภาพร่าง Arduino สำหรับตัวส่ง (arduino+IMU) และตัวรับ (Nodemcu+Servo)
และหนึ่งร่างการประมวลผล ติดดาว repo หากสิ่งนี้ช่วยในโครงการของคุณ
ในคำสั่งสอนนี้
R- ตัวรับ & T- ตัวส่งสัญญาณ
ขั้นตอนที่ 6: การสาธิตวิดีโอ
ฉันจะแนบวิดีโอในวันพรุ่งนี้ ติดตามฉันเพื่อรับการแจ้งเตือน
ขอบคุณทุกคน!
แนะนำ:
RS485 ระหว่าง Arduino และ Raspberry Pi: 7 ขั้นตอน
RS485 ระหว่าง Arduino และ Raspberry Pi: สำหรับโรงเรียน ฉันต้องทำโปรเจ็กต์ ฉันเลือกที่จะสร้างตัวควบคุมเรือนกระจกอัจฉริยะที่ควบคุมโดย Raspberry Pi เซ็นเซอร์จะถูกขับเคลื่อนโดย Arduino uno ในช่วงหลายเดือนต่อจากนี้ ฉันจะโพสต์การทำโปรเจ็กต์นี้ทีละขั้นตอนโดย
Blinds Control ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: 5 ขั้นตอน (พร้อมรูปภาพ)
การควบคุมมู่ลี่ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นว่าฉันเพิ่มระบบอัตโนมัติให้กับมู่ลี่ของฉันอย่างไร ฉันต้องการเพิ่มและลบระบบอัตโนมัติได้ ดังนั้นการติดตั้งทั้งหมดจึงเป็นแบบหนีบ ส่วนหลักคือ: สเต็ปเปอร์มอเตอร์ ตัวขับสเต็ปควบคุม bij ESP-01 เกียร์และการติดตั้ง
DIY IBeacon และ Beacon Scanner ด้วย Raspberry Pi และ HM13: 3 ขั้นตอน
DIY IBeacon และ Beacon Scanner ด้วย Raspberry Pi และ HM13: Story A beacon จะส่งสัญญาณอย่างต่อเนื่องเพื่อให้อุปกรณ์บลูทู ธ อื่น ๆ รู้ว่ามีอยู่ และฉันอยากได้บีคอนบลูทูธเพื่อติดตามกุญแจมาตลอด เพราะฉันลืมเอามันมาเหมือน 10 ครั้งในปีที่แล้ว และฉันก็เกิดขึ้น
การสื่อสาร Modbus TCP ระหว่าง Arduino และอุปกรณ์อุตสาหกรรม: 3 ขั้นตอน
การสื่อสาร Modbus TCP ระหว่าง Arduino และอุปกรณ์อุตสาหกรรม: วิธีอุตสาหกรรมในการควบคุมบอร์ด Arduino ด้วย HMI อุตสาหกรรมและเชื่อมโยงไปยังเครือข่ายอุตสาหกรรมด้วยการสื่อสาร Modbus TCP
การควบคุม IO ด้วย Arduino + Esp8266 (NodeMCU) และ Ubidots: 5 ขั้นตอน
การควบคุม IO ด้วย Arduino + Esp8266 (NodeMCU) และ Ubidots: ฉันจะแสดงขั้นตอนง่ายๆ ในการควบคุมอุปกรณ์ใดๆ ผ่านอินเทอร์เน็ตโดยใช้แพลตฟอร์ม Ubidots IoT และโมดูล NodeMCU WiFi ด้วย Arduino IDE