Სარჩევი:
- ნაბიჯი 1: ამ პროექტის შესახებ
- ნაბიჯი 2: საჭიროა აპარატურა
- ნაბიჯი 3: წრე და კავშირი
- ნაბიჯი 4: მუშაობა
- ნაბიჯი 5: კოდი
- ნაბიჯი 6: ვიდეოს დემონსტრაცია
ვიდეო: სერვოს კონტროლი MPU6050– ს შორის Arduino– სა და ESP8266– ს შორის HC-12: 6 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
ამ პროექტში ჩვენ ვაკონტროლებთ სერვო ძრავის პოზიციას 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: ვიდეოს დემონსტრაცია
ვიდეოს ხვალ დავამატებ. გამომყევი შეტყობინების მისაღებად.
Მადლობა ყველას!
გირჩევთ:
რა არის სერვოს შიგნით და როგორ გამოვიყენოთ Arduino– ს სრული გაკვეთილით: 6 ნაბიჯი
რა არის სერვოს შიგნით და როგორ გამოვიყენოთ Arduino– ს სრული სამეურვეო საშუალებით: ამ სამეურვეოში, მოდით გამოვიკვლიოთ რა არის servow უყურეთ ამ ვიდეო გაკვეთილს
სიკაშკაშის კონტროლი PWM დაფუძნებული LED კონტროლი Push ღილაკების, ჟოლოს Pi და Scratch გამოყენებით: 8 ნაბიჯი (სურათებით)
სიკაშკაშის კონტროლი PWM დაფუძნებული LED კონტროლი Push Buttons, Raspberry Pi და Scratch გამოყენებით: მე ვცდილობდი მეპოვა გზა იმის ახსნა, თუ როგორ მუშაობდა PWM ჩემს მოსწავლეებზე, ამიტომ მე დავაყენე საკუთარი თავი ამოცანა ვცდილობდი გავაკონტროლო LED სიკაშკაშე 2 ღილაკის გამოყენებით - ერთი ღილაკი გაზრდის LED- ს სიკაშკაშეს და მეორე აფერხებს მას. წინსვლისთვის
ESP8266 RGB LED STRIP WIFI კონტროლი - NODEMCU როგორც IR დისტანციური მართვის წამყვანი ზოლისთვის, რომელიც კონტროლდება Wifi - RGB LED STRIP სმარტფონის კონტროლი: 4 ნაბიჯი
ESP8266 RGB LED STRIP WIFI კონტროლი | NODEMCU როგორც IR დისტანციური მართვის წამყვანი ზოლები Wifi- ზე კონტროლირებადი | RGB LED STRIP სმარტფონის კონტროლი: გამარჯობა ბიჭებო, ამ სახელმძღვანელოში ჩვენ ვისწავლით თუ როგორ გამოიყენოთ nodemcu ან esp8266 როგორც IR დისტანციური მართვა RGB LED ზოლის გასაკონტროლებლად და Nodemcu კონტროლდება სმარტფონის მიერ wifi– ზე. ასე რომ, ძირითადად თქვენ შეგიძლიათ აკონტროლოთ RGB LED STRIP თქვენი სმარტფონით
ტროფის ბურთის საათი სერვოს გამოყენებით: 18 ნაბიჯი
ტროფის ბურთის საათი სერვოის გამოყენებით: საათი მოდის ყველა ფორმაში. მაგრამ მე მინდა გავაკეთო რაღაც ახალი სფეროს ფორმის საათი, სადაც წუთის ციფერბლატი არის სფეროს ქვედა ნახევარი, ხოლო საათები - სფეროს ზედა ნახევარი. უპირველეს ყოვლისა იფიქრეთ ჩვეულებრივი საათის გადაკეთებაზე. მაგრამ სანამ წუთი მოძრაობს საათში
Accesspoint - სადგურის კომუნიკაცია ორ ESP8266 MCU– ს შორის: 3 ნაბიჯი
Accesspoint - სადგურის კომუნიკაცია ორ ESP8266 MCU– ს შორის: გამარჯობათ შემქმნელებო! ჩემს წინა ინსტრუქციებში მე WiFi კავშირი შევიტანე ორ ESP8266 MCU– ს შორის სახლის WiFi როუტერის საშუალებით. როგორც ვნახე კომენტარიდან არიან შემქმნელები, რომელთაც სურთ გამოიყენონ ESP8266 MCU როუტერის დიაპაზონიდან შორს. ასე რომ, აქ არის ბარი