Мазмуну:

HC-12 менен Arduino жана ESP8266 ортосунда MPU6050 колдонуу менен Servo көзөмөлдөө: 6 кадам
HC-12 менен Arduino жана ESP8266 ортосунда MPU6050 колдонуу менен Servo көзөмөлдөө: 6 кадам

Video: HC-12 менен Arduino жана ESP8266 ортосунда MPU6050 колдонуу менен Servo көзөмөлдөө: 6 кадам

Video: HC-12 менен Arduino жана ESP8266 ортосунда MPU6050 колдонуу менен Servo көзөмөлдөө: 6 кадам
Video: Measure Tilt Angle using SCA60C angle sensor - Robojax 2024, Ноябрь
Anonim
HU-12 менен Arduino жана ESP8266 ортосунда MPU6050 колдонуу менен Servo көзөмөлдөө
HU-12 менен Arduino жана ESP8266 ортосунда MPU6050 колдонуу менен Servo көзөмөлдөө

Бул долбоордо биз Arduino UNO менен ESP8266 NodeMCU ортосундагы байланыш үчүн mpu6050 жана HC-12ди колдонгон servo мотордун абалын көзөмөлдөп жатабыз.

1 -кадам: Бул проект жөнүндө

Бул HC-12 RF-модулуна негизделген дагы бир IoT долбоору. Бул жерде arduino -дан imu (mpu6050) маалыматтары серво моторун башкаруу үчүн колдонулат (Nodemcu менен байланышкан). Бул жерде маалыматтарды визуалдаштыруу arduino тарабында да аткарылат, мында mpu6050 чайыр маалыматы (x огу боюнча айлануу) иштетүүчү эскиз менен элестетилет (кийинчерээк талкууланат). Негизинен бул проект Arduino жана ESP8266 nodemcu менен Imu & Servo көзөмөлүнүн ар кандай аспектилерин эстөө үчүн бир аз жылуу.

МАКСАТ

Бул абдан ачык -айкын максатыбыз, биз ӨМУнун кадамын баалоо менен Servo моторунун абалын көзөмөлдөп жатабыз. Жана бул кадам жана синхрондуу мотор позициясы кайра иштетүү менен элестетилет.

2 -кадам: Аппараттык камсыздоо талап кылынат

NodeMCU ESP8266 12E Wifi модулу

Лансыз нан

Jumper зымы

MPU6050 accelo+гиро

HC-12 RF модулдары (жуп)

SG90 Servo мотору

3 -кадам: Circuit & Connections

Circuit & Connections
Circuit & Connections
Circuit & Connections
Circuit & Connections

Байланыштар түз эле. Сиз Nodemcu'ңуздун 3.3V менен сервону иштете аласыз. Эгерде сиз nodemcuңузда ошончо чыңалуу болсо, анда Винди сервону иштетүү үчүн колдонсоңуз болот. Бирок көпчүлүк Лолин такталарында Винде 5В жок (өндүрүүчүгө көз каранды).

Бул схемалар EasyADAнын жардамы менен жасалган.

4 -кадам: ЭМГЕК

ИШТЕП
ИШТЕП

Ардуино эскизи башталары менен, ал кадамдын бурчун (-45тен 45ке чейин) Nodemcu hc12 алуучусуна жөнөтөт, алар 0 ден 180 градуска чейин Servo позициясы менен картага түшүшөт. Бул жерде биз бурчту -45тен +45 градуска чейин колдондук, ошондуктан биз муну Servo абалына оңой эле карта кыла алабыз.

Эми сиз эмне үчүн биз картаны төмөнкүчө колдоно алабыз деп ойлонуп жатасыз:-

int pos = карта (вал, -45, 45, 0, 180);

Анткени hc12 жибергич тарабынан жиберилген терс бурч төмөнкүдөй кабыл алынат:

1 -тайм: (T) 0дон 45ке чейин>> 0дон 45ке чейин (R)

2 -жарым: (T) -45 to -1 => 255 to 210 (R)

Демек, сиз аны 0дон 180ге чейин картага түшүрүшүңүз керек

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

Мен тиешеси жок катадан улам карта ыкмасынан качып жатам. Сиз муну сынап көрүңүз жана ал сиз менен иштээрин комментарийлесеңиз болот

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

MPU6050 Pitch Angle эсептөө

Мен IMUнын чийки маалыматтарын берүүгө негизделген MPU6050_tockn китепканасын колдонуп жатам.

int pitchAngle = mpu6050.getAngleX ()

Бул бизге х огу боюнча айлануу бурчун алат. Сүрөттө көрүнүп тургандай, менин иму вертикалдуу түрдө нан тактасына жайгаштырылган, андыктан чайыр жана ролл менен чаташтырбаңыз. Чындыгында, сиз дайыма огунун үзүлүү тактасында басылганын көрүшүңүз керек.

Бул китепкана аркылуу, белгилүү бир операция үчүн атайын регистрлерди окуудагы ички электроника жөнүндө убара болбоңуз. сиз жумушту гана көрсөтөсүз жана сиз бүттү!

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 (чыныгы); Serial.begin (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); }

Бирок, бурчту алуу үчүн бул көп кодду жазуунун кажети жок. Сиз сахнадагы фактыларды билишиңиз керек, бирок башка адамдардын китепканасын колдонуу көптөгөн долбоорлордо абдан эффективдүү. Төмөнкү шилтемеден дагы чыпкаланган маалыматтарды алуу үчүн бул иму жана башка жактыруулар жөнүндө окуй аласыз: Explore-mpu6050.

Менин arduino коду өткөргүчтүн аягында MPU6050_tockn китепканасынын жардамы менен 30 гана саптан турат, андыктан IMUнун функционалдуулугуна кандайдыр бир негизги өзгөртүүлөрдүн кереги жок болсо, китепкананы колдонуу жакшы. JeF Rowberg тарабынан I2Cdev аттуу китепкана, эгер сиз ӨИКтин DMP (Санариптик кыймыл процессору) аркылуу чыпкаланган маалыматтарды кааласаңыз абдан пайдалуу.

Кайра иштетүү менен интеграция

Бул жерде иштетүү MPU6050дөн келген чийки маалыматтарга ылайык эсептелген IMU х огу жөнүндө айлануу маалыматын элестетүү үчүн колдонулат. Биз SerialEventке келген чийки маалыматтарды төмөнкүчө алабыз:

жараксыз serialEvent (Serial myPort) {

inString = myPort.readString (); аракет {// Дайындарды талдоо // println (inString); String dataStrings = бөлүнүү (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0]. equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} башка {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}

Бул жерде сиз бул кадамга тиркелген сүрөттө визуализацияны көрө аласыз. Nodemcu аягында алынган позиция маалыматтары сүрөттө көрсөтүлгөндөй сериялык монитордо да көрүнөт.

5 -кадам: КОД

Мен github репозиторийин тиркеп койдум. Долбоорлоруңузда колдонуу үчүн клондоштуруп, бөлүп койсоңуз болот.

my_code

Репо өткөргүч үчүн 2 arduino эскизин камтыйт (arduino+IMU) жана алуучу (Nodemcu+Servo).

Жана бир иштетүүчү эскиз. Бул сиздин долбоорго жардам берсе, репо жылдызчасын коюңуз.

Бул көрсөтмөдө, R- Алуучу жана Т- Бергич

6 -кадам: ВИДЕО КӨРСӨТҮҮ

Эртең видеону тиркейм. Билдирүү үчүн мени ээрчиңиз.

Баарыңарга рахмат!

Сунушталууда: