- Необходимые материалы:
- Принципиальная электрическая схема:
- Питание вашей установки:
- Программирование вашего Arduino:
- Подготовка приложения Android с помощью обработки:
- Работа инклинометра Arduino:
MPU6050 представляет собой ИК 3-осевой акселерометр и 3-осевой гироскоп в сочетании в одно целое. В нем также находится датчик температуры и DCM для выполнения сложной задачи. MPU6050 обычно используется при создании дронов и других удаленных роботов, таких как самобалансирующийся робот. В этом проекте мы узнаем, как использовать MPU6050 со встроенным инклинометром или Spirit Leveler. Поскольку мы знаем, что инклинометр используется для проверки, идеально ли выровнена поверхность, они доступны либо в виде пузырьков, либо в виде цифровых измерителей. В этом проекте мы собираемся создать цифровой инклинометр, за которым можно будет следить с помощью приложения для Android.. Причина использования удаленного дисплея, такого как мобильный телефон, заключается в том, что мы можем отслеживать значения MPU6050, не обращая внимания на оборудование, это очень удобно, когда MPU6050 размещается на дроне или в других недоступных местах.
Необходимые материалы:
- Arduino Pro-mini (5 В)
- Гироскопический датчик MPU6050
- Модуль Bluetooth HC-05 или HC-06
- Плата FTDI
- Макетная плата
- Соединительные провода
- Смартфон
Принципиальная электрическая схема:
Полная принципиальная схема для этого проекта датчика наклона Arduino показана ниже. Он состоит всего из трех компонентов и может быть легко установлен поверх макета.
В MPU6050 обменивается данными с помощью I2C и, следовательно, SDA вывод подключен к контакту А4 Arduino, который является СДА контактный и штифт SCL соединен с выводом A5 Arduino. Модуль Bluetooth HC-06 работает с помощью последовательной связи, следовательно, Rx штырь Bluetooth подключен к контактному D11 и Тй штифт Bluetooth подключаются к контактному D10 от Arduino. Эти выводы D10 и D11 будут настроены как последовательные выводы путем программирования Arduino. Модуль HC-05 и модуль MSP6050 работают от +5 В и, следовательно, получают питание от вывода Vcc Arduino, как показано выше.
Я использовал несколько соединительных проводов на макетной плате и построил схему на небольшой макетной плате. После подключения моя плата выглядит так, как показано ниже.
Питание вашей установки:
Вы можете запитать свою схему через плату программирования FTDI, как это сделал я, или использовать батарею 9 В или адаптер 12 В и подключить его к Raw-контакту Arduino pro mini. Arduino Pro-mini имеет встроенный стабилизатор напряжения, который преобразует это внешнее напряжение в + 5В.
Программирование вашего Arduino:
Как только оборудование будет готово, мы можем приступить к программированию нашей Arduino. Как всегда, полный код этого проекта можно найти внизу этой страницы. Но чтобы лучше понять проект, я разбил код на мелкие трещинки и объяснил их в виде шагов ниже.
Первым шагом будет сопряжение MPU6050 с Arduino. Для этого проекта мы будем использовать библиотеку, разработанную Корнелиушем, которую можно скачать по ссылке ниже.
MPU6050 Liberty - Корнелиуш Язебски
Загрузите ZIP-файл и добавьте его в свою Arduino IDE. Затем перейдите в Файл-> Примеры-> Arduino_MPU6050_Master-> MPU6050_gyro_pitch_roll_yaw . Это откроет пример программы, использующей только что загруженную библиотеку. Итак, нажмите «Загрузить» и подождите, пока программа загрузится на ваш Arduino Pro mini. Как только это будет сделано, откройте монитор последовательного порта, установите скорость передачи данных 115200 и проверьте, получаете ли вы следующее.
Первоначально все три значения будут равны нулю, но по мере перемещения макета вы можете наблюдать, как эти значения меняются. Если они меняются, это означает, что ваше соединение правильное, иначе проверьте ваши соединения. Обратите внимание на то, как три значения Pitch Roll и Yaw меняются в зависимости от того, как вы наклоняете датчик. Если вы запутались, нажмите кнопку сброса на Arduino, и значения снова будут обнулены, затем наклоните датчик в одном направлении и проверьте, какие значения меняются. Картинка ниже поможет вам лучше понять.
Из этих трех параметров нас интересуют только Roll и Pitch. Значение Ролл расскажет нам о наклоне в X-оси и значение Pitch расскажет нам о наклоне в Y-оси. Теперь, когда мы разобрались с основами, можно приступить к программированию Arduino для чтения этих значений и отправки их на Arduino через Bluetooth. Как всегда, начнем с включения всех библиотек, необходимых для этого проекта.
#включают
Затем инициализируем программный серийный номер для модуля Bluetooth. Это возможно благодаря программной библиотеке последовательного интерфейса в Arduino, выводы ввода-вывода могут быть запрограммированы для работы как последовательные выводы. Здесь мы используем цифровые выводы D10 и D11, где D10 id Rx, а D11 - Tx.
SoftwareSerial BT (10, 11); // RX, TX
После этого мы инициализируем переменные и объекты, необходимые для программы, и переходим к функции setup (), где мы указываем скорость передачи данных для последовательного монитора и Bluetooth. Для HC-05 и HC-06 скорость передачи составляет 9600 бод, поэтому использовать ее обязательно. Затем мы проверяем, подключена ли шина IIC Arduino к MPU6050, если нет, мы печатаем предупреждающее сообщение и остаемся там, пока устройство подключено. После этого мы калибруем гироскоп и устанавливаем его пороговые значения, используя соответствующие функции, как показано ниже.
void setup () {Serial.begin (115200); BT.begin (9600); // запускаем соединение Bluetooth со скоростью 9600 бод // Инициализируем MPU6050 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Не удалось найти действующий датчик MPU6050, проверьте проводку!"); задержка (500); } mpu.calibrateGyro (); // Калибровка гироскопа при запуске mpu.setThreshold (3); // Управляет чувствительностью}
Строка « mpu.calibrateGyro ();» откалибруйте MPU6050 для положения, в котором он сейчас находится. Эту строку можно вызывать несколько раз внутри программы всякий раз, когда MPU6050 необходимо откалибровать, и все значения должны быть установлены на ноль. «Mpu.setThreshold (3);» эта функция контролирует, насколько изменяется значение для движения на датчике, слишком низкое значение приведет к увеличению шума, поэтому будьте осторожны, когда возитесь с этим.
Внутри цикла void () мы многократно считываем значения гироскопа и датчика температуры, вычисляем значение тангажа, крена и рыскания, отправляем его в модуль Bluetooth. Следующие две строки будут читать необработанные значения гироскопа и значение температуры.
Vector norm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Затем мы вычисляем тангаж, крен и рыскание путем умножения на временной шаг и добавления его к предыдущим значениям. Timestep не что иное, как интервал между последовательными показаниями.
pitch = pitch + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; рысканье = рыскание + норма ZAxis * timeStep;
Чтобы лучше понять временной шаг, давайте взглянем на строку ниже. Эта строка предназначена для считывания значений с MPU6050 точно с интервалом 10 мс или 0,01 секунды. Поэтому мы объявляем значение timeStep равным 0,01. И используйте строку ниже, чтобы удерживать программу, если там осталось, если осталось больше времени. (millis () - timer ()) дает время, необходимое для выполнения программы на данный момент. Мы просто вычитаем его на 0,01 секунды, а оставшееся время просто удерживаем нашу программу там, используя функцию задержки.
задержка ((timeStep * 1000) - (миллис () - таймер));
Когда мы закончим считывание и вычисление значений, мы можем отправить их на наш телефон через Bluetooth. Но здесь есть одна загвоздка. Модуль Bluetooth, который мы используем, может отправлять только 1 байт (8 бит), что позволяет нам отправлять числа только от 0 до 255. Таким образом, мы должны разделить наши значения и сопоставить их внутри этого диапазона. Это делается следующими строками
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); если (temp> 0 && temp <50) t = 200 + int (temp);
Как вы можете понять, значение крена отображается от 0 до 100 в переменную x, шаг отображается от 100 до 200 в переменную y, а temp отображается в 200 и выше в переменную t. Мы можем использовать ту же информацию для извлечения данных из того, что мы отправили. Наконец, мы записываем эти значения через Bluetooth, используя следующие строки.
BT.write (x); BT.write (y); BT.write (t);
Если вы разобрались с программой полностью, прокрутите вниз, чтобы просмотреть программу и загрузить ее на плату Arduino.
Подготовка приложения Android с помощью обработки:
Приложение для Android для этого инклинометра Arduino было разработано с использованием Processing IDE. Это очень похоже на Arduino и может использоваться для создания системного приложения, приложения для Android, веб-дизайна и многого другого. Мы уже использовали обработку для разработки некоторых других наших крутых проектов, которые перечислены ниже.
- Игра в пинг-понг с использованием Arduino
- FM-радио, управляемое смартфоном, с использованием обработки.
- Радиолокационная система Arduino с использованием обработки и ультразвукового датчика
Однако невозможно объяснить полный код того, как создать это приложение. Итак, у вас есть два способа решить это. Либо вы можете загрузить файл APK по приведенной ниже ссылке и установить приложение Android прямо на свой телефон. Или прокрутите ниже, чтобы найти полный код обработки и самостоятельно узнать, как это работает
Внутри ZIP-файла вы можете найти папку с именем data, которая состоит из всех изображений и других источников, которые должны быть загружены в приложение Android. Следующая строка определяет, к какому имени должен автоматически подключаться Bluetooth.
bt.connectToDeviceByName («HC-06»);
Внутри функции draw () все будет выполняться многократно: здесь мы рисуем изображения, отображаем текст и анимируем полосы на основе значений из модуля Bluetooth. Вы можете проверить, что происходит внутри каждой функции, прочитав программу.
void draw () // Бесконечный цикл {background (0); imageMode (ЦЕНТР); изображение (логотип, ширина / 2, высота / 1.04, ширина, высота / 12); load_images (); textfun (); getval (); }
Наконец, есть еще одна важная вещь, которую нужно объяснить. Помните, что мы разделили значение высоты тона, крена и температуры от 0 до 255. Итак, здесь мы снова возвращаем его к нормальным значениям, обратным отображением его на нормальные значения.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; else if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; иначе, если (информация> 200) temp = info -200; println (темп, х, у);
Есть гораздо лучшие способы передачи данных с модуля Bluetooth на телефон, но поскольку это всего лишь хобби, мы их проигнорировали, вы можете копнуть глубже, если интересно.
Работа инклинометра Arduino:
После того, как вы подготовитесь к работе с оборудованием и приложением, пора развлечься с тем, что мы создали. Загрузите код Arduino на плату, вы также можете удалить комментарии в строках Serial.println и проверить, работает ли оборудование должным образом, используя последовательный монитор. Во всяком случае, это совершенно необязательно.
После загрузки кода запустите приложение Android на своем мобильном телефоне. Приложение должно автоматически подключиться к вашему модулю HC-06, и в верхней части приложения отобразится «Подключиться к: HC-06», как показано ниже.
Изначально все значения будут нулевыми, кроме значения температуры. Это связано с тем, что Arduino откалибровал MPU-6050 для этой позиции в качестве эталона, теперь вы можете наклонить оборудование и проверить, что значения в мобильном приложении также меняются вместе с анимацией. Полную работу приложения можно посмотреть на видео, приведенном ниже. Итак, теперь вы можете разместить макет в любом месте и проверить, идеально ли выровнена поверхность.
Надеюсь, вы поняли проект и извлекли из него что-то полезное. Если у вас есть какие-либо сомнения, пожалуйста, используйте раздел комментариев ниже или форумы, чтобы решить эту проблему.