Სარჩევი:

სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12: 6 ნაბიჯი
სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12: 6 ნაბიჯი

ვიდეო: სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12: 6 ნაბიჯი

ვიდეო: სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12: 6 ნაბიჯი
ვიდეო: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, ივლისი
Anonim
სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12– ით
სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12– ით

ამ პროექტში ჩვენ ვაკონტროლებთ სერვო ძრავის პოზიციას mpu6050 და HC-12 გამოყენებით Arduino UNO- სა და ESP8266 NodeMCU- ს შორის კომუნიკაციისთვის.

ნაბიჯი 1: ამ პროექტის შესახებ

ეს არის კიდევ ერთი IoT პროექტი, რომელიც დაფუძნებულია HC-12 RF მოდულზე. აქ, arduino– ს imu (mpu6050) მონაცემები გამოიყენება სერვო ძრავის გასაკონტროლებლად (დაკავშირებულია ნოდემკუსთან). აქ, მონაცემთა ვიზუალიზაცია ასევე ხორციელდება არდუინოს მხარეს, სადაც mpu6050 მოედნის მონაცემები (ბრუნვა x ღერძის გარშემო) ვიზუალიზდება დამუშავების ესკიზით (განხილული მოგვიანებით). ძირითადად ეს პროექტი მხოლოდ ოდნავ გახურებულია იმახსოვრებს Imu & Servo კონტროლის სხვადასხვა ასპექტებს Arduino და ESP8266 nodemcu.

მიზანი

ამ საკმაოდ მკაფიო მიზანია, ჩვენ ვაკონტროლებთ სერვო ძრავის პოზიციას IMU– ს მოედნის მნიშვნელობის გამოყენებით. და ყველა ერთად ეს მოედანზე და სინქრონიზებული საავტომობილო პოზიცია არის visualized ერთად დამუშავება.

ნაბიჯი 2: საჭიროა აპარატურა

NodeMCU ESP8266 12E Wifi მოდული

შედუღების გარეშე დაფა

ჯუმბერის მავთული

MPU6050 accelo+გირო

HC-12 RF მოდულები (წყვილი)

SG90 სერვო ძრავა

ნაბიჯი 3: წრე და კავშირი

წრე და კავშირები
წრე და კავშირები
წრე და კავშირები
წრე და კავშირები

კავშირები პირდაპირ წინ არის. თქვენ შეგიძლიათ ჩართოთ სერვო 3.3V თქვენი Nodemcu– ით. თქვენ ასევე შეგიძლიათ გამოიყენოთ Vin სერვერის გასაძლიერებლად, თუ თქვენს ნოდემკუს აქვს ამდენი ძაბვა ამ პინზე. მაგრამ ლოლინის დაფების უმეტესობას არ აქვს 5V Vin– ზე (დამოკიდებულია მწარმოებელზე).

ეს წრიული დიაგრამები დამზადებულია EasyADA– ს გამოყენებით.

ნაბიჯი 4: მუშაობა

სამუშაო
სამუშაო

არდუინოს ესკიზის დაწყებისთანავე, ის გამოაგზავნის მოედნის კუთხეს (რომელიც მერყეობს -45 -დან 45 -მდე) ნოდემკუს hc12 მიმღებამდე, რომელიც ასახულია 0 -დან 180 გრადუსამდე სერვო პოზიციით. აქ ჩვენ გამოვიყენეთ მოედნის კუთხე -45 -დან +45 გრადუსამდე, ასე რომ ჩვენ შეგვიძლია მარტივად დავასახელოთ ის სერვო პოზიციაზე.

ახლა თქვენ ფიქრობთ, რატომ შეგვიძლია ჩვენ უბრალოდ გამოვიყენოთ რუქის მეთოდი შემდეგნაირად:-

int pos = რუკა (val, -45, 45, 0, 180);

რადგან hc12 გადამცემის მიერ გაგზავნილი უარყოფითი კუთხე მიიღება როგორც:

პირველი ნახევარი: (T) 0 -დან 45 => 0 -დან 45 -მდე (რ)

მე -2 ნახევარი: (T) -45 დან -1 => 255 დან 210 (R)

ასე რომ, თქვენ უნდა შეადგინოთ იგი 0 -დან 180 -მდე

