Съдържание:

Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12: 6 стъпки
Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12: 6 стъпки

Видео: Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12: 6 стъпки

Видео: Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12: 6 стъпки
Видео: Уроки Arduino - управление сервомашинкой 2024, Юли
Anonim
Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12
Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12

В този проект ние контролираме позицията на серво мотор, използвайки mpu6050 и HC-12 за комуникация между Arduino UNO и ESP8266 NodeMCU.

Стъпка 1: ЗА ТОЗИ ПРОЕКТ

Това е друг IoT проект, базиран на HC-12 RF-модул. Тук данните imu (mpu6050) от arduino се използват за управление на серво мотора (свързан с Nodemcu). Тук визуализацията на данни се извършва и от страна на arduino, където данните за височината на mpu6050 (въртене около оста x) се визуализират с скица за обработка (обсъдена по-късно). По принцип този проект е само малко загряване за запомняне на различни аспекти на управлението на Imu & Servo с Arduino и ESP8266 nodemcu.

ОБЕКТИВЕН

Целта на това доста ясно, ние контролираме позицията на серво мотора, използвайки стойността на терена на IMU. И всички заедно тази стъпка и синхронизираната позиция на двигателя се визуализират с Processing.

Стъпка 2: Изисква се хардуер

NodeMCU ESP8266 12E Wifi модул

Непояна дъска

Джъмпер тел

MPU6050 ускорение+жироскоп

RF-модули HC-12 (двойка)

Сервомотор SG90

Стъпка 3: Схема и връзки

Електрическа верига и връзки
Електрическа верига и връзки
Електрическа верига и връзки
Електрическа верига и връзки

Връзките са направо напред. Можете да захранвате серво с 3.3V на вашия Nodemcu. Можете също да използвате Vin за захранване на серво, ако вашият nodemcu има толкова напрежение на този щифт. Но повечето платки на Lolin нямат 5V при Vin (зависи от производителя).

Тези схеми са направени с помощта на EasyADA.

Стъпка 4: РАБОТА

РАБОТА
РАБОТА

Веднага след като скицата на arduino стартира, тя ще изпрати ъгъла на височина (който варира от -45 до 45) към приемника hc12 на Nodemcu, който се картографира с 0 до 180 градуса Servo позиция. Тук използвахме ъгъла на наклона от -45 до +45 градуса, за да можем лесно да го картографираме до позицията на серво.

Сега си мислите защо можем просто да използваме метода на картата, както следва:-

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

Тъй като отрицателният ъгъл, изпратен от предавателя hc12, се приема като:

1 -во полувреме: (T) 0 до 45 => 0 до 45 (R)

2 -ро полувреме: (T) -45 до -1 => 255 до 210 (R)

Така че трябва да го съпоставите с 0 до 180 as

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); // Четвъртият аргумент може да бъде 2 (можете да проверите)

MPU6050 Изчисляване на ъгъла на наклона

Използвам библиотека MPU6050_tockn, която се основава на даване на необработени данни от IMU.

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 (вярно); 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 ="); // Извиване на Serial.println (z); }

Но не е необходимо да напишете толкова много код, за да получите ъгъла. Трябва да знаете фактите зад кулисите, но използването на библиотека от други хора е много ефективно в много проекти. Можете да прочетете за тази иму и други одобрения, за да получите по-филтрирани данни от следната връзка: Explore-mpu6050.

Моят код arduino в предаващия край има само 30 реда с помощта на библиотеката MPU6050_tockn, така че използването на библиотека е добре, освен ако не се нуждаете от някои основни промени във функционалността на IMU. Библиотека на име I2Cdev от Джеф Роуберг е много полезна, ако искате някои филтрирани данни, използвайки DMP (цифров процесор за движение) на IMU.

Интеграция с обработка

Тук Processing се използва за визуализиране на ротационните данни около оста x на IMU, изчислени от необработените данни, идващи от MPU6050. Получаваме входящите необработени данни в SerialEvent по следния начин:

void serialEvent (Serial myPort) {

inString = myPort.readString (); опитайте {// Анализирайте данните // 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]); }} else {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}

Тук можете да видите визуализация в изображението, приложено в тази стъпка. Данните за позицията, получени в края на nodemcu, също се виждат на серийния монитор, както е показано на изображението.

Стъпка 5: КОД

Прикачих хранилището на github. Можете да го клонирате и разклоните, за да го използвате във вашите проекти.

my_code

Репото включва 2 скици на arduino за предавател (arduino+IMU) и приемник (Nodemcu+Servo).

И една скица за обработка. Поставете звезда в репо, ако това помага във вашия проект.

В тази инструкция, R- приемник и T-предавател

Стъпка 6: ВИДЕОДЕМОНСТРАЦИЯ

Утре ще прикача видеото. Следвайте ме, за да получавате известия.

Благодаря на всички ви!

Препоръчано: