Mündəricat:

HC-12 ilə Arduino və ESP8266 arasındakı MPU6050-dən istifadə edərək servoya nəzarət: 6 addım
HC-12 ilə Arduino və ESP8266 arasındakı MPU6050-dən istifadə edərək servoya nəzarət: 6 addım

Video: HC-12 ilə Arduino və ESP8266 arasındakı MPU6050-dən istifadə edərək servoya nəzarət: 6 addım

Video: HC-12 ilə Arduino və ESP8266 arasındakı MPU6050-dən istifadə edərək servoya nəzarət: 6 addım
Video: Как запрограммировать модуль реле Wi-Fi ESP8266 ESP-01 2024, Iyul
Anonim
HC-12 ilə Arduino və ESP8266 arasında MPU6050 istifadə edərək servoya nəzarət
HC-12 ilə Arduino və ESP8266 arasında MPU6050 istifadə edərək servoya nəzarət

Bu layihədə, Arduino UNO və ESP8266 NodeMCU arasında əlaqə üçün mpu6050 və HC-12 istifadə edərək bir servo motorun vəziyyətini idarə edirik.

Addım 1: BU PROJE HAQQINDA

HC-12 RF moduluna əsaslanan başqa bir IoT layihəsidir. Burada arduinodan imu (mpu6050) məlumatları servo motoru idarə etmək üçün istifadə olunur (Nodemcu ilə əlaqəlidir). Burada, məlumatların vizuallaşdırılması, mpu6050 pitch məlumatlarının (x oxu ətrafında fırlanma) emal eskizi ilə görüntüləndiyi arduino tərəfində də aparılır (daha sonra müzakirə ediləcək). Əsasən bu layihə Arduino və ESP8266 nodemcu ilə Imu & Servo nəzarətinin fərqli cəhətlərini xatırlamaq üçün bir az istiləşmədir.

MƏQSƏD

Bunun olduqca aydın məqsədi, IMU -nun addım dəyərindən istifadə edərək Servo motorun mövqeyini idarə edirik. Və hamısı birlikdə bu meydança və sinxron motor mövqeyi Qenerasiya ilə görüntülənir.

Addım 2: Avadanlıq tələb olunur

NodeMCU ESP8266 12E Wifi modulu

Lehimsiz çörək taxtası

Jumper teli

MPU6050 accelo+girro

HC-12 RF modulları (cüt)

SG90 Servo motor

Addım 3: Dövrə və Bağlantılar

Dövrə və Əlaqələr
Dövrə və Əlaqələr
Dövrə və Əlaqələr
Dövrə və Əlaqələr

Əlaqələr düzdür. Nodemcu'nun 3.3V ilə servoya güc verə bilərsiniz. Nodemcu'nun bu pində bu qədər gərginlik varsa, Vindən istifadə edərək servoya güc verə bilərsiniz. Lakin əksər Lolin lövhələrində Vin -də 5V yoxdur (istehsalçıdan asılıdır).

Bu sxemlər EasyADA istifadə edərək hazırlanmışdır.

Addım 4: İŞLƏ

İŞLƏYİR
İŞLƏYİR

Arduino eskizi işə başlayan kimi, 0 -180 dərəcə Servo mövqeyi ilə eşlenen Nodemcu hc12 qəbuledicisinə (-45 ilə 45 arasında dəyişir) addım açısını göndərəcək. Burada -45 -dən +45 dərəcəyə qədər olan bucaqdan istifadə etdik ki, onu Servo mövqeyinə asanlıqla görə bilək.

İndi düşünürsünüz ki, niyə sadəcə xəritədən istifadə edə bilərik:

int pos = xəritə (val, -45, 45, 0, 180);

Çünki hc12 vericisi tərəfindən göndərilən mənfi açı belə alınır:

1. yarı: (T) 0-45 => 0-45 (R)

İkinci yarı: (T) -45 ilə -1 => 255 ilə 210 (R)

Buna görə 0 -dan 180 -ə qədər xəritələşdirməlisiniz

əgər (val> = 0 && val <= 45) pos = (val*2) +90; başqa pos = (val-210)*2;

Mənasız bir səhv səbəbiylə xəritə metodundan qaçıram. Bunu sınaya və sizinlə işlədiyini şərh edə bilərsiniz

if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = xəritə (val, 255, 210, 0, 90); // 4 -cü arqument 2 ola bilər (yoxlaya bilərsiniz)

MPU6050 Pitch açısının hesablanması

IMU -dan xam məlumatların verilməsinə əsaslanan MPU6050_tockn kitabxanasından istifadə edirəm.

int pitchAngle = mpu6050.getAngleX ()

Bu bizə x oxu ətrafında fırlanma bucağı verəcək. Şəkildə gördüyünüz kimi, imu çörək taxtasına dikey şəkildə yerləşdirilib, buna görə meydança və rulonla qarışdırmayın. Əslində həmişə oxun qırılma lövhəsində yazıldığını görməlisiniz.

Bu kitabxana vasitəsi ilə, xüsusi əməliyyat üçün xüsusi qeydləri oxumağın daxili elektronikası haqqında narahat olmaq lazım deyil. yalnız işi təyin edirsiniz və bitirdiniz!

Btw, bucağı özünüz hesablamaq istəyirsinizsə. Bunu asanlıqla aşağıdakı kimi edə bilərsiniz:

#daxil edin

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 (doğru); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (yanlış); Wire.requestFrom (MPU6050_addr, 14, doğru); 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 = xəritə (AcX, minVal, maxVal, -90, 90); int yAng = xəritə (AcY, minVal, maxVal, -90, 90); int zAng = xəritə (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); }

Ancaq bucağı əldə etmək üçün bu qədər kodu yazmağınız lazım deyil. Səhnənin arxasındakı faktları bilməlisiniz, ancaq digər insanların kitabxanasından istifadə etmək bir çox layihədə çox təsirlidir. Aşağıdakı linkdən daha çox süzülmüş məlumat əldə etmək üçün bu imu və digər təsdiqləmələr haqqında oxuya bilərsiniz: Explore-mpu6050.

Verici ucundakı arduino kodum MPU6050_tockn kitabxanasının köməyi ilə cəmi 30 sətirdən ibarətdir, buna görə də IMU -nun funksionallığında bəzi əsas dəyişikliklərə ehtiyacınız olmadığı halda kitabxanadan istifadə etmək yaxşıdır. İMU -nun DMP (Rəqəmsal hərəkət prosessoru) istifadə edərək bəzi süzülmüş məlumatları istəsəniz Jeff Rowberg tərəfindən I2Cdev adlı bir kitabxana çox faydalıdır.

Qenerasiya ilə inteqrasiya

Burada Emal, MPU6050-dən gələn xam məlumatlarla hesablandığı kimi IMU-nun x oxu ilə bağlı fırlanma məlumatlarının görüntülənməsi üçün istifadə olunur. SerialEvent -ə daxil olan xam məlumatları aşağıdakı şəkildə alırıq:

boş serialEvent (Serial myPort) {

inString = myPort.readString (); cəhd edin {// Veriləri təhlil edin // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0]. bərabərdir ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} başqa {println (inString); }}} tutmaq (İstisna e) {println ("Tutulan İstisna"); }}

Burada, bu addımda əlavə olunan görüntüdə görselleştirmeyi görə bilərsiniz. Nodemcu ucunda alınan mövqe məlumatları görüntüdə göstərildiyi kimi serial monitorda da görünür.

Addım 5: KOD

Github anbarını əlavə etdim. Layihələrinizdə istifadə etmək üçün klonlaşdıra bilərsiniz.

my_code

Repoya ötürücü (arduino+IMU) və alıcı (Nodemcu+Servo) üçün 2 arduino eskizi daxildir.

Və bir emal eskizi. Layihənizdə kömək edərsə repo ulduzlayın.

Bu təlimatlandırmada, R- Alıcı və T- Verici

Addım 6: VİDEO NAMONSTRASİYASI

Videonu sabah əlavə edəcəm. Xəbərdar olmaq üçün məni izləyin.

Hamınıza təşəkkür edirəm!

Tövsiyə: