Оглавление:
- Шаг 1: ОБ ЭТОМ ПРОЕКТЕ
- Шаг 2: Требуется оборудование
- Шаг 3: Схема и подключения
- Шаг 4: РАБОТА
- Шаг 5: КОД
- Шаг 6: ВИДЕО ДЕМОНСТРАЦИЯ
Видео: Управление сервоприводом с помощью MPU6050 между Arduino и ESP8266 с помощью HC-12: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В этом проекте мы контролируем положение серводвигателя с помощью mpu6050 и HC-12 для связи между Arduino UNO и ESP8266 NodeMCU.
Шаг 1: ОБ ЭТОМ ПРОЕКТЕ
Это еще один проект IoT на базе RF-модуля HC-12. Здесь данные imu (mpu6050) от Arduino используются для управления серводвигателем (подключенным к Nodemcu). Здесь визуализация данных также выполняется на стороне Arduino, где данные шага mpu6050 (вращение вокруг оси x) визуализируются с помощью эскиза обработки (обсуждается позже). По сути, этот проект - лишь небольшая разминка для запоминания различных аспектов управления Imu и Servo с помощью Arduino и ESP8266 nodemcu.
ЗАДАЧА
Цель этого довольно ясна: мы контролируем положение серводвигателя, используя значение шага IMU. И все вместе этот шаг и синхронизированное положение мотора визуализируются с помощью Обработки.
Шаг 2: Требуется оборудование
Модуль Wi-Fi NodeMCU ESP8266 12E
Макетная плата без пайки
Перемычка
MPU6050 Accelo + гироскоп
ВЧ-модули HC-12 (пара)
Серводвигатель SG90
Шаг 3: Схема и подключения
Подключения прямолинейны. Вы можете запитать сервопривод от 3.3V вашего Nodemcu. Вы также можете использовать Vin для питания сервопривода, если ваш nodemcu имеет такое большое напряжение на этом контакте. Но у большинства плат Lolin нет 5V на Vin (зависит от производителя).
Эти принципиальные схемы составлены с помощью EasyADA.
Шаг 4: РАБОТА
Как только эскиз arduino запущен, он отправит угол наклона (который находится в диапазоне от -45 до 45) на приемник hc12 Nodemcu, который будет отображен с положением сервопривода от 0 до 180 градусов. Здесь мы использовали угол наклона от -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 как
если (val> = 0 && val <= 45) pos = (val * 2) +90; иначе pos = (val-210) * 2;
Я избегаю метода карты из-за какой-то несущественной ошибки. Вы можете попробовать это и прокомментировать, что работает с вами
если (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); иначе pos = map (val, 255, 210, 0, 90); // 4-й аргумент может быть 2 (вы можете проверить)
Расчет угла тангажа MPU6050
Я использую библиотеку MPU6050_tockn, которая основана на выдаче необработанных данных из IMU.
int pitchAngle = mpu6050.getAngleX ()
Это даст нам угол поворота вокруг оси x. Как вы видите на рисунке, мой imu вертикально расположен на макете, поэтому не путайте его с питчем и креном. На самом деле вы всегда должны видеть, что ось напечатана на коммутационной плате.
Благодаря этой библиотеке вам не нужно беспокоиться о внутренней электронике чтения определенных регистров для конкретной операции. вы только указываете работу и готово!
Кстати, если вы хотите рассчитать угол самостоятельно. Вы можете легко сделать это следующим образом:
#включают
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; пустая настройка () {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 ="); // Шаг Serial.println (x); Serial.print ("AngleY ="); // Катим Serial.println (y); Serial.print ("AngleZ ="); // Рыскание Serial.println (z); }
Но не обязательно, чтобы вы писали столько кода, чтобы получить угол. Вы должны знать факты за кулисами, но использование библиотеки других людей очень эффективно во многих проектах. Вы можете прочитать об этом imu и других подходах, чтобы получить больше отфильтрованных данных, по следующей ссылке: Explore-mpu6050.
В моем коде arduino на передающей стороне всего 30 строк с помощью библиотеки MPU6050_tockn, поэтому использование библиотеки хорошо, если вам не нужны некоторые основные изменения функциональности IMU. Библиотека I2Cdev Джеффа Роуберга очень полезна, если вам нужны отфильтрованные данные с использованием DMP (цифрового процессора движения) IMU.
Интеграция с процессингом
Здесь обработка используется для визуализации данных вращения вокруг оси x IMU, вычисленных по необработанным данным, поступающим из MPU6050. Мы получаем входящие необработанные данные в SerialEvent следующим образом:
void serialEvent (Serial myPort) {
inString = myPort.readString (); try {// Разбираем данные // println (inString); Строка dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [я + 1]); }} еще {println (inString); }}} catch (Exception e) {println ("Перехваченное исключение"); }}
Здесь вы можете увидеть визуализацию на изображении, прикрепленном на этом этапе. Данные о положении, полученные на конце nodemcu, также видны на последовательном мониторе, как показано на изображении.
Шаг 5: КОД
Я прикрепил репозиторий на github. Вы можете клонировать и разветвлять его для использования в своих проектах.
my_code
Репо включает в себя 2 скетча arduino для передатчика (arduino + IMU) и приемника (Nodemcu + Servo).
И один эскиз обработки. Пометьте репо, если это помогает вашему проекту.
В этом наставлении, R- приемник и T- передатчик
Шаг 6: ВИДЕО ДЕМОНСТРАЦИЯ
Видео прикреплю завтра. Следуйте за мной, чтобы получать уведомления.
Спасибо вам всем!
Рекомендуемые:
ДВИГАТЕЛЬ ПОСТОЯННОГО ТОКА Управление жестами рук и управление скоростью и направлением с помощью Arduino: 8 шагов
ДВИГАТЕЛЬ ПОСТОЯННОГО ТОКА Управление жестами рук, скорость и направление с помощью Arduino: в этом руководстве мы узнаем, как управлять двигателем постоянного тока с помощью жестов рук с помощью Arduino и Visuino. Посмотрите видео! Также ознакомьтесь с этим: Учебное пособие по жестам руки
Управление сервоприводом с использованием таймера 555 IC: 3 шага
Управление сервоприводом с использованием микросхемы таймера 555: Моей самой первой инструкцией было «Управление сервоприводами с помощью аналогового джойстика». С тех пор я поделился несколькими проектами, в которых требовались сервоприводы, например: роботизированная рука и трекер лица. Мы всегда использовали микроконтроллер для управления сервоприводами. Но
Управление яркостью Управление светодиодами на основе ШИМ с помощью кнопок, Raspberry Pi и Scratch: 8 шагов (с изображениями)
Управление яркостью Управление светодиодами на основе ШИМ с помощью кнопок, Raspberry Pi и Scratch: я пытался найти способ объяснить своим ученикам, как работает ШИМ, поэтому я поставил себе задачу попытаться управлять яркостью светодиода с помощью 2 кнопок - одна кнопка увеличивает яркость светодиода, а другая - затемняет. Чтобы запрограммировать
Изучите управление сервоприводом (краткий обзор): 6 шагов
Изучите управление сервоприводом (кратко): в этом модуле вы узнаете об управлении микро- или мини-сервоприводом, совместимым с Arduino. Серводвигатель обычно используется в любых проектах автоматизации, в которых есть движущиеся части. Он играет очень важную роль. роль в робототехнике, точный ход
Управление сервоприводом с помощью Arduino и гитары Rock Band: 5 шагов
Управляйте сервоприводом с помощью Arduino и гитары Rock Band: это моя первая обучающая программа, без неприятных замечаний, как я сделал программу