Съдържание:
- Стъпка 1: ЗА ТОЗИ ПРОЕКТ
- Стъпка 2: Изисква се хардуер
- Стъпка 3: Схема и връзки
- Стъпка 4: РАБОТА
- Стъпка 5: КОД
- Стъпка 6: ВИДЕОДЕМОНСТРАЦИЯ
Видео: Управление на серво с помощта на MPU6050 между Arduino и ESP8266 с HC-12: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
В този проект ние контролираме позицията на серво мотор, използвайки 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: ВИДЕОДЕМОНСТРАЦИЯ
Утре ще прикача видеото. Следвайте ме, за да получавате известия.
Благодаря на всички ви!
Препоръчано:
Интелигентен контейнер за боклук с помощта на Arduino, ултразвуков сензор и серво мотор: 3 стъпки
Интелигентен контейнер за боклук с помощта на Arduino, ултразвуков сензор и серво мотор: В този проект ще ви покажа как да направите интелигентен контейнер за боклук с помощта на Arduino, където капакът на кофата за боклук автоматично ще се отвори, когато се приближите с боклук. Другите важни компоненти, използвани за направата на тази интелигентна кофа за боклук, са HC-04 Ultrasonic Sen
Урок за акселерометър Arduino: Управление на корабен мост с помощта на серво мотор: 5 стъпки
Урок за акселерометър Arduino: Управление на корабен мост с помощта на серво мотор: Сензорите за акселерометър вече са в повечето от нашите смартфони, за да им предоставят голямо разнообразие от възможности за използване и възможности, които използваме ежедневно, без дори да знаем, че отговорен за това е акселерометърът. Една от тези възможности е контролът
Кола с дистанционно управление - Управление с помощта на безжичен Xbox 360 контролер: 5 стъпки
Кола с дистанционно управление - Управление с помощта на безжичен Xbox 360 контролер: Това са инструкции, за да изградите свой собствен автомобил с дистанционно управление, управляван с помощта на безжичен контролер Xbox 360
Урок за Arduino - Управление на серво мотора с Arduino: 5 стъпки
Урок за Arduino - Управление на серво мотора с Arduino: Тази инструкция е писмената версия на моя " Arduino: Как да управлявам серво мотор с Arduino " Видеоклип в YouTube, който качих наскоро. Силно ви препоръчвам да го проверите. Посетете YouTube канала
Потребителски интерфейс за Android (remotexy) за управление на серво мотор с помощта на Arduino и Bluetooth: 7 стъпки (със снимки)
Потребителски интерфейс за Android (remotexy) за управление на серво мотор с помощта на Arduino и Bluetooth: В тази инструкция ще ви дам бърза стъпка да направите потребителски интерфейс на Android с помощта на Remotexy Interface Maker за управление на серво мотор, свързан към Arduino Mega чрез Bluetooth. Това видео показва как потребителският интерфейс ще контролира скоростта и позицията на серво мотора