Агуулгын хүснэгт:

HC-12: 6 алхамтай Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах
HC-12: 6 алхамтай Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах

Видео: HC-12: 6 алхамтай Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах

Видео: HC-12: 6 алхамтай Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах
Видео: Обновленные радиомодули HC12 с SI4438, проверяем совместимость со старым 2024, Долдугаар сарын
Anonim
HC-12-тэй Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах
HC-12-тэй Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах

Энэхүү төсөлд бид Arduino UNO болон ESP8266 NodeMCU хооронд холбоо тогтоохын тулд mpu6050 ба HC-12 ашиглан servo моторын байрлалыг хянаж байна.

Алхам 1: ЭНЭ ТӨСЛИЙН ТУХАЙ

Энэ бол HC-12 RF-модульд суурилсан өөр нэг IoT төсөл юм. Энд arduino -ийн imu (mpu6050) өгөгдлийг servo моторыг хянахад ашигладаг (Nodemcu -тэй холбогдсон). Энд өгөгдлийн дүрслэлийг arduino тал дээр гүйцэтгэдэг бөгөөд mpu6050 давирхайн өгөгдлийг (x тэнхлэгийг тойрон эргүүлэх) боловсруулалтын ноорогоор дүрсэлдэг (дараа хэлэлцэх болно). Үндсэндээ энэ төсөл нь Arduino болон ESP8266 nodemcu -ийн тусламжтайгаар Imu & Servo удирдлагын янз бүрийн талыг санах зорилготой юм.

ЗОРИЛГО

Үүний тодорхой зорилго бол бид IMU -ийн давирхайг ашиглан Servo моторын байрлалыг хянадаг. Мөн энэ давирхай ба синхрон хөдөлгүүрийн байрлалыг Боловсруулалтаар дүрсэлсэн болно.

Алхам 2: Тоног төхөөрөмж шаардлагатай

NodeMCU ESP8266 12E Wifi модуль

Гагнуургүй талхны хавтан

Холбогч утас

MPU6050 accelo+гиро

HC-12 RF модулиуд (хос)

SG90 Servo мотор

Алхам 3: Хэлхээ ба холболт

Хэлхээ ба холболтууд
Хэлхээ ба холболтууд
Хэлхээ ба холболтууд
Хэлхээ ба холболтууд

Холболтууд шууд урагшлах болно. Та Nodemcu -ийн 3.3V хүчээр servo -ийг асааж болно. Хэрэв та nodemcu нь энэ зүү дээр тийм их хүчдэлтэй бол Вин -ийг ашиглан servo -ийг асааж болно. Гэхдээ ихэнх Лолин хавтангууд Вин -д 5V байдаггүй (үйлдвэрлэгчээс хамаарна).

Эдгээр хэлхээний диаграммыг EasyADA ашиглан хийдэг.

Алхам 4: АЖИЛЛАХ

АЖИЛЛАЖ БАЙНА
АЖИЛЛАЖ БАЙНА

Arduino -ийн ноорог эхэлмэгц өнцгийн өнцгийг (-45-45 хооронд хэлбэлздэг) Nodemcu -ийн hc12 хүлээн авагч руу 0 -ээс 180 градусын Servo байрлалд буулгах болно. Энд бид -45 -аас +45 градус хүртэлх өнцгийн өнцгийг ашигласан бөгөөд ингэснээр үүнийг Servo байрлалд хялбархан зурж болно.

Одоо бид яагаад газрын зургийн аргыг дараах байдлаар ашиглаж болох талаар та бодож байна:-

int pos = газрын зураг (val, -45, 45, 0, 180);

Hc12 дамжуулагчийн илгээсэн сөрөг өнцгийг дараах байдлаар хүлээн авна.

1 -р хагас: (T) 0-45 => 0-45 (R)

2 -р хагас: (T) -45 -аас -1 => 255 -аас 210 (R)

Тиймээс та үүнийг 0 -ээс 180 хүртэл зурах хэрэгтэй

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

Зарим хамааралгүй алдааны улмаас би газрын зургийн аргаас зайлсхийж байна. Та үүнийг туршиж үзээрэй, энэ нь тантай хамт ажилладаг гэж сэтгэгдэл бичих боломжтой

if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = map (val, 255, 210, 0, 90); // 4 -р аргумент 2 байж болно (та шалгаж болно)

MPU6050 давирхайн өнцгийн тооцоо

Би IMU -аас түүхий мэдээлэл өгөхөд үндэслэсэн MPU6050_tockn номын санг ашиглаж байна.

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 (худал); Wire.requestFrom (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.

Миний дамжуулах төгсгөлд байгаа arduino код нь MPU6050_tockn номын сангийн тусламжтайгаар ердөө 30 мөртэй тул IMU -ийн үйл ажиллагаанд ямар нэгэн үндсэн өөрчлөлт оруулах шаардлагагүй л бол номын санг ашиглах нь зүйтэй. Хэрэв та IMU -ийн DMP (Дижитал хөдөлгөөнт процессор) ашиглан шүүгдсэн өгөгдөл авахыг хүсч байвал Жефф Роубергийн I2Cdev нэртэй номын сан нь маш их тустай болно.

Боловсруулалттай нэгтгэх

Энд боловсруулалтыг MPU6050-ээс ирж буй түүхий өгөгдлөөр тооцоолсон IMU-ийн тэнхлэгийн талаархи эргэлтийн өгөгдлийг төсөөлөхөд ашигладаг. Бид ирж буй түүхий өгөгдлийг SerialEvent -д дараах байдлаар хүлээн авдаг.

хүчингүй serialEvent (Serial myPort) {

inString = myPort.readString (); оролдох {// Өгөгдлийг задлах // println (inString); String dataStrings = хуваах (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0]. тэнцүү ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} өөр {println (inString); }}} catch (Exception e) {println ("Авсан онцгой тохиолдол"); }}

Энд та энэ алхамд хавсаргасан зураг дээрх дүрслэлийг харж болно. Nodemcu төгсгөлд хүлээн авсан байрлалын мэдээллийг зураг дээр үзүүлсэн шиг цуваа дэлгэц дээр харна.

Алхам 5: КОД

Би github репозиторыг хавсаргав. Та үүнийг төслүүддээ ашиглахын тулд хуулбарлаж, салгаж болно.

миний код

Репо нь дамжуулагч (arduino+IMU) ба хүлээн авагч (Nodemcu+Servo) гэсэн 2 arduino ноорогтой.

Мөн нэг боловсруулах ноорог. Хэрэв энэ нь таны төсөлд тус болох юм бол репо -г одоор тэмдэглээрэй.

Энэхүү зааварчилгаанд, R- Хүлээн авагч ба Т- дамжуулагч

Алхам 6: ВИДЕО ҮЗЭЛ

Би маргааш видеог хавсаргах болно. Мэдэгдэл авахын тулд намайг дагаарай.

Та бүхэнд баярлалаа!

Зөвлөмж болгож буй: