İçindekiler:

HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme: 6 Adım
HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme: 6 Adım

Video: HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme: 6 Adım

Video: HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme: 6 Adım
Video: ARDUINODA I2C PROTOKOLÜ MPU6050 İVME SENSÖRÜ İLE SERVO KONTROLÜ ( ARDUİNO DERSLERİ #55 ) 2024, Kasım
Anonim
HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme
HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme

Bu projede Arduino UNO ve ESP8266 NodeMCU arasındaki iletişim için mpu6050 ve HC-12 kullanarak bir servo motorun konumunu kontrol ediyoruz.

Adım 1: BU PROJE HAKKINDA

HC-12 RF modülüne dayalı başka bir IoT projesidir. Burada, arduino'dan gelen imu(mpu6050) verileri servo motoru (Nodemcu ile bağlantılı) kontrol etmek için kullanılır. Burada, mpu6050 adım verilerinin (x ekseni etrafında dönme) bir işleme taslağı ile görselleştirildiği (daha sonra tartışılacaktır) arduino tarafında da veri görselleştirmesi yapılır. Temelde bu proje, Arduino ve ESP8266 nodemcu ile Imu & Servo kontrolünün farklı yönlerini hatırlamak için sadece biraz ısınma.

AMAÇ

Bunun amacı oldukça açık, IMU'nun adım değerini kullanarak Servo motorun konumunu kontrol ediyoruz. Ve hep birlikte bu adım ve senkronize motor konumu İşleme ile görselleştirilir.

2. Adım: Donanım Gerekli

NodeMCU ESP8266 12E Wifi modülü

lehimsiz devre tahtası

atlama teli

MPU6050 hızlandırma+jiro

HC-12 RF modülleri (çift)

SG90 Servo motor

Adım 3: Devre ve Bağlantılar

Devre ve Bağlantılar
Devre ve Bağlantılar
Devre ve Bağlantılar
Devre ve Bağlantılar

Bağlantılar düz ileri. Nodemcu'nuzun 3.3V'si ile servoyu çalıştırabilirsiniz. Nodemcu'nuz o pimde bu kadar voltaj varsa, servoya güç sağlamak için Vin'i de kullanabilirsiniz. Ancak çoğu Lolin kartının Vin'de 5V'si yoktur (üreticiye bağlıdır).

Bu devre şemaları EasyADA kullanılarak yapılmıştır.

4. Adım: ÇALIŞMA

ÇALIŞMA
ÇALIŞMA

Arduino çizimi başlar başlamaz, eğim açısını (-45 ile 45 arasında değişen) Nodemcu'nun 0 ila 180 derece Servo konumu ile haritalanan hc12 alıcısına gönderir. Burada eğim açısını -45 ile +45 derece arasında kullandık, böylece bunu kolayca Servo konumuna eşleyebiliriz.

Şimdi, harita yöntemini neden aşağıdaki gibi kullanabileceğimizi düşünüyorsunuz: -

int konum = harita(val, -45, 45, 0, 180);

Çünkü hc12 vericisi tarafından gönderilen negatif açı şu şekilde alınır:

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

2. yarı: (T)-45 ila -1 => 255 ila 210(R)

Bu yüzden onu 0 ile 180 arasında eşleştirmeniz gerekir.

if(val>=0 && val<=45) konum = (val*2)+90; başka konum = (val-210)*2;

Bazı alakasız hatalar nedeniyle harita yönteminden kaçınıyorum. Bunu deneyebilir ve sizinle çalıştığını yorumlayabilirsiniz

if(val>=0 && val<=45) konum = harita(val, 0, 45, 90, 180); başka konum = harita(val, 255, 210, 0, 90); // 4. argüman 2 olabilir (kontrol edebilirsiniz)

MPU6050 Adım Açısı Hesaplama

IMU'dan ham veri vermeye dayanan MPU6050_tockn kitaplığını kullanıyorum.

int pitchAngle = mpu6050.getAngleX()

Bu bize x ekseni etrafındaki dönüş açısını verecektir. Şekilde gördüğünüz gibi, imu'm breadboard'a dikey olarak yerleştirilmiştir, bu nedenle pitch and roll ile karıştırmayın. Aslında eksenin her zaman koparma panosunda basılı olduğunu görmelisiniz.

Bu kitaplık sayesinde, belirli işlemler için belirli kayıtları okumak için dahili elektroniklerle uğraşmanıza gerek kalmaz. sadece işi belirtin ve bitirdiniz!

Btw açıyı kendiniz hesaplamak istiyorsanız. Aşağıdaki şekilde kolayca yapabilirsiniz:

#Dahil etmek

const int MPU6050_addr=0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; geçersiz kurulum(){ Wire.begin(); Wire.beginTransmission(MPU6050_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); Seri.başla(9600); } void loop(){ Wire.beginTransmission(MPU6050_addr); Wire.write(0x3B); Wire.endTransmission(yanlış); Wire.requestFrom(MPU6050_addr, 14, true); AcX=Wire.read()<<8|Wire.read(); AcY=Tel.read()<<8|Tel.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 = harita(AcX, minVal, maxVal, -90, 90); int yAng = harita(AcY, minVal, maxVal, -90, 90); int zAng = harita(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= "); // Aralık Seri.println(x); Serial.print("AngleY= "); //Seri Seri.println(y); Serial.print("AngleZ= "); //Yaw Serial.println(z); }

Ancak açıyı elde etmek için bu kadar kod yazmanıza gerek yok. Sahnenin arkasındaki gerçekleri bilmelisiniz, ancak diğer insanların kütüphanesini kullanmak birçok projede çok etkilidir. Bu imu ve diğer yaklaşımlar hakkında daha fazla filtrelenmiş veri elde etmek için aşağıdaki bağlantıdan okuyabilirsiniz: Explore-mpu6050.

İletim ucundaki arduino kodum MPU6050_tockn kitaplığının yardımıyla yalnızca 30 satıra sahiptir, bu nedenle IMU'nun işlevselliğinde bazı temel değişikliklere ihtiyacınız olmadıkça bir kitaplık kullanmak iyidir. IMU'nun DMP'sini (Dijital hareket işlemcisi) kullanarak bazı filtrelenmiş veriler istiyorsanız, Jeff Rowberg tarafından I2Cdev adlı bir kitaplık çok yararlıdır.

İşleme ile Entegrasyon

Burada İşleme, MPU6050'den gelen ham verilerle hesaplanan IMU'nun x ekseni hakkındaki dönme verilerini görselleştirmek için kullanılır. Gelen ham verileri SerialEvent'te aşağıdaki şekilde alıyoruz:

void serialEvent(Seri myPort) {

inString = myPort.readString(); try { // Verileri ayrıştırın //println(inString); String 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]); } } başka { println(inString); } } } catch (İstisna e) { println("Yakalanan İstisna"); } }

Burada, bu adımda eklenen resimdeki görselleştirmeyi görebilirsiniz. Nodemcu sonunda alınan pozisyon verileri de resimde görüldüğü gibi seri monitörde görülmektedir.

Adım 5: KOD

Github deposunu ekledim. Projelerinizde kullanmak için klonlayabilir ve çatallayabilirsiniz.

my_code

Depo, verici (arduino+IMU) ve alıcı (Nodemcu+Servo) için 2 arduino taslağı içerir.

Ve bir işleme taslağı. Projenize yardımcı olacaksa depoya yıldız ekleyin.

Bu talimatta, R- Alıcı ve T- Verici

6. Adım: VİDEO GÖSTERİMİ

Videoyu yarın ekleyeceğim. Haberdar olmak için beni takip edin.

Hepinize teşekkür ederim!

Önerilen: