Агуулгын хүснэгт:
- Алхам 1: ЭНЭ ТӨСЛИЙН ТУХАЙ
- Алхам 2: Тоног төхөөрөмж шаардлагатай
- Алхам 3: Хэлхээ ба холболт
- Алхам 4: АЖИЛЛАХ
- Алхам 5: КОД
- Алхам 6: ВИДЕО ҮЗЭЛ
Видео: HC-12: 6 алхамтай Arduino ба ESP8266 хооронд MPU6050 ашиглан Servo-ийг хянах
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
Энэхүү төсөлд бид 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: ВИДЕО ҮЗЭЛ
Би маргааш видеог хавсаргах болно. Мэдэгдэл авахын тулд намайг дагаарай.
Та бүхэнд баярлалаа!
Зөвлөмж болгож буй:
Arduino болон ESP8266: 8 алхамтай DS18B20 температур мэдрэгчийг хооронд нь холбох
Arduino ба ESP8266 -тай DS18B20 температур мэдрэгчийг хооронд нь холбох: Хөөе, залуусаа! Akarsh энд байна. Энэ нь DHT11 -тэй төстэй температур мэдрэгч боловч өөр өөр хэрэглээний багцтай. Бид үүнийг харьцуулах болно
Python ашиглан Raspberry Pi болон AIS328DQTR ашиглан хурдатгалыг хянах: 6 алхам
Python ашиглан Raspberry Pi болон AIS328DQTR ашиглан хурдатгалыг хянах нь: Физикийн зарим хуулийн дагуу хурдатгал нь хязгаарлагдмал гэж би бодож байна. Далайн эрэг дээрх хамгийн хурдан амьтан хааяадаа олзоо барихын тулд дээд хурдыг ашигладаг
NodeMCU ESP8266: 10 алхамтай байршлыг хянах төхөөрөмж
NodeMCU ESP8266 -ийн тусламжтайгаар байршлыг хянагч: Таны NodeMCU таны байршлыг хэрхэн хянаж байгааг сонирхож байна уу? Энэ нь GPS модульгүй, дэлгэцгүй байсан ч боломжтой. Гаралт нь таны байрлаж буй координат байх бөгөөд та тэдгээрийг сериал монитор дээрээ харах болно. Дараах тохиргоо нь
Esp8266: 5 алхамыг ашиглан цахилгаан хэрэгслийг хянах, цаг агаарыг хянах IoT төхөөрөмжийг хэрхэн яаж хийх вэ
Esp8266 ашиглан багаж хэрэгслийг хянах, цаг агаарыг хянах IoT төхөөрөмжийг хэрхэн яаж хийх вэ: Эд юмсын интернэт (IoT) нь физик төхөөрөмжүүд (үүнийг "холбогдсон төхөөрөмжүүд", "ухаалаг төхөөрөмжүүд" гэж нэрлэдэг), барилга байгууламж, электроник, програм хангамж, мэдрэгч, идэвхжүүлэгч болон бусад эд зүйлс
Mpu6050 ба Arduino ашиглан дохио зангаа хянах машин: 7 алхам (зурагтай)
Mpu6050 ба Arduino ашиглан дохио зангаа хянах машин: энд mpu6050 ба arduino ашиглан хийсэн гар хянагч дохио зангаа хянах машин байна. Би утасгүй холболтод rf модулийг ашигладаг