İçindekiler:
- Adım 1: BU PROJE HAKKINDA
- 2. Adım: Donanım Gerekli
- Adım 3: Devre ve Bağlantılar
- 4. Adım: ÇALIŞMA
- Adım 5: KOD
- 6. Adım: VİDEO GÖSTERİMİ
Video: HC-12 ile Arduino ve ESP8266 Arasında MPU6050 Kullanarak Servoyu Kontrol Etme: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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
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:
Analog Joystick ile 2 Servoyu Kontrol Etme: 5 Adım (Resimli)
Analog Joystick Kullanarak 2 Servoyu Kontrol Etmek: Merhaba arkadaşlar, bu benim ilk talimatım ve bu yazımda Arduino UNO kullanarak Servoları kontrol etmek için Analog Joystick'in nasıl kullanılacağını paylaşıyorum. Mümkün olduğunca basit açıklamaya çalışacağım umarım beğenirsiniz o
Arduino İle Potansiyometre ile LED Parlaklığını Kontrol Etme: 3 Adım
Arduino İle Potansiyometre İle LED Parlaklığını Kontrol Etme: Bu projede, potansiyometre tarafından sağlanan değişken direnç kullanarak LED'in parlaklığını kontrol edeceğiz. Bu yeni başlayanlar için çok basit bir projedir ancak size potansiyometre ve LED çalışması hakkında daha fazla bilgi edinmek için gerekli olan birçok şeyi öğretecektir
Telegram Uygulamasını Kullanarak ESP8266'yı Kontrol Etme: 7 Adım
ESP8266'yı Telegram Uygulamasını Kullanarak Kontrol Etme: Hey, naber beyler! Akarsh burada CETech'ten. Cihazlarınızla bir mesajlaşma uygulaması üzerinden sohbet etmeyi hiç merak ettiniz mi? Kulağa tuhaf geliyor, doğru. Ama bugün buna benzer bir şey yapacağız. Merak etmeyin cep telefonu almanıza gerek yok
CloudX Mikrodenetleyici Kullanarak L298N ile DC Motorları Kontrol Etme: 3 Adım
DC Motorları L298N ile CloudX Mikrodenetleyici Kullanarak Kontrol Etme: Bu projede, DC motorun hızını artırmak ve azaltmak için L298N H-köprümüzün nasıl kullanılacağını açıklayacağız. L298N H-köprü modülü, voltajı 5 ile 35V DC arasında olan motorlarla kullanılabilir. Ayrıca yerleşik bir 5V regülatörü vardır, yani eğer
Arduino İle Çok Sayıda Servoyu Kontrol Edin!: 4 Adım (Resimli)
Arduino İle Çok Sayıda Servoyu Kontrol Edin!: İlk başta bir şey söylemeliyim. Güzel resimlerim yoktu. Bu yüzden resimleri bildr.blog'dan çektim. Biliyoruz ki Arduino UNO'nun pek çok servoyu kontrol edecek çok fazla pwm pini yok. Bu nedenle, bir arduino tarafından daha fazla servo kontrol etmek için genellikle bir problemle karşılaşırız