- Необходими материали:
- Електрическа схема:
- Захранване на вашата настройка:
- Програмиране на вашия Arduino:
- Подготовка на приложението за Android с помощта на обработка:
- Работа на Arduino Inclinometer:
В MPU6050 е IC 3-ос акселерометър и жироскоп 3-ос комбинирани в един блок. Той също така разполага с температурен сензор и DCM за изпълнение на сложна задача. MPU6050 се използва често при изграждането на Drone и други отдалечени роботи като самобалансиращ се робот. В този проект ще научим как да използваме MPU6050 е вграден Инклинометър или Спирален нивелир. Тъй като знаем, инклинометър се използва, за да се провери дали повърхността е перфектно изравнена или не, те се предлагат или като балончета, или като цифрови измервателни уреди. В този проект ще изградим цифров инклинометър, който може да се наблюдава с помощта на приложение за Android. Причината за използването на отдалечен дисплей като мобилен телефон е, че можем да наблюдаваме стойностите от MPU6050, без да се налага да гледаме хардуера, това би било много полезно, когато MPU6050 е поставен на дрон или на други недостъпни места.
Необходими материали:
- Arduino Pro-mini (5V)
- MPU6050 Жиросензор
- HC-05 или HC-06 Bluetooth модул
- FTDI дъска
- Макет
- Свързващи проводници
- Интелигентен телефон
Електрическа схема:
Пълната електрическа схема за този проект за сензор за накланяне Arduino е показана по-долу. Той просто има само три компонента и може лесно да се изгради върху макетната плоча.
На MPU6050 комуникира с помощта на I2C, а оттам и ПИН SDA е свързан с щифт A4 на Arduino, която е щифт SDA и SCL ПИН е свързан с A5 щифт на Arduino. В Bluetooth модул HC-06 работи с помощта на сериен комуникация оттам Rx щифт на Bluetooth е свързан към пин D11 и Tx щифт на Bluetooth е свързан към пин D10 на Ардуино. Тези пинове D10 и D11 ще бъдат конфигурирани като последователни пинове чрез програмиране на Arduino. Модулът HC-05 и модулът MSP6050 работят на + 5V и следователно те се захранват от Vcc щифта на Arduino, както е показано по-горе.
Използвах няколко свързващи проводника на макет и изградих настройката върху малка макет. След като свързването свърши, дъската ми изглежда по-долу.
Захранване на вашата настройка:
Можете или да захранвате веригата си чрез платката за програмиране FTDI, както направих аз, или да използвате 9V батерия или 12V адаптер и да го свържете към Raw щифта на Arduino pro mini. Arduino Pro-mini има вграден регулатор на напрежението, който ще преобразува това външно регулирано напрежение + 5V.
Програмиране на вашия Arduino:
След като хардуерът е готов, можем да започнем програмирането на нашия Arduino. Както винаги пълният код за този проект може да бъде намерен в долната част на тази страница. Но за да разбера по-добре проекта, разбих кода на малки парченца и ги обясних като стъпки по-долу.
Първата стъпка ще бъде свързването на MPU6050 с Arduino. За този проект ще използваме библиотеката, разработена от Korneliusz, която можете да изтеглите от връзката по-долу
MPU6050 Liberty - Корнелиуш Яржебски
Изтеглете ZIP файла и го добавете към вашия Arduino IDE. След това преминете към Файл-> Примери-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Това ще отвори примерната програма, която използва библиотеката, която току-що изтеглихме. Така че кликнете върху качване и изчакайте програмата да бъде качена на вашия Arduino Pro mini. След като приключите, отворете вашия сериен монитор и задайте скоростта на предаване на 115200 и проверете дали получавате следното.
Първоначално и трите стойности ще бъдат нула, но докато премествате таблицата си, можете да наблюдавате как тези стойности се променят. Ако те се променят, това означава, че връзката ви е правилна, иначе проверете връзките си. Отделете малко време тук, забележете как трите стойности Pitch Roll и Yaw варират в зависимост от начина, по който накланяте сензора си. Ако се объркате, натиснете бутона за нулиране на Arduino и стойностите ще бъдат инициализирани отново до нула, след това наклонете сензора в една посока и проверете кои стойности варират. Картината по-долу ще ви помогне да разберете по-добре.
От тези три параметъра ни интересуват само Roll and Pitch. Стойността на Roll ще ни разкаже за наклонът в X-ос и стойността Pitch ще ни разкаже за наклонът на Y-ос. Сега, след като разбрахме основите, всъщност можем да започнем да програмираме Arduino, за да прочетем тези стойности и да го изпратим на Arduino чрез Bluetooth. Както винаги нека започнем с включване на всички библиотеки, необходими за този проект
#include
След това инициализираме серийния софтуер за Bluetooth модула. Това е възможно поради софтуерната серийна библиотека в Arduino, IO щифтовете могат да бъдат програмирани да работят като серийни щифтове. Тук използваме цифровите щифтове 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 докато (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Не можах да намеря валиден MPU6050 сензор, проверете свързването!"); забавяне (500); } mpu.calibrateGyro (); // Калибриране на жироскопа по време на стартиране mpu.setThreshold (3); // Контролира чувствителността}
Редът „ mpu.calibrateGyro ();“ калибрирайте MPU6050 за позицията, на която е поставен в момента. Този ред може да бъде извикан няколко пъти в програмата, когато MPU6050 трябва да бъде калибриран и всички стойности трябва да бъдат зададени на нула. „Mpu.setThreshold (3);“ тази функция контролира колко варира стойността за движението на сензора, а твърде ниската стойност ще увеличи шума, така че бъдете внимателни, докато се занимавате с това.
Вътре в празния контур () многократно четем стойностите на жироскопа и температурния сензор, изчисляваме стойността на височината на въртене, преобръщане и наклон, изпращаме го към Bluetooth модула. Следващите два реда ще прочетат суровите жироскопични стойности и температурната стойност
Норма на вектора = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
След това изчисляваме стъпката, търкалянето и наклона, като умножаваме с крачка във времето и го добавяме към предишните стойности. А timeStep е нищо друго освен интервалът между две последователни четения.
височина = височина + норма.YAxis * timeStep; ролка = ролка + норма.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
За да разберем по-добре стъпката във времето, нека да разгледаме долния ред. Този ред е поставен да отчита стойностите от MPU6050 точно на интервал от 10mS или 0,01 секунди. Така декларираме стойността на timeStep като 0,01. И използвайте реда по-долу, за да задържите програмата, ако има, ако има повече време. (millis () - timer ()) дава времето, необходимо на програмата да се изпълни до момента. Просто го изваждаме с 0,01 секунди и за останалото време просто държим програмата си там, използвайки функцията за забавяне.
забавяне ((timeStep * 1000) - (милис () - таймер));
След като приключим с четенето и изчисляването на стойностите, можем да ги изпратим на телефона си чрез Bluetooth. Но тук има уловка. Bluetooth модулът, който използваме, може да изпрати само 1 байт (8 бита), което ни позволява да изпращаме номера само от 0 до 255. Така че трябва да разделим нашите стойности и да го картографираме в този диапазон. Това се прави от следващите редове
ако (ролка> -100 && ролка <100) x = карта (ролка, -100, 100, 0, 100); ако (стъпка> -100 && стъпка <100) y = карта (стъпка, -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 Inclinometer е разработено с помощта на IDE за обработка. Това е много подобно на Arduino и може да се използва за създаване на системно приложение, приложение за Android, уеб дизайн и много други. Вече използвахме обработката, за да разработим някои от другите ни страхотни проекти, изброени по-долу
- Игра на пинг понг с използване на Arduino
- FM радио, контролирано от смартфон, използващо обработка.
- Радарна система Arduino, използваща обработка и ултразвуков сензор
Не е възможно обаче да се обясни пълният код за това как да създадете това приложение. Така че имате два начина да преминете през това. Или можете да изтеглите APK файла от връзката по-долу и да инсталирате приложението за Android директно на телефона си. Или превъртете по-долу, за да намерите пълния код за обработка и научете сами как работи
Вътре в ZIP файла можете да намерите папка, наречена данни, която се състои от всички изображения и други източници, които трябва да бъдат заредени в приложението за Android. Долният ред решава към кое име Bluetooth трябва автоматично да се свърже
bt.connectToDeviceByName ("HC-06");
Вътре във функцията draw () нещата ще се изпълняват многократно, тук изчертаваме изображенията, показваме текста и анимираме лентите въз основа на стойностите от Bluetooth модула. Можете да проверите какво се случва във всяка функция, като прочетете програмата.
void draw () // Безкрайният цикъл {background (0); imageMode (ЦЕНТЪР); изображение (лого, ширина / 2, височина / 1,04, ширина, височина / 12); load_images (); textfun (); getval (); }
И накрая, има още едно важно нещо, което трябва да се обясни, не забравяйте, че разделяме стойността на pitch, roll и temp на 0 до 255. Така че тук отново го връщаме към нормални стойности, като го пренасочваме към нормални стойности.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; иначе if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; иначе ако (информация> 200) temp = информация -200; println (temp, x, y);
Има много по-добри начини да получите данни от Bluetooth модул до телефона, но тъй като това е просто хоби проект, ние ги игнорирахме, можете да се задълбочите, ако се интересувате.
Работа на Arduino Inclinometer:
След като се приготвите с хардуера и приложението, е време да се позабавлявате с изграденото от нас. Качете кода на Arduino на дъската, можете също да премахнете коментарите по линиите Serial.println и да проверите дали хардуерът работи според очакванията, като използвате серийния монитор. Както и да е, това е напълно незадължително.
След като кодът бъде качен, стартирайте приложението Android за вашия мобилен телефон. Приложението трябва автоматично да се свърже с вашия HC-06 модул и ще покаже “Connect to: HC-06” в горната част на приложението, както е показано по-долу.
Първоначално всички стойности ще бъдат нула, с изключение на стойността на температурата. Това е така, защото Arduino е калибрирал MPU-6050 за тази позиция като еталон, сега можете да наклоните хардуера и да проверите дали стойностите в мобилното приложение също се променят заедно с анимацията. Пълната работа на приложението може да бъде намерена във видеото, дадено по-долу. Така че сега можете да поставите борда навсякъде и да проверите дали повърхността е перфектно изравнена.
Надявам се, че сте разбрали проекта и сте научили нещо полезно от него. Ако имате някакви съмнения, използвайте раздела за коментари по-долу или форумите, за да го разрешите.