Този път ще се заемем с свързването на аналоговия триаксиален акселерометър ADXL335 към Arduino.
Необходимо
- - Arduino;
- - акселерометър ADXL335;
- - персонален компютър с Arduino IDE среда за разработка.
Инструкции
Етап 1
Акселерометрите се използват за определяне на вектора на ускорението. Акселерометърът ADXL335 има три оси и благодарение на това той може да определи вектора на ускорението в триизмерно пространство. Поради факта, че силата на гравитацията също е вектор, акселерометърът може да определи собствената си ориентация в триизмерно пространство спрямо центъра на Земята.
Илюстрацията показва снимки от паспорта (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) за акселерометъра ADXL335. Тук са показани координатните оси на чувствителността на акселерометъра по отношение на геометричното разположение на тялото на устройството в пространството, както и таблица на стойностите на напрежението от 3 канала на акселерометъра в зависимост от неговата ориентация в пространството. Данните в таблицата са дадени за сензор в покой.
Нека разгледаме по-отблизо какво ни показва акселерометърът. Нека сензорът лежи хоризонтално, например върху маса. Тогава проекцията на вектора на ускорението ще бъде равна на 1g по оста Z или Zout = 1g. Останалите две оси ще имат нули: Xout = 0 и Yout = 0. Когато сензорът се завърти "на гръб", той ще бъде насочен в обратна посока спрямо вектора на гравитацията, т.е. Zout = -1g. По същия начин се правят измервания и по трите оси. Ясно е, че акселерометърът може да бъде позициониран по желание в пространството, така че ще вземем показания, различни от нула и от трите канала.
Ако сондата е силно разклатена по вертикалната ос Z, стойността на Zout ще бъде по-голяма от "1g". Максималното измеримо ускорение е "3g" във всяка от осите във всяка посока (т.е. и двете с "плюс" и "минус").
Стъпка 2
Мисля, че разбрахме принципа на действие на акселерометъра. Сега нека разгледаме схемата за свързване.
Аналоговият чип за акселерометър ADXL335 е доста малък и се помещава в пакет BGA и е трудно да го монтирате на дъска у дома. Затова ще използвам готов модул GY-61 с акселерометър ADXL335. Такива модули в китайските онлайн магазини струват почти стотинка.
За захранване на акселерометъра е необходимо да се подаде напрежение +3, 3 V към VCC щифта на модула. Измервателните канали на сензора са свързани към аналоговите щифтове на Arduino, например "A0", "A1" и " А2 ". Това е цялата верига:)
Стъпка 3
Нека да заредим тази скица в паметта на Arduino. Ще отчитаме показанията от аналоговите входове на три канала, ще ги преобразуваме в напрежение и ще ги извеждаме към серийния порт.
Arduino има 10-битов ADC, а максимално допустимото напрежение на пина е 5 волта. Измерените напрежения се кодират с битове, които могат да приемат само 2 стойности - 0 или 1. Това означава, че целият обхват на измерване ще бъде разделен на (1 + 1) до 10-та степен, т.е. на 1024 равни сегмента.
За да преобразувате показанията във волта, трябва да разделите всяка стойност, измерена на аналоговия вход, на 1024 (сегменти) и след това да умножите по 5 (волта).
Нека да видим какво наистина идва от акселерометъра, като използваме Z-оста като пример (последната колона). Когато сензорът е разположен хоризонтално и гледа нагоре, цифрите идват (2.03 +/- 0.01). Така че това трябва да съответства на ускорението "+ 1g" по оста Z и ъгъл от 0 градуса. Обърнете сензора. Числата пристигат (1, 69 +/- 0, 01), което трябва да съответства на "-1g" и ъгъл от 180 градуса.
Стъпка 4
Да вземем стойностите от акселерометъра под ъгли 90 и 270 градуса и да ги въведем в таблицата. Таблицата показва ъглите на въртене на акселерометъра (колона "A") и съответните стойности на Zout във волта (колона "B").
За по-голяма яснота е показан график на напреженията на изхода на Zout спрямо ъгъла на въртене. Синьото поле е обхватът в покой (при ускорение от 1 g). Розовото поле на графиката е поле, за да можем да измерим ускорението до + 3g и до -3g.
При въртене на 90 градуса, оста Z има нулево ускорение. Тези. стойност 1,67 волта е условна нула Zo за оста Z. След това можете да намерите ускорението по следния начин:
g = Zout - Zo / чувствителност_z, тук Zout е измерената стойност в миливолта, Zo е стойността при нулево ускорение в миливолта, чувствителността_z е чувствителността на сензора по оста Z. калибрирайте акселерометъра и изчислете стойността на чувствителността специално за вашия сензор, използващ формулата:
чувствителност_z = [Z (0 градуса) - Z (90 градуса)] * 1000. В този случай чувствителността на акселерометъра по оста Z = (2, 03 - 1, 68) * 1000 = 350 mV. По същия начин ще трябва да се изчисли чувствителността за осите X и Y.
Колона "С" на таблицата показва ускорението, изчислено за пет ъгъла при чувствителност 350. Както можете да видите, те практически съвпадат с тези, показани на фигура 1.
Стъпка 5
Спомняйки си основния курс по геометрия, получаваме формулата за изчисляване на ъглите на въртене на акселерометъра:
ъгъл_Х = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Стойностите са в радиани. За да ги преобразувате в градуси, разделете на Pi и умножете по 180.
В резултат на илюстрацията е показана пълна скица, изчисляваща ъглите на ускорение и въртене на акселерометъра по всички оси. Коментарите предоставят обяснения за програмния код.
Когато се извежда към порта "Serial.print ()", символът "\ t" означава символ на табулатора, така че колоните да са четни и стойностите да са разположени една под друга. "+" означава конкатенация (конкатенация) на низове. Освен това операторът "String ()" изрично казва на компилатора, че числовата стойност трябва да бъде преобразувана в низ. Операторът round () закръгля ъгъла с точност до 1 градус.
Стъпка 6
И така, научихме как да вземаме и обработваме данни от аналоговия акселерометър ADXL335 с помощта на Arduino. Сега можем да използваме акселерометъра в нашите проекти.