if (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;

რუქის მეთოდს ვერიდები რაღაც შეუსაბამო შეცდომის გამო. შეგიძლიათ სცადოთ და დაწეროთ, რომ ეს თქვენთან მუშაობს

if (val> = 0 && val <= 45) pos = რუკა (val, 0, 45, 90, 180); else pos = რუკა (val, 255, 210, 0, 90); // მეოთხე არგუმენტი შეიძლება იყოს 2 (შეგიძლიათ შეამოწმოთ)

MPU6050 Pitch Angle გაანგარიშება

მე ვიყენებ MPU6050_tockn ბიბლიოთეკას, რომელიც ემყარება IMU– ს ნედლი მონაცემების გაცემას.

int pitchAngle = mpu6050.getAngleX ()

ეს გვაძლევს ბრუნვის კუთხეს x ღერძის გარშემო. როგორც თქვენ ნახეთ ფიგურაში, ჩემი იმუ ვერტიკალურად არის მოთავსებული პურის დაფაზე, ასე რომ ნუ აღრევთ მოედანთან და რულეტში. სინამდვილეში თქვენ ყოველთვის უნდა ნახოთ ღერძი დაბეჭდილი გარღვევის დაფაზე.

ამ ბიბლიოთეკის საშუალებით თქვენ არ უნდა შეგაწუხოთ კონკრეტული ოპერატორებისათვის კონკრეტული რეგისტრების წაკითხვის შიდა ელექტრონიკა. თქვენ მხოლოდ მიუთითეთ სამუშაო და თქვენ დასრულებული ხართ!

Btw თუ გსურთ თავად გამოთვალოთ კუთხე. ამის გაკეთება მარტივად შეგიძლიათ შემდეგნაირად:

#ჩართეთ

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (ჭეშმარიტი); სერიული.დაწყება (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); მავთულის მოთხოვნა (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 ("AngleX ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }

მაგრამ, არ არის აუცილებელი, რომ თქვენ დაწეროთ ამდენი კოდი კუთხის მისაღებად. თქვენ უნდა იცოდეთ ფაქტები სცენის მიღმა, მაგრამ სხვა ადამიანების ბიბლიოთეკის გამოყენება ძალიან ეფექტურია ბევრ პროექტში. თქვენ შეგიძლიათ წაიკითხოთ ამ imu და სხვა მიახლოებების შესახებ, რათა მიიღოთ მეტი გაფილტრული მონაცემები შემდეგი ბმულიდან: Explore-mpu6050.

ჩემს არდუინოს კოდს გადამცემი ბოლოს აქვს მხოლოდ 30 სტრიქონი MPU6050_tockn ბიბლიოთეკის დახმარებით, ამიტომ ბიბლიოთეკის გამოყენება კარგია თუ თქვენ არ გჭირდებათ რაიმე ძირითადი ცვლილებები IMU ფუნქციონირებაში. ბიბლიოთეკა სახელწოდებით I2Cdev ჯეფ როუბერგის მიერ ძალიან სასარგებლოა თუ გსურთ გაფილტრული მონაცემები IMU– ს DMP (ციფრული მოძრაობის პროცესორის) გამოყენებით.

ინტეგრაცია დამუშავებასთან

აქ დამუშავება გამოიყენება ვიზუალურად ვიზუალურად ბრუნვის მონაცემების შესახებ x ღერძის IMU როგორც გამოითვლება ნედლი მონაცემებით მოდის MPU6050. ჩვენ ვიღებთ შემოსულ ნედლეულ მონაცემებს SerialEvent– ში შემდეგი წესით:

void serialEvent (სერიული myPort) {

inString = myPort.readString (); სცადეთ {// მონაცემების გაანალიზება // println (inString); სიმებიანი dataStrings = გაყოფილი (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} else {println (inString); }}} დაჭერა (გამონაკლისი ე) {println ("დაიჭირეს გამონაკლისი"); }}

აქ თქვენ შეგიძლიათ ნახოთ ვიზუალიზაცია ამ ნაბიჯში თანდართულ სურათზე. ნოდემკუს ბოლოს მიღებული პოზიციის მონაცემები ასევე ჩანს სერიულ მონიტორზე, როგორც ეს მოცემულია სურათზე.

ნაბიჯი 5: კოდი

მე დავურთე github საცავი. თქვენ შეგიძლიათ კლონირება და ჩანგალი გამოიყენოთ თქვენს პროექტებში.

ჩემი_ კოდი

რეპო შეიცავს 2 არდუინოს ესკიზს გადამცემისთვის (arduino+IMU) და მიმღებისთვის (Nodemcu+Servo).

და ერთი დამუშავების ესკიზი. მონიშნეთ რეპო, თუ ეს დაგეხმარებათ თქვენს პროექტში.

ამ ინსტრუქციურად, R- მიმღები & T- გადამცემი

ნაბიჯი 6: ვიდეოს დემონსტრაცია

ვიდეოს ხვალ დავამატებ. გამომყევი შეტყობინების მისაღებად.

Მადლობა ყველას!

გირჩევთ: